From 9fd08ef19b6b1fe568b97dc95fabd9b5df42b541 Mon Sep 17 00:00:00 2001 From: Cong Min Date: Mon, 9 Mar 2020 19:38:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(errorRetryBtn):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=98=BE=E7=A4=BA=E9=94=99=E8=AF=AF=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E9=87=8D=E8=AF=95=E6=8C=89=E9=92=AE=20(#38)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: 新增配置显示错误弹窗重试按钮 --- README.md | 3 ++ build/interface.d.ts | 5 +++ build/module/errorHandler.d.ts | 2 +- build/module/sessionManager.d.ts | 3 +- build/weRequest.js | 71 ++++++++++++++++++++------------ build/weRequest.min.js | 4 +- example/request.js | 2 + package.json | 2 +- src/interface.ts | 10 +++++ src/module/errorHandler.ts | 22 +++++++--- src/module/requestHandler.ts | 13 +++--- src/module/sessionManager.ts | 13 ++++-- src/store/config.ts | 1 + 13 files changed, 107 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index ce4fb2c..e9b948a 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ weRequest.request({ |errorTitle|String/Function|否|操作失败|接口逻辑失败时,错误弹窗的标题| |errorContent|String/Function|否||接口逻辑失败时,错误弹窗的内容| |errorCallback|Function|否||当出现接口逻辑错误时,会执行统一的回调函数,这里可以做统一的错误上报等处理| +|errorRetryBtn|Boolean|否|false|接口逻辑失败时,错误弹框是否显示重试按钮,点击重试可重新尝试发起请求| |doNotCheckSession|Boolean|否|false|是否需要调用checkSession,验证小程序的登录态过期;若业务不需要使用到session_key,则可配置为true| |reportCGI|Function|否||接口返回成功之后,会执行统一的回调函数,这里可以做统一的耗时上报等处理| |mockJson|Object|否||可为接口提供mock数据| @@ -241,6 +242,8 @@ weRequest.init({ errorCallback: function(obj, res) { // do some report }, + // [可选] 当出现错误时,弹框是否显示重试按钮,默认为false + errorRetryBtn: true, // [可选] 是否需要调用checkSession,验证小程序的登录态过期,可不配置,默认为false doNotCheckSession: true, // [可选] 上报耗时的函数,name为上报名称,startTime为接口调用开始时的时间戳,endTime为接口返回时的时间戳 diff --git a/build/interface.d.ts b/build/interface.d.ts index 2caea59..131fc4b 100644 --- a/build/interface.d.ts +++ b/build/interface.d.ts @@ -16,6 +16,7 @@ export interface IInitOption { successData?: (res: string | IAnyObject | ArrayBuffer) => string | IAnyObject | ArrayBuffer; errorTitle?: string | ((res: string | IAnyObject | ArrayBuffer) => string); errorContent?: string | ((res: string | IAnyObject | ArrayBuffer) => string); + errorRetryBtn?: boolean; doNotUseQueryString?: boolean; } export interface ICodeToSessionOptions { @@ -43,6 +44,8 @@ export interface IRequestObject extends wx.RequestOption { reLoginCount?: number; _reportStartTime?: number; _reportEndTime?: number; + _resolve?: (value?: any) => void; + _reject?: (reason?: any) => void; } export interface IUploadFileOption extends IUploadFileObject { beforeSend?: Function; @@ -58,6 +61,8 @@ export interface IUploadFileObject extends wx.UploadFileOption { reLoginCount?: number; _reportStartTime?: number; _reportEndTime?: number; + _resolve?: (value?: any) => void; + _reject?: (reason?: any) => void; } export interface IGetConfigResult { urlPerfix?: string | (() => string); diff --git a/build/module/errorHandler.d.ts b/build/module/errorHandler.d.ts index 63a55d1..08262bb 100644 --- a/build/module/errorHandler.d.ts +++ b/build/module/errorHandler.d.ts @@ -6,7 +6,7 @@ declare function getErrorMsg(res: wx.RequestSuccessCallbackResult | wx.UploadFil title: string; content: string; }; -declare function doError(title: string, content: string): void; +declare function doError(title: string, content: string, retry?: () => any): void; declare const _default: { systemError: typeof systemError; logicError: typeof logicError; diff --git a/build/module/sessionManager.d.ts b/build/module/sessionManager.d.ts index 9203777..794b005 100644 --- a/build/module/sessionManager.d.ts +++ b/build/module/sessionManager.d.ts @@ -1,6 +1,7 @@ +import { IRequestOption, IUploadFileOption } from "../interface"; declare function setSession(session: string): void; declare function delSession(): void; -declare function main(): Promise; +declare function main(relatedRequestObj?: IRequestOption | IUploadFileOption): Promise; declare const _default: { main: typeof main; setSession: typeof setSession; diff --git a/build/weRequest.js b/build/weRequest.js index 91cd891..95379d3 100644 --- a/build/weRequest.js +++ b/build/weRequest.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.2.11 + * weRequest 1.2.12 * https://github.com/IvinWu/weRequest */ module.exports = @@ -406,12 +406,14 @@ exports.default = { Object.defineProperty(exports, "__esModule", { value: true }); var config_1 = __webpack_require__(/*! ../store/config */ "./src/store/config.ts"); +var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts"); function systemError(obj, res) { if (typeof obj.fail === "function") { obj.fail(res); } else { - doError("", res.errMsg); + var retry = function () { return request_1.default(obj).then(obj._resolve).catch(obj._reject); }; + doError("", res.errMsg, retry); } } function logicError(obj, res) { @@ -420,7 +422,8 @@ function logicError(obj, res) { } else { var _a = getErrorMsg(res), title = _a.title, content = _a.content; - doError(title, content); + var retry = function () { return request_1.default(obj).then(obj._resolve).catch(obj._reject); }; + doError(title, content, retry); } if (typeof config_1.default.errorCallback === "function") { config_1.default.errorCallback(obj, res); @@ -452,12 +455,21 @@ function getErrorMsg(res) { } return { title: title, content: content }; } -function doError(title, content) { - wx.showModal({ +function doError(title, content, retry) { + var showErrorRetryBtn = config_1.default.errorRetryBtn && typeof retry === "function"; + wx.showModal(Object.assign({ title: title, content: content || "网络或服务异常,请稍后重试", + }, !showErrorRetryBtn ? { showCancel: false - }); + } : { + showCancel: true, + confirmText: '重试', + success: function (res) { + if (res.confirm && typeof retry === "function") + retry(); + } + })); } exports.default = { systemError: systemError, @@ -465,7 +477,7 @@ exports.default = { doError: doError, getErrorMsg: getErrorMsg }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFHcEMsU0FBUyxXQUFXLENBQUMsR0FBdUMsRUFBRSxHQUE2QjtJQUN2RixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNO1FBQ0gsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDM0I7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBdUMsRUFBRSxHQUF5RTtJQUNsSSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNO1FBQ0csSUFBQSxxQkFBbUMsRUFBbEMsZ0JBQUssRUFBRSxvQkFBMkIsQ0FBQztRQUMxQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzNCO0lBR0QsSUFBSSxPQUFPLGdCQUFNLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRTtRQUM1QyxnQkFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDbEM7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUF5RTtJQUMxRixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO1FBQ3pDLElBQUk7WUFDQSxLQUFLLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ3RDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtRQUM5QyxLQUFLLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUM7S0FDN0I7SUFFRCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDakIsSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRTtRQUMzQyxJQUFJO1lBQ0EsT0FBTyxHQUFHLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUMxQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1NBQ1g7S0FDSjtTQUFNLElBQUksT0FBTyxnQkFBTSxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUU7UUFDaEQsT0FBTyxHQUFHLGdCQUFNLENBQUMsWUFBWSxDQUFDO0tBQ2pDO0lBRUQsT0FBTyxFQUFDLEtBQUssT0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUE7QUFDM0IsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWEsRUFBRSxPQUFlO0lBQzNDLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDVCxLQUFLLE9BQUE7UUFDTCxPQUFPLEVBQUUsT0FBTyxJQUFJLGVBQWU7UUFDbkMsVUFBVSxFQUFFLEtBQUs7S0FDcEIsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELGtCQUFlO0lBQ1gsV0FBVyxhQUFBO0lBQ1gsVUFBVSxZQUFBO0lBQ1YsT0FBTyxTQUFBO0lBQ1AsV0FBVyxhQUFBO0NBQ2QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuXG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvZ2ljRXJyb3Iob2JqOiBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uLCByZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3RpdGxlLCBjb250ZW50fSA9IGdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIC8vIOWmguaenOaciemFjee9rue7n+S4gOmUmeivr+Wbnuiwg+WHveaVsO+8jOWImeaJp+ihjOWug1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWcuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvck1zZyhyZXM6IHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgfCB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgbGV0IHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGUocmVzLmRhdGEpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnLmVycm9yVGl0bGU7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudChyZXMuZGF0YSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnLmVycm9yQ29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge3RpdGxlLCBjb250ZW50fVxufVxuXG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHd4LnNob3dNb2RhbCh7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICBjb250ZW50OiBjb250ZW50IHx8IFwi572R57uc5oiW5pyN5Yqh5byC5bi477yM6K+356iN5ZCO6YeN6K+VXCIsXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZ1xufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBb0M7QUFDcEMsMENBQXFDO0FBR3JDLFNBQVMsV0FBVyxDQUFDLEdBQXVDLEVBQUUsR0FBNkI7SUFDdkYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDakI7U0FBTTtRQUNILElBQU0sS0FBSyxHQUFHLGNBQU0sT0FBQSxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBbEQsQ0FBa0QsQ0FBQztRQUN2RSxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBdUMsRUFBRSxHQUF5RTtJQUNsSSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNqQjtTQUFNO1FBQ0csSUFBQSxxQkFBbUMsRUFBbEMsZ0JBQUssRUFBRSxvQkFBMkIsQ0FBQztRQUMxQyxJQUFNLEtBQUssR0FBRyxjQUFNLE9BQUEsaUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQWxELENBQWtELENBQUM7UUFDdkUsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFHRCxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1FBQzVDLGdCQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQXlFO0lBQzFGLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNmLElBQUksT0FBTyxnQkFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDekMsSUFBSTtZQUNBLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDdEM7UUFBQyxPQUFPLENBQUMsRUFBRTtTQUNYO0tBQ0o7U0FBTSxJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1FBQzlDLEtBQUssR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLE9BQU8sZ0JBQU0sQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQzNDLElBQUk7WUFDQSxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7U0FDWDtLQUNKO1NBQU0sSUFBSSxPQUFPLGdCQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtRQUNoRCxPQUFPLEdBQUcsZ0JBQU0sQ0FBQyxZQUFZLENBQUM7S0FDakM7SUFFRCxPQUFPLEVBQUMsS0FBSyxPQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQTtBQUMzQixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYSxFQUFFLE9BQWUsRUFBRSxLQUFpQjtJQUU5RCxJQUFNLGlCQUFpQixHQUFHLGdCQUFNLENBQUMsYUFBYSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztJQUM5RSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsS0FBSyxPQUFBO1FBQ0wsT0FBTyxFQUFFLE9BQU8sSUFBSSxlQUFlO0tBQ3RDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDcEIsVUFBVSxFQUFFLEtBQUs7S0FDcEIsQ0FBQyxDQUFDLENBQUM7UUFDQSxVQUFVLEVBQUUsSUFBSTtRQUNoQixXQUFXLEVBQUUsSUFBSTtRQUNqQixPQUFPLFlBQUMsR0FBc0M7WUFDMUMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVU7Z0JBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUQsQ0FBQztLQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELGtCQUFlO0lBQ1gsV0FBVyxhQUFBO0lBQ1gsVUFBVSxZQUFBO0lBQ1YsT0FBTyxTQUFBO0lBQ1AsV0FBVyxhQUFBO0NBQ2QsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vYXBpL3JlcXVlc3QnO1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuXG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmo6IElSZXF1ZXN0T3B0aW9uIHwgSVVwbG9hZEZpbGVPcHRpb24sIHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmV0cnkgPSAoKSA9PiByZXF1ZXN0KG9iaikudGhlbihvYmouX3Jlc29sdmUpLmNhdGNoKG9iai5fcmVqZWN0KTtcbiAgICAgICAgZG9FcnJvcihcIlwiLCByZXMuZXJyTXNnLCByZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2dpY0Vycm9yKG9iajogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbiwgcmVzOiB3eC5SZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrUmVzdWx0IHwgd3guVXBsb2FkRmlsZVN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHt0aXRsZSwgY29udGVudH0gPSBnZXRFcnJvck1zZyhyZXMpO1xuICAgICAgICBjb25zdCByZXRyeSA9ICgpID0+IHJlcXVlc3Qob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpO1xuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5pyJ6YWN572u57uf5LiA6ZSZ6K+v5Zue6LCD5Ye95pWw77yM5YiZ5omn6KGM5a6DXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZy5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKHJlcyk7XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCB8IHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICBsZXQgdGl0bGUgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnLmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWcuZXJyb3JUaXRsZShyZXMuZGF0YSlcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnLmVycm9yVGl0bGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGl0bGUgPSBjb25maWcuZXJyb3JUaXRsZTtcbiAgICB9XG5cbiAgICBsZXQgY29udGVudCA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JDb250ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb25maWcuZXJyb3JDb250ZW50KHJlcy5kYXRhKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZXJyb3JDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb25maWcuZXJyb3JDb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiB7dGl0bGUsIGNvbnRlbnR9XG59XG5cbmZ1bmN0aW9uIGRvRXJyb3IodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCByZXRyeT86ICgpID0+IGFueSkge1xuICAgIC8vIOaYr+WQpuaYvuekuumHjeivleaMiemSrlxuICAgIGNvbnN0IHNob3dFcnJvclJldHJ5QnRuID0gY29uZmlnLmVycm9yUmV0cnlCdG4gJiYgdHlwZW9mIHJldHJ5ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgd3guc2hvd01vZGFsKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgIH0sICFzaG93RXJyb3JSZXRyeUJ0biA/IHtcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9IDoge1xuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLFxuICAgICAgICBjb25maXJtVGV4dDogJ+mHjeivlScsXG4gICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5TaG93TW9kYWxTdWNjZXNzQ2FsbGJhY2tSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIikgcmV0cnkoKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIHN5c3RlbUVycm9yLFxuICAgIGxvZ2ljRXJyb3IsXG4gICAgZG9FcnJvcixcbiAgICBnZXRFcnJvck1zZ1xufVxuIl19 /***/ }), @@ -546,7 +558,7 @@ function format(originUrl) { return urlPerfix + originUrl; } } -function preDo(obj) { +function preDo(obj, resolve, reject) { if (typeof obj.beforeSend === "function") { obj.beforeSend(); } @@ -563,6 +575,8 @@ function preDo(obj) { obj.originUrl = obj.url; obj.url = format(obj.url); } + obj._resolve = resolve; + obj._reject = reject; return obj; } function initializeRequestObj(obj) { @@ -571,10 +585,10 @@ function initializeRequestObj(obj) { obj.data = {}; } if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) { - obj.data = __assign(__assign({}, obj.data), (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); + obj.data = __assign({}, obj.data, (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); } var gd = getGlobalData(); - obj.data = __assign(__assign({}, gd), obj.data); + obj.data = __assign({}, gd, obj.data); obj.method = obj.method || 'GET'; obj.dataType = obj.dataType || 'json'; if (!config_1.default.doNotUseQueryString && obj.method !== "GET") { @@ -592,10 +606,10 @@ function initializeUploadFileObj(obj) { obj.formData = {}; } if (obj.originUrl !== config_1.default.codeToSession.url && status_1.default.session) { - obj.formData = __assign(__assign({}, obj.formData), (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); + obj.formData = __assign({}, obj.formData, (_a = {}, _a[config_1.default.sessionName] = status_1.default.session, _a)); } var gd = getGlobalData(); - obj.formData = __assign(__assign({}, gd), obj.formData); + obj.formData = __assign({}, gd, obj.formData); if (!config_1.default.doNotUseQueryString) { if (status_1.default.session) { obj.url = url_1.default.setParams(obj.url, (_b = {}, _b[config_1.default.sessionName] = status_1.default.session, _b)); @@ -670,7 +684,7 @@ function doUploadFile(obj) { } function request(obj) { return new Promise(function (resolve, reject) { - obj = preDo(obj); + obj = preDo(obj, resolve, reject); if (config_1.default.mockJson) { var mockResponse = mockManager_1.default.get(obj); if (mockResponse) { @@ -681,7 +695,7 @@ function request(obj) { if (obj.cache) { cacheManager_1.default.get(obj); } - sessionManager_1.default.main().then(function () { + sessionManager_1.default.main(obj).then(function () { return doRequest(obj); }).then(function (res) { var response = responseHandler_1.default(res, obj, 'request'); @@ -695,7 +709,7 @@ function request(obj) { } function uploadFile(obj) { return new Promise(function (resolve, reject) { - obj = preDo(obj); + obj = preDo(obj, resolve, reject); if (config_1.default.mockJson) { var mockResponse = mockManager_1.default.get(obj); if (mockResponse) { @@ -703,7 +717,7 @@ function uploadFile(obj) { return resolve(response); } } - sessionManager_1.default.main().then(function () { + sessionManager_1.default.main(obj).then(function () { return doUploadFile(obj); }).then(function (res) { var response = responseHandler_1.default(res, obj, 'uploadFile'); @@ -720,7 +734,7 @@ exports.default = { request: request, uploadFile: uploadFile }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBMEM7QUFDMUMsK0NBQThDO0FBRzlDLFNBQVMsTUFBTSxDQUFDLFNBQWlCO0lBQzdCLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5QixPQUFPLFNBQVMsQ0FBQTtLQUNuQjtTQUFNO1FBQ0gsSUFBSSxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxPQUFPLGdCQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN4QyxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtTQUNqQztRQUNELE9BQU8sU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUNoQztBQUNMLENBQUM7QUFHRCxTQUFTLEtBQUssQ0FBK0MsR0FBTTtJQUMvRCxJQUFJLE9BQU8sR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDdEMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0tBQ3BCO0lBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1FBQ3pDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO1NBQU07UUFDSCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdEI7SUFFRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7UUFDakIsaUJBQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2pDO0lBRUQs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LENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsSUFBSSxRQUFRLEdBQUcseUJBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBRUQsd0JBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDdkIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRztZQUNSLElBQUksUUFBUSxHQUFHLHlCQUFlLENBQUMsR0FBeUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0YsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUM7WUFDUCwyQkFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLE1BQU0sUUFBQTtJQUNOLE9BQU8sU0FBQTtJQUNQLFVBQVUsWUFBQTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IG1vY2tNYW5hZ2VyIGZyb20gJy4vbW9ja01hbmFnZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gXCIuL2Vycm9ySGFuZGxlclwiO1xuaW1wb3J0IHsgY2F0Y2hIYW5kbGVyIH0gZnJvbSAnLi9jYXRjaEhhbmRsZXInO1xuXG4vLyDmoLzlvI/ljJZ1cmxcbmZ1bmN0aW9uIGZvcm1hdChvcmlnaW5Vcmw6IHN0cmluZykge1xuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5VcmxcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudXJsUGVyZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXgoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuXG4vLyDmiYDmnInor7fmsYLlj5Hlh7rliY3pnIDopoHlgZrnmoTkuovmg4VcbmZ1bmN0aW9uIHByZURvPFQgZXh0ZW5kcyBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uPihvYmo6IFQpOiBUIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgLy8g55m75b2V5oCB5aSx5pWI77yM6YeN5aSN55m75b2V6K6h5pWwXG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQrKztcbiAgICB9XG5cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmcuc2hvdyhvYmouc2hvd0xvYWRpbmcpO1xuICAgIH1cblxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICBvYmoub3JpZ2luVXJsID0gb2JqLnVybDtcbiAgICAgICAgb2JqLnVybCA9IGZvcm1hdChvYmoudXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG4vLyDmoLzlvI/ljJblpITnkIbor7fmsYLnmoRvYmrlhoXlrrlcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iajogSVJlcXVlc3RPcHRpb24pIHtcblxuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5kYXRhID0geyAuLi5vYmouZGF0YSBhcyBvYmplY3QsIFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9O1xuICAgIH1cblxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxuICAgIGNvbnN0IGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0geyAuLi5nZCwgLi4ub2JqLmRhdGEgYXMgb2JqZWN0IH07XG5cbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXG4gICAgaWYgKCFjb25maWcuZG9Ob3RVc2VRdWVyeVN0cmluZyAmJiBvYmoubWV0aG9kICE9PSBcIkdFVFwiKSB7XG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cblxuICAgIGR1cmF0aW9uUmVwb3J0ZXIuc3RhcnQob2JqKTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuS4iuS8oOaWh+S7tueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0geyAuLi5vYmouZm9ybURhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmnInlhajlsYDlj4LmlbDvvIzliJnmt7vliqBcbiAgICBjb25zdCBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSB7IC4uLmdkLCAuLi5vYmouZm9ybURhdGEgfTtcblxuICAgIGlmICghY29uZmlnLmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgLy8g5bCG55m76ZmG5oCB5Lmf5bim5ZyodXJs5LiKXG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5YWo5bGA5Y+C5pWw5ZCM5pe25pS+5ZyodXJs5LiKXG4gICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICB9XG5cbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIGxldCBnZDogYW55ID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGEoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgICAgIG5hbWU6IG9iai5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5tb2NrSnNvbikge1xuICAgICAgICAgICAgbGV0IG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyLmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihtb2NrUmVzcG9uc2UsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqLmNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iailcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIocmVzIGFzIHd4LlJlcXVlc3RTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdClcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiB1cGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5tb2NrSnNvbikge1xuICAgICAgICAgICAgbGV0IG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyLmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihtb2NrUmVzcG9uc2UsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzZXNzaW9uTWFuYWdlci5tYWluKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iailcbiAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIocmVzIGFzIHd4LlVwbG9hZEZpbGVTdWNjZXNzQ2FsbGJhY2tSZXN1bHQsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBmb3JtYXQsXG4gICAgcmVxdWVzdCxcbiAgICB1cGxvYWRGaWxlXG59XG4iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBcUM7QUFDckMsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQyw2Q0FBdUM7QUFDdkMsK0NBQXlDO0FBQ3pDLG1EQUE2QztBQUM3QyxxREFBK0M7QUFDL0MsdURBQWlEO0FBQ2pELG1DQUE2QjtBQUU3QiwrQ0FBMEM7QUFDMUMsK0NBQThDO0FBRzlDLFNBQVMsTUFBTSxDQUFDLFNBQWlCO0lBQzdCLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5QixPQUFPLFNBQVMsQ0FBQTtLQUNuQjtTQUFNO1FBQ0gsSUFBSSxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxPQUFPLGdCQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUN4QyxTQUFTLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtTQUNqQztRQUNELE9BQU8sU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUNoQztBQUNMLENBQUM7QUFHRCxTQUFTLEtBQUssQ0FBK0MsR0FBTSxFQUFFLE9BQThCLEVBQUUsTUFBK0I7SUFDaEksSUFBSSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO1FBQ3RDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNwQjtJQUVELElBQUksT0FBTyxHQUFHLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtRQUN6QyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztLQUN4QjtTQUFNO1FBQ0gsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3RCO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO1FBQ2pCLGlCQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFX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QUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEMsSUFBSSxnQkFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLFlBQVksR0FBRyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLFlBQVksRUFBRTtnQkFDZCxJQUFJLFFBQVEsR0FBRyx5QkFBZSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO1NBQ0o7UUFFRCx3QkFBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsR0FBRztZQUNSLElBQUksUUFBUSxHQUFHLHlCQUFlLENBQUMsR0FBeUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0YsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUM7WUFDUCwyQkFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLE1BQU0sUUFBQTtJQUNOLE9BQU8sU0FBQTtJQUNQLFVBQVUsWUFBQTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9hZGluZyBmcm9tICcuLi91dGlsL2xvYWRpbmcnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBzdGF0dXMgZnJvbSAnLi4vc3RvcmUvc3RhdHVzJ1xuaW1wb3J0IG1vY2tNYW5hZ2VyIGZyb20gJy4vbW9ja01hbmFnZXInXG5pbXBvcnQgY2FjaGVNYW5hZ2VyIGZyb20gJy4vY2FjaGVNYW5hZ2VyJ1xuaW1wb3J0IHNlc3Npb25NYW5hZ2VyIGZyb20gJy4vc2Vzc2lvbk1hbmFnZXInXG5pbXBvcnQgcmVzcG9uc2VIYW5kbGVyIGZyb20gJy4vcmVzcG9uc2VIYW5kbGVyJ1xuaW1wb3J0IGR1cmF0aW9uUmVwb3J0ZXIgZnJvbSBcIi4vZHVyYXRpb25SZXBvcnRlclwiXG5pbXBvcnQgdXJsIGZyb20gJy4uL3V0aWwvdXJsJ1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiXG5pbXBvcnQgZXJyb3JIYW5kbGVyIGZyb20gXCIuL2Vycm9ySGFuZGxlclwiO1xuaW1wb3J0IHsgY2F0Y2hIYW5kbGVyIH0gZnJvbSAnLi9jYXRjaEhhbmRsZXInO1xuXG4vLyDmoLzlvI/ljJZ1cmxcbmZ1bmN0aW9uIGZvcm1hdChvcmlnaW5Vcmw6IHN0cmluZykge1xuICAgIGlmIChvcmlnaW5Vcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5VcmxcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdXJsUGVyZml4ID0gY29uZmlnLnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcudXJsUGVyZml4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHVybFBlcmZpeCA9IGNvbmZpZy51cmxQZXJmaXgoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuXG4vLyDmiYDmnInor7fmsYLlj5Hlh7rliY3pnIDopoHlgZrnmoTkuovmg4VcbmZ1bmN0aW9uIHByZURvPFQgZXh0ZW5kcyBJUmVxdWVzdE9wdGlvbiB8IElVcGxvYWRGaWxlT3B0aW9uPihvYmo6IFQsIHJlc29sdmU6ICh2YWx1ZT86IGFueSkgPT4gdm9pZCwgcmVqZWN0PzogKHJlYXNvbj86IGFueSkgPT4gdm9pZCk6IFQge1xuICAgIGlmICh0eXBlb2Ygb2JqLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouYmVmb3JlU2VuZCgpO1xuICAgIH1cbiAgICAvLyDnmbvlvZXmgIHlpLHmlYjvvIzph43lpI3nmbvlvZXorqHmlbBcbiAgICBpZiAodHlwZW9mIG9iai5yZUxvZ2luQ291bnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgbG9hZGluZy5zaG93KG9iai5zaG93TG9hZGluZyk7XG4gICAgfVxuXG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cblxuICAgIG9iai5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgb2JqLl9yZWplY3QgPSByZWplY3Q7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG4vLyDmoLzlvI/ljJblpITnkIbor7fmsYLnmoRvYmrlhoXlrrlcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iajogSVJlcXVlc3RPcHRpb24pIHtcblxuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnLmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1cy5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5kYXRhID0geyAuLi5vYmouZGF0YSBhcyBvYmplY3QsIFtjb25maWcuc2Vzc2lvbk5hbWVdOiBzdGF0dXMuc2Vzc2lvbiB9O1xuICAgIH1cblxuICAgIC8vIOWmguaenOacieWFqOWxgOWPguaVsO+8jOWImea3u+WKoFxuICAgIGNvbnN0IGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5kYXRhID0geyAuLi5nZCwgLi4ub2JqLmRhdGEgYXMgb2JqZWN0IH07XG5cbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuXG4gICAgLy8g5aaC5p6c6K+35rGC5LiN5pivR0VU77yM5YiZ5ZyoVVJM5Lit6Ieq5Yqo5Yqg5LiK55m75b2V5oCB5ZKM5YWo5bGA5Y+C5pWwXG4gICAgaWYgKCFjb25maWcuZG9Ob3RVc2VRdWVyeVN0cmluZyAmJiBvYmoubWV0aG9kICE9PSBcIkdFVFwiKSB7XG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cblxuICAgIGR1cmF0aW9uUmVwb3J0ZXIuc3RhcnQob2JqKTtcblxuICAgIHJldHVybiBvYmo7XG59XG5cbi8vIOagvOW8j+WMluWkhOeQhuS4iuS8oOaWh+S7tueahG9iauWGheWuuVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqOiBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWcuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0geyAuLi5vYmouZm9ybURhdGEgYXMgb2JqZWN0LCBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfTtcbiAgICB9XG5cbiAgICAvLyDlpoLmnpzmnInlhajlsYDlj4LmlbDvvIzliJnmt7vliqBcbiAgICBjb25zdCBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSB7IC4uLmdkLCAuLi5vYmouZm9ybURhdGEgfTtcblxuICAgIGlmICghY29uZmlnLmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgLy8g5bCG55m76ZmG5oCB5Lmf5bim5ZyodXJs5LiKXG4gICAgICAgIGlmIChzdGF0dXMuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybC5zZXRQYXJhbXMob2JqLnVybCwgeyBbY29uZmlnLnNlc3Npb25OYW1lXTogc3RhdHVzLnNlc3Npb24gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5YWo5bGA5Y+C5pWw5ZCM5pe25pS+5ZyodXJs5LiKXG4gICAgICAgIG9iai51cmwgPSB1cmwuc2V0UGFyYW1zKG9iai51cmwsIGdkKTtcbiAgICB9XG5cbiAgICBkdXJhdGlvblJlcG9ydGVyLnN0YXJ0KG9iaik7XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIGxldCBnZDogYW55ID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGdkID0gY29uZmlnLmdsb2JhbERhdGEoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZy5nbG9iYWxEYXRhO1xuICAgIH1cbiAgICByZXR1cm4gZ2Q7XG59XG5cbmZ1bmN0aW9uIGRvUmVxdWVzdChvYmo6IElSZXF1ZXN0T3B0aW9uKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVJlcXVlc3RPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGRhdGE6IG9iai5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBvYmoubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyOiBvYmouaGVhZGVyIHx8IHt9LFxuICAgICAgICAgICAgZGF0YVR5cGU6IG9iai5kYXRhVHlwZSB8fCAnanNvbicsXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbChyZXM6IHd4LkdlbmVyYWxDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZy5oaWRlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gZG9VcGxvYWRGaWxlKG9iajogSVVwbG9hZEZpbGVPcHRpb24pIHtcbiAgICBvYmogPSBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LnVwbG9hZEZpbGUoe1xuICAgICAgICAgICAgdXJsOiBvYmoudXJsLFxuICAgICAgICAgICAgZmlsZVBhdGg6IG9iai5maWxlUGF0aCB8fCAnJyxcbiAgICAgICAgICAgIG5hbWU6IG9iai5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgZm9ybURhdGE6IG9iai5mb3JtRGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzOiB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlczogd3guR2VuZXJhbENhbGxiYWNrUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLnN5c3RlbUVycm9yKG9iaiwgcmVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0KG9iajogSVJlcXVlc3RPcHRpb24pOiBhbnkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIG9iaiA9IHByZURvKG9iaiwgcmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgICAgICBpZiAoY29uZmlnLm1vY2tKc29uKSB7XG4gICAgICAgICAgICBsZXQgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXIuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKG1vY2tSZXNwb25zZSwgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmouY2FjaGUpIHtcbiAgICAgICAgICAgIGNhY2hlTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlc3Npb25NYW5hZ2VyLm1haW4ob2JqKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkb1JlcXVlc3Qob2JqKVxuICAgICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcihyZXMgYXMgd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCwgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqOiBJVXBsb2FkRmlsZU9wdGlvbik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChjb25maWcubW9ja0pzb24pIHtcbiAgICAgICAgICAgIGxldCBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlci5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXIobW9ja1Jlc3BvbnNlLCBvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXIubWFpbihvYmopLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvVXBsb2FkRmlsZShvYmopXG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyKHJlcyBhcyB3eC5VcGxvYWRGaWxlU3VjY2Vzc0NhbGxiYWNrUmVzdWx0LCBvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdClcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZm9ybWF0LFxuICAgIHJlcXVlc3QsXG4gICAgdXBsb2FkRmlsZVxufVxuIl19 /***/ }), @@ -811,6 +825,7 @@ var errorHandler_1 = __webpack_require__(/*! ./errorHandler */ "./src/module/err var durationReporter_1 = __webpack_require__(/*! ./durationReporter */ "./src/module/durationReporter.ts"); var requestHandler_1 = __webpack_require__(/*! ./requestHandler */ "./src/module/requestHandler.ts"); var loading_1 = __webpack_require__(/*! ../util/loading */ "./src/util/loading.ts"); +var request_1 = __webpack_require__(/*! ../api/request */ "./src/api/request.ts"); var checkSessionPromise = null; function checkSession() { if (!checkSessionPromise) { @@ -992,19 +1007,22 @@ function delSession() { }); } } -function main() { +function main(relatedRequestObj) { return new Promise(function (resolve, reject) { + var retry = !relatedRequestObj + ? function () { return main().then(resolve).catch(reject); } + : function () { return request_1.default(relatedRequestObj).then(relatedRequestObj._resolve).catch(relatedRequestObj._reject); }; return checkLogin().then(function () { return config_1.default.doNotCheckSession ? Promise.resolve() : checkSession(); }, function (_a) { var title = _a.title, content = _a.content; - errorHandler_1.default.doError(title, content); + errorHandler_1.default.doError(title, content, retry); return reject({ title: title, content: content }); }).then(function () { return resolve(); }, function (_a) { var title = _a.title, content = _a.content; - errorHandler_1.default.doError(title, content); + errorHandler_1.default.doError(title, content, retry); return reject({ title: title, content: content }); }); }); @@ -1014,7 +1032,7 @@ exports.default = { setSession: setSession, delSession: delSession }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQywrQ0FBeUM7QUFDekMsdURBQWlEO0FBQ2pELG1EQUE2QztBQUM3QywyQ0FBcUM7QUFHckMsSUFBSSxtQkFBbUIsR0FBUSxJQUFJLENBQUM7QUFFcEMsU0FBUyxZQUFZO0lBQ2pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUN0QixtQkFBbUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNqQyxJQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ1osT0FBTztvQkFFSCxPQUFPLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixDQUFDO2dCQUNELElBQUksRUFBSjtvQkFFSSxVQUFVLEVBQUUsQ0FBQztvQkFDYixPQUFPLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDbEIsT0FBTyxPQUFPLEVBQUUsQ0FBQztvQkFDckIsQ0FBQyxFQUFFLFVBQUMsR0FBUTt3QkFDUixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztnQkFDRCxRQUFRO29CQUNKLElBQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2pDLDBCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNELENBQUM7YUFDSixDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtLQUNMO0lBQ0QsT0FB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QUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtRQUMvQixPQUFPLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNyQixPQUFPLGdCQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDeEUsQ0FBQyxFQUFFLFVBQUMsRUFBZ0I7Z0JBQWYsZ0JBQUssRUFBRSxvQkFBTztZQUNmLHNCQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyQyxPQUFPLE1BQU0sQ0FBQyxFQUFDLEtBQUssT0FBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDSixPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLENBQUMsRUFBRSxVQUFDLEVBQWdCO2dCQUFmLGdCQUFLLEVBQUUsb0JBQU87WUFDZixzQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckMsT0FBTyxNQUFNLENBQUMsRUFBQyxLQUFLLE9BQUEsRUFBRSxPQUFPLFNBQUEsRUFBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxrQkFBZTtJQUNYLElBQUksTUFBQTtJQUNKLFVBQVUsWUFBQTtJQUNWLFVBQVUsWUFBQTtDQUNiLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3RhdHVzIGZyb20gJy4uL3N0b3JlL3N0YXR1cydcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vc3RvcmUvY29uZmlnJ1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tICcuL2Vycm9ySGFuZGxlcidcbmltcG9ydCBkdXJhdGlvblJlcG9ydGVyIGZyb20gJy4vZHVyYXRpb25SZXBvcnRlcidcbmltcG9ydCByZXF1ZXN0SGFuZGxlciBmcm9tICcuL3JlcXVlc3RIYW5kbGVyJ1xuaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi4vdXRpbC9sb2FkaW5nJ1xuXG4vKiDnlJ/lkb3lkajmnJ/lhoXlj6rlgZrkuIDmrKHnmoRjaGVja1Nlc3Npb24gKi9cbmxldCBjaGVja1Nlc3Npb25Qcm9taXNlOiBhbnkgPSBudWxsO1xuXG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XG4gICAgaWYgKCFjaGVja1Nlc3Npb25Qcm9taXNlKSB7XG4gICAgICAgIGNoZWNrU2Vzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmNoZWNrU2Vzc2lvbigpXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuXG4vKiDliKTmlq1zZXNzaW9u5piv5ZCm5Li656m65oiW5bey6L+H5pyfICovXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g5aaC5p6c57yT5a2Y5Lit5rKh5pyJc2Vzc2lvblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIC8vIOayoeacieeZu+mZhuaAge+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgICAgICAgICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvbuS4lOacqui/h+acn1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qIOeZu+mZhua1geeoi+eahHByb21pc2UgKi9cbmxldCBsb2dpblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVtjb2RlIOiOt+WPluWksei0pV1cIn0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyLnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogcmVzLmVyck1zZ30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHNldFNlc3Npb24oc2Vzc2lvbjogc3RyaW5nKSB7XG4gICAgc3RhdHVzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIC8vIOaNouWbnuadpeeahHNlc3Npb27vvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIC8vIOWmguaenOacieiuvue9ruacrOWcsHNlc3Npb27ov4fmnJ/ml7bpl7RcbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXMuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lIGFzIHN0cmluZyxcbiAgICAgICAgZGF0YTogc3RhdHVzLnNlc3Npb25cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGU6IHN0cmluZykge1xuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgLy8gY29kZVRvU2Vzc2lvbi5kYXRh5pSv5oyB5Ye95pWwXG4gICAgaWYgKHR5cGVvZiBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLmRhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICB9XG4gICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZSFdID0gY29kZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogcmVxdWVzdEhhbmRsZXIuZm9ybWF0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCksXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOiAl+aXtuS4iuaKpVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyLnJlcG9ydChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbui/h+acn+aXtumXtFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXMuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzLnNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwifSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCJ9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG4vKiDmuIXnqbpzZXNzaW9uICovXG5mdW5jdGlvbiBkZWxTZXNzaW9uKCkge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lIGFzIHN0cmluZ1xuICAgIH0pO1xuICAgIGlmIChjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWluKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKVxuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSkgPT4ge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGUsIGNvbnRlbnR9KTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSk9PiB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcih0aXRsZSwgY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZSwgY29udGVudH0pO1xuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBtYWluLFxuICAgIHNldFNlc3Npb24sXG4gICAgZGVsU2Vzc2lvblxufVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlL3Nlc3Npb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQW9DO0FBQ3BDLDBDQUFvQztBQUNwQywrQ0FBeUM7QUFDekMsdURBQWlEO0FBQ2pELG1EQUE2QztBQUM3QywyQ0FBcUM7QUFDckMsMENBQW9DO0FBSXBDLElBQUksbUJBQW1CLEdBQVEsSUFBSSxDQUFDO0FBRXBDLFNBQVMsWUFBWTtJQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUU7UUFDdEIsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakMsSUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUNaLE9BQU87b0JBRUgsT0FBTyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJO29CQUVBLFVBQVUsRUFBRSxDQUFDO29CQUNiLE9BQU8sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO3dCQUNsQixPQUFPLE9BQU8sRUFBRSxDQUFDO29CQUNyQixDQUFDLEVBQUUsVUFBQyxHQUFRO3dCQUNSLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELFFBQVE7b0JBQ0osSUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakMsMEJBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDM0QsQ0FBQzthQUNKLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0tBQ0w7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TixDQUFDO0FBRUQsa0JBQWU7SUFDWCxJQUFJLE1BQUE7SUFDSixVQUFVLFlBQUE7SUFDVixVQUFVLFlBQUE7Q0FDYixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0YXR1cyBmcm9tICcuLi9zdG9yZS9zdGF0dXMnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL3N0b3JlL2NvbmZpZydcbmltcG9ydCBlcnJvckhhbmRsZXIgZnJvbSAnLi9lcnJvckhhbmRsZXInXG5pbXBvcnQgZHVyYXRpb25SZXBvcnRlciBmcm9tICcuL2R1cmF0aW9uUmVwb3J0ZXInXG5pbXBvcnQgcmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9yZXF1ZXN0SGFuZGxlcidcbmltcG9ydCBsb2FkaW5nIGZyb20gJy4uL3V0aWwvbG9hZGluZydcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2FwaS9yZXF1ZXN0J1xuaW1wb3J0IHsgSVJlcXVlc3RPcHRpb24sIElVcGxvYWRGaWxlT3B0aW9uIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xuXG4vKiDnlJ/lkb3lkajmnJ/lhoXlj6rlgZrkuIDmrKHnmoRjaGVja1Nlc3Npb24gKi9cbmxldCBjaGVja1Nlc3Npb25Qcm9taXNlOiBhbnkgPSBudWxsO1xuXG5mdW5jdGlvbiBjaGVja1Nlc3Npb24oKSB7XG4gICAgaWYgKCFjaGVja1Nlc3Npb25Qcm9taXNlKSB7XG4gICAgICAgIGNoZWNrU2Vzc2lvblByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmNoZWNrU2Vzc2lvbigpXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g55m75b2V5oCB5pyJ5pWI77yM5LiU5Zyo5pys55Sf5ZG95ZGo5pyf5YaF5peg6aG75YaN5qOA6aqM5LqGXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDnmbvlvZXmgIHov4fmnJ9cbiAgICAgICAgICAgICAgICAgICAgZGVsU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgKHJlczogYW55KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlci5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjaGVja1Nlc3Npb25Qcm9taXNlO1xufVxuXG4vKiDliKTmlq1zZXNzaW9u5piv5ZCm5Li656m65oiW5bey6L+H5pyfICovXG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzLnNlc3Npb24pIHtcbiAgICAgICAgLy8g5aaC5p6c57yT5a2Y5Lit5rKh5pyJc2Vzc2lvblxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzLnNlc3Npb25FeHBpcmUpIHtcbiAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbue8k+WtmOaXtumXtO+8jOS4lOe8k+WtmOaXtumXtOW3suWIsFxuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIC8vIOayoeacieeZu+mZhuaAge+8jOS4jemcgOimgeWGjWNoZWNrU2Vzc2lvblxuICAgICAgICAgICAgY29uZmlnLmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0sIChyZXM6IGFueSk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g57yT5a2Y5Lit5pyJc2Vzc2lvbuS4lOacqui/h+acn1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbi8qIOeZu+mZhua1geeoi+eahHByb21pc2UgKi9cbmxldCBsb2dpblByb21pc2U6IGFueSA9IG51bGw7XG5cbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nLmhpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVtjb2RlIOiOt+WPluWksei0pV1cIn0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyLnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe3RpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogcmVzLmVyck1zZ30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHNldFNlc3Npb24oc2Vzc2lvbjogc3RyaW5nKSB7XG4gICAgc3RhdHVzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIC8vIOaNouWbnuadpeeahHNlc3Npb27vvIzkuI3pnIDopoHlho1jaGVja1Nlc3Npb25cbiAgICBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIC8vIOWmguaenOacieiuvue9ruacrOWcsHNlc3Npb27ov4fmnJ/ml7bpl7RcbiAgICBpZiAoY29uZmlnLnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXMuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lIGFzIHN0cmluZyxcbiAgICAgICAgZGF0YTogc3RhdHVzLnNlc3Npb25cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGU6IHN0cmluZykge1xuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgLy8gY29kZVRvU2Vzc2lvbi5kYXRh5pSv5oyB5Ye95pWwXG4gICAgaWYgKHR5cGVvZiBjb25maWcuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZy5jb2RlVG9TZXNzaW9uLmRhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICB9XG4gICAgZGF0YVtjb25maWcuY29kZVRvU2Vzc2lvbi5jb2RlTmFtZSFdID0gY29kZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5yZXF1ZXN0KHtcbiAgICAgICAgICAgIHVybDogcmVxdWVzdEhhbmRsZXIuZm9ybWF0KGNvbmZpZy5jb2RlVG9TZXNzaW9uLnVybCksXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBjb25maWcuY29kZVRvU2Vzc2lvbi5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICAgICAgICBzdWNjZXNzKHJlczogd3guUmVxdWVzdFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOiAl+aXtuS4iuaKpVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyLnJlcG9ydChjb25maWcuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gY29uZmlnLmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuc2Vzc2lvbiA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjaLlm57mnaXnmoRzZXNzaW9u77yM5LiN6ZyA6KaB5YaNY2hlY2tTZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5pyJ6K6+572u5pys5Zywc2Vzc2lvbui/h+acn+aXtumXtFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWcuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnLnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0cmluZyhzdGF0dXMuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWcuc2Vzc2lvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdHVzLnNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyLmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwifSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VXCJ9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG4vKiDmuIXnqbpzZXNzaW9uICovXG5mdW5jdGlvbiBkZWxTZXNzaW9uKCkge1xuICAgIHN0YXR1cy5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnLnNlc3Npb25OYW1lIGFzIHN0cmluZ1xuICAgIH0pO1xuICAgIGlmIChjb25maWcuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnLnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzLnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5zZXNzaW9uRXhwaXJlS2V5XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYWluKHJlbGF0ZWRSZXF1ZXN0T2JqPzogSVJlcXVlc3RPcHRpb24gfCBJVXBsb2FkRmlsZU9wdGlvbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXRyeSA9ICFyZWxhdGVkUmVxdWVzdE9ialxuICAgICAgICAgICAgLy8g5aaC5p6c5rKh5pyJ5YWz6IGU55qE6K+35rGC77yM6YeN6K+V5Y2z6LCD55So6Ieq6LqrXG4gICAgICAgICAgICA/ICgpID0+IG1haW4oKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgIC8vIOWmguaenOacieWFs+iBlOeahOivt+axgu+8jOmHjeivleWNs+iwg+eUqOaJgOWFs+iBlOeahOivt+axglxuICAgICAgICAgICAgOiAoKSA9PiByZXF1ZXN0KHJlbGF0ZWRSZXF1ZXN0T2JqKS50aGVuKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZXNvbHZlKS5jYXRjaChyZWxhdGVkUmVxdWVzdE9iai5fcmVqZWN0KTtcbiAgICAgICAgcmV0dXJuIGNoZWNrTG9naW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZG9Ob3RDaGVja1Nlc3Npb24gPyBQcm9taXNlLnJlc29sdmUoKSA6IGNoZWNrU2Vzc2lvbigpXG4gICAgICAgIH0sICh7dGl0bGUsIGNvbnRlbnR9KSA9PiB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGUsIGNvbnRlbnR9KTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9LCAoe3RpdGxlLCBjb250ZW50fSk9PiB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIuZG9FcnJvcih0aXRsZSwgY29udGVudCwgcmV0cnkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7dGl0bGUsIGNvbnRlbnR9KTtcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbWFpbixcbiAgICBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb25cbn1cbiJdfQ== /***/ }), @@ -1046,6 +1064,7 @@ var defaultConfig = { errorContent: function (res) { return res; }, + errorRetryBtn: false, reLoginLimit: 3, errorCallback: null, reportCGI: false, @@ -1054,7 +1073,7 @@ var defaultConfig = { sessionExpireKey: "sessionExpireKey" }; exports.default = defaultConfig; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLElBQU0sYUFBYSxHQUFnQjtJQUMvQixXQUFXLEVBQUUsU0FBUztJQUN0QixZQUFZO1FBQ1IsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUNELGFBQWEsRUFBRTtRQUNYLEdBQUcsRUFBRSxFQUFFO1FBQ1AsT0FBTyxFQUFFLGNBQU0sQ0FBQztLQUNuQjtJQUNELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxTQUFTLEVBQUUsRUFBRTtJQUNiLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsVUFBVSxFQUFFLE1BQU07SUFDbEIsWUFBWSxFQUFaLFVBQWEsR0FBUTtRQUNqQixPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7SUFDRCxZQUFZLEVBQUUsQ0FBQztJQUNmLGFBQWEsRUFBRSxJQUFJO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsVUFBVSxFQUFFLEtBQUs7SUFFakIsZ0JBQWdCLEVBQUUsa0JBQWtCO0NBQ3ZDLENBQUM7QUFFRixrQkFBZSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJSW5pdE9wdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZSdcblxuY29uc3QgZGVmYXVsdENvbmZpZzogSUluaXRPcHRpb24gPSB7XG4gICAgc2Vzc2lvbk5hbWU6IFwic2Vzc2lvblwiLFxuICAgIGxvZ2luVHJpZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcbiAgICBjb2RlVG9TZXNzaW9uOiB7XG4gICAgICAgIHVybDogXCJcIixcbiAgICAgICAgc3VjY2VzczogKCk9PiB7fVxuICAgIH0sXG4gICAgc3VjY2Vzc1RyaWdnZXIoKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcbiAgICB1cmxQZXJmaXg6IFwiXCIsXG4gICAgZG9Ob3RDaGVja1Nlc3Npb246IGZhbHNlLFxuICAgIGVycm9yVGl0bGU6IFwi5pON5L2c5aSx6LSlXCIsXG4gICAgZXJyb3JDb250ZW50KHJlczogYW55KSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICB9LFxuICAgIHJlTG9naW5MaW1pdDogMyxcbiAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxuICAgIHJlcG9ydENHSTogZmFsc2UsXG4gICAgbW9ja0pzb246IGZhbHNlLFxuICAgIGdsb2JhbERhdGE6IGZhbHNlLFxuICAgIC8vIHNlc3Npb27lnKjmnKzlnLDnvJPlrZjnmoRrZXlcbiAgICBzZXNzaW9uRXhwaXJlS2V5OiBcInNlc3Npb25FeHBpcmVLZXlcIlxufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdENvbmZpZztcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JlL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLElBQU0sYUFBYSxHQUFnQjtJQUMvQixXQUFXLEVBQUUsU0FBUztJQUN0QixZQUFZO1FBQ1IsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUNELGFBQWEsRUFBRTtRQUNYLEdBQUcsRUFBRSxFQUFFO1FBQ1AsT0FBTyxFQUFFLGNBQU0sQ0FBQztLQUNuQjtJQUNELGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFDRCxTQUFTLEVBQUUsRUFBRTtJQUNiLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsVUFBVSxFQUFFLE1BQU07SUFDbEIsWUFBWSxZQUFDLEdBQVE7UUFDakIsT0FBTyxHQUFHLENBQUE7SUFDZCxDQUFDO0lBQ0QsYUFBYSxFQUFFLEtBQUs7SUFDcEIsWUFBWSxFQUFFLENBQUM7SUFDZixhQUFhLEVBQUUsSUFBSTtJQUNuQixTQUFTLEVBQUUsS0FBSztJQUNoQixRQUFRLEVBQUUsS0FBSztJQUNmLFVBQVUsRUFBRSxLQUFLO0lBRWpCLGdCQUFnQixFQUFFLGtCQUFrQjtDQUN2QyxDQUFDO0FBRUYsa0JBQWUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUluaXRPcHRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2UnXG5cbmNvbnN0IGRlZmF1bHRDb25maWc6IElJbml0T3B0aW9uID0ge1xuICAgIHNlc3Npb25OYW1lOiBcInNlc3Npb25cIixcbiAgICBsb2dpblRyaWdnZXIoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgY29kZVRvU2Vzc2lvbjoge1xuICAgICAgICB1cmw6IFwiXCIsXG4gICAgICAgIHN1Y2Nlc3M6ICgpPT4ge31cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG4gICAgdXJsUGVyZml4OiBcIlwiLFxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxuICAgIGVycm9yQ29udGVudChyZXM6IGFueSkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgfSxcbiAgICBlcnJvclJldHJ5QnRuOiBmYWxzZSxcbiAgICByZUxvZ2luTGltaXQ6IDMsXG4gICAgZXJyb3JDYWxsYmFjazogbnVsbCxcbiAgICByZXBvcnRDR0k6IGZhbHNlLFxuICAgIG1vY2tKc29uOiBmYWxzZSxcbiAgICBnbG9iYWxEYXRhOiBmYWxzZSxcbiAgICAvLyBzZXNzaW9u5Zyo5pys5Zyw57yT5a2Y55qEa2V5XG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRDb25maWc7XG4iXX0= /***/ }), @@ -1137,7 +1156,7 @@ function setParams(url, params) { kvp[kv[0]] = kv[1]; }); } - kvp = __assign(__assign({}, kvp), params); + kvp = __assign({}, kvp, params); var queryString = Object.keys(kvp) .map(function (key) { return key + "=" + encodeURI(kvp[key]); @@ -1153,7 +1172,7 @@ function setParams(url, params) { exports.default = { setParams: setParams }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFBaEMsb0JBQUEsRUFBQSxRQUFnQjtJQUMvQixJQUFNLGdCQUFnQixHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLElBQU0sZ0JBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRSxnQkFBYyxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQU0sRUFBRSxHQUFhLGdCQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELEdBQUcseUJBQU8sR0FBRyxHQUFLLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxVQUFBLEdBQUc7UUFDSixPQUFVLEdBQUcsU0FBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDL0Q7U0FBTTtRQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxTQUFTLFdBQUE7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2V0UGFyYW1zKHVybDogc3RyaW5nID0gXCJcIiwgcGFyYW1zOiBvYmplY3QpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZ0luZGV4OiBudW1iZXIgPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgbGV0IGt2cDogYW55ID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBvbGRRdWVyeVN0cmluZyA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbGRRdWVyeVN0cmluZy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrdjogc3RyaW5nW10gPSBvbGRRdWVyeVN0cmluZ1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGt2cCA9IHsuLi5rdnAsIC4uLnBhcmFtc307XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUkkoa3ZwW2tleV0pfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiJlwiKTtcblxuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc2V0UGFyYW1zXG59O1xuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWwvdXJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLFNBQVMsQ0FBQyxHQUFnQixFQUFFLE1BQWM7SUFBaEMsb0JBQUEsRUFBQSxRQUFnQjtJQUMvQixJQUFNLGdCQUFnQixHQUFXLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLElBQU0sZ0JBQWMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuRSxnQkFBYyxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQU0sRUFBRSxHQUFhLGdCQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELEdBQUcsZ0JBQU8sR0FBRyxFQUFLLE1BQU0sQ0FBQyxDQUFDO0lBRTFCLElBQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxVQUFBLEdBQUc7UUFDSixPQUFVLEdBQUcsU0FBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWYsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDL0Q7U0FBTTtRQUNILE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7S0FDbEM7QUFDTCxDQUFDO0FBRUQsa0JBQWU7SUFDWCxTQUFTLFdBQUE7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc2V0UGFyYW1zKHVybDogc3RyaW5nID0gXCJcIiwgcGFyYW1zOiBvYmplY3QpIHtcbiAgICBjb25zdCBxdWVyeVN0cmluZ0luZGV4OiBudW1iZXIgPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgbGV0IGt2cDogYW55ID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBvbGRRdWVyeVN0cmluZyA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvbGRRdWVyeVN0cmluZy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrdjogc3RyaW5nW10gPSBvbGRRdWVyeVN0cmluZ1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGt2cCA9IHsuLi5rdnAsIC4uLnBhcmFtc307XG5cbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX09JHtlbmNvZGVVUkkoa3ZwW2tleV0pfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiJlwiKTtcblxuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVybCArIFwiP1wiICsgcXVlcnlTdHJpbmc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgc2V0UGFyYW1zXG59O1xuIl19 /***/ }), @@ -1167,11 +1186,11 @@ exports.default = { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var version = "1.2.11"; +var version = "1.2.12"; exports.version = version; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsSUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDO0FBRW5CLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBjb25zdCBfX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5jb25zdCB2ZXJzaW9uID0gX19WRVJTSU9OX187XG5cbmV4cG9ydCB7IHZlcnNpb24gfTtcbiJdfQ== /***/ }) /******/ })["default"]; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2xvYWRpbmcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvdXJsLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsKzNCOzs7Ozs7Ozs7Ozs7QUNaOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLG1hOzs7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHUvRTs7Ozs7Ozs7Ozs7O0FDeEM5QjtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGNBQWMsUUFBVztBQUN6QjtBQUNBLDJDQUEyQyx1VyIsImZpbGUiOiJ3ZVJlcXVlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC50c1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBzdGF0dXNfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9zdGF0dXNcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybFBlcmZpeDogY29uZmlnXzEuZGVmYXVsdC51cmxQZXJmaXgsXG4gICAgICAgIHNlc3Npb25FeHBpcmVUaW1lOiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lLFxuICAgICAgICBzZXNzaW9uRXhwaXJlS2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgIHNlc3Npb25FeHBpcmU6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVxuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVoyVjBRMjl1Wm1sbkxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDJGd2FTOW5aWFJEYjI1bWFXY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTd3dRMEZCYjBNN1FVRkRjRU1zTUVOQlFXOURPMEZCUlhCRExHMUNRVUZsTzBsQlExZ3NUMEZCVHp0UlFVTklMRk5CUVZNc1JVRkJSU3huUWtGQlRTeERRVUZETEZOQlFWTTdVVUZETTBJc2FVSkJRV2xDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhwUWtGQmFVSTdVVUZETTBNc1owSkJRV2RDTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhuUWtGQlowSTdVVUZEZWtNc1lVRkJZU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNZVUZCWVR0TFFVTjBReXhEUVVGQk8wRkJRMHdzUTBGQlF5eEZRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUdOdmJtWnBaeUJtY205dElDY3VMaTl6ZEc5eVpTOWpiMjVtYVdjblhHNXBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUhWeWJGQmxjbVpwZURvZ1kyOXVabWxuTG5WeWJGQmxjbVpwZUN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVlJwYldVNklHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlN4Y2JpQWdJQ0FnSUNBZ2MyVnpjMmx2YmtWNGNHbHlaVXRsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtzWEc0Z0lDQWdJQ0FnSUhObGMzTnBiMjVGZUhCcGNtVTZJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsWEc0Z0lDQWdmVnh1ZlR0Y2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2WjJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVWd1F5eHRRa0ZCWlR0SlFVTllMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVRTdRVUZEZWtJc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITjBZWFIxY3lCbWNtOXRJQ2N1TGk5emRHOXlaUzl6ZEdGMGRYTW5YRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJQ2dwSUQwK0lIdGNiaUFnSUNCeVpYUjFjbTRnYzNSaGRIVnpMbk5sYzNOcGIyNWNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICBPYmplY3QuYXNzaWduKGNvbmZpZ18xLmRlZmF1bHQsIHBhcmFtcyk7XG4gICAgdHJ5IHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gd3guZ2V0U3RvcmFnZVN5bmMoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSkgfHwgJyc7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3d4LmdldFN0b3JhZ2VTeW5jOmZhaWwsIGNhbiBub3QgZ2V0IHNlc3Npb24uJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSB8fCBcInNlc3Npb25FeHBpcmVLZXlcIikgfHwgSW5maW5pdHk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3d4LmdldFN0b3JhZ2VTeW5jOmZhaWwsIGNhbiBub3QgZ2V0IHNlc3Npb25FeHBpcmUuJyk7XG4gICAgfVxufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhVzVwZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmFXNXBkQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNiVUpCUVdVc1ZVRkJReXhOUVVGdFFqdEpRVU12UWl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRPVUlzU1VGQlNUdFJRVU5CTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVVzUTBGQlF5eGpRVUZqTEVOQlFVTXNaMEpCUVUwc1EwRkJReXhYUVVGWkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdTMEZEYWtVN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFJRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc09FTkJRVGhETEVOQlFVTXNRMEZCUVR0TFFVTm9SVHRKUVVORUxFbEJRVWs3VVVGRFFTeG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhGUVVGRkxFTkJRVU1zWTBGQll5eERRVUZETEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdTMEZEZGtjN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFJRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2IwUkJRVzlFTEVOQlFVTXNRMEZCUVR0TFFVTjBSVHRCUVVOTUxFTkJRVU1zUlVGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1cGJYQnZjblFnZXlCSlNXNXBkRTl3ZEdsdmJpQjlJR1p5YjIwZ0p5NHVMMmx1ZEdWeVptRmpaU2RjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0hCaGNtRnRjem9nU1VsdWFYUlBjSFJwYjI0cElEMCtJSHRjYmlBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0dOdmJtWnBaeXdnY0dGeVlXMXpLVHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZiaUE5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVUbUZ0WlNFcElIeDhJQ2NuTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduZDNndVoyVjBVM1J2Y21GblpWTjVibU02Wm1GcGJDd2dZMkZ1SUc1dmRDQm5aWFFnYzJWemMybHZiaTRuS1Z4dUlDQWdJSDFjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTQTlJSGQ0TG1kbGRGTjBiM0poWjJWVGVXNWpLR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUlIeDhJRndpYzJWemMybHZia1Y0Y0dseVpVdGxlVndpS1NCOGZDQkpibVpwYm1sMGVUdGNiaUFnSUNCOUlHTmhkR05vSUNobEtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OdmJHVXVaWEp5YjNJb0ozZDRMbWRsZEZOMGIzSmhaMlZUZVc1ak9tWmhhV3dzSUdOaGJpQnViM1FnWjJWMElITmxjM05wYjI1RmVIQnBjbVV1SnlsY2JpQWdJQ0I5WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvc2Vzc2lvbk1hbmFnZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluYVc0dWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVhCcEwyeHZaMmx1TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN08wRkJRVUVzTWtSQlFYRkVPMEZCUlhKRUxHMUNRVUZsTzBsQlExZ3NUMEZCVHl4M1FrRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZCTzBGQlEyaERMRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUxpOXRiMlIxYkdVdmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2MyVnpjMmx2YmsxaGJtRm5aWEl1YldGcGJpZ3BYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5yZXF1ZXN0KG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnhkV1Z6ZEM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdmNtVnhkV1Z6ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVcxQ08wbEJReTlDTEU5QlFVOHNkMEpCUVdNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZEVNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxTWlhGMVpYTjBUM0IwYVc5dUlIMGdabkp2YlNBbkxpNHZhVzUwWlhKbVlXTmxKMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0FvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTV5WlhGMVpYTjBLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0LnNldFNlc3Npb24oc2Vzc2lvbik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVjBVMlZ6YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjMlYwVTJWemMybHZiaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVVZ5UkN4dFFrRkJaU3hWUVVGRExFOUJRV1U3U1VGRE0wSXNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZGtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElITmxjM05wYjI1TllXNWhaMlZ5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl6WlhOemFXOXVUV0Z1WVdkbGNpZGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdLSE5sYzNOcGIyNDZJSE4wY21sdVp5a2dQVDRnZTF4dUlDQWdJSE5sYzNOcGIyNU5ZVzVoWjJWeUxuTmxkRk5sYzNOcGIyNG9jMlZ6YzJsdmJpazdYRzU5WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZXF1ZXN0SGFuZGxlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9yZXF1ZXN0SGFuZGxlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC51cGxvYWRGaWxlKG9iaik7XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYQnNiMkZrUm1sc1pTNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZkWEJzYjJGa1JtbHNaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREpFUVVGeFJEdEJRVWR5UkN4dFFrRkJaU3hWUVVGRExFZEJRWE5DTzBsQlEyeERMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1FVRkRla01zUTBGQlF5eEZRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbGNYVmxjM1JJWVc1a2JHVnlJR1p5YjIwZ0p5NHVMMjF2WkhWc1pTOXlaWEYxWlhOMFNHRnVaR3hsY2lkY2JtbHRjRzl5ZENCN0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ5WlhGMVpYTjBTR0Z1Wkd4bGNpNTFjR3h2WVdSR2FXeGxLRzlpYWlsY2JuMWNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGluaXRfMSA9IHJlcXVpcmUoXCIuL2FwaS9pbml0XCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuL2FwaS9yZXF1ZXN0XCIpO1xudmFyIHVwbG9hZEZpbGVfMSA9IHJlcXVpcmUoXCIuL2FwaS91cGxvYWRGaWxlXCIpO1xudmFyIHNldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9zZXRTZXNzaW9uXCIpO1xudmFyIGxvZ2luXzEgPSByZXF1aXJlKFwiLi9hcGkvbG9naW5cIik7XG52YXIgZ2V0U2Vzc2lvbl8xID0gcmVxdWlyZShcIi4vYXBpL2dldFNlc3Npb25cIik7XG52YXIgZ2V0Q29uZmlnXzEgPSByZXF1aXJlKFwiLi9hcGkvZ2V0Q29uZmlnXCIpO1xudmFyIHZlcnNpb25fMSA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG52YXIgd2VSZXF1ZXN0T2JqZWN0ID0ge1xuICAgIGluaXQ6IGluaXRfMS5kZWZhdWx0LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3RfMS5kZWZhdWx0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVfMS5kZWZhdWx0LFxuICAgIHNldFNlc3Npb246IHNldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGxvZ2luOiBsb2dpbl8xLmRlZmF1bHQsXG4gICAgZ2V0U2Vzc2lvbjogZ2V0U2Vzc2lvbl8xLmRlZmF1bHQsXG4gICAgZ2V0Q29uZmlnOiBnZXRDb25maWdfMS5kZWZhdWx0LFxuICAgIHZlcnNpb246IHZlcnNpb25fMS52ZXJzaW9uXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gd2VSZXF1ZXN0T2JqZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeHRRMEZCTmtJN1FVRkROMElzZVVOQlFXMURPMEZCUTI1RExDdERRVUY1UXp0QlFVTjZReXdyUTBGQmVVTTdRVUZEZWtNc2NVTkJRU3RDTzBGQlF5OUNMQ3REUVVGNVF6dEJRVU42UXl3MlEwRkJkVU03UVVGRmRrTXNjVU5CUVcxRE8wRkJSVzVETEVsQlFVMHNaVUZCWlN4SFFVRmpPMGxCUTJwRExFbEJRVWtzWjBKQlFVRTdTVUZEU2l4UFFVRlBMRzFDUVVGQk8wbEJRMUFzVlVGQlZTeHpRa0ZCUVR0SlFVTldMRlZCUVZVc2MwSkJRVUU3U1VGRFZpeExRVUZMTEdsQ1FVRkJPMGxCUTB3c1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZOQlFWTXNjVUpCUVVFN1NVRkRWQ3hQUVVGUExHMUNRVUZCTzBOQlExSXNRMEZCUXp0QlFVVkdMR3RDUVVGbExHVkJRV1VzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQnBibWwwSUdaeWIyMGdYQ0l1TDJGd2FTOXBibWwwWENKY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdYQ0l1TDJGd2FTOXlaWEYxWlhOMFhDSmNibWx0Y0c5eWRDQjFjR3h2WVdSR2FXeGxJR1p5YjIwZ1hDSXVMMkZ3YVM5MWNHeHZZV1JHYVd4bFhDSmNibWx0Y0c5eWRDQnpaWFJUWlhOemFXOXVJR1p5YjIwZ1hDSXVMMkZ3YVM5elpYUlRaWE56YVc5dVhDSmNibWx0Y0c5eWRDQnNiMmRwYmlCbWNtOXRJRndpTGk5aGNHa3ZiRzluYVc1Y0lseHVhVzF3YjNKMElHZGxkRk5sYzNOcGIyNGdabkp2YlNCY0lpNHZZWEJwTDJkbGRGTmxjM05wYjI1Y0lseHVhVzF3YjNKMElHZGxkRU52Ym1acFp5Qm1jbTl0SUZ3aUxpOWhjR2t2WjJWMFEyOXVabWxuWENKY2JtbHRjRzl5ZENCN0lIZGxVbVZ4ZFdWemRDQjlJR1p5YjIwZ1hDSXVMMmx1ZEdWeVptRmpaVndpWEc1cGJYQnZjblFnZXlCMlpYSnphVzl1SUgwZ1puSnZiU0FuTGk5MlpYSnphVzl1SjF4dVhHNWpiMjV6ZENCM1pWSmxjWFZsYzNSUFltcGxZM1E2SUhkbFVtVnhkV1Z6ZENBOUlIdGNiaUFnYVc1cGRDeGNiaUFnY21WeGRXVnpkQ3hjYmlBZ2RYQnNiMkZrUm1sc1pTeGNiaUFnYzJWMFUyVnpjMmx2Yml4Y2JpQWdiRzluYVc0c1hHNGdJR2RsZEZObGMzTnBiMjRzWEc0Z0lHZGxkRU52Ym1acFp5eGNiaUFnZG1WeWMybHZibHh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ2QyVlNaWEYxWlhOMFQySnFaV04wTzF4dUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGdldChvYmopIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3eC5nZXRTdG9yYWdlKHtcbiAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBvYmouY2FjaGUgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY2FjaGUocmVzLmRhdGEpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnN1Y2Nlc3MgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouc3VjY2VzcyhyZXMuZGF0YSwgeyBpc0NhY2hlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0KG9iaiwgcmVhbERhdGEpIHtcbiAgICBpZiAoIW9iai5vcmlnaW5VcmwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob2JqLmNhY2hlID09PSB0cnVlIHx8XG4gICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlYWxEYXRhKSkpIHtcbiAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IG9iai5vcmlnaW5VcmwsXG4gICAgICAgICAgICBkYXRhOiByZWFsRGF0YVxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZ2V0OiBnZXQsXG4gICAgc2V0OiBzZXRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMkZqYUdWTllXNWhaMlZ5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOWpZV05vWlUxaGJtRm5aWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkZRU3hUUVVGVExFZEJRVWNzUTBGQlF5eEhRVUZ0UWp0SlFVTTFRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlR0UlFVTm9RaXhQUVVGUE8wdEJRMVk3U1VGRFJDeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUTFZc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eFRRVUZUTzFGQlEyeENMRTlCUVU4c1dVRkJSU3hIUVVGSE8xbEJRMUlzU1VGRFNTeEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrN1owSkJRMnhDTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExGVkJRVlVzU1VGQlNTeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVU14UkR0blFrRkRSU3hKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEU5QlFVOHNTMEZCU3l4VlFVRlZMRVZCUVVVN2IwSkJRMjVETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVNc1EwRkJReXhEUVVGQk8ybENRVU42UXp0aFFVTktPMWxCUTBRc1NVRkJSeXhQUVVGUExFZEJRVWNzUTBGQlF5eFJRVUZSTEV0QlFVc3NWVUZCVlN4RlFVRkZPMmRDUVVOdVF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1lVRkRiRUk3VVVGRFRDeERRVUZETzB0QlEwb3NRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zUjBGQlJ5eERRVUZETEVkQlFXMUNMRVZCUVVjc1VVRkJlVUk3U1VGRGVFUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhUUVVGVExFVkJRVVU3VVVGRGFFSXNUMEZCVHp0TFFVTldPMGxCUTBRc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdVVUZEYkVJc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZETVVRN1VVRkRSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFsQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xbEJRMnhDTEVsQlFVa3NSVUZCUlN4UlFVRlJPMU5CUTJwQ0xFTkJRVU1zUTBGQlFUdExRVU5NTzBGQlEwd3NRMEZCUXp0QlFVVkVMR3RDUVVGbE8wbEJRMWdzUjBGQlJ5eExRVUZCTzBsQlEwZ3NSMEZCUnl4TFFVRkJPME5CUTA0c1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNWNibVoxYm1OMGFXOXVJR2RsZENodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUtTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vdWIzSnBaMmx1VlhKc0tTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNCOVhHNGdJQ0FnZDNndVoyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJR3RsZVRvZ2IySnFMbTl5YVdkcGJsVnliQ3hjYmlBZ0lDQWdJQ0FnYzNWalkyVnpjeUFvY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OaFkyaGxJRDA5UFNCMGNuVmxJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS0hSNWNHVnZaaUJ2WW1vdVkyRmphR1VnUFQwOUlGd2lablZ1WTNScGIyNWNJaUFtSmlCdlltb3VZMkZqYUdVb2NtVnpMbVJoZEdFcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91YzNWalkyVnpjeUE5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhaTV6ZFdOalpYTnpLSEpsY3k1a1lYUmhMQ0I3YVhORFlXTm9aVG9nZEhKMVpYMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltSUc5aWFpNWpiMjF3YkdWMFpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ6WlhRb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQXNJSEpsWVd4RVlYUmhPaUJ6ZEhKcGJtY2dmQ0J2WW1wbFkzUXBJSHRjYmlBZ0lDQnBaaUFvSVc5aWFpNXZjbWxuYVc1VmNtd3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQWdJRzlpYWk1allXTm9aU0E5UFQwZ2RISjFaU0I4ZkZ4dUlDQWdJQ0FnSUNBb2RIbHdaVzltSUc5aWFpNWpZV05vWlNBOVBUMGdYQ0ptZFc1amRHbHZibHdpSUNZbUlHOWlhaTVqWVdOb1pTaHlaV0ZzUkdGMFlTa3BYRzRnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQnZZbW91YjNKcFoybHVWWEpzTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2NtVmhiRVJoZEdGY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFFzWEc0Z0lDQWdjMlYwWEc1OU8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG5mdW5jdGlvbiBjYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpIHtcbiAgICB2YXIgdHlwZSA9IGUudHlwZSwgcmVzID0gZS5yZXM7XG4gICAgaWYgKG9iai5jYXRjaEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnaHR0cC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcy5zdGF0dXNDb2RlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAndXBsb2FkLWVycm9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IocmVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2xvZ2ljLWVycm9yJykge1xuICAgICAgICAgICAgdmFyIG1zZyA9IGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuZ2V0RXJyb3JNc2cocmVzKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKG1zZy5jb250ZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoZS50eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5sb2dpY0Vycm9yKG9iaiwgZS5yZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuY2F0Y2hIYW5kbGVyID0gY2F0Y2hIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGMFkyaElZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVhSamFFaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZEUVN3clEwRkJNRU03UVVGUE1VTXNVMEZCVXl4WlFVRlpMRU5CUVVNc1EwRkJZU3hGUVVGRkxFZEJRWFZETEVWQlFVVXNUVUZCT0VJN1NVRkRhRWNzU1VGQlFTeGhRVUZKTEVWQlFVVXNWMEZCUnl4RFFVRk5PMGxCUTNaQ0xFbEJRVWtzUjBGQlJ5eERRVUZETEZWQlFWVXNSVUZCUlR0UlFVTm9RaXhKUVVGSkxFbEJRVWtzUzBGQlN5eFpRVUZaTEVWQlFVVTdXVUZEZGtJc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZGtRN1lVRkJUU3hKUVVGSkxFbEJRVWtzUzBGQlN5eGpRVUZqTEVWQlFVVTdXVUZEYUVNc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVOcVF6dGhRVUZOTEVsQlFVa3NTVUZCU1N4TFFVRkxMR0ZCUVdFc1JVRkJSVHRaUVVNdlFpeEpRVUZKTEVkQlFVY3NSMEZCUnl4elFrRkJXU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjRReXhQUVVGUExFMUJRVTBzUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU42UXp0aFFVRk5PMWxCUlVnc1QwRkJUeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEY0VJN1MwRkRTanRUUVVGTk8xRkJRMGdzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZPMWxCUTFJc1QwRkJUeXh6UWtGQldTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlF6bERPMkZCUVUwN1dVRkZTQ3hQUVVGUExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTndRanRMUVVOS08wRkJSVXdzUTBGQlF6dEJRVU5STEc5RFFVRlpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVhVzF3YjNKMElHVnljbTl5U0dGdVpHeGxjaUJtY205dElGd2lMaTlsY25KdmNraGhibVJzWlhKY0lqdGNibHh1ZEhsd1pTQlVhSEp2ZDBWeWNtOXlWSGx3WlNBOUlDZDFjR3h2WVdRdFpYSnliM0luSUh3Z0oyeHZaMmxqTFdWeWNtOXlKeUI4SUNkb2RIUndMV1Z5Y205eUoxeHVhVzUwWlhKbVlXTmxJRlJvY205M1JYSnliM0lnZTF4dUlDQWdJSFI1Y0dVNklGUm9jbTkzUlhKeWIzSlVlWEJsWEc0Z0lDQWdjbVZ6T2lCaGJubGNibjFjYm1aMWJtTjBhVzl1SUdOaGRHTm9TR0Z1Wkd4bGNpaGxPaUJVYUhKdmQwVnljbTl5TENCdlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHNJSEpsYW1WamREb2dLSEpsWVhOdmJqODZJR0Z1ZVNrZ1BUNGdkbTlwWkNrZ2UxeHVJQ0FnSUdOdmJuTjBJSHNnZEhsd1pTd2djbVZ6SUgwZ1BTQmxYRzRnSUNBZ2FXWWdLRzlpYWk1allYUmphRVZ5Y205eUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxJRDA5UFNBbmFIUjBjQzFsY25KdmNpY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpXcGxZM1FvYm1WM0lFVnljbTl5S0hKbGN5NXpkR0YwZFhORGIyUmxMblJ2VTNSeWFXNW5LQ2twS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsSUQwOVBTQW5kWEJzYjJGa0xXVnljbTl5SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHVaWGNnUlhKeWIzSW9jbVZ6S1NrN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3WlNBOVBUMGdKMnh2WjJsakxXVnljbTl5SnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHMXpaeUE5SUdWeWNtOXlTR0Z1Wkd4bGNpNW5aWFJGY25KdmNrMXpaeWh5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHVaWGNnUlhKeWIzSW9iWE5uTG1OdmJuUmxiblFwS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9XRnR1UzdsbXB6NlpTWjZLK3ZYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLR1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHVXVkSGx3WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1Z5Y205eVNHRnVaR3hsY2k1c2IyZHBZMFZ5Y205eUtHOWlhaXdnWlM1eVpYTXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1WVcyNUx1V2FuUHBsSm5vcjY5Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb1pTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYm4xY2JtVjRjRzl5ZENCN0lHTmhkR05vU0dGdVpHeGxjaUI5SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XG5mdW5jdGlvbiBzdGFydChvYmopIHtcbiAgICBvYmouX3JlcG9ydFN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xufVxuZnVuY3Rpb24gZW5kKG9iaikge1xuICAgIG9iai5fcmVwb3J0RW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGlmIChvYmoucmVwb3J0ICYmIG9iai5fcmVwb3J0U3RhcnRUaW1lKSB7XG4gICAgICAgIHJlcG9ydChvYmoucmVwb3J0LCBvYmouX3JlcG9ydFN0YXJ0VGltZSwgb2JqLl9yZXBvcnRFbmRUaW1lKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXBvcnQobmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQucmVwb3J0Q0dJKG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSwgcmVxdWVzdF8xLmRlZmF1bHQpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmQsXG4gICAgcmVwb3J0OiByZXBvcnRcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5dGIyUjFiR1V2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVRkJMREJEUVVGdlF6dEJRVU53UXl3d1EwRkJiME03UVVGSGNFTXNVMEZCVXl4TFFVRkxMRU5CUVVNc1IwRkJkVU03U1VGRGJFUXNSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UVVGRGFFUXNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRWFZETzBsQlEyaEVMRWRCUVVjc1EwRkJReXhqUVVGakxFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRKUVVNeFF5eEpRVUZITEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTI1RExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCWjBJc1JVRkJSU3hIUVVGSExFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1IwRkJSeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzB0QlF6RkZPMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zVFVGQlRTeERRVUZETEVsQlFWa3NSVUZCUlN4VFFVRnBRaXhGUVVGRkxFOUJRV1U3U1VGRE5VUXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjRReXhuUWtGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCVHl4RFFVRkRMRU5CUVVNN1MwRkRka1E3UVVGRFRDeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hMUVVGTExFOUJRVUU3U1VGRFRDeEhRVUZITEV0QlFVRTdTVUZEU0N4TlFVRk5MRkZCUVVFN1EwRkRWQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjbVZ4ZFdWemRDQm1jbTl0SUNjdUxpOWhjR2t2Y21WeGRXVnpkQ2RjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVMQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaUI5SUdaeWIyMGdYQ0l1TGk5cGJuUmxjbVpoWTJWY0lqdGNibHh1Wm5WdVkzUnBiMjRnYzNSaGNuUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUI4SUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1S1NCN1hHNGdJQ0FnYjJKcUxsOXlaWEJ2Y25SVGRHRnlkRlJwYldVZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYm4xY2JseHVablZ1WTNScGIyNGdaVzVrS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0Z2ZDQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpa2dlMXh1SUNBZ0lHOWlhaTVmY21Wd2IzSjBSVzVrVkdsdFpTQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJR2xtS0c5aWFpNXlaWEJ2Y25RZ0ppWWdiMkpxTGw5eVpYQnZjblJUZEdGeWRGUnBiV1VwSUh0Y2JpQWdJQ0FnSUNBZ2NtVndiM0owS0c5aWFpNXlaWEJ2Y25RZ1lYTWdjM1J5YVc1bkxDQnZZbW91WDNKbGNHOXlkRk4wWVhKMFZHbHRaU3dnYjJKcUxsOXlaWEJ2Y25SRmJtUlVhVzFsS1R0Y2JpQWdJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJSEpsY0c5eWRDaHVZVzFsT2lCemRISnBibWNzSUhOMFlYSjBWR2x0WlRvZ2JuVnRZbVZ5TENCbGJtUlVhVzFsT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdOdmJtWnBaeTV5WlhCdmNuUkRSMGtnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCamIyNW1hV2N1Y21Wd2IzSjBRMGRKS0c1aGJXVXNJSE4wWVhKMFZHbHRaU3dnWlc1a1ZHbHRaU3dnY21WeGRXVnpkQ2s3WEc0Z0lDQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnYzNSaGNuUXNYRzRnSUNBZ1pXNWtMRnh1SUNBZ0lISmxjRzl5ZEZ4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xuZnVuY3Rpb24gc3lzdGVtRXJyb3Iob2JqLCByZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iai5mYWlsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmZhaWwocmVzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRvRXJyb3IoXCJcIiwgcmVzLmVyck1zZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gbG9naWNFcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIF9hID0gZ2V0RXJyb3JNc2cocmVzKSwgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgIGRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDYWxsYmFjayhvYmosIHJlcyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IocmVzKTtcbn1cbmZ1bmN0aW9uIGdldEVycm9yTXNnKHJlcykge1xuICAgIHZhciB0aXRsZSA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGl0bGUgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yVGl0bGUocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZTtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50KHJlcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQ7XG4gICAgfVxuICAgIHJldHVybiB7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9O1xufVxuZnVuY3Rpb24gZG9FcnJvcih0aXRsZSwgY29udGVudCkge1xuICAgIHd4LnNob3dNb2RhbCh7XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgICAgICBzaG93Q2FuY2VsOiBmYWxzZVxuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN5c3RlbUVycm9yOiBzeXN0ZW1FcnJvcixcbiAgICBsb2dpY0Vycm9yOiBsb2dpY0Vycm9yLFxuICAgIGRvRXJyb3I6IGRvRXJyb3IsXG4gICAgZ2V0RXJyb3JNc2c6IGdldEVycm9yTXNnXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlsY25KdmNraGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGSGNFTXNVMEZCVXl4WFFVRlhMRU5CUVVNc1IwRkJkVU1zUlVGQlJTeEhRVUUyUWp0SlFVTjJSaXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NTMEZCU3l4VlFVRlZMRVZCUVVVN1VVRkRhRU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRMUVVOcVFqdFRRVUZOTzFGQlEwZ3NUMEZCVHl4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTMEZETTBJN1FVRkRUQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNSMEZCZFVNc1JVRkJSU3hIUVVGNVJUdEpRVU5zU1N4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYUVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnFRanRUUVVGTk8xRkJRMGNzU1VGQlFTeHhRa0ZCYlVNc1JVRkJiRU1zWjBKQlFVc3NSVUZCUlN4dlFrRkJNa0lzUTBGQlF6dFJRVU14UXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzB0QlF6TkNPMGxCUjBRc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNZVUZCWVN4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVNMVF5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTMEZEYkVNN1NVRkZSQ3hQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaQ0xFTkJRVU03UVVGRlJDeFRRVUZUTEZkQlFWY3NRMEZCUXl4SFFVRjVSVHRKUVVNeFJpeEpRVUZKTEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRaaXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRM3BETEVsQlFVazdXVUZEUVN4TFFVRkxMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGQk8xTkJRM1JETzFGQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVN1UwRkRXRHRMUVVOS08xTkJRVTBzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1ZVRkJWU3hMUVVGTExGRkJRVkVzUlVGQlJUdFJRVU01UXl4TFFVRkxMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTTdTMEZETjBJN1NVRkZSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEYWtJc1NVRkJTU3hQUVVGUExHZENRVUZOTEVOQlFVTXNXVUZCV1N4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVNelF5eEpRVUZKTzFsQlEwRXNUMEZCVHl4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRVHRUUVVNeFF6dFJRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMU5CUTFnN1MwRkRTanRUUVVGTkxFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRmxCUVZrc1MwRkJTeXhSUVVGUkxFVkJRVVU3VVVGRGFFUXNUMEZCVHl4SFFVRkhMR2RDUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETzB0QlEycERPMGxCUlVRc1QwRkJUeXhGUVVGRExFdEJRVXNzVDBGQlFTeEZRVUZGTEU5QlFVOHNVMEZCUVN4RlFVRkRMRU5CUVVFN1FVRkRNMElzUTBGQlF6dEJRVVZFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRXRCUVdFc1JVRkJSU3hQUVVGbE8wbEJRek5ETEVWQlFVVXNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkRWQ3hMUVVGTExFOUJRVUU3VVVGRFRDeFBRVUZQTEVWQlFVVXNUMEZCVHl4SlFVRkpMR1ZCUVdVN1VVRkRia01zVlVGQlZTeEZRVUZGTEV0QlFVczdTMEZEY0VJc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1YwRkJWeXhoUVVGQk8wbEJRMWdzVlVGQlZTeFpRVUZCTzBsQlExWXNUMEZCVHl4VFFVRkJPMGxCUTFBc1YwRkJWeXhoUVVGQk8wTkJRMlFzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVYRzVtZFc1amRHbHZiaUJ6ZVhOMFpXMUZjbkp2Y2lodlltbzZJRWxTWlhGMVpYTjBUM0IwYVc5dUlId2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHNJSEpsY3pvZ2QzZ3VSMlZ1WlhKaGJFTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtWVdsc0tISmxjeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdaRzlGY25KdmNpaGNJbHdpTENCeVpYTXVaWEp5VFhObktUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUd4dloybGpSWEp5YjNJb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVMQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VabUZwYkNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtWVdsc0tISmxjeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2UzUnBkR3hsTENCamIyNTBaVzUwZlNBOUlHZGxkRVZ5Y205eVRYTm5LSEpsY3lrN1hHNGdJQ0FnSUNBZ0lHUnZSWEp5YjNJb2RHbDBiR1VzSUdOdmJuUmxiblFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVtRmplZTlydWU3bitTNGdPbVVtZWl2citXYm51aXdnK1dIdmVhVnNPKzhqT1dJbWVhSnAraWhqT1d1ZzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyRnNiR0poWTJzZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpYSnliM0pEWVd4c1ltRmpheWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2loeVpYTXBPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm5aWFJGY25KdmNrMXpaeWh5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnYkdWMElIUnBkR3hsSUQwZ1hDSmNJanRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JR052Ym1acFp5NWxjbkp2Y2xScGRHeGxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhScGRHeGxJRDBnWTI5dVptbG5MbVZ5Y205eVZHbDBiR1VvY21WekxtUmhkR0VwWEc0Z0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMGdaV3h6WlNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1bGNuSnZjbFJwZEd4bElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnBkR3hsSUQwZ1kyOXVabWxuTG1WeWNtOXlWR2wwYkdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElHTnZiblJsYm5RZ1BTQmNJbHdpTzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnWTI5dVptbG5MbVZ5Y205eVEyOXVkR1Z1ZENBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkQ2h5WlhNdVpHRjBZU2xjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlRMjl1ZEdWdWRDQTlQVDBnWENKemRISnBibWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwWlc1MElEMGdZMjl1Wm1sbkxtVnljbTl5UTI5dWRHVnVkRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2UzUnBkR3hsTENCamIyNTBaVzUwZlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJrYjBWeWNtOXlLSFJwZEd4bE9pQnpkSEpwYm1jc0lHTnZiblJsYm5RNklITjBjbWx1WnlrZ2UxeHVJQ0FnSUhkNExuTm9iM2ROYjJSaGJDaDdYRzRnSUNBZ0lDQWdJSFJwZEd4bExGeHVJQ0FnSUNBZ0lDQmpiMjUwWlc1ME9pQmpiMjUwWlc1MElIeDhJRndpNTcyUjU3dWM1b2lXNXB5TjVZcWg1YnlDNWJpNDc3eU02SyszNTZpTjVaQ082WWVONksrVlhDSXNYRzRnSUNBZ0lDQWdJSE5vYjNkRFlXNWpaV3c2SUdaaGJITmxYRzRnSUNBZ2ZTbGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJSE41YzNSbGJVVnljbTl5TEZ4dUlDQWdJR3h2WjJsalJYSnliM0lzWEc0Z0lDQWdaRzlGY25KdmNpeGNiaUFnSUNCblpYUkZjbkp2Y2sxeloxeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUTJoRExFOUJRVThzUzBGQlN5eERRVUZETzB0QlEyaENPMGxCUlVRc1NVRkJTU3hKUVVGSkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVVM1JpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zU1VGQlRTeEhRVUZITEVkQlFVYzdVVUZEVWl4SlFVRkpMRTFCUVVFN1VVRkRTaXhWUVVGVkxFVkJRVVVzUjBGQlJ6dExRVU5zUWl4RFFVRkRPMGxCUlVZc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0SlFVTm1MRTlCUVU4c1IwRkJSeXhEUVVGQk8wRkJRMlFzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJR3h2WVdScGJtY2dabkp2YlNBbkxpNHZkWFJwYkM5c2IyRmthVzVuSjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwT2lCaGJua2dlMXh1WEc0Z0lDQWdhV1lvSVNoamIyNW1hV2N1Ylc5amEwcHpiMjViYjJKcUxuVnliRjBnZkh3Z0tHOWlhaTV2Y21sbmFXNVZjbXdnSmlZZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRLU2twSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiVzlqYXlEbXNxSG1uSW5scjdubHVwVG1qcVhsajZQbm1vVG1sYkRtamE1Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduYlc5amF5RG1zcUhtbklubHI3bmx1cFRtanFYbGo2UG5tb1RtbGJEbWphNG5LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNTFjbXhkSUh4OElDaHZZbW91YjNKcFoybHVWWEpzSUQ4Z1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRJRG9nSnljcE8xeHVJQ0FnSUM4dklHUmxaWEFnWTI5d2VWeHVJQ0FnSUdSaGRHRWdQU0JLVTA5T0xuQmhjbk5sS0VwVFQwNHVjM1J5YVc1bmFXWjVLR1JoZEdFcEtUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNBZ0lITjBZWFIxYzBOdlpHVTZJREl3TUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNCeVpYUjFjbTRnY21WelhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFJjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgY2F0Y2hIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9jYXRjaEhhbmRsZXJcIik7XG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJlRG8ob2JqKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouYmVmb3JlU2VuZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5iZWZvcmVTZW5kKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqLnJlTG9naW5Db3VudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBvYmoucmVMb2dpbkNvdW50ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQrKztcbiAgICB9XG4gICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5zaG93KG9iai5zaG93TG9hZGluZyk7XG4gICAgfVxuICAgIGlmICghb2JqLm9yaWdpblVybCkge1xuICAgICAgICBvYmoub3JpZ2luVXJsID0gb2JqLnVybDtcbiAgICAgICAgb2JqLnVybCA9IGZvcm1hdChvYmoudXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZGF0YSkge1xuICAgICAgICBvYmouZGF0YSA9IHt9O1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmRhdGEgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb2JqLmRhdGEpLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5kYXRhKTtcbiAgICBvYmoubWV0aG9kID0gb2JqLm1ldGhvZCB8fCAnR0VUJztcbiAgICBvYmouZGF0YVR5cGUgPSBvYmouZGF0YVR5cGUgfHwgJ2pzb24nO1xuICAgIGlmICghY29uZmlnXzEuZGVmYXVsdC5kb05vdFVzZVF1ZXJ5U3RyaW5nICYmIG9iai5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplVXBsb2FkRmlsZU9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmZvcm1EYXRhKSB7XG4gICAgICAgIG9iai5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgICBpZiAob2JqLm9yaWdpblVybCAhPT0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCAmJiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG9iai5mb3JtRGF0YSksIChfYSA9IHt9LCBfYVtjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2EpKTtcbiAgICB9XG4gICAgdmFyIGdkID0gZ2V0R2xvYmFsRGF0YSgpO1xuICAgIG9iai5mb3JtRGF0YSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZCksIG9iai5mb3JtRGF0YSk7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0LmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIHZhciBnZCA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgICAgICBkYXRhOiBvYmouZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogb2JqLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcjogb2JqLmhlYWRlciB8fCB7fSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBvYmouZGF0YVR5cGUgfHwgJ2pzb24nLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB3eC51cGxvYWRGaWxlKHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGZpbGVQYXRoOiBvYmouZmlsZVBhdGggfHwgJycsXG4gICAgICAgICAgICBuYW1lOiBvYmoubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3Qob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb24pIHtcbiAgICAgICAgICAgIHZhciBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChtb2NrUmVzcG9uc2UsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iai5jYWNoZSkge1xuICAgICAgICAgICAgY2FjaGVNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uTWFuYWdlcl8xLmRlZmF1bHQubWFpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdChvYmopO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQocmVzLCBvYmosICdyZXF1ZXN0Jyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVwbG9hZEZpbGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqKTtcbiAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb24pIHtcbiAgICAgICAgICAgIHZhciBtb2NrUmVzcG9uc2UgPSBtb2NrTWFuYWdlcl8xLmRlZmF1bHQuZ2V0KG9iaik7XG4gICAgICAgICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChtb2NrUmVzcG9uc2UsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkb1VwbG9hZEZpbGUob2JqKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KHJlcywgb2JqLCAndXBsb2FkRmlsZScpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBjYXRjaEhhbmRsZXJfMS5jYXRjaEhhbmRsZXIoZSwgb2JqLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgIHVwbG9hZEZpbGU6IHVwbG9hZEZpbGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRFaGhibVJzWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM0psY1hWbGMzUklZVzVrYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdPenM3UVVGQlFTd3lRMEZCY1VNN1FVRkRja01zTUVOQlFXOURPMEZCUTNCRExEQkRRVUZ2UXp0QlFVTndReXcyUTBGQmRVTTdRVUZEZGtNc0swTkJRWGxETzBGQlEzcERMRzFFUVVFMlF6dEJRVU0zUXl4eFJFRkJLME03UVVGREwwTXNkVVJCUVdsRU8wRkJRMnBFTEcxRFFVRTJRanRCUVVVM1Fpd3JRMEZCTUVNN1FVRkRNVU1zSzBOQlFUaERPMEZCUnpsRExGTkJRVk1zVFVGQlRTeERRVUZETEZOQlFXbENPMGxCUXpkQ0xFbEJRVWtzVTBGQlV5eERRVUZETEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSVHRSUVVNNVFpeFBRVUZQTEZOQlFWTXNRMEZCUVR0TFFVTnVRanRUUVVGTk8xRkJRMGdzU1VGQlNTeFRRVUZUTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRGFrTXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVTBGQlV5eExRVUZMTEZWQlFWVXNSVUZCUlR0WlFVTjRReXhUUVVGVExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRVZCUVVVc1EwRkJRVHRUUVVOcVF6dFJRVU5FTEU5QlFVOHNVMEZCVXl4SFFVRkhMRk5CUVZNc1EwRkJRenRMUVVOb1F6dEJRVU5NTEVOQlFVTTdRVUZIUkN4VFFVRlRMRXRCUVVzc1EwRkJLME1zUjBGQlRUdEpRVU12UkN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExGVkJRVlVzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEZEVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGQlJTeERRVUZETzB0QlEzQkNPMGxCUlVRc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eFpRVUZaTEV0QlFVc3NWMEZCVnl4RlFVRkZPMUZCUTNwRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMHRCUTNoQ08xTkJRVTA3VVVGRFNDeEhRVUZITEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNN1MwRkRkRUk3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVN1VVRkRha0lzYVVKQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzB0QlEycERPMGxCUlVRc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVTdVVUZEYUVJc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTNoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dExRVU0zUWp0SlFVVkVMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNiMEpCUVc5Q0xFTkJRVU1zUjBGQmJVSTdPMGxCUlRkRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZPMUZCUTFnc1IwRkJSeXhEUVVGRExFbEJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEYWtJN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4SlFVRkpMSGxDUVVGUkxFZEJRVWNzUTBGQlF5eEpRVUZqTEdkQ1FVRkhMR2RDUVVGTkxFTkJRVU1zVjBGQlZ5eEpRVUZITEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhOUVVGRkxFTkJRVU03UzBGRE9VVTdTVUZIUkN4SlFVRk5MRVZCUVVVc1IwRkJSeXhoUVVGaExFVkJRVVVzUTBGQlF6dEpRVU16UWl4SFFVRkhMRU5CUVVNc1NVRkJTU3g1UWtGQlVTeEZRVUZGTEVkQlFVc3NSMEZCUnl4RFFVRkRMRWxCUVdNc1EwRkJSU3hEUVVGRE8wbEJSVFZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTTdTVUZEYWtNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEhRVUZITEVOQlFVTXNVVUZCVVN4SlFVRkpMRTFCUVUwc1EwRkJRenRKUVVkMFF5eEpRVUZKTEVOQlFVTXNaMEpCUVUwc1EwRkJReXh0UWtGQmJVSXNTVUZCU1N4SFFVRkhMRU5CUVVNc1RVRkJUU3hMUVVGTExFdEJRVXNzUlVGQlJUdFJRVU55UkN4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFsQlEyaENMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhaUVVGSkxFZEJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlhMRWxCUVVjc1owSkJRVTBzUTBGQlF5eFBRVUZQTEUxQlFVY3NRMEZCUXp0VFFVTTVSVHRSUVVORUxFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMHRCUTNoRE8wbEJSVVFzTUVKQlFXZENMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlJUVkNMRTlCUVU4c1IwRkJSeXhEUVVGRE8wRkJRMllzUTBGQlF6dEJRVWRFTEZOQlFWTXNkVUpCUVhWQ0xFTkJRVU1zUjBGQmMwSTdPMGxCUTI1RUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZPMUZCUTJZc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZEY2tJN1NVRkZSQ3hKUVVGSkxFZEJRVWNzUTBGQlF5eFRRVUZUTEV0QlFVc3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zUjBGQlJ5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xRkJRemxFTEVkQlFVY3NRMEZCUXl4UlFVRlJMSGxDUVVGUkxFZEJRVWNzUTBGQlF5eFJRVUZyUWl4blFrRkJSeXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJTeERRVUZETzB0QlEzUkdPMGxCUjBRc1NVRkJUU3hGUVVGRkxFZEJRVWNzWVVGQllTeEZRVUZGTEVOQlFVTTdTVUZETTBJc1IwRkJSeXhEUVVGRExGRkJRVkVzZVVKQlFWRXNSVUZCUlN4SFFVRkxMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVVVzUTBGQlF6dEpRVVV4UXl4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSVHRSUVVVM1FpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMmhDTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4WlFVRkpMRWRCUVVNc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVsQlFVY3NaMEpCUVUwc1EwRkJReXhQUVVGUExFMUJRVWNzUTBGQlF6dFRRVU01UlR0UlFVVkVMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzWVVGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzB0QlEzaERPMGxCUlVRc01FSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVFZDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRUxGTkJRVk1zWVVGQllUdEpRVU5zUWl4SlFVRkpMRVZCUVVVc1IwRkJVU3hGUVVGRkxFTkJRVU03U1VGRGFrSXNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZCUlR0UlFVTjZReXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRMUVVNMVFqdFRRVUZOTEVsQlFVa3NUMEZCVHl4blFrRkJUU3hEUVVGRExGVkJRVlVzUzBGQlN5eFJRVUZSTEVWQlFVVTdVVUZET1VNc1JVRkJSU3hIUVVGSExHZENRVUZOTEVOQlFVTXNWVUZCVlN4RFFVRkRPMHRCUXpGQ08wbEJRMFFzVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEWkN4RFFVRkRPMEZCUlVRc1UwRkJVeXhUUVVGVExFTkJRVU1zUjBGQmJVSTdTVUZEYkVNc1IwRkJSeXhIUVVGSExHOUNRVUZ2UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRMUFzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhPMWxCUTFvc1NVRkJTU3hGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTzFsQlEyUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTk8xbEJRMnhDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1RVRkJUU3hKUVVGSkxFVkJRVVU3V1VGRGVFSXNVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhSUVVGUkxFbEJRVWtzVFVGQlRUdFpRVU5vUXl4UFFVRlBMRVZCUVZBc1ZVRkJVU3hIUVVGdlF6dG5Ra0ZEZUVNc1QwRkJUeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVJc1EwRkJRenRaUVVORUxFbEJRVWtzUlVGQlNpeFZRVUZMTEVkQlFUWkNPMmRDUVVNNVFpeHpRa0ZCV1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTI1RExFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNaQ0xFTkJRVU03V1VGRFJDeFJRVUZSTzJkQ1FVTktMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVVVGQlVTeExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRjRU1zUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmxDUVVOc1FqdG5Ra0ZEUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhYUVVGWExFVkJRVVU3YjBKQlEycENMR2xDUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVRTdhVUpCUTJwQ08xbEJRMHdzUTBGQlF6dFRRVU5LTEVOQlFVTXNRMEZCUVR0SlFVTk9MRU5CUVVNc1EwRkJReXhEUVVGQk8wRkJRMDRzUTBGQlF6dEJRVVZFTEZOQlFWTXNXVUZCV1N4RFFVRkRMRWRCUVhOQ08wbEJRM2hETEVkQlFVY3NSMEZCUnl4MVFrRkJkVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTnVReXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRMMElzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXp0WlFVTldMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUjBGQlJ6dFpRVU5hTEZGQlFWRXNSVUZCUlN4SFFVRkhMRU5CUVVNc1VVRkJVU3hKUVVGSkxFVkJRVVU3V1VGRE5VSXNTVUZCU1N4RlFVRkZMRWRCUVVjc1EwRkJReXhKUVVGSkxFbEJRVWtzUlVGQlJUdFpRVU53UWl4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExGRkJRVkU3V1VGRGRFSXNUMEZCVHl4RlFVRlFMRlZCUVZFc1IwRkJkVU03WjBKQlF6TkRMRTlCUVU4c1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNN1dVRkRSQ3hKUVVGSkxFVkJRVW9zVlVGQlN5eEhRVUUyUWp0blFrRkRPVUlzYzBKQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTnVReXhQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjJRaXhEUVVGRE8xbEJRMFFzVVVGQlVUdG5Ra0ZEU2l4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExGRkJRVkVzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUTNCRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0cFFrRkRiRUk3WjBKQlEwUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRk8yOUNRVU5xUWl4cFFrRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZCTzJsQ1FVTnFRanRaUVVOTUxFTkJRVU03VTBGRFNpeERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeFRRVUZUTEU5QlFVOHNRMEZCUXl4SFFVRnRRanRKUVVOb1F5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGREwwSXNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVVZxUWl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeEZRVUZGTzFsQlEycENMRWxCUVVrc1dVRkJXU3hIUVVGSExIRkNRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM2hETEVsQlFVa3NXVUZCV1N4RlFVRkZPMmRDUVVOa0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc1dVRkJXU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0blFrRkROMFFzVDBGQlR5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1lVRkROVUk3VTBGRFNqdFJRVVZFTEVsQlFVa3NSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSVHRaUVVOWUxITkNRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM3BDTzFGQlJVUXNkMEpCUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEZGtJc1QwRkJUeXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdVVUZEZWtJc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFVTXNSMEZCUnp0WlFVTlNMRWxCUVVrc1VVRkJVU3hIUVVGSExIbENRVUZsTEVOQlFVTXNSMEZCYzBNc1JVRkJSU3hIUVVGSExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdXVUZEZGtZc1NVRkJTU3hSUVVGUkxFbEJRVWtzU1VGQlNTeEZRVUZGTzJkQ1FVTnNRaXhQUVVGUExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0aFFVTTFRanRSUVVOTUxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRkRMRU5CUVVNN1dVRkRVQ3hQUVVGUExESkNRVUZaTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlFUdFJRVU4yUXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRKUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFZEJRWE5DTzBsQlEzUkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlF5eFBRVUZQTEVWQlFVVXNUVUZCVFR0UlFVTXZRaXhIUVVGSExFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUldwQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRVZCUVVVN1dVRkRha0lzU1VGQlNTeFpRVUZaTEVkQlFVY3NjVUpCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3haUVVGWkxFVkJRVVU3WjBKQlEyUXNTVUZCU1N4UlFVRlJMRWRCUVVjc2VVSkJRV1VzUTBGQlF5eFpRVUZaTEVWQlFVVXNSMEZCUnl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRE8yZENRVU5vUlN4UFFVRlBMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dGhRVU0xUWp0VFFVTktPMUZCUlVRc2QwSkJRV01zUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRka0lzVDBGQlR5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkROVUlzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc1IwRkJlVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkROMFlzU1VGQlNTeFJRVUZSTEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVOc1FpeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFTkJRVU03V1VGRFVDd3lRa0ZCV1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVRTdVVUZEYUVNc1EwRkJReXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEUxQlFVMHNVVUZCUVR0SlFVTk9MRTlCUVU4c1UwRkJRVHRKUVVOUUxGVkJRVlVzV1VGQlFUdERRVU5pTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdiRzloWkdsdVp5Qm1jbTl0SUNjdUxpOTFkR2xzTDJ4dllXUnBibWNuWEc1cGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCemRHRjBkWE1nWm5KdmJTQW5MaTR2YzNSdmNtVXZjM1JoZEhWekoxeHVhVzF3YjNKMElHMXZZMnROWVc1aFoyVnlJR1p5YjIwZ0p5NHZiVzlqYTAxaGJtRm5aWEluWEc1cGJYQnZjblFnWTJGamFHVk5ZVzVoWjJWeUlHWnliMjBnSnk0dlkyRmphR1ZOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnY21WemNHOXVjMlZJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ6Y0c5dWMyVklZVzVrYkdWeUoxeHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0JjSWk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2x3aVhHNXBiWEJ2Y25RZ2RYSnNJR1p5YjIwZ0p5NHVMM1YwYVd3dmRYSnNKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ1hDSXVMMlZ5Y205eVNHRnVaR3hsY2x3aU8xeHVhVzF3YjNKMElIc2dZMkYwWTJoSVlXNWtiR1Z5SUgwZ1puSnZiU0FuTGk5allYUmphRWhoYm1Sc1pYSW5PMXh1WEc0dkx5RG1vTHpsdkkvbGpKWjFjbXhjYm1aMWJtTjBhVzl1SUdadmNtMWhkQ2h2Y21sbmFXNVZjbXc2SUhOMGNtbHVaeWtnZTF4dUlDQWdJR2xtSUNodmNtbG5hVzVWY213dWMzUmhjblJ6VjJsMGFDZ25hSFIwY0NjcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnZjbWxuYVc1VmNteGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCc1pYUWdkWEpzVUdWeVptbDRJRDBnWTI5dVptbG5MblZ5YkZCbGNtWnBlRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1ZFhKc1VHVnlabWw0SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlQ0E5SUdOdmJtWnBaeTUxY214UVpYSm1hWGdvS1Z4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWNteFFaWEptYVhnZ0t5QnZjbWxuYVc1VmNtdzdYRzRnSUNBZ2ZWeHVmVnh1WEc0dkx5RG1pWURtbklub3I3Zm1zWUxsajVIbGg3cmxpWTNwbklEb3BvSGxnWnJubW9Ua3Vvdm1nNFZjYm1aMWJtTjBhVzl1SUhCeVpVUnZQRlFnWlhoMFpXNWtjeUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVQaWh2WW1vNklGUXBPaUJVSUh0Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUc5aWFpNWlaV1p2Y21WVFpXNWtJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxtSmxabTl5WlZObGJtUW9LVHRjYmlBZ0lDQjlYRzRnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1YVN4NXBXSTc3eU02WWVONWFTTjU1bTc1YjJWNks2aDVwV3dYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Y21WTWIyZHBia052ZFc1MElEMDlQU0JjSW5WdVpHVm1hVzVsWkZ3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQU0F3TzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1eVpVeHZaMmx1UTI5MWJuUXJLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjJKcUxuTm9iM2RNYjJGa2FXNW5LU0I3WEc0Z0lDQWdJQ0FnSUd4dllXUnBibWN1YzJodmR5aHZZbW91YzJodmQweHZZV1JwYm1jcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDZ2hiMkpxTG05eWFXZHBibFZ5YkNrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91YjNKcFoybHVWWEpzSUQwZ2IySnFMblZ5YkR0Y2JpQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlHWnZjbTFoZENodlltb3VkWEpzS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiMkpxTzF4dWZWeHVYRzR2THlEbW9Memx2SS9sakpibHBJVG5rSWJvcjdmbXNZTG5tb1J2WW1ybGhvWGxycmxjYm1aMWJtTjBhVzl1SUdsdWFYUnBZV3hwZW1WU1pYRjFaWE4wVDJKcUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNHBJSHRjYmx4dUlDQWdJR2xtSUNnaGIySnFMbVJoZEdFcElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1SaGRHRWdQU0I3ZlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2IySnFMbTl5YVdkcGJsVnliQ0FoUFQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVkWEpzSUNZbUlITjBZWFIxY3k1elpYTnphVzl1S1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVrWVhSaElEMGdleUF1TGk1dlltb3VaR0YwWVNCaGN5QnZZbXBsWTNRc0lGdGpiMjVtYVdjdWMyVnpjMmx2Yms1aGJXVmRPaUJ6ZEdGMGRYTXVjMlZ6YzJsdmJpQjlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcU9XeGdPV1BndWFWc08rOGpPV0ltZWEzdStXS29GeHVJQ0FnSUdOdmJuTjBJR2RrSUQwZ1oyVjBSMnh2WW1Gc1JHRjBZU2dwTzF4dUlDQWdJRzlpYWk1a1lYUmhJRDBnZXlBdUxpNW5aQ3dnTGk0dWIySnFMbVJoZEdFZ1lYTWdiMkpxWldOMElIMDdYRzVjYmlBZ0lDQnZZbW91YldWMGFHOWtJRDBnYjJKcUxtMWxkR2h2WkNCOGZDQW5SMFZVSnp0Y2JpQWdJQ0J2WW1vdVpHRjBZVlI1Y0dVZ1BTQnZZbW91WkdGMFlWUjVjR1VnZkh3Z0oycHpiMjRuTzF4dVhHNGdJQ0FnTHk4ZzVhYUM1cDZjNksrMzVyR0M1TGlONXBpdlIwVlU3N3lNNVlpWjVaeW9WVkpNNUxpdDZJZXE1WXFvNVlxZzVMaUs1NW03NWIyVjVvQ0I1WktNNVlXbzViR0E1WStDNXBXd1hHNGdJQ0FnYVdZZ0tDRmpiMjVtYVdjdVpHOU9iM1JWYzJWUmRXVnllVk4wY21sdVp5QW1KaUJ2WW1vdWJXVjBhRzlrSUNFOVBTQmNJa2RGVkZ3aUtTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z2V5QmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnWjJRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdSMWNtRjBhVzl1VW1Wd2IzSjBaWEl1YzNSaGNuUW9iMkpxS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ2WW1vN1hHNTlYRzVjYmk4dklPYWd2T1c4aitXTWx1V2toT2VRaHVTNGl1UzhvT2FXaCtTN3R1ZWFoRzlpYXVXR2hlV3V1Vnh1Wm5WdVkzUnBiMjRnYVc1cGRHbGhiR2w2WlZWd2JHOWhaRVpwYkdWUFltb29iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUdsbUlDZ2hiMkpxTG1admNtMUVZWFJoS1NCN1hHNGdJQ0FnSUNBZ0lHOWlhaTVtYjNKdFJHRjBZU0E5SUh0OU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHZZbW91YjNKcFoybHVWWEpzSUNFOVBTQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTUxY213Z0ppWWdjM1JoZEhWekxuTmxjM05wYjI0cElIdGNiaUFnSUNBZ0lDQWdiMkpxTG1admNtMUVZWFJoSUQwZ2V5QXVMaTV2WW1vdVptOXliVVJoZEdFZ1lYTWdiMkpxWldOMExDQmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeURscG9MbW5wem1uSW5saGFqbHNZRGxqNExtbGJEdnZJemxpSm5tdDd2bGlxQmNiaUFnSUNCamIyNXpkQ0JuWkNBOUlHZGxkRWRzYjJKaGJFUmhkR0VvS1R0Y2JpQWdJQ0J2WW1vdVptOXliVVJoZEdFZ1BTQjdJQzR1TG1ka0xDQXVMaTV2WW1vdVptOXliVVJoZEdFZ2ZUdGNibHh1SUNBZ0lHbG1JQ2doWTI5dVptbG5MbVJ2VG05MFZYTmxVWFZsY25sVGRISnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YkNHNTVtNzZabUc1b0NCNUxtZjViaW01WnlvZFhKczVMaUtYRzRnSUNBZ0lDQWdJR2xtSUNoemRHRjBkWE11YzJWemMybHZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiMkpxTG5WeWJDQTlJSFZ5YkM1elpYUlFZWEpoYlhNb2IySnFMblZ5YkN3Z2V5QmJZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxYVG9nYzNSaGRIVnpMbk5sYzNOcGIyNGdmU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0x5OGc1WVdvNWJHQTVZK0M1cFd3NVpDTTVwZTI1cFMrNVp5b2RYSnM1TGlLWEc0Z0lDQWdJQ0FnSUc5aWFpNTFjbXdnUFNCMWNtd3VjMlYwVUdGeVlXMXpLRzlpYWk1MWNtd3NJR2RrS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlMbk4wWVhKMEtHOWlhaWs3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiMkpxTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJuWlhSSGJHOWlZV3hFWVhSaEtDa2dlMXh1SUNBZ0lHeGxkQ0JuWkRvZ1lXNTVJRDBnZTMwN1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WjJ4dlltRnNSR0YwWVNBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHZGtJRDBnWTI5dVptbG5MbWRzYjJKaGJFUmhkR0VvS1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU0E5UFQwZ1hDSnZZbXBsWTNSY0lpa2dlMXh1SUNBZ0lDQWdJQ0JuWkNBOUlHTnZibVpwWnk1bmJHOWlZV3hFWVhSaE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdaMlE3WEc1OVhHNWNibVoxYm1OMGFXOXVJR1J2VW1WeGRXVnpkQ2h2WW1vNklFbFNaWEYxWlhOMFQzQjBhVzl1S1NCN1hHNGdJQ0FnYjJKcUlEMGdhVzVwZEdsaGJHbDZaVkpsY1hWbGMzUlBZbW9vYjJKcUtUdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lGQnliMjFwYzJVb0tISmxjMjlzZG1Vc0lISmxhbVZqZENrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0IzZUM1eVpYRjFaWE4wS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZ5YkRvZ2IySnFMblZ5YkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFNklHOWlhaTVrWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnYldWMGFHOWtPaUJ2WW1vdWJXVjBhRzlrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhR1ZoWkdWeU9pQnZZbW91YUdWaFpHVnlJSHg4SUh0OUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlWUjVjR1U2SUc5aWFpNWtZWFJoVkhsd1pTQjhmQ0FuYW5OdmJpY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0hKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1GcGJDaHlaWE02SUhkNExrZGxibVZ5WVd4RFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWeWNtOXlTR0Z1Wkd4bGNpNXplWE4wWlcxRmNuSnZjaWh2WW1vc0lISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaHlaWE1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnYjJKcUxtTnZiWEJzWlhSbElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodlltb3VjMmh2ZDB4dllXUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzloWkdsdVp5NW9hV1JsS0NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnWkc5VmNHeHZZV1JHYVd4bEtHOWlham9nU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwSUh0Y2JpQWdJQ0J2WW1vZ1BTQnBibWwwYVdGc2FYcGxWWEJzYjJGa1JtbHNaVTlpYWlodlltb3BPMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhkNExuVndiRzloWkVacGJHVW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RYSnNPaUJ2WW1vdWRYSnNMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ptbHNaVkJoZEdnNklHOWlhaTVtYVd4bFVHRjBhQ0I4ZkNBbkp5eGNiaUFnSUNBZ0lDQWdJQ0FnSUc1aGJXVTZJRzlpYWk1dVlXMWxJSHg4SUNjbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm05eWJVUmhkR0U2SUc5aWFpNW1iM0p0UkdGMFlTeGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21Wek9pQjNlQzVWY0d4dllXUkdhV3hsVTNWalkyVnpjME5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCbVlXbHNLSEpsY3pvZ2QzZ3VSMlZ1WlhKaGJFTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pYSnliM0pJWVc1a2JHVnlMbk41YzNSbGJVVnljbTl5S0c5aWFpd2djbVZ6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl0Y0d4bGRHVW9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VZMjl0Y0d4bGRHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltb3VZMjl0Y0d4bGRHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHOWlhaTV6YUc5M1RHOWhaR2x1WnlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCeVpYRjFaWE4wS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cE9pQmhibmtnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHOWlhaUE5SUhCeVpVUnZLRzlpYWlrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTV0YjJOclNuTnZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR1YwSUcxdlkydFNaWE53YjI1elpTQTlJRzF2WTJ0TllXNWhaMlZ5TG1kbGRDaHZZbW9wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0cxdlkydFNaWE53YjI1elpTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR3hsZENCeVpYTndiMjV6WlNBOUlISmxjM0J2Ym5ObFNHRnVaR3hsY2lodGIyTnJVbVZ6Y0c5dWMyVXNJRzlpYWl3Z0ozSmxjWFZsYzNRbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNoeVpYTndiMjV6WlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaUFvYjJKcUxtTmhZMmhsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqWVdOb1pVMWhibUZuWlhJdVoyVjBLRzlpYWlrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0J6WlhOemFXOXVUV0Z1WVdkbGNpNXRZV2x1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5U1pYRjFaWE4wS0c5aWFpbGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjbVZ6Y0c5dWMyVWdQU0J5WlhOd2IyNXpaVWhoYm1Sc1pYSW9jbVZ6SUdGeklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzSUc5aWFpd2dKM0psY1hWbGMzUW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhOd2IyNXpaU0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlLUzVqWVhSamFDZ29aU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR05oZEdOb1NHRnVaR3hsY2lobExDQnZZbW9zSUhKbGFtVmpkQ2xjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUIxY0d4dllXUkdhV3hsS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBPaUJoYm5rZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJRzlpYWlBOUlIQnlaVVJ2S0c5aWFpazdYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1dGIyTnJTbk52YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHMXZZMnRTWlhOd2IyNXpaU0E5SUcxdlkydE5ZVzVoWjJWeUxtZGxkQ2h2WW1vcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHMXZZMnRTWlhOd2IyNXpaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaWE53YjI1elpTQTlJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpaHRiMk5yVW1WemNHOXVjMlVzSUc5aWFpd2dKM1Z3Ykc5aFpFWnBiR1VuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2h5WlhOd2IyNXpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCelpYTnphVzl1VFdGdVlXZGxjaTV0WVdsdUtDa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHOVZjR3h2WVdSR2FXeGxLRzlpYWlsY2JpQWdJQ0FnSUNBZ2ZTa3VkR2hsYmlnb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJb2NtVnpJR0Z6SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFzSUc5aWFpd2dKM1Z3Ykc5aFpFWnBiR1VuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTndiMjV6WlNBaFBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WemNHOXVjMlVwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvWlNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyRjBZMmhJWVc1a2JHVnlLR1VzSUc5aWFpd2djbVZxWldOMEtWeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lIMHBYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0JtYjNKdFlYUXNYRzRnSUNBZ2NtVnhkV1Z6ZEN4Y2JpQWdJQ0IxY0d4dllXUkdhV3hsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlKHJlcywgb2JqLCBtZXRob2QpIHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ3VwbG9hZC1lcnJvcicsIHJlczogZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5sb2dpblRyaWdnZXIocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luQ291bnQgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVMb2dpbkNvdW50IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInVwbG9hZEZpbGVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRnVuY3Rpb24gc3VjY2Vzc0RhdGEgb2NjdXIgZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuc2V0KG9iaiwgcmVhbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSByZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnpjRzl1YzJWSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOXlaWE53YjI1elpVaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNiVVJCUVRaRE8wRkJRemRETEN0RFFVRjVRenRCUVVONlF5eDFSRUZCYVVRN1FVRkRha1FzYlVSQlFUWkRPMEZCUnpkRExGTkJRVk1zVVVGQlVTeERRVU5pTEVkQlFYbEZMRVZCUTNwRkxFZEJRWFZETEVWQlEzWkRMRTFCUVdkRE8wbEJSV2hETEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3VVVGSGVFSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhKUVVGSkxFdEJRVXNzVVVGQlVTeEZRVUZGTzFsQlF6bENMRWxCUVVrN1owSkJRMEVzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0aFFVTnVRenRaUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzJkQ1FVTlNMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzWTBGQll5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRoUVVNeFF6dFRRVU5LTzFGQlJVUXNNRUpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUlRGQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4WlFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4WlFVRlpMRXRCUVVzc1UwRkJVeXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGaExFVkJRVVU3V1VGRk4wY3NkMEpCUVdNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFpRVU0xUWl4SlFVRkpMRTFCUVUwc1MwRkJTeXhUUVVGVExFVkJRVVU3WjBKQlEzUkNMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCY1VJc1EwRkJReXhEUVVGRE8yRkJRM2hFTzJsQ1FVRk5MRWxCUVVrc1RVRkJUU3hMUVVGTExGbEJRVmtzUlVGQlJUdG5Ra0ZEYUVNc1QwRkJUeXgzUWtGQll5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRjNRaXhEUVVGRExFTkJRVU03WVVGRE9VUTdVMEZEU2p0aFFVRk5MRWxCUVVrc1owSkJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJSWGhETEVsQlFVa3NVVUZCVVN4SFFVRnpReXhGUVVGRkxFTkJRVU03V1VGRGNrUXNTVUZCU1R0blFrRkRRU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU14UXl4UlFVRlJMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU16UXp0eFFrRkJUVHR2UWtGRFNDeFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenRwUWtGRGRrSTdZVUZEU2p0WlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8yZENRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2IwTkJRVzlETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRNMFE3V1VGRFJDeEpRVUZKTEVOQlFVVXNSMEZCYzBJc1EwRkJReXhaUVVGWkxFVkJRVVU3WjBKQlJYWkRMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRia01zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRwUWtGRGVrSTdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eFJRVUZSTEVOQlFVTTdhVUpCUTI1Q08yRkJRMG83V1VGRlJDeHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTTdVMEZEYmtNN1lVRkJUVHRaUVVWSUxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNZVUZCWVN4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRkxFTkJRVUU3VTBGRGNrTTdTMEZEU2p0VFFVRk5PMUZCUlVnc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFpRVUZaTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVVc1EwRkJRVHRMUVVOd1F6dEJRVU5NTEVOQlFVTTdRVUZGUkN4clFrRkJaU3hSUVVGUkxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCeVpYRjFaWE4wU0dGdVpHeGxjaUJtY205dElDY3VMM0psY1hWbGMzUklZVzVrYkdWeUoxeHVhVzF3YjNKMElHTmhZMmhsVFdGdVlXZGxjaUJtY205dElDY3VMMk5oWTJobFRXRnVZV2RsY2lkY2JtbHRjRzl5ZENCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5SUdaeWIyMGdKeTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaWRjYm1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUwzTmxjM05wYjI1TllXNWhaMlZ5SjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bWRXNWpkR2x2YmlCeVpYTndiMjV6WlNoY2JpQWdJQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTEZ4dUlDQWdJRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Yml4Y2JpQWdJQ0J0WlhSb2IyUTZJRndpY21WeGRXVnpkRndpSUh3Z1hDSjFjR3h2WVdSR2FXeGxYQ0pjYmlrNklHRnVlU0I3WEc0Z0lDQWdhV1lnS0hKbGN5NXpkR0YwZFhORGIyUmxJRDA5UFNBeU1EQXBJSHRjYmx4dUlDQWdJQ0FnSUNBdkx5RGxoYnpscnJsMWNHeHZZV1JHYVd4bDZMK1U1WnVlNTVxRWNtVnpMbVJoZEdIbGo2L29nNzNtbUsvbHJaZm5yS2JrdUxKY2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnlaWE11WkdGMFlTQTlQVDBnWENKemRISnBibWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE11WkdGMFlTQTlJRXBUVDA0dWNHRnljMlVvY21WekxtUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJSHNnZEhsd1pUb2dKM1Z3Ykc5aFpDMWxjbkp2Y2ljc0lISmxjem9nWlNCOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNWxibVFvYjJKcUtUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG14dloybHVWSEpwWjJkbGNpRW9jbVZ6TG1SaGRHRXBJQ1ltSUc5aWFpNXlaVXh2WjJsdVEyOTFiblFnSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUJ2WW1vdWNtVk1iMmRwYmtOdmRXNTBJRHdnWTI5dVptbG5MbkpsVEc5bmFXNU1hVzFwZENFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVhQWdlV2tzZWFWaU8rOGpPUzRsT21IamVpdmxlYXNvZWFWc09TNGplaTJoZWkvaCttRmplZTlybHh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnpjMmx2YmsxaGJtRm5aWEl1WkdWc1UyVnpjMmx2YmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0p5WlhGMVpYTjBYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WeGRXVnpkRWhoYm1Sc1pYSXVjbVZ4ZFdWemRDaHZZbW9nWVhNZ1NWSmxjWFZsYzNSUGNIUnBiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h0WlhSb2IyUWdQVDA5SUZ3aWRYQnNiMkZrUm1sc1pWd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsY1hWbGMzUklZVzVrYkdWeUxuVndiRzloWkVacGJHVW9iMkpxSUdGeklFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjVtYVdjdWMzVmpZMlZ6YzFSeWFXZG5aWElvY21WekxtUmhkR0VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbWpxWGxqNlBvdjVUbG01N21pSkRsaXAvbm9JRmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaV0ZzUkdGMFlUb2djM1J5YVc1bklId2dTVUZ1ZVU5aWFtVmpkQ0I4SUVGeWNtRjVRblZtWm1WeUlEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMzVmpZMlZ6YzBSaGRHRWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WaGJFUmhkR0VnUFNCamIyNW1hV2N1YzNWalkyVnpjMFJoZEdFb2NtVnpMbVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnY21WekxtUmhkR0U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9YQ0pHZFc1amRHbHZiaUJ6ZFdOalpYTnpSR0YwWVNCdlkyTjFjaUJsY25KdmNqb2dYQ0lnS3lCbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaEtHOWlhaUJoY3lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWt1Ym05RFlXTm9aVVpzWVhOb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1TGk2NUxxRzVMK2Q2SytCNmFHMTZaMmk1TGlONlplcTU0T0I3N3lNNVlpWjVMaU41WnVlNkxDRDc3eU01WStxNXBpdjU3eVQ1YTJZNXB5QTVwYXc1cFd3NW8ydTc3eU01YjZGNUxpTDVxeWg2TCtiNVlXbDVZYU41NVNvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VjM1ZqWTJWemN5QTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZoYkVSaGRHRTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU3eVQ1YTJZNWEyWTVZS29YRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVjMlYwS0c5aWFpd2djbVZoYkVSaGRHRXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNWFTeDZMU2w1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkc2IyZHBZeTFsY25KdmNpY3NJSEpsY3lCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5Qm9kSFJ3YytpL2xPV2JudWVLdHVhQWdlZWdnZW1kbmpJd01GeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkb2RIUndMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElISmxjM0J2Ym5ObE8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIGNoZWNrU2Vzc2lvblByb21pc2UgPSBudWxsO1xuZnVuY3Rpb24gY2hlY2tTZXNzaW9uKCkge1xuICAgIGlmICghY2hlY2tTZXNzaW9uUHJvbWlzZSkge1xuICAgICAgICBjaGVja1Nlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5jaGVja1Nlc3Npb24oKVwiKTtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgd3guY2hlY2tTZXNzaW9uKHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfY2hlY2tTZXNzaW9uJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tTZXNzaW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSB7XG4gICAgaWYgKCFzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpID4gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKSB7XG4gICAgICAgIGRlbFNlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrTG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKGlzU2Vzc2lvbkV4cGlyZU9yRW1wdHkoKSkge1xuICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZG9Mb2dpbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG52YXIgbG9naW5Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGRvTG9naW4oKSB7XG4gICAgaWYgKCFsb2dpblByb21pc2UpIHtcbiAgICAgICAgbG9naW5Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgbG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2dpblByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbG9naW5Qcm9taXNlO1xufVxuZnVuY3Rpb24gbG9naW4oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3d4LmxvZ2luJyk7XG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGUyU2Vzc2lvbihyZXMuY29kZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VbY29kZSDojrflj5blpLHotKVdXCIgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnJlcG9ydCgnd3hfbG9naW4nLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogcmVzLmVyck1zZyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRTZXNzaW9uKHNlc3Npb24pIHtcbiAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXksXG4gICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgZGF0YTogc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uXG4gICAgfSk7XG59XG5mdW5jdGlvbiBjb2RlMlNlc3Npb24oY29kZSkge1xuICAgIHZhciBkYXRhO1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uZGF0YSB8fCB7fTtcbiAgICB9XG4gICAgZGF0YVtjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uY29kZU5hbWVdID0gY29kZTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICB1cmw6IHJlcXVlc3RIYW5kbGVyXzEuZGVmYXVsdC5mb3JtYXQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnVybCksXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24ucmVwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5zdWNjZXNzKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24gPSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdHJpbmcoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd3guc2V0U3RvcmFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmdldEVycm9yTXNnKHJlcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHsgdGl0bGU6IFwi55m75b2V5aSx6LSlXCIsIFwiY29udGVudFwiOiBcIuivt+eojeWQjumHjeivlVwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlbFNlc3Npb24oKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gJyc7XG4gICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZVxuICAgIH0pO1xuICAgIGlmIChjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lICYmIGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSBJbmZpbml0eTtcbiAgICAgICAgd3gucmVtb3ZlU3RvcmFnZSh7XG4gICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleVxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtYWluKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHJldHVybiBjaGVja0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnXzEuZGVmYXVsdC5kb05vdENoZWNrU2Vzc2lvbiA/IFByb21pc2UucmVzb2x2ZSgpIDogY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gX2EudGl0bGUsIGNvbnRlbnQgPSBfYS5jb250ZW50O1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5kb0Vycm9yKHRpdGxlLCBjb250ZW50KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmRvRXJyb3IodGl0bGUsIGNvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiB0aXRsZSwgY29udGVudDogY29udGVudCB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgbWFpbjogbWFpbixcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uLFxuICAgIGRlbFNlc3Npb246IGRlbFNlc3Npb25cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlZ6YzJsdmJrMWhibUZuWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12Ylc5a2RXeGxMM05sYzNOcGIyNU5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREJEUVVGdlF6dEJRVU53UXl3clEwRkJlVU03UVVGRGVrTXNkVVJCUVdsRU8wRkJRMnBFTEcxRVFVRTJRenRCUVVNM1F5d3lRMEZCY1VNN1FVRkhja01zU1VGQlNTeHRRa0ZCYlVJc1IwRkJVU3hKUVVGSkxFTkJRVU03UVVGRmNFTXNVMEZCVXl4WlFVRlpPMGxCUTJwQ0xFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSVHRSUVVOMFFpeHRRa0ZCYlVJc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMWxCUXpsRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFpRVU5xUXl4SlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTI1RExFVkJRVVVzUTBGQlF5eFpRVUZaTEVOQlFVTTdaMEpCUTFvc1QwRkJUenR2UWtGRlNDeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMmRDUVVOeVFpeERRVUZETzJkQ1FVTkVMRWxCUVVrc1JVRkJTanR2UWtGRlNTeFZRVUZWTEVWQlFVVXNRMEZCUXp0dlFrRkRZaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRiRUlzVDBGQlR5eFBRVUZQTEVWQlFVVXNRMEZCUXp0dlFrRkRja0lzUTBGQlF5eEZRVUZGTEZWQlFVTXNSMEZCVVR0M1FrRkRVaXhQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0dlFrRkRka0lzUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTFBc1EwRkJRenRuUWtGRFJDeFJRVUZSTzI5Q1FVTktMRWxCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN2IwSkJRMnBETERCQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUXpORUxFTkJRVU03WVVGRFNpeERRVUZETEVOQlFVRTdVVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRMUVVOTU8wbEJRMFFzVDBGQlR5eHRRa0ZCYlVJc1EwRkJRenRCUVVNdlFpeERRVUZETzBGQlIwUXNVMEZCVXl4elFrRkJjMEk3U1VGRE0wSXNTVUZCU1N4RFFVRkRMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFGQlJXcENMRTlCUVU4c1NVRkJTU3hEUVVGQk8wdEJRMlE3U1VGRFJDeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1JVRkJSVHRSUVVWNlJTeFZRVUZWTEVWQlFVVXNRMEZCUXp0UlFVTmlMRTlCUVU4c1NVRkJTU3hEUVVGQk8wdEJRMlE3U1VGRFJDeFBRVUZQTEV0QlFVc3NRMEZCUVR0QlFVTm9RaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTzBsQlEyWXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRWxCUVVrc2MwSkJRWE5DTEVWQlFVVXNSVUZCUlR0WlFVVXhRaXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhIUVVGSExFbEJRVWtzUTBGQlF6dFpRVU5vUXl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEYkVJc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dFpRVU55UWl4RFFVRkRMRVZCUVVVc1ZVRkJReXhIUVVGUk8yZENRVU5TTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM1pDTEVOQlFVTXNRMEZCUXl4RFFVRkJPMU5CUTB3N1lVRkJUVHRaUVVWSUxFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdVMEZEY0VJN1NVRkRUQ3hEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZIUkN4SlFVRkpMRmxCUVZrc1IwRkJVU3hKUVVGSkxFTkJRVU03UVVGRk4wSXNVMEZCVXl4UFFVRlBPMGxCUTFvc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJUdFJRVU5tTEZsQlFWa3NSMEZCUnl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFsQlEzWkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEVkN4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRE8yZENRVU53UWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRM0pDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFZEJRVWM3WjBKQlExUXNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJRenRuUWtGRGNFSXNhVUpCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dG5Ra0ZEWml4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU4yUWl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOUUxFTkJRVU1zUTBGQlF5eERRVUZCTzB0QlEwdzdTVUZEUkN4UFFVRlBMRmxCUVZrc1EwRkJRenRCUVVONFFpeERRVUZETzBGQlJVUXNVMEZCVXl4TFFVRkxPMGxCUTFZc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRlRUlzU1VGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU51UXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRE8xbEJRMHdzVDBGQlR5eFpRVUZETEVkQlFVYzdaMEpCUTFBc1NVRkJTU3hIUVVGSExFTkJRVU1zU1VGQlNTeEZRVUZGTzI5Q1FVTldMRmxCUVZrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPM2RDUVVONFFpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1ZVRkJReXhIUVVGSE8zZENRVU5VTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU4yUWl4RFFVRkRMRU5CUVVNc1EwRkJRVHRwUWtGRFREdHhRa0ZCVFR0dlFrRkRTQ3hQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1UwRkJVeXhGUVVGRkxHdENRVUZyUWl4RlFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRGFrVTdXVUZEVEN4RFFVRkRPMWxCUTBRc1VVRkJVVHRuUWtGRFNpeEpRVUZOTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzJkQ1FVTnFReXd3UWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTndSQ3hEUVVGRE8xbEJRMFFzU1VGQlNTeFpRVUZETEVkQlFVYzdaMEpCUTBvc1QwRkJUeXhOUVVGTkxFTkJRVU1zUlVGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhSQ3hEUVVGRE8xTkJRMG9zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNUMEZCWlR0SlFVTXZRaXhuUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNN1NVRkZla0lzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTTdTVUZGYUVNc1NVRkJTU3huUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVU3VVVGRGNrUXNaMEpCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhEUVVGRE8xRkJRM1pGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1dVRkRWaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3V1VGRE5VSXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXp0VFFVTnlReXhEUVVGRExFTkJRVUU3UzBGRFREdEpRVU5FTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN1VVRkRWaXhIUVVGSExFVkJRVVVzWjBKQlFVMHNRMEZCUXl4WFFVRnhRanRSUVVOcVF5eEpRVUZKTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhQUVVGUE8wdEJRM1pDTEVOQlFVTXNRMEZCUXp0QlFVTlFMRU5CUVVNN1FVRkZSQ3hUUVVGVExGbEJRVmtzUTBGQlF5eEpRVUZaTzBsQlF6bENMRWxCUVVrc1NVRkJVeXhEUVVGRE8wbEJSV1FzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYWtRc1NVRkJTU3hIUVVGSExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wdEJRM1JETzFOQlFVMDdVVUZEU0N4SlFVRkpMRWRCUVVjc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJRenRMUVVNeFF6dEpRVU5FTEVsQlFVa3NRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZUTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1NVRkZOVU1zVDBGQlR5eEpRVUZKTEU5QlFVOHNRMEZCUXl4VlFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTk8xRkJReTlDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZEYWtNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU5RTEVkQlFVY3NSVUZCUlN4M1FrRkJZeXhEUVVGRExFMUJRVTBzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU03V1VGRGNFUXNTVUZCU1N4TlFVRkJPMWxCUTBvc1RVRkJUU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTFCUVUwc1NVRkJTU3hMUVVGTE8xbEJRelZETEU5QlFVOHNSVUZCVUN4VlFVRlJMRWRCUVc5RE8yZENRVU40UXl4SlFVRkpMRWRCUVVjc1EwRkJReXhWUVVGVkxFdEJRVXNzUjBGQlJ5eEZRVUZGTzI5Q1FVVjRRaXhKUVVGSkxHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTFCUVUwc1JVRkJSVHQzUWtGRE4wSXNTVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0M1FrRkRMMElzTUVKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hMUVVGTExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVRTdjVUpCUTI1Rk8yOUNRVVZFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenR2UWtGRFdDeEpRVUZKTzNkQ1FVTkJMRU5CUVVNc1IwRkJSeXhuUWtGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzNGQ1FVTTVRenR2UWtGQlF5eFBRVUZQTEVOQlFVTXNSVUZCUlR0eFFrRkRXRHR2UWtGRlJDeEpRVUZKTEVOQlFVTXNSVUZCUlR0M1FrRkRTQ3huUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNN2QwSkJSVzVDTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRPM2RDUVVWb1F5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhuUWtGQlowSXNSVUZCUlRzMFFrRkRja1FzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNSMEZCUnl4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4RFFVRkRPelJDUVVOMlJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRPMmREUVVOV0xFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMR2RDUVVGblFqdG5RMEZETlVJc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJRenMyUWtGRGNrTXNRMEZCUXl4RFFVRkJPM2xDUVVOTU8zZENRVU5FTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNN05FSkJRMVlzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1YwRkJWenMwUWtGRGRrSXNTVUZCU1N4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVDBGQlR6dDVRa0ZEZGtJc1EwRkJReXhEUVVGRE8zZENRVU5JTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNN2NVSkJRM0JDTzNsQ1FVRk5PM2RDUVVOSUxFOUJRVThzVFVGQlRTeERRVUZETEhOQ1FVRlpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdjVUpCUTJoRU8ybENRVU5LTzNGQ1FVRk5PMjlDUVVOSUxFOUJRVThzVFVGQlRTeERRVUZETEVWQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZETEVOQlFVTXNRMEZCUXp0cFFrRkRkRVE3V1VGRFRDeERRVUZETzFsQlEwUXNVVUZCVVR0WlFVTlNMRU5CUVVNN1dVRkRSQ3hKUVVGSkxFVkJRVVU3WjBKQlEwWXNUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRE8xbEJRM1pFTEVOQlFVTTdVMEZEU2l4RFFVRkRMRU5CUVVFN1NVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZIUkN4VFFVRlRMRlZCUVZVN1NVRkRaaXhuUWtGQlRTeERRVUZETEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRjRUlzUlVGQlJTeERRVUZETEdGQlFXRXNRMEZCUXp0UlFVTmlMRWRCUVVjc1JVRkJSU3huUWtGQlRTeERRVUZETEZkQlFYRkNPMHRCUTNCRExFTkJRVU1zUTBGQlF6dEpRVU5JTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhwUWtGQmFVSXNTVUZCU1N4blFrRkJUU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTNKRUxHZENRVUZOTEVOQlFVTXNZVUZCWVN4SFFVRkhMRkZCUVZFc1EwRkJRenRSUVVOb1F5eEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUTJJc1IwRkJSeXhGUVVGRkxHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ08xTkJReTlDTEVOQlFVTXNRMEZCUVR0TFFVTk1PMEZCUTB3c1EwRkJRenRCUVVWRUxGTkJRVk1zU1VGQlNUdEpRVU5VTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFJRVU12UWl4UFFVRlBMRlZCUVZVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU55UWl4UFFVRlBMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVUU3VVVGRGVFVXNRMEZCUXl4RlFVRkZMRlZCUVVNc1JVRkJaMEk3WjBKQlFXWXNaMEpCUVVzc1JVRkJSU3h2UWtGQlR6dFpRVU5tTEhOQ1FVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTnlReXhQUVVGUExFMUJRVTBzUTBGQlF5eEZRVUZETEV0QlFVc3NUMEZCUVN4RlFVRkZMRTlCUVU4c1UwRkJRU3hGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRFNpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUTNKQ0xFTkJRVU1zUlVGQlJTeFZRVUZETEVWQlFXZENPMmRDUVVGbUxHZENRVUZMTEVWQlFVVXNiMEpCUVU4N1dVRkRaaXh6UWtGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRGNrTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1JVRkJReXhMUVVGTExFOUJRVUVzUlVGQlJTeFBRVUZQTEZOQlFVRXNSVUZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRU1zUTBGQlF5eERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeHJRa0ZCWlR0SlFVTllMRWxCUVVrc1RVRkJRVHRKUVVOS0xGVkJRVlVzV1VGQlFUdEpRVU5XTEZWQlFWVXNXVUZCUVR0RFFVTmlMRU5CUVVFaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2MzUmhkSFZ6SUdaeWIyMGdKeTR1TDNOMGIzSmxMM04wWVhSMWN5ZGNibWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJQ2N1TDJWeWNtOXlTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUlHWnliMjBnSnk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2lkY2JtbHRjRzl5ZENCeVpYRjFaWE4wU0dGdVpHeGxjaUJtY205dElDY3VMM0psY1hWbGMzUklZVzVrYkdWeUoxeHVhVzF3YjNKMElHeHZZV1JwYm1jZ1puSnZiU0FuTGk0dmRYUnBiQzlzYjJGa2FXNW5KMXh1WEc0dktpRG5sSi9sa2IzbGtham1uSi9saG9YbGo2cmxnWnJrdUlEbXJLSG5tb1JqYUdWamExTmxjM05wYjI0Z0tpOWNibXhsZENCamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObE9pQmhibmtnUFNCdWRXeHNPMXh1WEc1bWRXNWpkR2x2YmlCamFHVmphMU5sYzNOcGIyNG9LU0I3WEc0Z0lDQWdhV1lnS0NGamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObEtTQjdYRzRnSUNBZ0lDQWdJR05vWldOclUyVnpjMmx2YmxCeWIyMXBjMlVnUFNCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExteHZaeWhjSW5kNExtTm9aV05yVTJWemMybHZiaWdwWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjM1JoY25RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIZDRMbU5vWldOclUyVnpjMmx2YmloN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU1bTc1YjJWNW9DQjVweUo1cFdJNzd5TTVMaVU1WnlvNXB5czU1U2Y1Wkc5NVpHbzVweWY1WWFGNXBlZzZhRzc1WWFONXFPQTZhcU01THFHWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlEbm1idmx2WlhtZ0lIb3Y0Zm1uSjljYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHVnNVMlZ6YzJsdmJpZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkc5TWIyZHBiaWdwTG5Sb1pXNG9LQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3dnS0hKbGN6b2dZVzU1S1QwK2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JsYm1RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlZWFJwYjI1U1pYQnZjblJsY2k1eVpYQnZjblFvSjNkNFgyTm9aV05yVTJWemMybHZiaWNzSUhOMFlYSjBMQ0JsYm1RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJqYUdWamExTmxjM05wYjI1UWNtOXRhWE5sTzF4dWZWeHVYRzR2S2lEbGlLVG1scTF6WlhOemFXOXU1cGl2NVpDbTVMaTY1Nm02NW9pVzViZXk2TCtINXB5ZklDb3ZYRzVtZFc1amRHbHZiaUJwYzFObGMzTnBiMjVGZUhCcGNtVlBja1Z0Y0hSNUtDa2dlMXh1SUNBZ0lHbG1JQ2doYzNSaGRIVnpMbk5sYzNOcGIyNHBJSHRjYmlBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNTd5VDVhMlk1TGl0NXJLaDVweUpjMlZ6YzJsdmJseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaVnh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwSUQ0Z2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVXBJSHRjYmlBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjZLNis1NzJ1NXB5czVaeXdjMlZ6YzJsdmJ1ZThrK1d0bU9hWHR1bVh0Tys4ak9TNGxPZThrK1d0bU9hWHR1bVh0T1czc3VXSXNGeHVJQ0FnSUNBZ0lDQmtaV3hUWlhOemFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwY25WbFhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlZ4dWZWeHVYRzVtZFc1amRHbHZiaUJqYUdWamEweHZaMmx1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR2xtSUNocGMxTmxjM05wYjI1RmVIQnBjbVZQY2tWdGNIUjVLQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SU9heW9lYWNpZWVadSttWmh1YUFnZSs4ak9TNGplbWNnT2ltZ2VXR2pXTm9aV05yVTJWemMybHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCa2IweHZaMmx1S0NrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc0lDaHlaWE02SUdGdWVTazlQbnRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1N3lUNWEyWTVMaXQ1cHlKYzJWemMybHZidVM0bE9hY3F1aS9oK2FjbjF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lIMHBYRzU5WEc1Y2JpOHFJT2VadSttWmh1YTFnZWVvaStlYWhIQnliMjFwYzJVZ0tpOWNibXhsZENCc2IyZHBibEJ5YjIxcGMyVTZJR0Z1ZVNBOUlHNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHUnZURzluYVc0b0tTQjdYRzRnSUNBZ2FXWWdLQ0ZzYjJkcGJsQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lDQWdiRzluYVc1UWNtOXRhWE5sSUQwZ2JtVjNJRkJ5YjIxcGMyVW9LSEpsYzI5c2RtVXNJSEpsYW1WamRDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiRzluYVc0b0tTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJkcGJsQnliMjFwYzJVZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLUzVqWVhSamFDZ29jbVZ6S1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzluYVc1UWNtOXRhWE5sSUQwZ2JuVnNiRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0hKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUd4dloybHVVSEp2YldselpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOW5hVzRvS1NCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNXNiMmNvSjNkNExteHZaMmx1SnlrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhOMFlYSjBJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lIZDRMbXh2WjJsdUtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhOMVkyTmxjM01vY21WektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hKbGN5NWpiMlJsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052WkdVeVUyVnpjMmx2YmloeVpYTXVZMjlrWlNrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpiMngyWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvY21WektTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVNklGd2k1NW03NWIyVjVhU3g2TFNsWENJc0lGd2lZMjl1ZEdWdWRGd2lPaUJjSXVpdnQrZW9qZVdRanVtSGplaXZsVnRqYjJSbElPaU90K1dQbHVXa3NlaTBwVjFjSW4wcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjIxd2JHVjBaU2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JsYm1RZ1BTQnVaWGNnUkdGMFpTZ3BMbWRsZEZScGJXVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlMbkpsY0c5eWRDZ25kM2hmYkc5bmFXNG5MQ0J6ZEdGeWRDd2daVzVrS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1ZV2xzS0hKbGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2UzUnBkR3hsT2lCY0l1ZVp1K1c5bGVXa3NlaTBwVndpTENCY0ltTnZiblJsYm5SY0lqb2djbVZ6TG1WeWNrMXpaMzBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSE5sZEZObGMzTnBiMjRvYzJWemMybHZiam9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdjM1JoZEhWekxuTmxjM05wYjI0Z1BTQnpaWE56YVc5dU8xeHVJQ0FnSUM4dklPYU5vdVdibnVhZHBlZWFoSE5sYzNOcGIyN3Z2SXprdUkzcG5JRG9wb0hsaG8xamFHVmphMU5sYzNOcGIyNWNiaUFnSUNCamIyNW1hV2N1Wkc5T2IzUkRhR1ZqYTFObGMzTnBiMjRnUFNCMGNuVmxPMXh1SUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZWl1dnVlOXJ1YWNyT1djc0hObGMzTnBiMjdvdjRmbW5KL21sN2JwbDdSY2JpQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVlVhVzFsSUNZbUlHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrZ0t5QmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVN1hHNGdJQ0FnSUNBZ0lIZDRMbk5sZEZOMGIzSmhaMlVvZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUZOMGNtbHVaeWh6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNsY2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOVhHNGdJQ0FnZDNndWMyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJR3RsZVRvZ1kyOXVabWxuTG5ObGMzTnBiMjVPWVcxbElHRnpJSE4wY21sdVp5eGNiaUFnSUNBZ0lDQWdaR0YwWVRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVjYmlBZ0lDQjlLVHRjYm4xY2JseHVablZ1WTNScGIyNGdZMjlrWlRKVFpYTnphVzl1S0dOdlpHVTZJSE4wY21sdVp5a2dlMXh1SUNBZ0lHeGxkQ0JrWVhSaE9pQmhibms3WEc0Z0lDQWdMeThnWTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoNXBTdjVveUI1WWU5NXBXd1hHNGdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWtZWFJoSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ1pHRjBZU0E5SUdOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxtUmhkR0VvS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JrWVhSaElEMGdZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1WkdGMFlTQjhmQ0I3ZlR0Y2JpQWdJQ0I5WEc0Z0lDQWdaR0YwWVZ0amIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNWpiMlJsVG1GdFpTRmRJRDBnWTI5a1pUdGNibHh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUd4bGRDQnpkR0Z5ZENBOUlHNWxkeUJFWVhSbEtDa3VaMlYwVkdsdFpTZ3BPMXh1SUNBZ0lDQWdJQ0IzZUM1eVpYRjFaWE4wS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZ5YkRvZ2NtVnhkV1Z6ZEVoaGJtUnNaWEl1Wm05eWJXRjBLR052Ym1acFp5NWpiMlJsVkc5VFpYTnphVzl1TG5WeWJDa3NYRzRnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2JXVjBhRzlrT2lCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNXRaWFJvYjJRZ2ZId2dKMGRGVkNjc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZFdOalpYTnpLSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaHlaWE11YzNSaGRIVnpRMjlrWlNBOVBUMGdNakF3S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SU9pQWwrYVh0dVM0aXVhS3BWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVjbVZ3YjNKMEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWlc1a0lEMGdibVYzSUVSaGRHVW9LUzVuWlhSVWFXMWxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrZFhKaGRHbHZibEpsY0c5eWRHVnlMbkpsY0c5eWRDaGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV5WlhCdmNuUXNJSE4wWVhKMExDQmxibVFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdjeUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpJRDBnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWMzVmpZMlZ6Y3loeVpYTXVaR0YwWVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h6S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRHRjBkWE11YzJWemMybHZiaUE5SUhNN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG1qYUxsbTU3bW5hWG5tb1J6WlhOemFXOXU3N3lNNUxpTjZaeUE2S2FCNVlhTlkyaGxZMnRUWlhOemFXOXVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjVtYVdjdVpHOU9iM1JEYUdWamExTmxjM05wYjI0Z1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzVhYUM1cDZjNXB5SjZLNis1NzJ1NXB5czVaeXdjMlZ6YzJsdmJ1aS9oK2FjbithWHR1bVh0Rnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFZHbHRaU0FtSmlCamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpVdGxlU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWFIxY3k1elpYTnphVzl1Ulhod2FYSmxJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrZ0t5QmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVlJwYldVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkM2d1YzJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRTZJRk4wY21sdVp5aHpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2QzZ3VjMlYwVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJqYjI1bWFXY3VjMlZ6YzJsdmJrNWhiV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZVG9nYzNSaGRIVnpMbk5sYzNOcGIyNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb1pYSnliM0pJWVc1a2JHVnlMbWRsZEVWeWNtOXlUWE5uS0hKbGN5a3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RHbDBiR1U2SUZ3aTU1bTc1YjJWNWFTeDZMU2xYQ0lzSUZ3aVkyOXVkR1Z1ZEZ3aU9pQmNJdWl2dCtlb2plV1FqdW1IamVpdmxWd2lmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiWEJzWlhSbEtDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdaaGFXdzZJQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0h0MGFYUnNaVG9nWENMbm1idmx2WlhscExIb3RLVmNJaXdnWENKamIyNTBaVzUwWENJNklGd2k2SyszNTZpTjVaQ082WWVONksrVlhDSjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNHZLaURtdUlYbnFicHpaWE56YVc5dUlDb3ZYRzVtZFc1amRHbHZiaUJrWld4VFpYTnphVzl1S0NrZ2UxeHVJQ0FnSUhOMFlYUjFjeTV6WlhOemFXOXVJRDBnSnljN1hHNGdJQ0FnZDNndWNtVnRiM1psVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxJR0Z6SUhOMGNtbHVaMXh1SUNBZ0lIMHBPMXh1SUNBZ0lHbG1JQ2hqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVWdKaVlnWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3BJSHRjYmlBZ0lDQWdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNUZlSEJwY21VZ1BTQkpibVpwYm1sMGVUdGNiaUFnSUNBZ0lDQWdkM2d1Y21WdGIzWmxVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNCclpYazZJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNVhHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCdFlXbHVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCamFHVmphMHh2WjJsdUtDa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyOXVabWxuTG1SdlRtOTBRMmhsWTJ0VFpYTnphVzl1SUQ4Z1VISnZiV2x6WlM1eVpYTnZiSFpsS0NrZ09pQmphR1ZqYTFObGMzTnBiMjRvS1Z4dUlDQWdJQ0FnSUNCOUxDQW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdaWEp5YjNKSVlXNWtiR1Z5TG1SdlJYSnliM0lvZEdsMGJHVXNJR052Ym5SbGJuUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEdsMGJHVXNJR052Ym5SbGJuUjlLVHRjYmlBZ0lDQWdJQ0FnZlNrdWRHaGxiaWdvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemIyeDJaU2dwTzF4dUlDQWdJQ0FnSUNCOUxDQW9lM1JwZEd4bExDQmpiMjUwWlc1MGZTazlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2toaGJtUnNaWEl1Wkc5RmNuSnZjaWgwYVhSc1pTd2dZMjl1ZEdWdWRDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSHQwYVhSc1pTd2dZMjl1ZEdWdWRIMHBPMXh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElIdGNiaUFnSUNCdFlXbHVMRnh1SUNBZ0lITmxkRk5sYzNOcGIyNHNYRzRnSUNBZ1pHVnNVMlZ6YzJsdmJseHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGRlZmF1bHRDb25maWcgPSB7XG4gICAgc2Vzc2lvbk5hbWU6IFwic2Vzc2lvblwiLFxuICAgIGxvZ2luVHJpZ2dlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBjb2RlVG9TZXNzaW9uOiB7XG4gICAgICAgIHVybDogXCJcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkgeyB9XG4gICAgfSxcbiAgICBzdWNjZXNzVHJpZ2dlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHVybFBlcmZpeDogXCJcIixcbiAgICBkb05vdENoZWNrU2Vzc2lvbjogZmFsc2UsXG4gICAgZXJyb3JUaXRsZTogXCLmk43kvZzlpLHotKVcIixcbiAgICBlcnJvckNvbnRlbnQ6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIHJlTG9naW5MaW1pdDogMyxcbiAgICBlcnJvckNhbGxiYWNrOiBudWxsLFxuICAgIHJlcG9ydENHSTogZmFsc2UsXG4gICAgbW9ja0pzb246IGZhbHNlLFxuICAgIGdsb2JhbERhdGE6IGZhbHNlLFxuICAgIHNlc3Npb25FeHBpcmVLZXk6IFwic2Vzc2lvbkV4cGlyZUtleVwiXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdENvbmZpZztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyOXVabWxuTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwyTnZibVpwWnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVVZCTEVsQlFVMHNZVUZCWVN4SFFVRm5RanRKUVVNdlFpeFhRVUZYTEVWQlFVVXNVMEZCVXp0SlFVTjBRaXhaUVVGWk8xRkJRMUlzVDBGQlR5eExRVUZMTEVOQlFVRTdTVUZEYUVJc1EwRkJRenRKUVVORUxHRkJRV0VzUlVGQlJUdFJRVU5ZTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1QwRkJUeXhGUVVGRkxHTkJRVTBzUTBGQlF6dExRVU51UWp0SlFVTkVMR05CUVdNN1VVRkRWaXhQUVVGUExFbEJRVWtzUTBGQlFUdEpRVU5tTEVOQlFVTTdTVUZEUkN4VFFVRlRMRVZCUVVVc1JVRkJSVHRKUVVOaUxHbENRVUZwUWl4RlFVRkZMRXRCUVVzN1NVRkRlRUlzVlVGQlZTeEZRVUZGTEUxQlFVMDdTVUZEYkVJc1dVRkJXU3hGUVVGYUxGVkJRV0VzUjBGQlVUdFJRVU5xUWl4UFFVRlBMRWRCUVVjc1EwRkJRVHRKUVVOa0xFTkJRVU03U1VGRFJDeFpRVUZaTEVWQlFVVXNRMEZCUXp0SlFVTm1MR0ZCUVdFc1JVRkJSU3hKUVVGSk8wbEJRMjVDTEZOQlFWTXNSVUZCUlN4TFFVRkxPMGxCUTJoQ0xGRkJRVkVzUlVGQlJTeExRVUZMTzBsQlEyWXNWVUZCVlN4RlFVRkZMRXRCUVVzN1NVRkZha0lzWjBKQlFXZENMRVZCUVVVc2EwSkJRV3RDTzBOQlEzWkRMRU5CUVVNN1FVRkZSaXhyUWtGQlpTeGhRVUZoTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJKU1c1cGRFOXdkR2x2YmlCOUlHWnliMjBnSnk0dUwybHVkR1Z5Wm1GalpTZGNibHh1WTI5dWMzUWdaR1ZtWVhWc2RFTnZibVpwWnpvZ1NVbHVhWFJQY0hScGIyNGdQU0I3WEc0Z0lDQWdjMlZ6YzJsdmJrNWhiV1U2SUZ3aWMyVnpjMmx2Ymx3aUxGeHVJQ0FnSUd4dloybHVWSEpwWjJkbGNpZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObFhHNGdJQ0FnZlN4Y2JpQWdJQ0JqYjJSbFZHOVRaWE56YVc5dU9pQjdYRzRnSUNBZ0lDQWdJSFZ5YkRvZ1hDSmNJaXhjYmlBZ0lDQWdJQ0FnYzNWalkyVnpjem9nS0NrOVBpQjdmVnh1SUNBZ0lIMHNYRzRnSUNBZ2MzVmpZMlZ6YzFSeWFXZG5aWElvS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBZ2ZTeGNiaUFnSUNCMWNteFFaWEptYVhnNklGd2lYQ0lzWEc0Z0lDQWdaRzlPYjNSRGFHVmphMU5sYzNOcGIyNDZJR1poYkhObExGeHVJQ0FnSUdWeWNtOXlWR2wwYkdVNklGd2k1cE9ONUwyYzVhU3g2TFNsWENJc1hHNGdJQ0FnWlhKeWIzSkRiMjUwWlc1MEtISmxjem9nWVc1NUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE5jYmlBZ0lDQjlMRnh1SUNBZ0lISmxURzluYVc1TWFXMXBkRG9nTXl4Y2JpQWdJQ0JsY25KdmNrTmhiR3hpWVdOck9pQnVkV3hzTEZ4dUlDQWdJSEpsY0c5eWRFTkhTVG9nWm1Gc2MyVXNYRzRnSUNBZ2JXOWphMHB6YjI0NklHWmhiSE5sTEZ4dUlDQWdJR2RzYjJKaGJFUmhkR0U2SUdaaGJITmxMRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN2xuS2ptbkt6bG5MRG52SlBsclpqbm1vUnJaWGxjYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsUzJWNU9pQmNJbk5sYzNOcGIyNUZlSEJwY21WTFpYbGNJbHh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1pHVm1ZWFZzZEVOdmJtWnBaenRjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzZXNzaW9uOiAnJyxcbiAgICBzZXNzaW9uRXhwaXJlOiBJbmZpbml0eVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzUmhkSFZ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM04wYjNKbEwzTjBZWFIxY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTEd0Q1FVRmxPMGxCUTFnc1QwRkJUeXhGUVVGRkxFVkJRVms3U1VGRmNrSXNZVUZCWVN4RlFVRkZMRkZCUVd0Q08wTkJRemRDTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVnpjMmx2YmpvZ0p5Y2dZWE1nYzNSeWFXNW5MRnh1SUNBZ0lDOHZJSE5sYzNOcGIyN292NGZtbkovbm1vVG1sN2JwbDdUbmdybGNiaUFnSUNCelpYTnphVzl1Ulhod2FYSmxPaUJKYm1acGJtbDBlU0JoY3lCdWRXMWlaWEpjYm4wZ1lYTWdZVzU1WEc0aVhYMD0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNob3codHh0KSB7XG4gICAgd3guc2hvd1RvYXN0KHtcbiAgICAgICAgdGl0bGU6IHR5cGVvZiB0eHQgPT09ICdib29sZWFuJyA/ICfliqDovb3kuK0nIDogdHh0LFxuICAgICAgICBpY29uOiAnbG9hZGluZycsXG4gICAgICAgIG1hc2s6IHRydWUsXG4gICAgICAgIGR1cmF0aW9uOiA2MDAwMFxuICAgIH0pO1xufVxuZnVuY3Rpb24gaGlkZSgpIHtcbiAgICB3eC5oaWRlVG9hc3Qoe30pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHNob3c6IHNob3csXG4gICAgaGlkZTogaGlkZVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHOWhaR2x1Wnk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTkxZEdsc0wyeHZZV1JwYm1jdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4VFFVRlRMRWxCUVVrc1EwRkJReXhIUVVGeFFqdEpRVU12UWl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRMVFzUzBGQlN5eEZRVUZGTEU5QlFVOHNSMEZCUnl4TFFVRkxMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhPMUZCUXpkRExFbEJRVWtzUlVGQlJTeFRRVUZUTzFGQlEyWXNTVUZCU1N4RlFVRkZMRWxCUVVrN1VVRkRWaXhSUVVGUkxFVkJRVVVzUzBGQlN6dExRVU5zUWl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzVTBGQlV5eEpRVUZKTzBsQlExUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU55UWl4RFFVRkRPMEZCUlVRc2EwSkJRV1U3U1VGRFdDeEpRVUZKTEUxQlFVRTdTVUZEU2l4SlFVRkpMRTFCUVVFN1EwRkRVQ3hEUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMmh2ZHloMGVIUTZJR0p2YjJ4bFlXNGdmQ0J6ZEhKcGJtY3BJSHRjYmlBZ0lDQjNlQzV6YUc5M1ZHOWhjM1FvZTF4dUlDQWdJQ0FnSUNCMGFYUnNaVG9nZEhsd1pXOW1JSFI0ZENBOVBUMGdKMkp2YjJ4bFlXNG5JRDhnSitXS29PaTl2ZVM0clNjZ09pQjBlSFFzWEc0Z0lDQWdJQ0FnSUdsamIyNDZJQ2RzYjJGa2FXNW5KeXhjYmlBZ0lDQWdJQ0FnYldGemF6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pIVnlZWFJwYjI0NklEWXdNREF3WEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdhR2xrWlNncElIdGNiaUFnSUNCM2VDNW9hV1JsVkc5aGMzUW9lMzBwTzF4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyaHZkeXhjYmlBZ0lDQm9hV1JsWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZnVuY3Rpb24gc2V0UGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHVybCA9PT0gdm9pZCAwKSB7IHVybCA9IFwiXCI7IH1cbiAgICB2YXIgcXVlcnlTdHJpbmdJbmRleCA9IHVybC5pbmRleE9mKFwiP1wiKTtcbiAgICB2YXIga3ZwID0ge307XG4gICAgaWYgKHF1ZXJ5U3RyaW5nSW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgb2xkUXVlcnlTdHJpbmdfMSA9IHVybC5zdWJzdHIocXVlcnlTdHJpbmdJbmRleCArIDEpLnNwbGl0KFwiJlwiKTtcbiAgICAgICAgb2xkUXVlcnlTdHJpbmdfMS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XG4gICAgICAgICAgICB2YXIga3YgPSBvbGRRdWVyeVN0cmluZ18xW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgIGt2cFtrdlswXV0gPSBrdlsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGt2cCA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBrdnApLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEpzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmRYSnNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZuUWl4RlFVRkZMRTFCUVdNN1NVRkJhRU1zYjBKQlFVRXNSVUZCUVN4UlFVRm5RanRKUVVNdlFpeEpRVUZOTEdkQ1FVRm5RaXhIUVVGWExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRM1pDTEVsQlFVMHNaMEpCUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWdVJTeG5Ra0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEzaENMRWxCUVUwc1JVRkJSU3hIUVVGaExHZENRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyeEVMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRUanRKUVVWRUxFZEJRVWNzZVVKQlFVOHNSMEZCUnl4SFFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVEZDTEVsQlFVMHNWMEZCVnl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlF5OUNMRWRCUVVjc1EwRkJReXhWUVVGQkxFZEJRVWM3VVVGRFNpeFBRVUZWTEVkQlFVY3NVMEZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZITEVOQlFVTTdTVUZETTBNc1EwRkJReXhEUVVGRE8xTkJRMFFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldZc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1VVRkRka0lzVDBGQlR5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGREwwUTdVMEZCVFR0UlFVTklMRTlCUVU4c1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZEYkVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4VFFVRlRMRmRCUVVFN1EwRkRXaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMlYwVUdGeVlXMXpLSFZ5YkRvZ2MzUnlhVzVuSUQwZ1hDSmNJaXdnY0dGeVlXMXpPaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVowbHVaR1Y0T2lCdWRXMWlaWElnUFNCMWNtd3VhVzVrWlhoUFppaGNJajljSWlrN1hHNGdJQ0FnYkdWMElHdDJjRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZiR1JSZFdWeWVWTjBjbWx1WnlBOUlIVnliQzV6ZFdKemRISW9jWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwTG5Od2JHbDBLRndpSmx3aUtUdGNiaUFnSUNBZ0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJQ0FnSUNCdmJHUlJkV1Z5ZVZOMGNtbHVaeTVtYjNKRllXTm9LQ2g0TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcmRqb2djM1J5YVc1blcxMGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDaGNJajFjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyZG5CYmEzWmJNRjFkSUQwZ2EzWmJNVjA3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd0MmNDQTlJSHN1TGk1cmRuQXNJQzR1TG5CaGNtRnRjMzA3WEc1Y2JpQWdJQ0JqYjI1emRDQnhkV1Z5ZVZOMGNtbHVaeUE5SUU5aWFtVmpkQzVyWlhsektHdDJjQ2xjYmlBZ0lDQWdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTJ0bGVYMDlKSHRsYm1OdlpHVlZVa2tvYTNad1cydGxlVjBwZldBN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQzVxYjJsdUtGd2lKbHdpS1R0Y2JseHVJQ0FnSUdsbUlDaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3dnY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcElDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQ0FySUZ3aVAxd2lJQ3NnY1hWbGNubFRkSEpwYm1jN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVjBVR0Z5WVcxelhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZlcnNpb24gPSBfX1ZFUlNJT05fXztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZ5YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlJVRXNTVUZCVFN4UFFVRlBMRWRCUVVjc1YwRkJWeXhEUVVGRE8wRkJSVzVDTERCQ1FVRlBJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWkdWamJHRnlaU0JqYjI1emRDQmZYMVpGVWxOSlQwNWZYem9nYzNSeWFXNW5PMXh1WEc1amIyNXpkQ0IyWlhKemFXOXVJRDBnWDE5V1JWSlRTVTlPWDE4N1hHNWNibVY0Y0c5eWRDQjdJSFpsY25OcGIyNGdmVHRjYmlKZGZRPT0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93ZVJlcXVlc3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRDb25maWcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS9nZXRTZXNzaW9uLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvaW5pdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL2xvZ2luLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9hcGkvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvYXBpL3NldFNlc3Npb24udHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL2FwaS91cGxvYWRGaWxlLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhY2hlTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2NhdGNoSGFuZGxlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL2R1cmF0aW9uUmVwb3J0ZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9lcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL21vZHVsZS9tb2NrTWFuYWdlci50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvbW9kdWxlL3JlcXVlc3RIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvcmVzcG9uc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy9tb2R1bGUvc2Vzc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3N0b3JlL2NvbmZpZy50cyIsIndlYnBhY2s6Ly93ZVJlcXVlc3QvLi9zcmMvc3RvcmUvc3RhdHVzLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy91dGlsL2xvYWRpbmcudHMiLCJ3ZWJwYWNrOi8vd2VSZXF1ZXN0Ly4vc3JjL3V0aWwvdXJsLnRzIiwid2VicGFjazovL3dlUmVxdWVzdC8uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGYTtBQUNiLDhDQUE4QyxjQUFjO0FBQzVELGVBQWUsbUJBQU8sQ0FBQyw4Q0FBaUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCwyQ0FBMkMsKzNCOzs7Ozs7Ozs7Ozs7QUNaOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxlQUFlLG1CQUFPLENBQUMsOENBQWlCO0FBQ3hDO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsMkNBQTJDLG1hOzs7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QTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLG1nQzs7Ozs7Ozs7Ozs7O0FDakI5QjtBQUNiO0FBQ0E7QUFDQSxnREFBZ0QsT0FBTztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1L0U7Ozs7Ozs7Ozs7OztBQ3hDOUI7QUFDYiw4Q0FBOEMsY0FBYztBQUM1RCxjQUFjLFFBQVc7QUFDekI7QUFDQSwyQ0FBMkMsdVciLCJmaWxlIjoid2VSZXF1ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB1cmxQZXJmaXg6IGNvbmZpZ18xLmRlZmF1bHQudXJsUGVyZml4LFxuICAgICAgICBzZXNzaW9uRXhwaXJlVGltZTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSxcbiAgICAgICAgc2Vzc2lvbkV4cGlyZUtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICBzZXNzaW9uRXhwaXJlOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laMlYwUTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyRndhUzluWlhSRGIyNW1hV2N1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3d3UTBGQmIwTTdRVUZEY0VNc01FTkJRVzlETzBGQlJYQkRMRzFDUVVGbE8wbEJRMWdzVDBGQlR6dFJRVU5JTEZOQlFWTXNSVUZCUlN4blFrRkJUU3hEUVVGRExGTkJRVk03VVVGRE0wSXNhVUpCUVdsQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUk3VVVGRE0wTXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFVMHNRMEZCUXl4blFrRkJaMEk3VVVGRGVrTXNZVUZCWVN4RlFVRkZMR2RDUVVGTkxFTkJRVU1zWVVGQllUdExRVU4wUXl4RFFVRkJPMEZCUTB3c1EwRkJReXhGUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElHTnZibVpwWnlCbWNtOXRJQ2N1TGk5emRHOXlaUzlqYjI1bWFXY25YRzVwYlhCdmNuUWdjM1JoZEhWeklHWnliMjBnSnk0dUwzTjBiM0psTDNOMFlYUjFjeWRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0NrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNBZ0lIVnliRkJsY21acGVEb2dZMjl1Wm1sbkxuVnliRkJsY21acGVDeGNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVTZJR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsVkdsdFpTeGNiaUFnSUNBZ0lDQWdjMlZ6YzJsdmJrVjRjR2x5WlV0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZMWlhrc1hHNGdJQ0FnSUNBZ0lITmxjM05wYjI1RmVIQnBjbVU2SUhOMFlYUjFjeTV6WlhOemFXOXVSWGh3YVhKbFhHNGdJQ0FnZlZ4dWZUdGNiaUpkZlE9PSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbjtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWjJWMFUyVnpjMmx2Ymk1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwzTnlZeTloY0drdloyVjBVMlZ6YzJsdmJpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxEQkRRVUZ2UXp0QlFVVndReXh0UWtGQlpUdEpRVU5ZTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhQUVVGUExFTkJRVUU3UVVGRGVrSXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUNncElEMCtJSHRjYmlBZ0lDQnlaWFIxY200Z2MzUmhkSFZ6TG5ObGMzTnBiMjVjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgT2JqZWN0LmFzc2lnbihjb25maWdfMS5kZWZhdWx0LCBwYXJhbXMpO1xuICAgIHRyeSB7XG4gICAgICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9IHd4LmdldFN0b3JhZ2VTeW5jKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUpIHx8ICcnO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uLicpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmUgPSB3eC5nZXRTdG9yYWdlU3luYyhjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkgfHwgXCJzZXNzaW9uRXhwaXJlS2V5XCIpIHx8IEluZmluaXR5O1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCd3eC5nZXRTdG9yYWdlU3luYzpmYWlsLCBjYW4gbm90IGdldCBzZXNzaW9uRXhwaXJlLicpO1xuICAgIH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1cGRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZhVzVwZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zYlVKQlFXVXNWVUZCUXl4TlFVRnRRanRKUVVNdlFpeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdTVUZET1VJc1NVRkJTVHRSUVVOQkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4WFFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UzBGRGFrVTdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRSUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNPRU5CUVRoRExFTkJRVU1zUTBGQlFUdExRVU5vUlR0SlFVTkVMRWxCUVVrN1VVRkRRU3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4RlFVRkZMRU5CUVVNc1kwRkJZeXhEUVVGRExHZENRVUZOTEVOQlFVTXNaMEpCUVdkQ0xFbEJRVWtzYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU03UzBGRGRrYzdTVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRSUVVOU0xFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNiMFJCUVc5RUxFTkJRVU1zUTBGQlFUdExRVU4wUlR0QlFVTk1MRU5CUVVNc1JVRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JqYjI1bWFXY2dabkp2YlNBbkxpNHZjM1J2Y21VdlkyOXVabWxuSjF4dWFXMXdiM0owSUhOMFlYUjFjeUJtY205dElDY3VMaTl6ZEc5eVpTOXpkR0YwZFhNblhHNXBiWEJ2Y25RZ2V5QkpTVzVwZEU5d2RHbHZiaUI5SUdaeWIyMGdKeTR1TDJsdWRHVnlabUZqWlNkY2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ0tIQmhjbUZ0Y3pvZ1NVbHVhWFJQY0hScGIyNHBJRDArSUh0Y2JpQWdJQ0JQWW1wbFkzUXVZWE56YVdkdUtHTnZibVpwWnl3Z2NHRnlZVzF6S1R0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmlBOUlIZDRMbWRsZEZOMGIzSmhaMlZUZVc1aktHTnZibVpwWnk1elpYTnphVzl1VG1GdFpTRXBJSHg4SUNjbk8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lnbmQzZ3VaMlYwVTNSdmNtRm5aVk41Ym1NNlptRnBiQ3dnWTJGdUlHNXZkQ0JuWlhRZ2MyVnpjMmx2Ymk0bktWeHVJQ0FnSUgxY2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmtWNGNHbHlaU0E5SUhkNExtZGxkRk4wYjNKaFoyVlRlVzVqS0dOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVJSHg4SUZ3aWMyVnpjMmx2YmtWNGNHbHlaVXRsZVZ3aUtTQjhmQ0JKYm1acGJtbDBlVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9KM2Q0TG1kbGRGTjBiM0poWjJWVGVXNWpPbVpoYVd3c0lHTmhiaUJ1YjNRZ1oyVjBJSE5sYzNOcGIyNUZlSEJwY21VdUp5bGNiaUFnSUNCOVhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi4vbW9kdWxlL3Nlc3Npb25NYW5hZ2VyXCIpO1xuZXhwb3J0cy5kZWZhdWx0ID0gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2Vzc2lvbk1hbmFnZXJfMS5kZWZhdWx0Lm1haW4oKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYkc5bmFXNHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdllYQnBMMnh2WjJsdUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01rUkJRWEZFTzBGQlJYSkVMRzFDUVVGbE8wbEJRMWdzVDBGQlR5eDNRa0ZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGQk8wRkJRMmhETEVOQlFVTXNSVUZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCelpYTnphVzl1VFdGdVlXZGxjaUJtY205dElDY3VMaTl0YjJSMWJHVXZjMlZ6YzJsdmJrMWhibUZuWlhJblhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElDZ3BJRDArSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ6YzJsdmJrMWhibUZuWlhJdWJXRnBiaWdwWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZ4ZFdWemRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5aGNHa3ZjbVZ4ZFdWemRDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxESkVRVUZ4UkR0QlFVZHlSQ3h0UWtGQlpTeFZRVUZETEVkQlFXMUNPMGxCUXk5Q0xFOUJRVThzZDBKQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3UVVGRGRFTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsY1hWbGMzUklZVzVrYkdWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0I3SUVsU1pYRjFaWE4wVDNCMGFXOXVJSDBnWm5KdmJTQW5MaTR2YVc1MFpYSm1ZV05sSjF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENBb2IySnFPaUJKVW1WeGRXVnpkRTl3ZEdsdmJpa2dQVDRnZTF4dUlDQWdJSEpsZEhWeWJpQnlaWEYxWlhOMFNHRnVaR3hsY2k1eVpYRjFaWE4wS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZXNzaW9uTWFuYWdlcl8xID0gcmVxdWlyZShcIi4uL21vZHVsZS9zZXNzaW9uTWFuYWdlclwiKTtcbmV4cG9ydHMuZGVmYXVsdCA9IChmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5zZXRTZXNzaW9uKHNlc3Npb24pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMlYwVTJWemMybHZiaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2YzJWMFUyVnpjMmx2Ymk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVWeVJDeHRRa0ZCWlN4VlFVRkRMRTlCUVdVN1NVRkRNMElzZDBKQlFXTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRGRrTXNRMEZCUXl4RlFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dUwyMXZaSFZzWlM5elpYTnphVzl1VFdGdVlXZGxjaWRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnS0hObGMzTnBiMjQ2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUhObGMzTnBiMjVOWVc1aFoyVnlMbk5sZEZObGMzTnBiMjRvYzJWemMybHZiaWs3WEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVxdWVzdEhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuLi9tb2R1bGUvcmVxdWVzdEhhbmRsZXJcIik7XG5leHBvcnRzLmRlZmF1bHQgPSAoZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEJzYjJGa1JtbHNaUzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OWhjR2t2ZFhCc2IyRmtSbWxzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERKRVFVRnhSRHRCUVVkeVJDeHRRa0ZCWlN4VlFVRkRMRWRCUVhOQ08wbEJRMnhETEU5QlFVOHNkMEpCUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdRVUZEZWtNc1EwRkJReXhGUVVGQklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxjWFZsYzNSSVlXNWtiR1Z5SUdaeWIyMGdKeTR1TDIxdlpIVnNaUzl5WlhGMVpYTjBTR0Z1Wkd4bGNpZGNibWx0Y0c5eWRDQjdJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQW9iMkpxT2lCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ1BUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCeVpYRjFaWE4wU0dGdVpHeGxjaTUxY0d4dllXUkdhV3hsS0c5aWFpbGNibjFjYmlKZGZRPT0iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBpbml0XzEgPSByZXF1aXJlKFwiLi9hcGkvaW5pdFwiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi9hcGkvcmVxdWVzdFwiKTtcbnZhciB1cGxvYWRGaWxlXzEgPSByZXF1aXJlKFwiLi9hcGkvdXBsb2FkRmlsZVwiKTtcbnZhciBzZXRTZXNzaW9uXzEgPSByZXF1aXJlKFwiLi9hcGkvc2V0U2Vzc2lvblwiKTtcbnZhciBsb2dpbl8xID0gcmVxdWlyZShcIi4vYXBpL2xvZ2luXCIpO1xudmFyIGdldFNlc3Npb25fMSA9IHJlcXVpcmUoXCIuL2FwaS9nZXRTZXNzaW9uXCIpO1xudmFyIGdldENvbmZpZ18xID0gcmVxdWlyZShcIi4vYXBpL2dldENvbmZpZ1wiKTtcbnZhciB2ZXJzaW9uXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xudmFyIHdlUmVxdWVzdE9iamVjdCA9IHtcbiAgICBpbml0OiBpbml0XzEuZGVmYXVsdCxcbiAgICByZXF1ZXN0OiByZXF1ZXN0XzEuZGVmYXVsdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXzEuZGVmYXVsdCxcbiAgICBzZXRTZXNzaW9uOiBzZXRTZXNzaW9uXzEuZGVmYXVsdCxcbiAgICBsb2dpbjogbG9naW5fMS5kZWZhdWx0LFxuICAgIGdldFNlc3Npb246IGdldFNlc3Npb25fMS5kZWZhdWx0LFxuICAgIGdldENvbmZpZzogZ2V0Q29uZmlnXzEuZGVmYXVsdCxcbiAgICB2ZXJzaW9uOiB2ZXJzaW9uXzEudmVyc2lvblxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IHdlUmVxdWVzdE9iamVjdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN1FVRkJRU3h0UTBGQk5rSTdRVUZETjBJc2VVTkJRVzFETzBGQlEyNURMQ3REUVVGNVF6dEJRVU42UXl3clEwRkJlVU03UVVGRGVrTXNjVU5CUVN0Q08wRkJReTlDTEN0RFFVRjVRenRCUVVONlF5dzJRMEZCZFVNN1FVRkZka01zY1VOQlFXMURPMEZCUlc1RExFbEJRVTBzWlVGQlpTeEhRVUZqTzBsQlEycERMRWxCUVVrc1owSkJRVUU3U1VGRFNpeFBRVUZQTEcxQ1FVRkJPMGxCUTFBc1ZVRkJWU3h6UWtGQlFUdEpRVU5XTEZWQlFWVXNjMEpCUVVFN1NVRkRWaXhMUVVGTExHbENRVUZCTzBsQlEwd3NWVUZCVlN4elFrRkJRVHRKUVVOV0xGTkJRVk1zY1VKQlFVRTdTVUZEVkN4UFFVRlBMRzFDUVVGQk8wTkJRMUlzUTBGQlF6dEJRVVZHTEd0Q1FVRmxMR1ZCUVdVc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JwYm1sMElHWnliMjBnWENJdUwyRndhUzlwYm1sMFhDSmNibWx0Y0c5eWRDQnlaWEYxWlhOMElHWnliMjBnWENJdUwyRndhUzl5WlhGMVpYTjBYQ0pjYm1sdGNHOXlkQ0IxY0d4dllXUkdhV3hsSUdaeWIyMGdYQ0l1TDJGd2FTOTFjR3h2WVdSR2FXeGxYQ0pjYm1sdGNHOXlkQ0J6WlhSVFpYTnphVzl1SUdaeWIyMGdYQ0l1TDJGd2FTOXpaWFJUWlhOemFXOXVYQ0pjYm1sdGNHOXlkQ0JzYjJkcGJpQm1jbTl0SUZ3aUxpOWhjR2t2Ykc5bmFXNWNJbHh1YVcxd2IzSjBJR2RsZEZObGMzTnBiMjRnWm5KdmJTQmNJaTR2WVhCcEwyZGxkRk5sYzNOcGIyNWNJbHh1YVcxd2IzSjBJR2RsZEVOdmJtWnBaeUJtY205dElGd2lMaTloY0drdloyVjBRMjl1Wm1sblhDSmNibWx0Y0c5eWRDQjdJSGRsVW1WeGRXVnpkQ0I5SUdaeWIyMGdYQ0l1TDJsdWRHVnlabUZqWlZ3aVhHNXBiWEJ2Y25RZ2V5QjJaWEp6YVc5dUlIMGdabkp2YlNBbkxpOTJaWEp6YVc5dUoxeHVYRzVqYjI1emRDQjNaVkpsY1hWbGMzUlBZbXBsWTNRNklIZGxVbVZ4ZFdWemRDQTlJSHRjYmlBZ2FXNXBkQ3hjYmlBZ2NtVnhkV1Z6ZEN4Y2JpQWdkWEJzYjJGa1JtbHNaU3hjYmlBZ2MyVjBVMlZ6YzJsdmJpeGNiaUFnYkc5bmFXNHNYRzRnSUdkbGRGTmxjM05wYjI0c1hHNGdJR2RsZEVOdmJtWnBaeXhjYmlBZ2RtVnljMmx2Ymx4dWZUdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdkMlZTWlhGMVpYTjBUMkpxWldOME8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBnZXQob2JqKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd3guZ2V0U3RvcmFnZSh7XG4gICAgICAgIGtleTogb2JqLm9yaWdpblVybCxcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Ygb2JqLmNhY2hlID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNhY2hlKHJlcy5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVzLmRhdGEsIHsgaXNDYWNoZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iai5jb21wbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldChvYmosIHJlYWxEYXRhKSB7XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9iai5jYWNoZSA9PT0gdHJ1ZSB8fFxuICAgICAgICAodHlwZW9mIG9iai5jYWNoZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jYWNoZShyZWFsRGF0YSkpKSB7XG4gICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBvYmoub3JpZ2luVXJsLFxuICAgICAgICAgICAgZGF0YTogcmVhbERhdGFcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGdldDogZ2V0LFxuICAgIHNldDogc2V0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJGamFHVk5ZVzVoWjJWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlqWVdOb1pVMWhibUZuWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZGUVN4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGdFFqdEpRVU0xUWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUlVGQlJUdFJRVU5vUWl4UFFVRlBPMHRCUTFZN1NVRkRSQ3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETzFGQlExWXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhUUVVGVE8xRkJRMnhDTEU5QlFVOHNXVUZCUlN4SFFVRkhPMWxCUTFJc1NVRkRTU3hIUVVGSExFTkJRVU1zUzBGQlN5eExRVUZMTEVsQlFVazdaMEpCUTJ4Q0xFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4TFFVRkxMRlZCUVZVc1NVRkJTU3hIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVNeFJEdG5Ra0ZEUlN4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFOUJRVThzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUTI1RExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVTXNRMEZCUXl4RFFVRkJPMmxDUVVONlF6dGhRVU5LTzFsQlEwUXNTVUZCUnl4UFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFdEJRVXNzVlVGQlZTeEZRVUZGTzJkQ1FVTnVReXhIUVVGSExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdZVUZEYkVJN1VVRkRUQ3hEUVVGRE8wdEJRMG9zUTBGQlF5eERRVUZCTzBGQlEwNHNRMEZCUXp0QlFVVkVMRk5CUVZNc1IwRkJSeXhEUVVGRExFZEJRVzFDTEVWQlFVY3NVVUZCZVVJN1NVRkRlRVFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRVZCUVVVN1VVRkRhRUlzVDBGQlR6dExRVU5XTzBsQlEwUXNTVUZEU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFbEJRVWs3VVVGRGJFSXNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFdEJRVXNzVlVGQlZTeEpRVUZKTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGRE1VUTdVVUZEUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xbEJRMVlzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4VFFVRlRPMWxCUTJ4Q0xFbEJRVWtzUlVGQlJTeFJRVUZSTzFOQlEycENMRU5CUVVNc1EwRkJRVHRMUVVOTU8wRkJRMHdzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wbEJRMGdzUjBGQlJ5eExRVUZCTzBOQlEwNHNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLU0I3WEc0Z0lDQWdhV1lnS0NGdlltb3ViM0pwWjJsdVZYSnNLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzRnSUNBZ2QzZ3VaMlYwVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUd0bGVUb2diMkpxTG05eWFXZHBibFZ5YkN4Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZ6Y3lBb2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTmhZMmhsSUQwOVBTQjBjblZsSUh4OFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0tIUjVjR1Z2WmlCdlltb3VZMkZqYUdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlBbUppQnZZbW91WTJGamFHVW9jbVZ6TG1SaGRHRXBLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdWMzVmpZMlZ6Y3lBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzlpYWk1emRXTmpaWE56S0hKbGN5NWtZWFJoTENCN2FYTkRZV05vWlRvZ2RISjFaWDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUlHOWlhaTVqYjIxd2JHVjBaU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJKcUxtTnZiWEJzWlhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUtWeHVmVnh1WEc1bWRXNWpkR2x2YmlCelpYUW9iMkpxT2lCSlVtVnhkV1Z6ZEU5d2RHbHZiaUFzSUhKbFlXeEVZWFJoT2lCemRISnBibWNnZkNCdlltcGxZM1FwSUh0Y2JpQWdJQ0JwWmlBb0lXOWlhaTV2Y21sbmFXNVZjbXdwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUc5aWFpNWpZV05vWlNBOVBUMGdkSEoxWlNCOGZGeHVJQ0FnSUNBZ0lDQW9kSGx3Wlc5bUlHOWlhaTVqWVdOb1pTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JRzlpYWk1allXTm9aU2h5WldGc1JHRjBZU2twWEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0FnSUhkNExuTmxkRk4wYjNKaFoyVW9lMXh1SUNBZ0lDQWdJQ0FnSUNBZ2EyVjVPaUJ2WW1vdWIzSnBaMmx1VlhKc0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlUb2djbVZoYkVSaGRHRmNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUh0Y2JpQWdJQ0JuWlhRc1hHNGdJQ0FnYzJWMFhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGVycm9ySGFuZGxlcl8xID0gcmVxdWlyZShcIi4vZXJyb3JIYW5kbGVyXCIpO1xuZnVuY3Rpb24gY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KSB7XG4gICAgdmFyIHR5cGUgPSBlLnR5cGUsIHJlcyA9IGUucmVzO1xuICAgIGlmIChvYmouY2F0Y2hFcnJvcikge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2h0dHAtZXJyb3InKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihyZXMuc3RhdHVzQ29kZS50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ3VwbG9hZC1lcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKHJlcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdsb2dpYy1lcnJvcicpIHtcbiAgICAgICAgICAgIHZhciBtc2cgPSBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmdldEVycm9yTXNnKHJlcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihtc2cuY29udGVudCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGUudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQubG9naWNFcnJvcihvYmosIGUucmVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLmNhdGNoSGFuZGxlciA9IGNhdGNoSGFuZGxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVkyRjBZMmhJWVc1a2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwyMXZaSFZzWlM5allYUmphRWhoYm1Sc1pYSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGRFFTd3JRMEZCTUVNN1FVRlBNVU1zVTBGQlV5eFpRVUZaTEVOQlFVTXNRMEZCWVN4RlFVRkZMRWRCUVhWRExFVkJRVVVzVFVGQk9FSTdTVUZEYUVjc1NVRkJRU3hoUVVGSkxFVkJRVVVzVjBGQlJ5eERRVUZOTzBsQlEzWkNMRWxCUVVrc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGQlJUdFJRVU5vUWl4SlFVRkpMRWxCUVVrc1MwRkJTeXhaUVVGWkxFVkJRVVU3V1VGRGRrSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGRrUTdZVUZCVFN4SlFVRkpMRWxCUVVrc1MwRkJTeXhqUVVGakxFVkJRVVU3V1VGRGFFTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTnFRenRoUVVGTkxFbEJRVWtzU1VGQlNTeExRVUZMTEdGQlFXRXNSVUZCUlR0WlFVTXZRaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eHpRa0ZCV1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU40UXl4UFFVRlBMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVONlF6dGhRVUZOTzFsQlJVZ3NUMEZCVHl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRGNFSTdTMEZEU2p0VFFVRk5PMUZCUTBnc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTzFsQlExSXNUMEZCVHl4elFrRkJXU3hEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRemxETzJGQlFVMDdXVUZGU0N4UFFVRlBMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU53UWp0TFFVTktPMEZCUlV3c1EwRkJRenRCUVVOUkxHOURRVUZaSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1YVcxd2IzSjBJR1Z5Y205eVNHRnVaR3hsY2lCbWNtOXRJRndpTGk5bGNuSnZja2hoYm1Sc1pYSmNJanRjYmx4dWRIbHdaU0JVYUhKdmQwVnljbTl5Vkhsd1pTQTlJQ2QxY0d4dllXUXRaWEp5YjNJbklId2dKMnh2WjJsakxXVnljbTl5SnlCOElDZG9kSFJ3TFdWeWNtOXlKMXh1YVc1MFpYSm1ZV05sSUZSb2NtOTNSWEp5YjNJZ2UxeHVJQ0FnSUhSNWNHVTZJRlJvY205M1JYSnliM0pVZVhCbFhHNGdJQ0FnY21Wek9pQmhibmxjYm4xY2JtWjFibU4wYVc5dUlHTmhkR05vU0dGdVpHeGxjaWhsT2lCVWFISnZkMFZ5Y205eUxDQnZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzSUhKbGFtVmpkRG9nS0hKbFlYTnZiajg2SUdGdWVTa2dQVDRnZG05cFpDa2dlMXh1SUNBZ0lHTnZibk4wSUhzZ2RIbHdaU3dnY21WeklIMGdQU0JsWEc0Z0lDQWdhV1lnS0c5aWFpNWpZWFJqYUVWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBlWEJsSUQwOVBTQW5hSFIwY0MxbGNuSnZjaWNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaV3BsWTNRb2JtVjNJRVZ5Y205eUtISmxjeTV6ZEdGMGRYTkRiMlJsTG5SdlUzUnlhVzVuS0NrcEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbElEMDlQU0FuZFhCc2IyRmtMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvY21WektTazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pTQTlQVDBnSjJ4dloybGpMV1Z5Y205eUp5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJRzF6WnlBOUlHVnljbTl5U0dGdVpHeGxjaTVuWlhSRmNuSnZjazF6WnloeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvYlhObkxtTnZiblJsYm5RcEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPV0Z0dVM3bG1wejZaU1o2Syt2WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnFaV04wS0dVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1V1ZEhsd1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdWeWNtOXlTR0Z1Wkd4bGNpNXNiMmRwWTBWeWNtOXlLRzlpYWl3Z1pTNXlaWE1wTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNVlXMjVMdVdhblBwbEpub3I2OWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JuMWNibVY0Y0c5eWRDQjdJR05oZEdOb1NHRnVaR3hsY2lCOUlsMTkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb25maWdfMSA9IHJlcXVpcmUoXCIuLi9zdG9yZS9jb25maWdcIik7XG52YXIgcmVxdWVzdF8xID0gcmVxdWlyZShcIi4uL2FwaS9yZXF1ZXN0XCIpO1xuZnVuY3Rpb24gc3RhcnQob2JqKSB7XG4gICAgb2JqLl9yZXBvcnRTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGVuZChvYmopIHtcbiAgICBvYmouX3JlcG9ydEVuZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZiAob2JqLnJlcG9ydCAmJiBvYmouX3JlcG9ydFN0YXJ0VGltZSkge1xuICAgICAgICByZXBvcnQob2JqLnJlcG9ydCwgb2JqLl9yZXBvcnRTdGFydFRpbWUsIG9iai5fcmVwb3J0RW5kVGltZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVwb3J0KG5hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5yZXBvcnRDR0kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25maWdfMS5kZWZhdWx0LnJlcG9ydENHSShuYW1lLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJlcXVlc3RfMS5kZWZhdWx0KTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kLFxuICAgIHJlcG9ydDogcmVwb3J0XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWkhWeVlYUnBiMjVTWlhCdmNuUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDNOeVl5OXRiMlIxYkdVdlpIVnlZWFJwYjI1U1pYQnZjblJsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96dEJRVUZCTERCRFFVRnZRenRCUVVOd1F5d3dRMEZCYjBNN1FVRkhjRU1zVTBGQlV5eExRVUZMTEVOQlFVTXNSMEZCZFVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRhRVFzUTBGQlF6dEJRVVZFTEZOQlFWTXNSMEZCUnl4RFFVRkRMRWRCUVhWRE8wbEJRMmhFTEVkQlFVY3NRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hKUVVGSkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0SlFVTXhReXhKUVVGSExFZEJRVWNzUTBGQlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEZRVUZGTzFGQlEyNURMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlowSXNSVUZCUlN4SFFVRkhMRU5CUVVNc1owSkJRV2RDTEVWQlFVVXNSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wdEJRekZGTzBGQlEwd3NRMEZCUXp0QlFVVkVMRk5CUVZNc1RVRkJUU3hEUVVGRExFbEJRVmtzUlVGQlJTeFRRVUZwUWl4RlFVRkZMRTlCUVdVN1NVRkROVVFzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGVkJRVlVzUlVGQlJUdFJRVU40UXl4blFrRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hwUWtGQlR5eERRVUZETEVOQlFVTTdTMEZEZGtRN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4TFFVRkxMRTlCUVVFN1NVRkRUQ3hIUVVGSExFdEJRVUU3U1VGRFNDeE5RVUZOTEZGQlFVRTdRMEZEVkN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJR052Ym1acFp5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5amIyNW1hV2NuWEc1cGJYQnZjblFnY21WeGRXVnpkQ0JtY205dElDY3VMaTloY0drdmNtVnhkV1Z6ZENkY2JtbHRjRzl5ZENCN0lFbFNaWEYxWlhOMFQzQjBhVzl1TENCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlCOUlHWnliMjBnWENJdUxpOXBiblJsY21aaFkyVmNJanRjYmx4dVpuVnVZM1JwYjI0Z2MzUmhjblFvYjJKcU9pQkpVbVZ4ZFdWemRFOXdkR2x2YmlCOElFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtTQjdYRzRnSUNBZ2IySnFMbDl5WlhCdmNuUlRkR0Z5ZEZScGJXVWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWlc1a0tHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJRzlpYWk1ZmNtVndiM0owUlc1a1ZHbHRaU0E5SUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncE8xeHVJQ0FnSUdsbUtHOWlhaTV5WlhCdmNuUWdKaVlnYjJKcUxsOXlaWEJ2Y25SVGRHRnlkRlJwYldVcElIdGNiaUFnSUNBZ0lDQWdjbVZ3YjNKMEtHOWlhaTV5WlhCdmNuUWdZWE1nYzNSeWFXNW5MQ0J2WW1vdVgzSmxjRzl5ZEZOMFlYSjBWR2x0WlN3Z2IySnFMbDl5WlhCdmNuUkZibVJVYVcxbEtUdGNiaUFnSUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGNHOXlkQ2h1WVcxbE9pQnpkSEpwYm1jc0lITjBZWEowVkdsdFpUb2diblZ0WW1WeUxDQmxibVJVYVcxbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNCcFppQW9kSGx3Wlc5bUlHTnZibVpwWnk1eVpYQnZjblJEUjBrZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjVtYVdjdWNtVndiM0owUTBkSktHNWhiV1VzSUhOMFlYSjBWR2x0WlN3Z1pXNWtWR2x0WlN3Z2NtVnhkV1Z6ZENrN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MzUmhjblFzWEc0Z0lDQWdaVzVrTEZ4dUlDQWdJSEpsY0c5eWRGeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciByZXF1ZXN0XzEgPSByZXF1aXJlKFwiLi4vYXBpL3JlcXVlc3RcIik7XG5mdW5jdGlvbiBzeXN0ZW1FcnJvcihvYmosIHJlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqLmZhaWwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvYmouZmFpbChyZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpOyB9O1xuICAgICAgICBkb0Vycm9yKFwiXCIsIHJlcy5lcnJNc2csIHJldHJ5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBsb2dpY0Vycm9yKG9iaiwgcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvYmouZmFpbCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9iai5mYWlsKHJlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgX2EgPSBnZXRFcnJvck1zZyhyZXMpLCB0aXRsZSA9IF9hLnRpdGxlLCBjb250ZW50ID0gX2EuY29udGVudDtcbiAgICAgICAgdmFyIHJldHJ5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVxdWVzdF8xLmRlZmF1bHQob2JqKS50aGVuKG9iai5fcmVzb2x2ZSkuY2F0Y2gob2JqLl9yZWplY3QpOyB9O1xuICAgICAgICBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uZmlnXzEuZGVmYXVsdC5lcnJvckNhbGxiYWNrKG9iaiwgcmVzKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihyZXMpO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JNc2cocmVzKSB7XG4gICAgdmFyIHRpdGxlID0gXCJcIjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aXRsZSA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JUaXRsZShyZXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpdGxlID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvclRpdGxlO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29uZmlnXzEuZGVmYXVsdC5lcnJvckNvbnRlbnQocmVzLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JDb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnRlbnQgPSBjb25maWdfMS5kZWZhdWx0LmVycm9yQ29udGVudDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50IH07XG59XG5mdW5jdGlvbiBkb0Vycm9yKHRpdGxlLCBjb250ZW50LCByZXRyeSkge1xuICAgIHZhciBzaG93RXJyb3JSZXRyeUJ0biA9IGNvbmZpZ18xLmRlZmF1bHQuZXJyb3JSZXRyeUJ0biAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIjtcbiAgICB3eC5zaG93TW9kYWwoT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgY29udGVudDogY29udGVudCB8fCBcIue9kee7nOaIluacjeWKoeW8guW4uO+8jOivt+eojeWQjumHjeivlVwiLFxuICAgIH0sICFzaG93RXJyb3JSZXRyeUJ0biA/IHtcbiAgICAgICAgc2hvd0NhbmNlbDogZmFsc2VcbiAgICB9IDoge1xuICAgICAgICBzaG93Q2FuY2VsOiB0cnVlLFxuICAgICAgICBjb25maXJtVGV4dDogJ+mHjeivlScsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSAmJiB0eXBlb2YgcmV0cnkgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICByZXRyeSgpO1xuICAgICAgICB9XG4gICAgfSkpO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHN5c3RlbUVycm9yOiBzeXN0ZW1FcnJvcixcbiAgICBsb2dpY0Vycm9yOiBsb2dpY0Vycm9yLFxuICAgIGRvRXJyb3I6IGRvRXJyb3IsXG4gICAgZ2V0RXJyb3JNc2c6IGdldEVycm9yTXNnXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWlhKeWIzSklZVzVrYkdWeUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDIxdlpIVnNaUzlsY25KdmNraGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNNRU5CUVhGRE8wRkJSM0pETEZOQlFWTXNWMEZCVnl4RFFVRkRMRWRCUVhWRExFVkJRVVVzUjBGQk5rSTdTVUZEZGtZc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTJoRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRha0k3VTBGQlRUdFJRVU5JTEVsQlFVMHNTMEZCU3l4SFFVRkhMR05CUVUwc1QwRkJRU3hwUWtGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQmJFUXNRMEZCYTBRc1EwRkJRenRSUVVOMlJTeFBRVUZQTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdTMEZEYkVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzVTBGQlV5eFZRVUZWTEVOQlFVTXNSMEZCZFVNc1JVRkJSU3hIUVVGNVJUdEpRVU5zU1N4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExFbEJRVWtzUzBGQlN5eFZRVUZWTEVWQlFVVTdVVUZEYUVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnFRanRUUVVGTk8xRkJRMGNzU1VGQlFTeHhRa0ZCYlVNc1JVRkJiRU1zWjBKQlFVc3NSVUZCUlN4dlFrRkJNa0lzUTBGQlF6dFJRVU14UXl4SlFVRk5MRXRCUVVzc1IwRkJSeXhqUVVGTkxFOUJRVUVzYVVKQlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFXeEVMRU5CUVd0RUxFTkJRVU03VVVGRGRrVXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdTMEZEYkVNN1NVRkhSQ3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4aFFVRmhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRelZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTnNRenRKUVVWRUxFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRka0lzUTBGQlF6dEJRVVZFTEZOQlFWTXNWMEZCVnl4RFFVRkRMRWRCUVhsRk8wbEJRekZHTEVsQlFVa3NTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVObUxFbEJRVWtzVDBGQlR5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1MwRkJTeXhWUVVGVkxFVkJRVVU3VVVGRGVrTXNTVUZCU1R0WlFVTkJMRXRCUVVzc1IwRkJSeXhuUWtGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVUU3VTBGRGRFTTdVVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRUUVVOWU8wdEJRMG83VTBGQlRTeEpRVUZKTEU5QlFVOHNaMEpCUVUwc1EwRkJReXhWUVVGVkxFdEJRVXNzVVVGQlVTeEZRVUZGTzFGQlF6bERMRXRCUVVzc1IwRkJSeXhuUWtGQlRTeERRVUZETEZWQlFWVXNRMEZCUXp0TFFVTTNRanRKUVVWRUxFbEJRVWtzVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTnFRaXhKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4WlFVRlpMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRek5ETEVsQlFVazdXVUZEUVN4UFFVRlBMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGQk8xTkJRekZETzFGQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVN1UwRkRXRHRMUVVOS08xTkJRVTBzU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1dVRkJXU3hMUVVGTExGRkJRVkVzUlVGQlJUdFJRVU5vUkN4UFFVRlBMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTTdTMEZEYWtNN1NVRkZSQ3hQUVVGUExFVkJRVU1zUzBGQlN5eFBRVUZCTEVWQlFVVXNUMEZCVHl4VFFVRkJMRVZCUVVNc1EwRkJRVHRCUVVNelFpeERRVUZETzBGQlJVUXNVMEZCVXl4UFFVRlBMRU5CUVVNc1MwRkJZU3hGUVVGRkxFOUJRV1VzUlVGQlJTeExRVUZwUWp0SlFVVTVSQ3hKUVVGTkxHbENRVUZwUWl4SFFVRkhMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEpRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRlZCUVZVc1EwRkJRenRKUVVNNVJTeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGRrSXNTMEZCU3l4UFFVRkJPMUZCUTB3c1QwRkJUeXhGUVVGRkxFOUJRVThzU1VGQlNTeGxRVUZsTzB0QlEzUkRMRVZCUVVVc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRUlzVlVGQlZTeEZRVUZGTEV0QlFVczdTMEZEY0VJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFFTeFZRVUZWTEVWQlFVVXNTVUZCU1R0UlFVTm9RaXhYUVVGWExFVkJRVVVzU1VGQlNUdFJRVU5xUWl4UFFVRlBMRmxCUVVNc1IwRkJjME03V1VGRE1VTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1QwRkJUeXhKUVVGSkxFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVTdaMEpCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU03VVVGRE5VUXNRMEZCUXp0TFFVTktMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMUlzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1YwRkJWeXhoUVVGQk8wbEJRMWdzVlVGQlZTeFpRVUZCTzBsQlExWXNUMEZCVHl4VFFVRkJPMGxCUTFBc1YwRkJWeXhoUVVGQk8wTkJRMlFzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJSEpsY1hWbGMzUWdabkp2YlNBbkxpNHZZWEJwTDNKbGNYVmxjM1FuTzF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bWRXNWpkR2x2YmlCemVYTjBaVzFGY25KdmNpaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRzSUhKbGN6b2dkM2d1UjJWdVpYSmhiRU5oYkd4aVlXTnJVbVZ6ZFd4MEtTQjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQnZZbW91Wm1GcGJDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1bVlXbHNLSEpsY3lrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjbVYwY25rZ1BTQW9LU0E5UGlCeVpYRjFaWE4wS0c5aWFpa3VkR2hsYmlodlltb3VYM0psYzI5c2RtVXBMbU5oZEdOb0tHOWlhaTVmY21WcVpXTjBLVHRjYmlBZ0lDQWdJQ0FnWkc5RmNuSnZjaWhjSWx3aUxDQnlaWE11WlhKeVRYTm5MQ0J5WlhSeWVTazdYRzRnSUNBZ2ZWeHVmVnh1WEc1bWRXNWpkR2x2YmlCc2IyZHBZMFZ5Y205eUtHOWlham9nU1ZKbGNYVmxjM1JQY0hScGIyNGdmQ0JKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaXdnY21Wek9pQjNlQzVTWlhGMVpYTjBVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwSUh3Z2QzZ3VWWEJzYjJGa1JtbHNaVk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbVpoYVd3Z1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQnZZbW91Wm1GcGJDaHlaWE1wTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElIdDBhWFJzWlN3Z1kyOXVkR1Z1ZEgwZ1BTQm5aWFJGY25KdmNrMXpaeWh5WlhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCeVpYUnllU0E5SUNncElEMCtJSEpsY1hWbGMzUW9iMkpxS1M1MGFHVnVLRzlpYWk1ZmNtVnpiMngyWlNrdVkyRjBZMmdvYjJKcUxsOXlaV3BsWTNRcE8xeHVJQ0FnSUNBZ0lDQmtiMFZ5Y205eUtIUnBkR3hsTENCamIyNTBaVzUwTENCeVpYUnllU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnNWFhQzVwNmM1cHlKNllXTjU3MnU1N3VmNUxpQTZaU1o2Syt2NVp1ZTZMQ0Q1WWU5NXBXdzc3eU01WWlaNW9tbjZLR001YTZEWEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaWEp5YjNKRFlXeHNZbUZqYXlBOVBUMGdYQ0ptZFc1amRHbHZibHdpS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibVpwWnk1bGNuSnZja05oYkd4aVlXTnJLRzlpYWl3Z2NtVnpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0hKbGN5azdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHZGxkRVZ5Y205eVRYTm5LSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ0I4SUhkNExsVndiRzloWkVacGJHVlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0JzWlhRZ2RHbDBiR1VnUFNCY0lsd2lPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMjl1Wm1sbkxtVnljbTl5VkdsMGJHVWdQVDA5SUZ3aVpuVnVZM1JwYjI1Y0lpa2dlMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdsMGJHVWdQU0JqYjI1bWFXY3VaWEp5YjNKVWFYUnNaU2h5WlhNdVpHRjBZU2xjYmlBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ1kyOXVabWxuTG1WeWNtOXlWR2wwYkdVZ1BUMDlJRndpYzNSeWFXNW5YQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2RHbDBiR1VnUFNCamIyNW1hV2N1WlhKeWIzSlVhWFJzWlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ1kyOXVkR1Z1ZENBOUlGd2lYQ0k3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaWEp5YjNKRGIyNTBaVzUwSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQmpiMjVtYVdjdVpYSnliM0pEYjI1MFpXNTBLSEpsY3k1a1lYUmhLVnh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1WlhKeWIzSkRiMjUwWlc1MElEMDlQU0JjSW5OMGNtbHVaMXdpS1NCN1hHNGdJQ0FnSUNBZ0lHTnZiblJsYm5RZ1BTQmpiMjVtYVdjdVpYSnliM0pEYjI1MFpXNTBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCN2RHbDBiR1VzSUdOdmJuUmxiblI5WEc1OVhHNWNibVoxYm1OMGFXOXVJR1J2UlhKeWIzSW9kR2wwYkdVNklITjBjbWx1Wnl3Z1kyOXVkR1Z1ZERvZ2MzUnlhVzVuTENCeVpYUnllVDg2SUNncElEMCtJR0Z1ZVNrZ2UxeHVJQ0FnSUM4dklPYVlyK1dRcHVhWXZ1ZWt1dW1IamVpdmxlYU1pZW1Tcmx4dUlDQWdJR052Ym5OMElITm9iM2RGY25KdmNsSmxkSEo1UW5SdUlEMGdZMjl1Wm1sbkxtVnljbTl5VW1WMGNubENkRzRnSmlZZ2RIbHdaVzltSUhKbGRISjVJRDA5UFNCY0ltWjFibU4wYVc5dVhDSTdYRzRnSUNBZ2QzZ3VjMmh2ZDAxdlpHRnNLRTlpYW1WamRDNWhjM05wWjI0b2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlN4Y2JpQWdJQ0FnSUNBZ1kyOXVkR1Z1ZERvZ1kyOXVkR1Z1ZENCOGZDQmNJdWU5a2VlN25PYUlsdWFjamVXS29lVzhndVc0dU8rOGpPaXZ0K2VvamVXUWp1bUhqZWl2bFZ3aUxGeHVJQ0FnSUgwc0lDRnphRzkzUlhKeWIzSlNaWFJ5ZVVKMGJpQS9JSHRjYmlBZ0lDQWdJQ0FnYzJodmQwTmhibU5sYkRvZ1ptRnNjMlZjYmlBZ0lDQjlJRG9nZTF4dUlDQWdJQ0FnSUNCemFHOTNRMkZ1WTJWc09pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCamIyNW1hWEp0VkdWNGREb2dKK21IamVpdmxTY3NYRzRnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6T2lCM2VDNVRhRzkzVFc5a1lXeFRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoeVpYTXVZMjl1Wm1seWJTQW1KaUIwZVhCbGIyWWdjbVYwY25rZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2NtVjBjbmtvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUgwcEtUdGNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnZTF4dUlDQWdJSE41YzNSbGJVVnljbTl5TEZ4dUlDQWdJR3h2WjJsalJYSnliM0lzWEc0Z0lDQWdaRzlGY25KdmNpeGNiaUFnSUNCblpYUkZjbkp2Y2sxeloxeHVmVnh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xuZnVuY3Rpb24gZ2V0KG9iaikge1xuICAgIGlmICghKGNvbmZpZ18xLmRlZmF1bHQubW9ja0pzb25bb2JqLnVybF0gfHwgKG9iai5vcmlnaW5VcmwgJiYgY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21vY2sg5rKh5pyJ5a+55bqU5o6l5Y+j55qE5pWw5o2uJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSBjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uW29iai51cmxdIHx8IChvYmoub3JpZ2luVXJsID8gY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbltvYmoub3JpZ2luVXJsXSA6ICcnKTtcbiAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgfTtcbiAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBnZXQ6IGdldFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXOWphMDFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDIxdlkydE5ZVzVoWjJWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc01FTkJRVzlETzBGQlEzQkRMREpEUVVGeFF6dEJRVWR5UXl4VFFVRlRMRWRCUVVjc1EwRkJReXhIUVVGMVF6dEpRVVZvUkN4SlFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRmFrWXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUTJoRExFOUJRVThzUzBGQlN5eERRVUZETzB0QlEyaENPMGxCUlVRc1NVRkJTU3hKUVVGSkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zWjBKQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVVM1JpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zU1VGQlRTeEhRVUZITEVkQlFVYzdVVUZEVWl4SlFVRkpMRTFCUVVFN1VVRkRTaXhWUVVGVkxFVkJRVVVzUjBGQlJ6dExRVU5zUWl4RFFVRkRPMGxCUlVZc2FVSkJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0SlFVTm1MRTlCUVU4c1IwRkJSeXhEUVVGQk8wRkJRMlFzUTBGQlF6dEJRVVZFTEd0Q1FVRmxPMGxCUTFnc1IwRkJSeXhMUVVGQk8wTkJRMDRzUTBGQlFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQmpiMjVtYVdjZ1puSnZiU0FuTGk0dmMzUnZjbVV2WTI5dVptbG5KMXh1YVcxd2IzSjBJR3h2WVdScGJtY2dabkp2YlNBbkxpNHZkWFJwYkM5c2IyRmthVzVuSjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lYRzVjYm1aMWJtTjBhVzl1SUdkbGRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVJSHdnU1ZWd2JHOWhaRVpwYkdWUGNIUnBiMjRwT2lCaGJua2dlMXh1WEc0Z0lDQWdhV1lvSVNoamIyNW1hV2N1Ylc5amEwcHpiMjViYjJKcUxuVnliRjBnZkh3Z0tHOWlhaTV2Y21sbmFXNVZjbXdnSmlZZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRLU2twSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiVzlqYXlEbXNxSG1uSW5scjdubHVwVG1qcVhsajZQbm1vVG1sYkRtamE1Y2JpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWduYlc5amF5RG1zcUhtbklubHI3bmx1cFRtanFYbGo2UG5tb1RtbGJEbWphNG5LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNTFjbXhkSUh4OElDaHZZbW91YjNKcFoybHVWWEpzSUQ4Z1kyOXVabWxuTG0xdlkydEtjMjl1VzI5aWFpNXZjbWxuYVc1VmNteGRJRG9nSnljcE8xeHVJQ0FnSUM4dklHUmxaWEFnWTI5d2VWeHVJQ0FnSUdSaGRHRWdQU0JLVTA5T0xuQmhjbk5sS0VwVFQwNHVjM1J5YVc1bmFXWjVLR1JoZEdFcEtUdGNiaUFnSUNCamIyNXpkQ0J5WlhNZ1BTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNBZ0lITjBZWFIxYzBOdlpHVTZJREl3TUZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JzYjJGa2FXNW5MbWhwWkdVb0tUdGNiaUFnSUNCeVpYUjFjbTRnY21WelhHNTlYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJSHRjYmlBZ0lDQm5aWFJjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIGxvYWRpbmdfMSA9IHJlcXVpcmUoXCIuLi91dGlsL2xvYWRpbmdcIik7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHN0YXR1c18xID0gcmVxdWlyZShcIi4uL3N0b3JlL3N0YXR1c1wiKTtcbnZhciBtb2NrTWFuYWdlcl8xID0gcmVxdWlyZShcIi4vbW9ja01hbmFnZXJcIik7XG52YXIgY2FjaGVNYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9jYWNoZU1hbmFnZXJcIik7XG52YXIgc2Vzc2lvbk1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL3Nlc3Npb25NYW5hZ2VyXCIpO1xudmFyIHJlc3BvbnNlSGFuZGxlcl8xID0gcmVxdWlyZShcIi4vcmVzcG9uc2VIYW5kbGVyXCIpO1xudmFyIGR1cmF0aW9uUmVwb3J0ZXJfMSA9IHJlcXVpcmUoXCIuL2R1cmF0aW9uUmVwb3J0ZXJcIik7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXRpbC91cmxcIik7XG52YXIgZXJyb3JIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9lcnJvckhhbmRsZXJcIik7XG52YXIgY2F0Y2hIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9jYXRjaEhhbmRsZXJcIik7XG5mdW5jdGlvbiBmb3JtYXQob3JpZ2luVXJsKSB7XG4gICAgaWYgKG9yaWdpblVybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpblVybDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB1cmxQZXJmaXggPSBjb25maWdfMS5kZWZhdWx0LnVybFBlcmZpeCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxQZXJmaXggKyBvcmlnaW5Vcmw7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAodHlwZW9mIG9iai5iZWZvcmVTZW5kID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb2JqLmJlZm9yZVNlbmQoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoucmVMb2dpbkNvdW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIG9iai5yZUxvZ2luQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2JqLnJlTG9naW5Db3VudCsrO1xuICAgIH1cbiAgICBpZiAob2JqLnNob3dMb2FkaW5nKSB7XG4gICAgICAgIGxvYWRpbmdfMS5kZWZhdWx0LnNob3cob2JqLnNob3dMb2FkaW5nKTtcbiAgICB9XG4gICAgaWYgKCFvYmoub3JpZ2luVXJsKSB7XG4gICAgICAgIG9iai5vcmlnaW5VcmwgPSBvYmoudXJsO1xuICAgICAgICBvYmoudXJsID0gZm9ybWF0KG9iai51cmwpO1xuICAgIH1cbiAgICBvYmouX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIG9iai5fcmVqZWN0ID0gcmVqZWN0O1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBpbml0aWFsaXplUmVxdWVzdE9iaihvYmopIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGlmICghb2JqLmRhdGEpIHtcbiAgICAgICAgb2JqLmRhdGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9iai5vcmlnaW5VcmwgIT09IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwgJiYgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIG9iai5kYXRhID0gX19hc3NpZ24oe30sIG9iai5kYXRhLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZGF0YSA9IF9fYXNzaWduKHt9LCBnZCwgb2JqLmRhdGEpO1xuICAgIG9iai5tZXRob2QgPSBvYmoubWV0aG9kIHx8ICdHRVQnO1xuICAgIG9iai5kYXRhVHlwZSA9IG9iai5kYXRhVHlwZSB8fCAnanNvbic7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0LmRvTm90VXNlUXVlcnlTdHJpbmcgJiYgb2JqLm1ldGhvZCAhPT0gXCJHRVRcIikge1xuICAgICAgICBpZiAoc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgKF9iID0ge30sIF9iW2NvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVdID0gc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uLCBfYikpO1xuICAgICAgICB9XG4gICAgICAgIG9iai51cmwgPSB1cmxfMS5kZWZhdWx0LnNldFBhcmFtcyhvYmoudXJsLCBnZCk7XG4gICAgfVxuICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LnN0YXJ0KG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGluaXRpYWxpemVVcGxvYWRGaWxlT2JqKG9iaikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFvYmouZm9ybURhdGEpIHtcbiAgICAgICAgb2JqLmZvcm1EYXRhID0ge307XG4gICAgfVxuICAgIGlmIChvYmoub3JpZ2luVXJsICE9PSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24udXJsICYmIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbih7fSwgb2JqLmZvcm1EYXRhLCAoX2EgPSB7fSwgX2FbY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZV0gPSBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb24sIF9hKSk7XG4gICAgfVxuICAgIHZhciBnZCA9IGdldEdsb2JhbERhdGEoKTtcbiAgICBvYmouZm9ybURhdGEgPSBfX2Fzc2lnbih7fSwgZ2QsIG9iai5mb3JtRGF0YSk7XG4gICAgaWYgKCFjb25maWdfMS5kZWZhdWx0LmRvTm90VXNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbikge1xuICAgICAgICAgICAgb2JqLnVybCA9IHVybF8xLmRlZmF1bHQuc2V0UGFyYW1zKG9iai51cmwsIChfYiA9IHt9LCBfYltjb25maWdfMS5kZWZhdWx0LnNlc3Npb25OYW1lXSA9IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiwgX2IpKTtcbiAgICAgICAgfVxuICAgICAgICBvYmoudXJsID0gdXJsXzEuZGVmYXVsdC5zZXRQYXJhbXMob2JqLnVybCwgZ2QpO1xuICAgIH1cbiAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5zdGFydChvYmopO1xuICAgIHJldHVybiBvYmo7XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxEYXRhKCkge1xuICAgIHZhciBnZCA9IHt9O1xuICAgIGlmICh0eXBlb2YgY29uZmlnXzEuZGVmYXVsdC5nbG9iYWxEYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZ2QgPSBjb25maWdfMS5kZWZhdWx0Lmdsb2JhbERhdGEoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBnZCA9IGNvbmZpZ18xLmRlZmF1bHQuZ2xvYmFsRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIGdkO1xufVxuZnVuY3Rpb24gZG9SZXF1ZXN0KG9iaikge1xuICAgIG9iaiA9IGluaXRpYWxpemVSZXF1ZXN0T2JqKG9iaik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgd3gucmVxdWVzdCh7XG4gICAgICAgICAgICB1cmw6IG9iai51cmwsXG4gICAgICAgICAgICBkYXRhOiBvYmouZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogb2JqLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcjogb2JqLmhlYWRlciB8fCB7fSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBvYmouZGF0YVR5cGUgfHwgJ2pzb24nLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlcl8xLmRlZmF1bHQuc3lzdGVtRXJyb3Iob2JqLCByZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLmNvbXBsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvYmouc2hvd0xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkb1VwbG9hZEZpbGUob2JqKSB7XG4gICAgb2JqID0gaW5pdGlhbGl6ZVVwbG9hZEZpbGVPYmoob2JqKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB3eC51cGxvYWRGaWxlKHtcbiAgICAgICAgICAgIHVybDogb2JqLnVybCxcbiAgICAgICAgICAgIGZpbGVQYXRoOiBvYmouZmlsZVBhdGggfHwgJycsXG4gICAgICAgICAgICBuYW1lOiBvYmoubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBvYmouZm9ybURhdGEsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5zeXN0ZW1FcnJvcihvYmosIHJlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouY29tcGxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBvYmouY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5zaG93TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXzEuZGVmYXVsdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3Qob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgb2JqID0gcHJlRG8ob2JqLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5tb2NrSnNvbikge1xuICAgICAgICAgICAgdmFyIG1vY2tSZXNwb25zZSA9IG1vY2tNYW5hZ2VyXzEuZGVmYXVsdC5nZXQob2JqKTtcbiAgICAgICAgICAgIGlmIChtb2NrUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSByZXNwb25zZUhhbmRsZXJfMS5kZWZhdWx0KG1vY2tSZXNwb25zZSwgb2JqLCAncmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqLmNhY2hlKSB7XG4gICAgICAgICAgICBjYWNoZU1hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKG9iaikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9SZXF1ZXN0KG9iaik7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChyZXMsIG9iaiwgJ3JlcXVlc3QnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGNoSGFuZGxlcl8xLmNhdGNoSGFuZGxlcihlLCBvYmosIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdXBsb2FkRmlsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBvYmogPSBwcmVEbyhvYmosIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGlmIChjb25maWdfMS5kZWZhdWx0Lm1vY2tKc29uKSB7XG4gICAgICAgICAgICB2YXIgbW9ja1Jlc3BvbnNlID0gbW9ja01hbmFnZXJfMS5kZWZhdWx0LmdldChvYmopO1xuICAgICAgICAgICAgaWYgKG1vY2tSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHJlc3BvbnNlSGFuZGxlcl8xLmRlZmF1bHQobW9ja1Jlc3BvbnNlLCBvYmosICd1cGxvYWRGaWxlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5tYWluKG9iaikudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9VcGxvYWRGaWxlKG9iaik7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VIYW5kbGVyXzEuZGVmYXVsdChyZXMsIG9iaiwgJ3VwbG9hZEZpbGUnKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgY2F0Y2hIYW5kbGVyXzEuY2F0Y2hIYW5kbGVyKGUsIG9iaiwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pY21WeGRXVnpkRWhoYm1Sc1pYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDNKbGNYVmxjM1JJWVc1a2JHVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3d5UTBGQmNVTTdRVUZEY2tNc01FTkJRVzlETzBGQlEzQkRMREJEUVVGdlF6dEJRVU53UXl3MlEwRkJkVU03UVVGRGRrTXNLME5CUVhsRE8wRkJRM3BETEcxRVFVRTJRenRCUVVNM1F5eHhSRUZCSzBNN1FVRkRMME1zZFVSQlFXbEVPMEZCUTJwRUxHMURRVUUyUWp0QlFVVTNRaXdyUTBGQk1FTTdRVUZETVVNc0swTkJRVGhETzBGQlJ6bERMRk5CUVZNc1RVRkJUU3hEUVVGRExGTkJRV2xDTzBsQlF6ZENMRWxCUVVrc1UwRkJVeXhEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0UlFVTTVRaXhQUVVGUExGTkJRVk1zUTBGQlFUdExRVU51UWp0VFFVRk5PMUZCUTBnc1NVRkJTU3hUUVVGVExFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkRha01zU1VGQlNTeFBRVUZQTEdkQ1FVRk5MRU5CUVVNc1UwRkJVeXhMUVVGTExGVkJRVlVzUlVGQlJUdFpRVU40UXl4VFFVRlRMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUVR0VFFVTnFRenRSUVVORUxFOUJRVThzVTBGQlV5eEhRVUZITEZOQlFWTXNRMEZCUXp0TFFVTm9RenRCUVVOTUxFTkJRVU03UVVGSFJDeFRRVUZUTEV0QlFVc3NRMEZCSzBNc1IwRkJUU3hGUVVGRkxFOUJRVGhDTEVWQlFVVXNUVUZCSzBJN1NVRkRhRWtzU1VGQlNTeFBRVUZQTEVkQlFVY3NRMEZCUXl4VlFVRlZMRXRCUVVzc1ZVRkJWU3hGUVVGRk8xRkJRM1JETEVkQlFVY3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenRMUVVOd1FqdEpRVVZFTEVsQlFVa3NUMEZCVHl4SFFVRkhMRU5CUVVNc1dVRkJXU3hMUVVGTExGZEJRVmNzUlVGQlJUdFJRVU42UXl4SFFVRkhMRU5CUVVNc1dVRkJXU3hIUVVGSExFTkJRVU1zUTBGQlF6dExRVU40UWp0VFFVRk5PMUZCUTBnc1IwRkJSeXhEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETzB0QlEzUkNPMGxCUlVRc1NVRkJTU3hIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTzFGQlEycENMR2xDUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRMUVVOcVF6dEpRVVZFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhGUVVGRk8xRkJRMmhDTEVkQlFVY3NRMEZCUXl4VFFVRlRMRWRCUVVjc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF6dFJRVU40UWl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkROMEk3U1VGRlJDeEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVOMlFpeEhRVUZITEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenRKUVVWeVFpeFBRVUZQTEVkQlFVY3NRMEZCUXp0QlFVTm1MRU5CUVVNN1FVRkhSQ3hUUVVGVExHOUNRVUZ2UWl4RFFVRkRMRWRCUVcxQ096dEpRVVUzUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUlVGQlJUdFJRVU5ZTEVkQlFVY3NRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRE8wdEJRMnBDTzBsQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1UwRkJVeXhMUVVGTExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWRCUVVjc1NVRkJTU3huUWtGQlRTeERRVUZETEU5QlFVOHNSVUZCUlR0UlFVTTVSQ3hIUVVGSExFTkJRVU1zU1VGQlNTeG5Ra0ZCVVN4SFFVRkhMRU5CUVVNc1NVRkJZeXhsUVVGSExHZENRVUZOTEVOQlFVTXNWMEZCVnl4SlFVRkhMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eE5RVUZGTEVOQlFVTTdTMEZET1VVN1NVRkhSQ3hKUVVGTkxFVkJRVVVzUjBGQlJ5eGhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTXpRaXhIUVVGSExFTkJRVU1zU1VGQlNTeG5Ra0ZCVVN4RlFVRkZMRVZCUVVzc1IwRkJSeXhEUVVGRExFbEJRV01zUTBGQlJTeERRVUZETzBsQlJUVkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNN1NVRkRha01zUjBGQlJ5eERRVUZETEZGQlFWRXNSMEZCUnl4SFFVRkhMRU5CUVVNc1VVRkJVU3hKUVVGSkxFMUJRVTBzUTBGQlF6dEpRVWQwUXl4SlFVRkpMRU5CUVVNc1owSkJRVTBzUTBGQlF5eHRRa0ZCYlVJc1NVRkJTU3hIUVVGSExFTkJRVU1zVFVGQlRTeExRVUZMTEV0QlFVc3NSVUZCUlR0UlFVTnlSQ3hKUVVGSkxHZENRVUZOTEVOQlFVTXNUMEZCVHl4RlFVRkZPMWxCUTJoQ0xFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NZVUZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFpRVUZKTEVkQlFVTXNaMEpCUVUwc1EwRkJReXhYUVVGWExFbEJRVWNzWjBKQlFVMHNRMEZCUXl4UFFVRlBMRTFCUVVjc1EwRkJRenRUUVVNNVJUdFJRVU5FTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1lVRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8wdEJRM2hETzBsQlJVUXNNRUpCUVdkQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUlRWQ0xFOUJRVThzUjBGQlJ5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVZEVMRk5CUVZNc2RVSkJRWFZDTEVOQlFVTXNSMEZCYzBJN08wbEJRMjVFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hGUVVGRk8xRkJRMllzUjBGQlJ5eERRVUZETEZGQlFWRXNSMEZCUnl4RlFVRkZMRU5CUVVNN1MwRkRja0k3U1VGRlJDeEpRVUZKTEVkQlFVY3NRMEZCUXl4VFFVRlRMRXRCUVVzc1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eEZRVUZGTzFGQlF6bEVMRWRCUVVjc1EwRkJReXhSUVVGUkxHZENRVUZSTEVkQlFVY3NRMEZCUXl4UlFVRnJRaXhsUVVGSExHZENRVUZOTEVOQlFVTXNWMEZCVnl4SlFVRkhMR2RDUVVGTkxFTkJRVU1zVDBGQlR5eE5RVUZGTEVOQlFVTTdTMEZEZEVZN1NVRkhSQ3hKUVVGTkxFVkJRVVVzUjBGQlJ5eGhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTXpRaXhIUVVGSExFTkJRVU1zVVVGQlVTeG5Ra0ZCVVN4RlFVRkZMRVZCUVVzc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlJTeERRVUZETzBsQlJURkRMRWxCUVVrc1EwRkJReXhuUWtGQlRTeERRVUZETEcxQ1FVRnRRaXhGUVVGRk8xRkJSVGRDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhQUVVGUExFVkJRVVU3V1VGRGFFSXNSMEZCUnl4RFFVRkRMRWRCUVVjc1IwRkJSeXhoUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRmxCUVVrc1IwRkJReXhuUWtGQlRTeERRVUZETEZkQlFWY3NTVUZCUnl4blFrRkJUU3hEUVVGRExFOUJRVThzVFVGQlJ5eERRVUZETzFOQlF6bEZPMUZCUlVRc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eGhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdTMEZEZUVNN1NVRkZSQ3d3UWtGQlowSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRk5VSXNUMEZCVHl4SFFVRkhMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVFzVTBGQlV5eGhRVUZoTzBsQlEyeENMRWxCUVVrc1JVRkJSU3hIUVVGUkxFVkJRVVVzUTBGQlF6dEpRVU5xUWl4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eFZRVUZWTEV0QlFVc3NWVUZCVlN4RlFVRkZPMUZCUTNwRExFVkJRVVVzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMRlZCUVZVc1JVRkJSU3hEUVVGRE8wdEJRelZDTzFOQlFVMHNTVUZCU1N4UFFVRlBMR2RDUVVGTkxFTkJRVU1zVlVGQlZTeExRVUZMTEZGQlFWRXNSVUZCUlR0UlFVTTVReXhGUVVGRkxFZEJRVWNzWjBKQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNN1MwRkRNVUk3U1VGRFJDeFBRVUZQTEVWQlFVVXNRMEZCUXp0QlFVTmtMRU5CUVVNN1FVRkZSQ3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZ0UWp0SlFVTnNReXhIUVVGSExFZEJRVWNzYjBKQlFXOUNMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGFFTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlF5OUNMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU03V1VGRFVDeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRWRCUVVjN1dVRkRXaXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVsQlFVazdXVUZEWkN4TlFVRk5MRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTA3V1VGRGJFSXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhOUVVGTkxFbEJRVWtzUlVGQlJUdFpRVU40UWl4UlFVRlJMRVZCUVVVc1IwRkJSeXhEUVVGRExGRkJRVkVzU1VGQlNTeE5RVUZOTzFsQlEyaERMRTlCUVU4c1dVRkJReXhIUVVGdlF6dG5Ra0ZEZUVNc1QwRkJUeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVJc1EwRkJRenRaUVVORUxFbEJRVWtzV1VGQlF5eEhRVUUyUWp0blFrRkRPVUlzYzBKQlFWa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJkQ1FVTnVReXhQUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjJRaXhEUVVGRE8xbEJRMFFzVVVGQlVUdG5Ra0ZEU2l4SlFVRkpMRTlCUVU4c1IwRkJSeXhEUVVGRExGRkJRVkVzUzBGQlN5eFZRVUZWTEVWQlFVVTdiMEpCUTNCRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0cFFrRkRiRUk3WjBKQlEwUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1YwRkJWeXhGUVVGRk8yOUNRVU5xUWl4cFFrRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZCTzJsQ1FVTnFRanRaUVVOTUxFTkJRVU03VTBGRFNpeERRVUZETEVOQlFVRTdTVUZEVGl4RFFVRkRMRU5CUVVNc1EwRkJRVHRCUVVOT0xFTkJRVU03UVVGRlJDeFRRVUZUTEZsQlFWa3NRMEZCUXl4SFFVRnpRanRKUVVONFF5eEhRVUZITEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYmtNc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFZRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5PMUZCUXk5Q0xFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTTdXVUZEVml4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFZEJRVWM3V1VGRFdpeFJRVUZSTEVWQlFVVXNSMEZCUnl4RFFVRkRMRkZCUVZFc1NVRkJTU3hGUVVGRk8xbEJRelZDTEVsQlFVa3NSVUZCUlN4SFFVRkhMRU5CUVVNc1NVRkJTU3hKUVVGSkxFVkJRVVU3V1VGRGNFSXNVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhSUVVGUk8xbEJRM1JDTEU5QlFVOHNXVUZCUXl4SFFVRjFRenRuUWtGRE0wTXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFSXNRMEZCUXp0WlFVTkVMRWxCUVVrc1dVRkJReXhIUVVFMlFqdG5Ra0ZET1VJc2MwSkJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU51UXl4UFFVRlBMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU4yUWl4RFFVRkRPMWxCUTBRc1VVRkJVVHRuUWtGRFNpeEpRVUZKTEU5QlFVOHNSMEZCUnl4RFFVRkRMRkZCUVZFc1MwRkJTeXhWUVVGVkxFVkJRVVU3YjBKQlEzQkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dHBRa0ZEYkVJN1owSkJRMFFzU1VGQlNTeEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZPMjlDUVVOcVFpeHBRa0ZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGQk8ybENRVU5xUWp0WlFVTk1MRU5CUVVNN1UwRkRTaXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hUUVVGVExFOUJRVThzUTBGQlF5eEhRVUZ0UWp0SlFVTm9ReXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRMMElzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4SFFVRkhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzFGQlJXeERMRWxCUVVrc1owSkJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc1NVRkJTU3haUVVGWkxFZEJRVWNzY1VKQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFTXNTVUZCU1N4WlFVRlpMRVZCUVVVN1owSkJRMlFzU1VGQlNTeFJRVUZSTEVkQlFVY3NlVUpCUVdVc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1JDeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFRRVU5LTzFGQlJVUXNTVUZCU1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhGUVVGRk8xbEJRMWdzYzBKQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVrSTdVVUZGUkN4M1FrRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRNVUlzVDBGQlR5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkRla0lzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc1IwRkJjME1zUlVGQlJTeEhRVUZITEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1dVRkRka1lzU1VGQlNTeFJRVUZSTEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVOc1FpeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFTkJRVU03V1VGRFVDeFBRVUZQTERKQ1FVRlpMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUVR0UlFVTjJReXhEUVVGRExFTkJRVU1zUTBGQlFUdEpRVU5PTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVWRUxGTkJRVk1zVlVGQlZTeERRVUZETEVkQlFYTkNPMGxCUTNSRExFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCUXl4UFFVRlBMRVZCUVVVc1RVRkJUVHRSUVVNdlFpeEhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1JVRkJSU3hQUVVGUExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdVVUZGYkVNc1NVRkJTU3huUWtGQlRTeERRVUZETEZGQlFWRXNSVUZCUlR0WlFVTnFRaXhKUVVGSkxGbEJRVmtzUjBGQlJ5eHhRa0ZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU40UXl4SlFVRkpMRmxCUVZrc1JVRkJSVHRuUWtGRFpDeEpRVUZKTEZGQlFWRXNSMEZCUnl4NVFrRkJaU3hEUVVGRExGbEJRVmtzUlVGQlJTeEhRVUZITEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1owSkJRMmhGTEU5QlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8yRkJRelZDTzFOQlEwbzdVVUZGUkN4M1FrRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRNVUlzVDBGQlR5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkROVUlzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVVNc1IwRkJSenRaUVVOU0xFbEJRVWtzVVVGQlVTeEhRVUZITEhsQ1FVRmxMRU5CUVVNc1IwRkJlVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkROMFlzU1VGQlNTeFJRVUZSTEVsQlFVa3NTVUZCU1N4RlFVRkZPMmRDUVVOc1FpeFBRVUZQTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRoUVVNMVFqdFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhWUVVGRExFTkJRVU03V1VGRFVDd3lRa0ZCV1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVRTdVVUZEYUVNc1EwRkJReXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkZSQ3hyUWtGQlpUdEpRVU5ZTEUxQlFVMHNVVUZCUVR0SlFVTk9MRTlCUVU4c1UwRkJRVHRKUVVOUUxGVkJRVlVzV1VGQlFUdERRVU5pTEVOQlFVRWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdiRzloWkdsdVp5Qm1jbTl0SUNjdUxpOTFkR2xzTDJ4dllXUnBibWNuWEc1cGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCemRHRjBkWE1nWm5KdmJTQW5MaTR2YzNSdmNtVXZjM1JoZEhWekoxeHVhVzF3YjNKMElHMXZZMnROWVc1aFoyVnlJR1p5YjIwZ0p5NHZiVzlqYTAxaGJtRm5aWEluWEc1cGJYQnZjblFnWTJGamFHVk5ZVzVoWjJWeUlHWnliMjBnSnk0dlkyRmphR1ZOWVc1aFoyVnlKMXh1YVcxd2IzSjBJSE5sYzNOcGIyNU5ZVzVoWjJWeUlHWnliMjBnSnk0dmMyVnpjMmx2YmsxaGJtRm5aWEluWEc1cGJYQnZjblFnY21WemNHOXVjMlZJWVc1a2JHVnlJR1p5YjIwZ0p5NHZjbVZ6Y0c5dWMyVklZVzVrYkdWeUoxeHVhVzF3YjNKMElHUjFjbUYwYVc5dVVtVndiM0owWlhJZ1puSnZiU0JjSWk0dlpIVnlZWFJwYjI1U1pYQnZjblJsY2x3aVhHNXBiWEJ2Y25RZ2RYSnNJR1p5YjIwZ0p5NHVMM1YwYVd3dmRYSnNKMXh1YVcxd2IzSjBJSHNnU1ZKbGNYVmxjM1JQY0hScGIyNHNJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVJSDBnWm5KdmJTQmNJaTR1TDJsdWRHVnlabUZqWlZ3aVhHNXBiWEJ2Y25RZ1pYSnliM0pJWVc1a2JHVnlJR1p5YjIwZ1hDSXVMMlZ5Y205eVNHRnVaR3hsY2x3aU8xeHVhVzF3YjNKMElIc2dZMkYwWTJoSVlXNWtiR1Z5SUgwZ1puSnZiU0FuTGk5allYUmphRWhoYm1Sc1pYSW5PMXh1WEc0dkx5RG1vTHpsdkkvbGpKWjFjbXhjYm1aMWJtTjBhVzl1SUdadmNtMWhkQ2h2Y21sbmFXNVZjbXc2SUhOMGNtbHVaeWtnZTF4dUlDQWdJR2xtSUNodmNtbG5hVzVWY213dWMzUmhjblJ6VjJsMGFDZ25hSFIwY0NjcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnZjbWxuYVc1VmNteGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCc1pYUWdkWEpzVUdWeVptbDRJRDBnWTI5dVptbG5MblZ5YkZCbGNtWnBlRHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCamIyNW1hV2N1ZFhKc1VHVnlabWw0SUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZ5YkZCbGNtWnBlQ0E5SUdOdmJtWnBaeTUxY214UVpYSm1hWGdvS1Z4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMWNteFFaWEptYVhnZ0t5QnZjbWxuYVc1VmNtdzdYRzRnSUNBZ2ZWeHVmVnh1WEc0dkx5RG1pWURtbklub3I3Zm1zWUxsajVIbGg3cmxpWTNwbklEb3BvSGxnWnJubW9Ua3Vvdm1nNFZjYm1aMWJtTjBhVzl1SUhCeVpVUnZQRlFnWlhoMFpXNWtjeUJKVW1WeGRXVnpkRTl3ZEdsdmJpQjhJRWxWY0d4dllXUkdhV3hsVDNCMGFXOXVQaWh2WW1vNklGUXNJSEpsYzI5c2RtVTZJQ2gyWVd4MVpUODZJR0Z1ZVNrZ1BUNGdkbTlwWkN3Z2NtVnFaV04wUHpvZ0tISmxZWE52Ymo4NklHRnVlU2tnUFQ0Z2RtOXBaQ2s2SUZRZ2UxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2IySnFMbUpsWm05eVpWTmxibVFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCdlltb3VZbVZtYjNKbFUyVnVaQ2dwTzF4dUlDQWdJSDFjYmlBZ0lDQXZMeURubWJ2bHZaWG1nSUhscExIbWxZanZ2SXpwaDQzbHBJM25tYnZsdlpYb3JxSG1sYkJjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JRzlpYWk1eVpVeHZaMmx1UTI5MWJuUWdQVDA5SUZ3aWRXNWtaV1pwYm1Wa1hDSXBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxuSmxURzluYVc1RGIzVnVkQ0E5SURBN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYjJKcUxuSmxURzluYVc1RGIzVnVkQ3NyTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltb3VjMmh2ZDB4dllXUnBibWNwSUh0Y2JpQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1emFHOTNLRzlpYWk1emFHOTNURzloWkdsdVp5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLQ0Z2WW1vdWIzSnBaMmx1VlhKc0tTQjdYRzRnSUNBZ0lDQWdJRzlpYWk1dmNtbG5hVzVWY213Z1BTQnZZbW91ZFhKc08xeHVJQ0FnSUNBZ0lDQnZZbW91ZFhKc0lEMGdabTl5YldGMEtHOWlhaTUxY213cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUc5aWFpNWZjbVZ6YjJ4MlpTQTlJSEpsYzI5c2RtVTdYRzRnSUNBZ2IySnFMbDl5WldwbFkzUWdQU0J5WldwbFkzUTdYRzVjYmlBZ0lDQnlaWFIxY200Z2IySnFPMXh1ZlZ4dVhHNHZMeURtb0x6bHZJL2xqSmJscElUbmtJYm9yN2Ztc1lMbm1vUnZZbXJsaG9YbHJybGNibVoxYm1OMGFXOXVJR2x1YVhScFlXeHBlbVZTWlhGMVpYTjBUMkpxS0c5aWFqb2dTVkpsY1hWbGMzUlBjSFJwYjI0cElIdGNibHh1SUNBZ0lHbG1JQ2doYjJKcUxtUmhkR0VwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVJoZEdFZ1BTQjdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYjJKcUxtOXlhV2RwYmxWeWJDQWhQVDBnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dWRYSnNJQ1ltSUhOMFlYUjFjeTV6WlhOemFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNWtZWFJoSUQwZ2V5QXVMaTV2WW1vdVpHRjBZU0JoY3lCdlltcGxZM1FzSUZ0amIyNW1hV2N1YzJWemMybHZiazVoYldWZE9pQnpkR0YwZFhNdWMyVnpjMmx2YmlCOU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklPV21ndWFlbk9hY2llV0ZxT1d4Z09XUGd1YVZzTys4ak9XSW1lYTN1K1dLb0Z4dUlDQWdJR052Ym5OMElHZGtJRDBnWjJWMFIyeHZZbUZzUkdGMFlTZ3BPMXh1SUNBZ0lHOWlhaTVrWVhSaElEMGdleUF1TGk1blpDd2dMaTR1YjJKcUxtUmhkR0VnWVhNZ2IySnFaV04wSUgwN1hHNWNiaUFnSUNCdlltb3ViV1YwYUc5a0lEMGdiMkpxTG0xbGRHaHZaQ0I4ZkNBblIwVlVKenRjYmlBZ0lDQnZZbW91WkdGMFlWUjVjR1VnUFNCdlltb3VaR0YwWVZSNWNHVWdmSHdnSjJwemIyNG5PMXh1WEc0Z0lDQWdMeThnNWFhQzVwNmM2SyszNXJHQzVMaU41cGl2UjBWVTc3eU01WWlaNVp5b1ZWSk01TGl0NkllcTVZcW81WXFnNUxpSzU1bTc1YjJWNW9DQjVaS001WVdvNWJHQTVZK0M1cFd3WEc0Z0lDQWdhV1lnS0NGamIyNW1hV2N1Wkc5T2IzUlZjMlZSZFdWeWVWTjBjbWx1WnlBbUppQnZZbW91YldWMGFHOWtJQ0U5UFNCY0lrZEZWRndpS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6ZEdGMGRYTXVjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnZXlCYlkyOXVabWxuTG5ObGMzTnBiMjVPWVcxbFhUb2djM1JoZEhWekxuTmxjM05wYjI0Z2ZTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYjJKcUxuVnliQ0E5SUhWeWJDNXpaWFJRWVhKaGJYTW9iMkpxTG5WeWJDd2daMlFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1IxY21GMGFXOXVVbVZ3YjNKMFpYSXVjM1JoY25Rb2IySnFLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnZZbW83WEc1OVhHNWNiaTh2SU9hZ3ZPVzhqK1dNbHVXa2hPZVFodVM0aXVTOG9PYVdoK1M3dHVlYWhHOWlhdVdHaGVXdXVWeHVablZ1WTNScGIyNGdhVzVwZEdsaGJHbDZaVlZ3Ykc5aFpFWnBiR1ZQWW1vb2IySnFPaUJKVlhCc2IyRmtSbWxzWlU5d2RHbHZiaWtnZTF4dUlDQWdJR2xtSUNnaGIySnFMbVp2Y20xRVlYUmhLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpNW1iM0p0UkdGMFlTQTlJSHQ5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltb3ViM0pwWjJsdVZYSnNJQ0U5UFNCamIyNW1hV2N1WTI5a1pWUnZVMlZ6YzJsdmJpNTFjbXdnSmlZZ2MzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ2IySnFMbVp2Y20xRVlYUmhJRDBnZXlBdUxpNXZZbW91Wm05eWJVUmhkR0VnWVhNZ2IySnFaV04wTENCYlkyOXVabWxuTG5ObGMzTnBiMjVPWVcxbFhUb2djM1JoZEhWekxuTmxjM05wYjI0Z2ZUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5RGxwb0xtbnB6bW5JbmxoYWpsc1lEbGo0TG1sYkR2dkl6bGlKbm10N3ZsaXFCY2JpQWdJQ0JqYjI1emRDQm5aQ0E5SUdkbGRFZHNiMkpoYkVSaGRHRW9LVHRjYmlBZ0lDQnZZbW91Wm05eWJVUmhkR0VnUFNCN0lDNHVMbWRrTENBdUxpNXZZbW91Wm05eWJVUmhkR0VnZlR0Y2JseHVJQ0FnSUdsbUlDZ2hZMjl1Wm1sbkxtUnZUbTkwVlhObFVYVmxjbmxUZEhKcGJtY3BJSHRjYmlBZ0lDQWdJQ0FnTHk4ZzViQ0c1NW03NlptRzVvQ0I1TG1mNWJpbTVaeW9kWEpzNUxpS1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6ZEdGMGRYTXVjMlZ6YzJsdmJpa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IySnFMblZ5YkNBOUlIVnliQzV6WlhSUVlYSmhiWE1vYjJKcUxuVnliQ3dnZXlCYlkyOXVabWxuTG5ObGMzTnBiMjVPWVcxbFhUb2djM1JoZEhWekxuTmxjM05wYjI0Z2ZTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnTHk4ZzVZV281YkdBNVkrQzVwV3c1WkNNNXBlMjVwUys1WnlvZFhKczVMaUtYRzRnSUNBZ0lDQWdJRzlpYWk1MWNtd2dQU0IxY213dWMyVjBVR0Z5WVcxektHOWlhaTUxY213c0lHZGtLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmtkWEpoZEdsdmJsSmxjRzl5ZEdWeUxuTjBZWEowS0c5aWFpazdYRzVjYmlBZ0lDQnlaWFIxY200Z2IySnFPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQm5aWFJIYkc5aVlXeEVZWFJoS0NrZ2UxeHVJQ0FnSUd4bGRDQm5aRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hSNWNHVnZaaUJqYjI1bWFXY3VaMnh2WW1Gc1JHRjBZU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUdka0lEMGdZMjl1Wm1sbkxtZHNiMkpoYkVSaGRHRW9LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVoyeHZZbUZzUkdGMFlTQTlQVDBnWENKdlltcGxZM1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQm5aQ0E5SUdOdmJtWnBaeTVuYkc5aVlXeEVZWFJoTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1oyUTdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHUnZVbVZ4ZFdWemRDaHZZbW82SUVsU1pYRjFaWE4wVDNCMGFXOXVLU0I3WEc0Z0lDQWdiMkpxSUQwZ2FXNXBkR2xoYkdsNlpWSmxjWFZsYzNSUFltb29iMkpxS1R0Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQjNlQzV5WlhGMVpYTjBLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIVnliRG9nYjJKcUxuVnliQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUc5aWFpNWtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiV1YwYUc5a09pQnZZbW91YldWMGFHOWtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2FHVmhaR1Z5T2lCdlltb3VhR1ZoWkdWeUlIeDhJSHQ5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVZSNWNHVTZJRzlpYWk1a1lYUmhWSGx3WlNCOGZDQW5hbk52Ymljc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J6ZFdOalpYTnpLSEpsY3pvZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkNoeVpYTTZJSGQ0TGtkbGJtVnlZV3hEWVd4c1ltRmphMUpsYzNWc2RDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y205eVNHRnVaR3hsY2k1emVYTjBaVzFGY25KdmNpaHZZbW9zSUhKbGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJYQnNaWFJsS0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdiMkpxTG1OdmJYQnNaWFJsSUQwOVBTQmNJbVoxYm1OMGFXOXVYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiMkpxTG1OdmJYQnNaWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h2WW1vdWMyaHZkMHh2WVdScGJtY3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR2x1Wnk1b2FXUmxLQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmU2xjYm4xY2JseHVablZ1WTNScGIyNGdaRzlWY0d4dllXUkdhV3hsS0c5aWFqb2dTVlZ3Ykc5aFpFWnBiR1ZQY0hScGIyNHBJSHRjYmlBZ0lDQnZZbW9nUFNCcGJtbDBhV0ZzYVhwbFZYQnNiMkZrUm1sc1pVOWlhaWh2WW1vcE8xeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSGQ0TG5Wd2JHOWhaRVpwYkdVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZFhKc09pQnZZbW91ZFhKc0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1sc1pWQmhkR2c2SUc5aWFpNW1hV3hsVUdGMGFDQjhmQ0FuSnl4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklHOWlhaTV1WVcxbElIeDhJQ2NuTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdabTl5YlVSaGRHRTZJRzlpYWk1bWIzSnRSR0YwWVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE4xWTJObGMzTW9jbVZ6T2lCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMyOXNkbVVvY21WektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjem9nZDNndVIyVnVaWEpoYkVOaGJHeGlZV05yVW1WemRXeDBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlhKeWIzSklZVzVrYkdWeUxuTjVjM1JsYlVWeWNtOXlLRzlpYWl3Z2NtVnpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXRjR3hsZEdVb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ2WW1vdVkyOXRjR3hsZEdVZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J2WW1vdVkyOXRjR3hsZEdVb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0c5aWFpNXphRzkzVEc5aFpHbHVaeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrYVc1bkxtaHBaR1VvS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzVtZFc1amRHbHZiaUJ5WlhGMVpYTjBLRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRwT2lCaGJua2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJSEJ5WlVSdktHOWlhaXdnY21WemIyeDJaU3dnY21WcVpXTjBLVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxtMXZZMnRLYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdiVzlqYTFKbGMzQnZibk5sSUQwZ2JXOWphMDFoYm1GblpYSXVaMlYwS0c5aWFpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9iVzlqYTFKbGMzQnZibk5sS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJSEpsYzNCdmJuTmxJRDBnY21WemNHOXVjMlZJWVc1a2JHVnlLRzF2WTJ0U1pYTndiMjV6WlN3Z2IySnFMQ0FuY21WeGRXVnpkQ2NwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxLSEpsYzNCdmJuTmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHZZbW91WTJGamFHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhZMmhsVFdGdVlXZGxjaTVuWlhRb2IySnFLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lITmxjM05wYjI1TllXNWhaMlZ5TG0xaGFXNG9iMkpxS1M1MGFHVnVLQ2dwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJrYjFKbGNYVmxjM1FvYjJKcUtWeHVJQ0FnSUNBZ0lDQjlLUzUwYUdWdUtDaHlaWE1wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaWE53YjI1elpTQTlJSEpsYzNCdmJuTmxTR0Z1Wkd4bGNpaHlaWE1nWVhNZ2QzZ3VVbVZ4ZFdWemRGTjFZMk5sYzNORFlXeHNZbUZqYTFKbGMzVnNkQ3dnYjJKcUxDQW5jbVZ4ZFdWemRDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSEpsYzNCdmJuTmxJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTaHlaWE53YjI1elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMHBMbU5oZEdOb0tDaGxLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZMkYwWTJoSVlXNWtiR1Z5S0dVc0lHOWlhaXdnY21WcVpXTjBLVnh1SUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJSDBwWEc1OVhHNWNibVoxYm1OMGFXOXVJSFZ3Ykc5aFpFWnBiR1VvYjJKcU9pQkpWWEJzYjJGa1JtbHNaVTl3ZEdsdmJpazZJR0Z1ZVNCN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lDQWdiMkpxSUQwZ2NISmxSRzhvYjJKcUxDQnlaWE52YkhabExDQnlaV3BsWTNRcE8xeHVYRzRnSUNBZ0lDQWdJR2xtSUNoamIyNW1hV2N1Ylc5amEwcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR3hsZENCdGIyTnJVbVZ6Y0c5dWMyVWdQU0J0YjJOclRXRnVZV2RsY2k1blpYUW9iMkpxS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGIyTnJVbVZ6Y0c5dWMyVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ2NtVnpjRzl1YzJVZ1BTQnlaWE53YjI1elpVaGhibVJzWlhJb2JXOWphMUpsYzNCdmJuTmxMQ0J2WW1vc0lDZDFjR3h2WVdSR2FXeGxKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9jbVZ6Y0c5dWMyVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYzJWemMybHZiazFoYm1GblpYSXViV0ZwYmlodlltb3BMblJvWlc0b0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHUnZWWEJzYjJGa1JtbHNaU2h2WW1vcFhHNGdJQ0FnSUNBZ0lIMHBMblJvWlc0b0tISmxjeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElISmxjM0J2Ym5ObElEMGdjbVZ6Y0c5dWMyVklZVzVrYkdWeUtISmxjeUJoY3lCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTENCdlltb3NJQ2QxY0d4dllXUkdhV3hsSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2NtVnpjRzl1YzJVZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0hKbGMzQnZibk5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNrdVkyRjBZMmdvS0dVcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTmhkR05vU0dGdVpHeGxjaWhsTENCdlltb3NJSEpsYW1WamRDbGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlLVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCN1hHNGdJQ0FnWm05eWJXRjBMRnh1SUNBZ0lISmxjWFZsYzNRc1hHNGdJQ0FnZFhCc2IyRmtSbWxzWlZ4dWZWeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29uZmlnXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvY29uZmlnXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBjYWNoZU1hbmFnZXJfMSA9IHJlcXVpcmUoXCIuL2NhY2hlTWFuYWdlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHNlc3Npb25NYW5hZ2VyXzEgPSByZXF1aXJlKFwiLi9zZXNzaW9uTWFuYWdlclwiKTtcbmZ1bmN0aW9uIHJlc3BvbnNlKHJlcywgb2JqLCBtZXRob2QpIHtcbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcy5kYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gSlNPTi5wYXJzZShyZXMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IHsgdHlwZTogJ3VwbG9hZC1lcnJvcicsIHJlczogZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9uUmVwb3J0ZXJfMS5kZWZhdWx0LmVuZChvYmopO1xuICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5sb2dpblRyaWdnZXIocmVzLmRhdGEpICYmIG9iai5yZUxvZ2luQ291bnQgIT09IHVuZGVmaW5lZCAmJiBvYmoucmVMb2dpbkNvdW50IDwgY29uZmlnXzEuZGVmYXVsdC5yZUxvZ2luTGltaXQpIHtcbiAgICAgICAgICAgIHNlc3Npb25NYW5hZ2VyXzEuZGVmYXVsdC5kZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJlcXVlc3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQucmVxdWVzdChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kID09PSBcInVwbG9hZEZpbGVcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQudXBsb2FkRmlsZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc1RyaWdnZXIocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgcmVhbERhdGEgPSBcIlwiO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuc3VjY2Vzc0RhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbERhdGEgPSBjb25maWdfMS5kZWZhdWx0LnN1Y2Nlc3NEYXRhKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxEYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRnVuY3Rpb24gc3VjY2Vzc0RhdGEgb2NjdXIgZXJyb3I6IFwiICsgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9iai5ub0NhY2hlRmxhc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9iai5zdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnN1Y2Nlc3MocmVhbERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhY2hlTWFuYWdlcl8xLmRlZmF1bHQuc2V0KG9iaiwgcmVhbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgeyB0eXBlOiAnbG9naWMtZXJyb3InLCByZXM6IHJlcyB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyB7IHR5cGU6ICdodHRwLWVycm9yJywgcmVzOiByZXMgfTtcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSByZXNwb25zZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnpjRzl1YzJWSVlXNWtiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMjF2WkhWc1pTOXlaWE53YjI1elpVaGhibVJzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN3d1EwRkJiME03UVVGRGNFTXNiVVJCUVRaRE8wRkJRemRETEN0RFFVRjVRenRCUVVONlF5eDFSRUZCYVVRN1FVRkRha1FzYlVSQlFUWkRPMEZCUnpkRExGTkJRVk1zVVVGQlVTeERRVU5pTEVkQlFYbEZMRVZCUTNwRkxFZEJRWFZETEVWQlEzWkRMRTFCUVdkRE8wbEJSV2hETEVsQlFVa3NSMEZCUnl4RFFVRkRMRlZCUVZVc1MwRkJTeXhIUVVGSExFVkJRVVU3VVVGSGVFSXNTVUZCU1N4UFFVRlBMRWRCUVVjc1EwRkJReXhKUVVGSkxFdEJRVXNzVVVGQlVTeEZRVUZGTzFsQlF6bENMRWxCUVVrN1owSkJRMEVzUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0aFFVTnVRenRaUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzJkQ1FVTlNMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzWTBGQll5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRoUVVNeFF6dFRRVU5LTzFGQlJVUXNNRUpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUlRGQ0xFbEJRVWtzWjBKQlFVMHNRMEZCUXl4WlFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4WlFVRlpMRXRCUVVzc1UwRkJVeXhKUVVGSkxFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhaUVVGaExFVkJRVVU3V1VGRk4wY3NkMEpCUVdNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFpRVU0xUWl4SlFVRkpMRTFCUVUwc1MwRkJTeXhUUVVGVExFVkJRVVU3WjBKQlEzUkNMRTlCUVU4c2QwSkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCY1VJc1EwRkJReXhEUVVGRE8yRkJRM2hFTzJsQ1FVRk5MRWxCUVVrc1RVRkJUU3hMUVVGTExGbEJRVmtzUlVGQlJUdG5Ra0ZEYUVNc1QwRkJUeXgzUWtGQll5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRjNRaXhEUVVGRExFTkJRVU03WVVGRE9VUTdVMEZEU2p0aFFVRk5MRWxCUVVrc1owSkJRVTBzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJSWGhETEVsQlFVa3NVVUZCVVN4SFFVRnpReXhGUVVGRkxFTkJRVU03V1VGRGNrUXNTVUZCU1R0blFrRkRRU3hKUVVGSkxFOUJRVThzWjBKQlFVMHNRMEZCUXl4WFFVRlhMRXRCUVVzc1ZVRkJWU3hGUVVGRk8yOUNRVU14UXl4UlFVRlJMRWRCUVVjc1owSkJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU16UXp0eFFrRkJUVHR2UWtGRFNDeFJRVUZSTEVkQlFVY3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenRwUWtGRGRrSTdZVUZEU2p0WlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8yZENRVU5TTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc2IwTkJRVzlETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRNMFE3V1VGRFJDeEpRVUZKTEVOQlFVVXNSMEZCYzBJc1EwRkJReXhaUVVGWkxFVkJRVVU3WjBKQlJYWkRMRWxCUVVrc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eExRVUZMTEZWQlFWVXNSVUZCUlR0dlFrRkRia01zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRwUWtGRGVrSTdjVUpCUVUwN2IwSkJRMGdzVDBGQlR5eFJRVUZSTEVOQlFVTTdhVUpCUTI1Q08yRkJRMG83V1VGRlJDeHpRa0ZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFVkJRVVVzVVVGQlVTeERRVUZETEVOQlFVTTdVMEZEYmtNN1lVRkJUVHRaUVVWSUxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNZVUZCWVN4RlFVRkZMRWRCUVVjc1MwRkJRU3hGUVVGRkxFTkJRVUU3VTBGRGNrTTdTMEZEU2p0VFFVRk5PMUZCUlVnc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFpRVUZaTEVWQlFVVXNSMEZCUnl4TFFVRkJMRVZCUVVVc1EwRkJRVHRMUVVOd1F6dEJRVU5NTEVOQlFVTTdRVUZGUkN4clFrRkJaU3hSUVVGUkxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCeVpYRjFaWE4wU0dGdVpHeGxjaUJtY205dElDY3VMM0psY1hWbGMzUklZVzVrYkdWeUoxeHVhVzF3YjNKMElHTmhZMmhsVFdGdVlXZGxjaUJtY205dElDY3VMMk5oWTJobFRXRnVZV2RsY2lkY2JtbHRjRzl5ZENCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5SUdaeWIyMGdKeTR2WkhWeVlYUnBiMjVTWlhCdmNuUmxjaWRjYm1sdGNHOXlkQ0J6WlhOemFXOXVUV0Z1WVdkbGNpQm1jbTl0SUNjdUwzTmxjM05wYjI1TllXNWhaMlZ5SjF4dWFXMXdiM0owSUhzZ1NWSmxjWFZsYzNSUGNIUnBiMjRzSUVsVmNHeHZZV1JHYVd4bFQzQjBhVzl1SUgwZ1puSnZiU0JjSWk0dUwybHVkR1Z5Wm1GalpWd2lPMXh1WEc1bWRXNWpkR2x2YmlCeVpYTndiMjV6WlNoY2JpQWdJQ0J5WlhNNklIZDRMbEpsY1hWbGMzUlRkV05qWlhOelEyRnNiR0poWTJ0U1pYTjFiSFFnZkNCM2VDNVZjR3h2WVdSR2FXeGxVM1ZqWTJWemMwTmhiR3hpWVdOclVtVnpkV3gwTEZ4dUlDQWdJRzlpYWpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2Yml4Y2JpQWdJQ0J0WlhSb2IyUTZJRndpY21WeGRXVnpkRndpSUh3Z1hDSjFjR3h2WVdSR2FXeGxYQ0pjYmlrNklHRnVlU0I3WEc0Z0lDQWdhV1lnS0hKbGN5NXpkR0YwZFhORGIyUmxJRDA5UFNBeU1EQXBJSHRjYmx4dUlDQWdJQ0FnSUNBdkx5RGxoYnpscnJsMWNHeHZZV1JHYVd4bDZMK1U1WnVlNTVxRWNtVnpMbVJoZEdIbGo2L29nNzNtbUsvbHJaZm5yS2JrdUxKY2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnlaWE11WkdGMFlTQTlQVDBnWENKemRISnBibWRjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE11WkdGMFlTQTlJRXBUVDA0dWNHRnljMlVvY21WekxtUmhkR0VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2NtOTNJSHNnZEhsd1pUb2dKM1Z3Ykc5aFpDMWxjbkp2Y2ljc0lISmxjem9nWlNCOU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNWxibVFvYjJKcUtUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1kyOXVabWxuTG14dloybHVWSEpwWjJkbGNpRW9jbVZ6TG1SaGRHRXBJQ1ltSUc5aWFpNXlaVXh2WjJsdVEyOTFiblFnSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUJ2WW1vdWNtVk1iMmRwYmtOdmRXNTBJRHdnWTI5dVptbG5MbkpsVEc5bmFXNU1hVzFwZENFcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPZVp1K1c5bGVhQWdlV2tzZWFWaU8rOGpPUzRsT21IamVpdmxlYXNvZWFWc09TNGplaTJoZWkvaCttRmplZTlybHh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnpjMmx2YmsxaGJtRm5aWEl1WkdWc1UyVnpjMmx2YmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0p5WlhGMVpYTjBYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WeGRXVnpkRWhoYm1Sc1pYSXVjbVZ4ZFdWemRDaHZZbW9nWVhNZ1NWSmxjWFZsYzNSUGNIUnBiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2h0WlhSb2IyUWdQVDA5SUZ3aWRYQnNiMkZrUm1sc1pWd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsY1hWbGMzUklZVzVrYkdWeUxuVndiRzloWkVacGJHVW9iMkpxSUdGeklFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjVtYVdjdWMzVmpZMlZ6YzFSeWFXZG5aWElvY21WekxtUmhkR0VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlEbWpxWGxqNlBvdjVUbG01N21pSkRsaXAvbm9JRmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bGRDQnlaV0ZzUkdGMFlUb2djM1J5YVc1bklId2dTVUZ1ZVU5aWFtVmpkQ0I4SUVGeWNtRjVRblZtWm1WeUlEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdWMzVmpZMlZ6YzBSaGRHRWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WaGJFUmhkR0VnUFNCamIyNW1hV2N1YzNWalkyVnpjMFJoZEdFb2NtVnpMbVJoZEdFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsWVd4RVlYUmhJRDBnY21WekxtUmhkR0U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9YQ0pHZFc1amRHbHZiaUJ6ZFdOalpYTnpSR0YwWVNCdlkyTjFjaUJsY25KdmNqb2dYQ0lnS3lCbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaEtHOWlhaUJoY3lCSlVtVnhkV1Z6ZEU5d2RHbHZiaWt1Ym05RFlXTm9aVVpzWVhOb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1TGk2NUxxRzVMK2Q2SytCNmFHMTZaMmk1TGlONlplcTU0T0I3N3lNNVlpWjVMaU41WnVlNkxDRDc3eU01WStxNXBpdjU3eVQ1YTJZNXB5QTVwYXc1cFd3NW8ydTc3eU01YjZGNUxpTDVxeWg2TCtiNVlXbDVZYU41NVNvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb3VjM1ZqWTJWemN5QTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5aWFpNXpkV05qWlhOektISmxZV3hFWVhSaEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZoYkVSaGRHRTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4ZzU3eVQ1YTJZNWEyWTVZS29YRzRnSUNBZ0lDQWdJQ0FnSUNCallXTm9aVTFoYm1GblpYSXVjMlYwS0c5aWFpd2djbVZoYkVSaGRHRXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1bzZsNVkrajZMK1U1WnVlNWFTeDZMU2w1NkNCWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkc2IyZHBZeTFsY25KdmNpY3NJSEpsY3lCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBdkx5Qm9kSFJ3YytpL2xPV2JudWVLdHVhQWdlZWdnZW1kbmpJd01GeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCN0lIUjVjR1U2SUNkb2RIUndMV1Z5Y205eUp5d2djbVZ6SUgxY2JpQWdJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElISmxjM0J2Ym5ObE8xeHVJbDE5IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc3RhdHVzXzEgPSByZXF1aXJlKFwiLi4vc3RvcmUvc3RhdHVzXCIpO1xudmFyIGNvbmZpZ18xID0gcmVxdWlyZShcIi4uL3N0b3JlL2NvbmZpZ1wiKTtcbnZhciBlcnJvckhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL2Vycm9ySGFuZGxlclwiKTtcbnZhciBkdXJhdGlvblJlcG9ydGVyXzEgPSByZXF1aXJlKFwiLi9kdXJhdGlvblJlcG9ydGVyXCIpO1xudmFyIHJlcXVlc3RIYW5kbGVyXzEgPSByZXF1aXJlKFwiLi9yZXF1ZXN0SGFuZGxlclwiKTtcbnZhciBsb2FkaW5nXzEgPSByZXF1aXJlKFwiLi4vdXRpbC9sb2FkaW5nXCIpO1xudmFyIHJlcXVlc3RfMSA9IHJlcXVpcmUoXCIuLi9hcGkvcmVxdWVzdFwiKTtcbnZhciBjaGVja1Nlc3Npb25Qcm9taXNlID0gbnVsbDtcbmZ1bmN0aW9uIGNoZWNrU2Vzc2lvbigpIHtcbiAgICBpZiAoIWNoZWNrU2Vzc2lvblByb21pc2UpIHtcbiAgICAgICAgY2hlY2tTZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid3guY2hlY2tTZXNzaW9uKClcIik7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHd4LmNoZWNrU2Vzc2lvbih7XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb0xvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2NoZWNrU2Vzc2lvbicsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrU2Vzc2lvblByb21pc2U7XG59XG5mdW5jdGlvbiBpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkge1xuICAgIGlmICghc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSkge1xuICAgICAgICBkZWxTZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0xvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGlmIChpc1Nlc3Npb25FeHBpcmVPckVtcHR5KCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRvTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxudmFyIGxvZ2luUHJvbWlzZSA9IG51bGw7XG5mdW5jdGlvbiBkb0xvZ2luKCkge1xuICAgIGlmICghbG9naW5Qcm9taXNlKSB7XG4gICAgICAgIGxvZ2luUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGxvZ2luKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9naW5Qcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGxvZ2luUHJvbWlzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbG9hZGluZ18xLmRlZmF1bHQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QocmVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvZ2luUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGxvZ2luKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd3eC5sb2dpbicpO1xuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2RlMlNlc3Npb24ocmVzLmNvZGUpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IFwi6K+356iN5ZCO6YeN6K+VW2NvZGUg6I635Y+W5aSx6LSlXVwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICBkdXJhdGlvblJlcG9ydGVyXzEuZGVmYXVsdC5yZXBvcnQoJ3d4X2xvZ2luJywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogXCLnmbvlvZXlpLHotKVcIiwgXCJjb250ZW50XCI6IHJlcy5lcnJNc2cgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0U2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID0gdHJ1ZTtcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICB3eC5zZXRTdG9yYWdlKHtcbiAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5LFxuICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWUsXG4gICAgICAgIGRhdGE6IHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvblxuICAgIH0pO1xufVxuZnVuY3Rpb24gY29kZTJTZXNzaW9uKGNvZGUpIHtcbiAgICB2YXIgZGF0YTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGF0YSA9IGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5kYXRhKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmRhdGEgfHwge307XG4gICAgfVxuICAgIGRhdGFbY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLmNvZGVOYW1lXSA9IGNvZGU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHd4LnJlcXVlc3Qoe1xuICAgICAgICAgICAgdXJsOiByZXF1ZXN0SGFuZGxlcl8xLmRlZmF1bHQuZm9ybWF0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi51cmwpLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIG1ldGhvZDogY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5jb2RlVG9TZXNzaW9uLnJlcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25SZXBvcnRlcl8xLmRlZmF1bHQucmVwb3J0KGNvbmZpZ18xLmRlZmF1bHQuY29kZVRvU2Vzc2lvbi5yZXBvcnQsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBjb25maWdfMS5kZWZhdWx0LmNvZGVUb1Nlc3Npb24uc3VjY2VzcyhyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ18xLmRlZmF1bHQuZG9Ob3RDaGVja1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZVRpbWUgJiYgY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RyaW5nKHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbkV4cGlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHd4LnNldFN0b3JhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0dXNfMS5kZWZhdWx0LnNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JIYW5kbGVyXzEuZGVmYXVsdC5nZXRFcnJvck1zZyhyZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIiB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7IHRpdGxlOiBcIueZu+W9leWksei0pVwiLCBcImNvbnRlbnRcIjogXCLor7fnqI3lkI7ph43or5VcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkZWxTZXNzaW9uKCkge1xuICAgIHN0YXR1c18xLmRlZmF1bHQuc2Vzc2lvbiA9ICcnO1xuICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICBrZXk6IGNvbmZpZ18xLmRlZmF1bHQuc2Vzc2lvbk5hbWVcbiAgICB9KTtcbiAgICBpZiAoY29uZmlnXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlVGltZSAmJiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXkpIHtcbiAgICAgICAgc3RhdHVzXzEuZGVmYXVsdC5zZXNzaW9uRXhwaXJlID0gSW5maW5pdHk7XG4gICAgICAgIHd4LnJlbW92ZVN0b3JhZ2Uoe1xuICAgICAgICAgICAga2V5OiBjb25maWdfMS5kZWZhdWx0LnNlc3Npb25FeHBpcmVLZXlcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFpbihyZWxhdGVkUmVxdWVzdE9iaikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZXRyeSA9ICFyZWxhdGVkUmVxdWVzdE9ialxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWluKCkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpOyB9XG4gICAgICAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlcXVlc3RfMS5kZWZhdWx0KHJlbGF0ZWRSZXF1ZXN0T2JqKS50aGVuKHJlbGF0ZWRSZXF1ZXN0T2JqLl9yZXNvbHZlKS5jYXRjaChyZWxhdGVkUmVxdWVzdE9iai5fcmVqZWN0KTsgfTtcbiAgICAgICAgcmV0dXJuIGNoZWNrTG9naW4oKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWdfMS5kZWZhdWx0LmRvTm90Q2hlY2tTZXNzaW9uID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBfYS50aXRsZSwgY29udGVudCA9IF9hLmNvbnRlbnQ7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXJfMS5kZWZhdWx0LmRvRXJyb3IodGl0bGUsIGNvbnRlbnQsIHJldHJ5KTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoeyB0aXRsZTogdGl0bGUsIGNvbnRlbnQ6IGNvbnRlbnQgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIG1haW46IG1haW4sXG4gICAgc2V0U2Vzc2lvbjogc2V0U2Vzc2lvbixcbiAgICBkZWxTZXNzaW9uOiBkZWxTZXNzaW9uXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWemMybHZiazFoYm1GblpYSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTl6Y21NdmJXOWtkV3hsTDNObGMzTnBiMjVOWVc1aFoyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlFVRXNNRU5CUVc5RE8wRkJRM0JETERCRFFVRnZRenRCUVVOd1F5d3JRMEZCZVVNN1FVRkRla01zZFVSQlFXbEVPMEZCUTJwRUxHMUVRVUUyUXp0QlFVTTNReXd5UTBGQmNVTTdRVUZEY2tNc01FTkJRVzlETzBGQlNYQkRMRWxCUVVrc2JVSkJRVzFDTEVkQlFWRXNTVUZCU1N4RFFVRkRPMEZCUlhCRExGTkJRVk1zV1VGQldUdEpRVU5xUWl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVTdVVUZEZEVJc2JVSkJRVzFDTEVkQlFVY3NTVUZCU1N4UFFVRlBMRU5CUVVNc1ZVRkJReXhQUVVGUExFVkJRVVVzVFVGQlRUdFpRVU01UXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRU5CUVVNN1dVRkRha01zU1VGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFpRVU51UXl4RlFVRkZMRU5CUVVNc1dVRkJXU3hEUVVGRE8yZENRVU5hTEU5QlFVODdiMEpCUlVnc1QwRkJUeXhQUVVGUExFVkJRVVVzUTBGQlF6dG5Ra0ZEY2tJc1EwRkJRenRuUWtGRFJDeEpRVUZKTzI5Q1FVVkJMRlZCUVZVc1JVRkJSU3hEUVVGRE8yOUNRVU5pTEU5QlFVOHNUMEZCVHl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRE8zZENRVU5zUWl4UFFVRlBMRTlCUVU4c1JVRkJSU3hEUVVGRE8yOUNRVU55UWl4RFFVRkRMRVZCUVVVc1ZVRkJReXhIUVVGUk8zZENRVU5TTEU5QlFVOHNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU4yUWl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFVDeERRVUZETzJkQ1FVTkVMRkZCUVZFN2IwSkJRMG9zU1VGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dHZRa0ZEYWtNc01FSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRuUWtGRE0wUXNRMEZCUXp0aFFVTktMRU5CUVVNc1EwRkJRVHRSUVVOT0xFTkJRVU1zUTBGQlF5eERRVUZCTzB0QlEwdzdTVUZEUkN4UFFVRlBMRzFDUVVGdFFpeERRVUZETzBGQlF5OUNMRU5CUVVNN1FVRkhSQ3hUUVVGVExITkNRVUZ6UWp0SlFVTXpRaXhKUVVGSkxFTkJRVU1zWjBKQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVN1VVRkZha0lzVDBGQlR5eEpRVUZKTEVOQlFVRTdTMEZEWkR0SlFVTkVMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3hKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMR2RDUVVGTkxFTkJRVU1zWVVGQllTeEZRVUZGTzFGQlJYcEZMRlZCUVZVc1JVRkJSU3hEUVVGRE8xRkJRMklzVDBGQlR5eEpRVUZKTEVOQlFVRTdTMEZEWkR0SlFVTkVMRTlCUVU4c1MwRkJTeXhEUVVGQk8wRkJRMmhDTEVOQlFVTTdRVUZGUkN4VFFVRlRMRlZCUVZVN1NVRkRaaXhQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1VVRkRMMElzU1VGQlNTeHpRa0ZCYzBJc1JVRkJSU3hGUVVGRk8xbEJSVEZDTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTJoRExFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMmRDUVVOc1FpeFBRVUZQTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTNKQ0xFTkJRVU1zUlVGQlJTeFZRVUZETEVkQlFWRTdaMEpCUTFJc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZGtJc1EwRkJReXhEUVVGRExFTkJRVUU3VTBGRFREdGhRVUZOTzFsQlJVZ3NUMEZCVHl4UFFVRlBMRVZCUVVVc1EwRkJRenRUUVVOd1FqdEpRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkJPMEZCUTA0c1EwRkJRenRCUVVkRUxFbEJRVWtzV1VGQldTeEhRVUZSTEVsQlFVa3NRMEZCUXp0QlFVVTNRaXhUUVVGVExFOUJRVTg3U1VGRFdpeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMUZCUTJZc1dVRkJXU3hIUVVGSExFbEJRVWtzVDBGQlR5eERRVUZETEZWQlFVTXNUMEZCVHl4RlFVRkZMRTFCUVUwN1dVRkRka01zUzBGQlN5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMmRDUVVOVUxGbEJRVmtzUjBGQlJ5eEpRVUZKTEVOQlFVTTdaMEpCUTNCQ0xFOUJRVThzVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEY2tJc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEZWQlFVTXNSMEZCUnp0blFrRkRWQ3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETzJkQ1FVTndRaXhwUWtGQlR5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMmRDUVVObUxFOUJRVThzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNaQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlExQXNRMEZCUXl4RFFVRkRMRU5CUVVFN1MwRkRURHRKUVVORUxFOUJRVThzV1VGQldTeERRVUZETzBGQlEzaENMRU5CUVVNN1FVRkZSQ3hUUVVGVExFdEJRVXM3U1VGRFZpeFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRlZCUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTA3VVVGREwwSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU40UWl4SlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMUZCUTI1RExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTTdXVUZEVEN4UFFVRlBMRmxCUVVNc1IwRkJSenRuUWtGRFVDeEpRVUZKTEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVN2IwSkJRMVlzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03ZDBKQlEzaENMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03YjBKQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eFZRVUZETEVkQlFVYzdkMEpCUTFRc1QwRkJUeXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUTNaQ0xFTkJRVU1zUTBGQlF5eERRVUZCTzJsQ1FVTk1PM0ZDUVVGTk8yOUNRVU5JTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVU1zUTBGQlF5eERRVUZETzJsQ1FVTnFSVHRaUVVOTUxFTkJRVU03V1VGRFJDeFJRVUZSTzJkQ1FVTktMRWxCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1owSkJRMnBETERCQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0JFTEVOQlFVTTdXVUZEUkN4SlFVRkpMRmxCUVVNc1IwRkJSenRuUWtGRFNpeFBRVUZQTEUxQlFVMHNRMEZCUXl4RlFVRkRMRXRCUVVzc1JVRkJSU3hOUVVGTkxFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVNc1EwRkJReXhEUVVGRE8xbEJRekZFTEVOQlFVTTdVMEZEU2l4RFFVRkRMRU5CUVVFN1NVRkRUaXhEUVVGRExFTkJRVU1zUTBGQlFUdEJRVU5PTEVOQlFVTTdRVUZGUkN4VFFVRlRMRlZCUVZVc1EwRkJReXhQUVVGbE8wbEJReTlDTEdkQ1FVRk5MRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzUTBGQlF6dEpRVVY2UWl4blFrRkJUU3hEUVVGRExHbENRVUZwUWl4SFFVRkhMRWxCUVVrc1EwRkJRenRKUVVWb1F5eEpRVUZKTEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NaMEpCUVUwc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0UlFVTnlSQ3huUWtGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRWxCUVVrc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeEhRVUZITEdkQ1FVRk5MRU5CUVVNc2FVSkJRV2xDTEVOQlFVTTdVVUZEZGtVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6dFpRVU5XTEVkQlFVY3NSVUZCUlN4blFrRkJUU3hEUVVGRExHZENRVUZuUWp0WlFVTTFRaXhKUVVGSkxFVkJRVVVzVFVGQlRTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRE8xTkJRM0pETEVOQlFVTXNRMEZCUVR0TFFVTk1PMGxCUTBRc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF6dFJRVU5XTEVkQlFVY3NSVUZCUlN4blFrRkJUU3hEUVVGRExGZEJRWEZDTzFGQlEycERMRWxCUVVrc1JVRkJSU3huUWtGQlRTeERRVUZETEU5QlFVODdTMEZEZGtJc1EwRkJReXhEUVVGRE8wRkJRMUFzUTBGQlF6dEJRVVZFTEZOQlFWTXNXVUZCV1N4RFFVRkRMRWxCUVZrN1NVRkRPVUlzU1VGQlNTeEpRVUZUTEVOQlFVTTdTVUZGWkN4SlFVRkpMRTlCUVU4c1owSkJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4TFFVRkxMRlZCUVZVc1JVRkJSVHRSUVVOcVJDeEpRVUZKTEVkQlFVY3NaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTTdTMEZEZEVNN1UwRkJUVHRSUVVOSUxFbEJRVWtzUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETzB0QlF6RkRPMGxCUTBRc1NVRkJTU3hEUVVGRExHZENRVUZOTEVOQlFVTXNZVUZCWVN4RFFVRkRMRkZCUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dEpRVVUxUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBJc1NVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRSUVVOcVF5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTFBc1IwRkJSeXhGUVVGRkxIZENRVUZqTEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXp0WlFVTndSQ3hKUVVGSkxFMUJRVUU3V1VGRFNpeE5RVUZOTEVWQlFVVXNaMEpCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEpRVUZKTEV0QlFVczdXVUZETlVNc1QwRkJUeXhaUVVGRExFZEJRVzlETzJkQ1FVTjRReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEV0QlFVc3NSMEZCUnl4RlFVRkZPMjlDUVVWNFFpeEpRVUZKTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUlVGQlJUdDNRa0ZETjBJc1NVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenQzUWtGREwwSXNNRUpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVFN2NVSkJRMjVGTzI5Q1FVVkVMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dHZRa0ZEV0N4SlFVRkpPM2RDUVVOQkxFTkJRVU1zUjBGQlJ5eG5Ra0ZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPM0ZDUVVNNVF6dHZRa0ZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHR4UWtGRFdEdHZRa0ZGUkN4SlFVRkpMRU5CUVVNc1JVRkJSVHQzUWtGRFNDeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03ZDBKQlJXNUNMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1NVRkJTU3hEUVVGRE8zZENRVVZvUXl4SlFVRkpMR2RDUVVGTkxFTkJRVU1zYVVKQlFXbENMRWxCUVVrc1owSkJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSVHMwUWtGRGNrUXNaMEpCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1IwRkJSeXhuUWtGQlRTeERRVUZETEdsQ1FVRnBRaXhEUVVGRE96UkNRVU4yUlN4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRE8yZERRVU5XTEVkQlFVY3NSVUZCUlN4blFrRkJUU3hEUVVGRExHZENRVUZuUWp0blEwRkROVUlzU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4blFrRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF6czJRa0ZEY2tNc1EwRkJReXhEUVVGQk8zbENRVU5NTzNkQ1FVTkVMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU03TkVKQlExWXNSMEZCUnl4RlFVRkZMR2RDUVVGTkxFTkJRVU1zVjBGQlZ6czBRa0ZEZGtJc1NVRkJTU3hGUVVGRkxHZENRVUZOTEVOQlFVTXNUMEZCVHp0NVFrRkRka0lzUTBGQlF5eERRVUZETzNkQ1FVTklMRTlCUVU4c1QwRkJUeXhGUVVGRkxFTkJRVU03Y1VKQlEzQkNPM2xDUVVGTk8zZENRVU5JTEU5QlFVOHNUVUZCVFN4RFFVRkRMSE5DUVVGWkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN2NVSkJRMmhFTzJsQ1FVTktPM0ZDUVVGTk8yOUNRVU5JTEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNUMEZCVHl4RlFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRGRFUTdXVUZEVEN4RFFVRkRPMWxCUTBRc1VVRkJVVHRaUVVOU0xFTkJRVU03V1VGRFJDeEpRVUZKTEVWQlFVVTdaMEpCUTBZc1QwRkJUeXhOUVVGTkxFTkJRVU1zUlVGQlF5eExRVUZMTEVWQlFVVXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSU3hQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlEzWkVMRU5CUVVNN1UwRkRTaXhEUVVGRExFTkJRVUU3U1VGRFRpeERRVUZETEVOQlFVTXNRMEZCUVR0QlFVTk9MRU5CUVVNN1FVRkhSQ3hUUVVGVExGVkJRVlU3U1VGRFppeG5Ra0ZCVFN4RFFVRkRMRTlCUVU4c1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGNFSXNSVUZCUlN4RFFVRkRMR0ZCUVdFc1EwRkJRenRSUVVOaUxFZEJRVWNzUlVGQlJTeG5Ra0ZCVFN4RFFVRkRMRmRCUVhGQ08wdEJRM0JETEVOQlFVTXNRMEZCUXp0SlFVTklMRWxCUVVrc1owSkJRVTBzUTBGQlF5eHBRa0ZCYVVJc1NVRkJTU3huUWtGQlRTeERRVUZETEdkQ1FVRm5RaXhGUVVGRk8xRkJRM0pFTEdkQ1FVRk5MRU5CUVVNc1lVRkJZU3hIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU5vUXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRE8xbEJRMklzUjBGQlJ5eEZRVUZGTEdkQ1FVRk5MRU5CUVVNc1owSkJRV2RDTzFOQlF5OUNMRU5CUVVNc1EwRkJRVHRMUVVOTU8wRkJRMHdzUTBGQlF6dEJRVVZFTEZOQlFWTXNTVUZCU1N4RFFVRkRMR2xDUVVGelJEdEpRVU5vUlN4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExGVkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMDdVVUZETDBJc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eHBRa0ZCYVVJN1dVRkZNVUlzUTBGQlF5eERRVUZETEdOQlFVMHNUMEZCUVN4SlFVRkpMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGc1F5eERRVUZyUXp0WlFVVXhReXhEUVVGRExFTkJRVU1zWTBGQlRTeFBRVUZCTEdsQ1FVRlBMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRTlCUVU4c1EwRkJReXhGUVVFMVJpeERRVUUwUml4RFFVRkRPMUZCUTNwSExFOUJRVThzVlVGQlZTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNKQ0xFOUJRVThzWjBKQlFVMHNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVWQlFVVXNRMEZCUVR0UlFVTjRSU3hEUVVGRExFVkJRVVVzVlVGQlF5eEZRVUZuUWp0blFrRkJaaXhuUWtGQlN5eEZRVUZGTEc5Q1FVRlBPMWxCUTJZc2MwSkJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU0xUXl4UFFVRlBMRTFCUVUwc1EwRkJReXhGUVVGRExFdEJRVXNzVDBGQlFTeEZRVUZGTEU5QlFVOHNVMEZCUVN4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1F5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRTaXhQUVVGUExFOUJRVThzUlVGQlJTeERRVUZETzFGQlEzSkNMRU5CUVVNc1JVRkJSU3hWUVVGRExFVkJRV2RDTzJkQ1FVRm1MR2RDUVVGTExFVkJRVVVzYjBKQlFVODdXVUZEWml4elFrRkJXU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xbEJRelZETEU5QlFVOHNUVUZCVFN4RFFVRkRMRVZCUVVNc1MwRkJTeXhQUVVGQkxFVkJRVVVzVDBGQlR5eFRRVUZCTEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFTkJRVU1zUTBGQlF5eERRVUZCTzBsQlEwNHNRMEZCUXl4RFFVRkRMRU5CUVVFN1FVRkRUaXhEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4SlFVRkpMRTFCUVVFN1NVRkRTaXhWUVVGVkxGbEJRVUU3U1VGRFZpeFZRVUZWTEZsQlFVRTdRMEZEWWl4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSE4wWVhSMWN5Qm1jbTl0SUNjdUxpOXpkRzl5WlM5emRHRjBkWE1uWEc1cGJYQnZjblFnWTI5dVptbG5JR1p5YjIwZ0p5NHVMM04wYjNKbEwyTnZibVpwWnlkY2JtbHRjRzl5ZENCbGNuSnZja2hoYm1Sc1pYSWdabkp2YlNBbkxpOWxjbkp2Y2toaGJtUnNaWEluWEc1cGJYQnZjblFnWkhWeVlYUnBiMjVTWlhCdmNuUmxjaUJtY205dElDY3VMMlIxY21GMGFXOXVVbVZ3YjNKMFpYSW5YRzVwYlhCdmNuUWdjbVZ4ZFdWemRFaGhibVJzWlhJZ1puSnZiU0FuTGk5eVpYRjFaWE4wU0dGdVpHeGxjaWRjYm1sdGNHOXlkQ0JzYjJGa2FXNW5JR1p5YjIwZ0p5NHVMM1YwYVd3dmJHOWhaR2x1WnlkY2JtbHRjRzl5ZENCeVpYRjFaWE4wSUdaeWIyMGdKeTR1TDJGd2FTOXlaWEYxWlhOMEoxeHVhVzF3YjNKMElIc2dTVkpsY1hWbGMzUlBjSFJwYjI0c0lFbFZjR3h2WVdSR2FXeGxUM0IwYVc5dUlIMGdabkp2YlNCY0lpNHVMMmx1ZEdWeVptRmpaVndpTzF4dVhHNHZLaURubEovbGtiM2xrYWptbkovbGhvWGxqNnJsZ1pya3VJRG1yS0hubW9SamFHVmphMU5sYzNOcGIyNGdLaTljYm14bGRDQmphR1ZqYTFObGMzTnBiMjVRY205dGFYTmxPaUJoYm5rZ1BTQnVkV3hzTzF4dVhHNW1kVzVqZEdsdmJpQmphR1ZqYTFObGMzTnBiMjRvS1NCN1hHNGdJQ0FnYVdZZ0tDRmphR1ZqYTFObGMzTnBiMjVRY205dGFYTmxLU0I3WEc0Z0lDQWdJQ0FnSUdOb1pXTnJVMlZ6YzJsdmJsQnliMjFwYzJVZ1BTQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbXh2WnloY0luZDRMbU5vWldOclUyVnpjMmx2YmlncFhDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYzNSaGNuUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSGQ0TG1Ob1pXTnJVMlZ6YzJsdmJpaDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjM1ZqWTJWemN5Z3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1NW03NWIyVjVvQ0I1cHlKNXBXSTc3eU01TGlVNVp5bzVweXM1NVNmNVpHOTVaR281cHlmNVlhRjVwZWc2YUc3NVlhTjVxT0E2YXFNNUxxR1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnlaWE52YkhabEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5RG5tYnZsdlpYbWdJSG92NGZtbko5Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR1ZzVTJWemMybHZiaWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1pHOU1iMmRwYmlncExuUm9aVzRvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxjMjlzZG1Vb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlN3Z0tISmxjem9nWVc1NUtUMCtlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoeVpYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5WVhScGIyNVNaWEJ2Y25SbGNpNXlaWEJ2Y25Rb0ozZDRYMk5vWldOclUyVnpjMmx2Ymljc0lITjBZWEowTENCbGJtUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCamFHVmphMU5sYzNOcGIyNVFjbTl0YVhObE8xeHVmVnh1WEc0dktpRGxpS1RtbHExelpYTnphVzl1NXBpdjVaQ201TGk2NTZtNjVvaVc1YmV5NkwrSDVweWZJQ292WEc1bWRXNWpkR2x2YmlCcGMxTmxjM05wYjI1RmVIQnBjbVZQY2tWdGNIUjVLQ2tnZTF4dUlDQWdJR2xtSUNnaGMzUmhkSFZ6TG5ObGMzTnBiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzU3eVQ1YTJZNUxpdDVyS2g1cHlKYzJWemMybHZibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlZ4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WVWFXMWxJQ1ltSUc1bGR5QkVZWFJsS0NrdVoyVjBWR2x0WlNncElENGdjM1JoZEhWekxuTmxjM05wYjI1RmVIQnBjbVVwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzVweUo2SzYrNTcydTVweXM1Wnl3YzJWemMybHZidWU4aytXdG1PYVh0dW1YdE8rOGpPUzRsT2U4aytXdG1PYVh0dW1YdE9XM3N1V0lzRnh1SUNBZ0lDQWdJQ0JrWld4VFpYTnphVzl1S0NrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpWeHVmVnh1WEc1bWRXNWpkR2x2YmlCamFHVmphMHh2WjJsdUtDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTZ29jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUdsbUlDaHBjMU5sYzNOcGIyNUZlSEJwY21WUGNrVnRjSFI1S0NrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklPYXlvZWFjaWVlWnUrbVpodWFBZ2UrOGpPUzRqZW1jZ09pbWdlV0dqV05vWldOclUyVnpjMmx2Ymx4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1Wm1sbkxtUnZUbTkwUTJobFkydFRaWE56YVc5dUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmtiMHh2WjJsdUtDa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNJQ2h5WlhNNklHRnVlU2s5UG50Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1Z4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNTd5VDVhMlk1TGl0NXB5SmMyVnpjMmx2YnVTNGxPYWNxdWkvaCthY24xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJSDBwWEc1OVhHNWNiaThxSU9lWnUrbVpodWExZ2Vlb2krZWFoSEJ5YjIxcGMyVWdLaTljYm14bGRDQnNiMmRwYmxCeWIyMXBjMlU2SUdGdWVTQTlJRzUxYkd3N1hHNWNibVoxYm1OMGFXOXVJR1J2VEc5bmFXNG9LU0I3WEc0Z0lDQWdhV1lnS0NGc2IyZHBibEJ5YjIxcGMyVXBJSHRjYmlBZ0lDQWdJQ0FnYkc5bmFXNVFjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlVvS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkc5bmFXNG9LUzUwYUdWdUtDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyZHBibEJ5YjIxcGMyVWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTnZiSFpsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1M1allYUmphQ2dvY21WektTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkc5bmFXNVFjbTl0YVhObElEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyRmthVzVuTG1ocFpHVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtISmxjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHeHZaMmx1VUhKdmJXbHpaVHRjYm4xY2JseHVablZ1WTNScGIyNGdiRzluYVc0b0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVzYjJjb0ozZDRMbXh2WjJsdUp5azdYRzRnSUNBZ0lDQWdJR052Ym5OMElITjBZWEowSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDazdYRzRnSUNBZ0lDQWdJSGQ0TG14dloybHVLSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITjFZMk5sYzNNb2NtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tISmxjeTVqYjJSbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOdlpHVXlVMlZ6YzJsdmJpaHlaWE11WTI5a1pTa3VkR2hsYmlnb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtTNWpZWFJqYUNnb2NtVnpLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY21WcVpXTjBLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGFtVmpkQ2g3ZEdsMGJHVTZJRndpNTVtNzViMlY1YVN4NkxTbFhDSXNJRndpWTI5dWRHVnVkRndpT2lCY0l1aXZ0K2VvamVXUWp1bUhqZWl2bFZ0amIyUmxJT2lPdCtXUGx1V2tzZWkwcFYxY0luMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyMXdiR1YwWlNncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtUWdQU0J1WlhjZ1JHRjBaU2dwTG1kbGRGUnBiV1VvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG5KbGNHOXlkQ2duZDNoZmJHOW5hVzRuTENCemRHRnlkQ3dnWlc1a0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtWVdsc0tISmxjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9lM1JwZEd4bE9pQmNJdWVadStXOWxlV2tzZWkwcFZ3aUxDQmNJbU52Ym5SbGJuUmNJam9nY21WekxtVnljazF6WjMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOUtWeHVJQ0FnSUgwcFhHNTlYRzVjYm1aMWJtTjBhVzl1SUhObGRGTmxjM05wYjI0b2MyVnpjMmx2YmpvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnYzNSaGRIVnpMbk5sYzNOcGIyNGdQU0J6WlhOemFXOXVPMXh1SUNBZ0lDOHZJT2FOb3VXYm51YWRwZWVhaEhObGMzTnBiMjd2dkl6a3VJM3BuSURvcG9IbGhvMWphR1ZqYTFObGMzTnBiMjVjYmlBZ0lDQmpiMjVtYVdjdVpHOU9iM1JEYUdWamExTmxjM05wYjI0Z1BTQjBjblZsTzF4dUlDQWdJQzh2SU9XbWd1YWVuT2FjaWVpdXZ1ZTlydWFjck9XY3NITmxjM05wYjI3b3Y0Zm1uSi9tbDdicGw3UmNiaUFnSUNCcFppQW9ZMjl1Wm1sbkxuTmxjM05wYjI1RmVIQnBjbVZVYVcxbElDWW1JR052Ym1acFp5NXpaWE56YVc5dVJYaHdhWEpsUzJWNUtTQjdYRzRnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDa2dLeUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVTdYRzRnSUNBZ0lDQWdJSGQ0TG5ObGRGTjBiM0poWjJVb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNU9pQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFNklGTjBjbWx1WnloemRHRjBkWE11YzJWemMybHZia1Y0Y0dseVpTbGNiaUFnSUNBZ0lDQWdmU2xjYmlBZ0lDQjlYRzRnSUNBZ2QzZ3VjMlYwVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUd0bGVUb2dZMjl1Wm1sbkxuTmxjM05wYjI1T1lXMWxJR0Z6SUhOMGNtbHVaeXhjYmlBZ0lDQWdJQ0FnWkdGMFlUb2djM1JoZEhWekxuTmxjM05wYjI1Y2JpQWdJQ0I5S1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWTI5a1pUSlRaWE56YVc5dUtHTnZaR1U2SUhOMGNtbHVaeWtnZTF4dUlDQWdJR3hsZENCa1lYUmhPaUJoYm5rN1hHNGdJQ0FnTHk4Z1kyOWtaVlJ2VTJWemMybHZiaTVrWVhSaDVwU3Y1b3lCNVllOTVwV3dYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVrWVhSaElEMDlQU0JjSW1aMWJtTjBhVzl1WENJcElIdGNiaUFnSUNBZ0lDQWdaR0YwWVNBOUlHTnZibVpwWnk1amIyUmxWRzlUWlhOemFXOXVMbVJoZEdFb0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCa1lYUmhJRDBnWTI5dVptbG5MbU52WkdWVWIxTmxjM05wYjI0dVpHRjBZU0I4ZkNCN2ZUdGNiaUFnSUNCOVhHNGdJQ0FnWkdGMFlWdGpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTVqYjJSbFRtRnRaU0ZkSUQwZ1kyOWtaVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVUhKdmJXbHpaU2dvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J6ZEdGeWRDQTlJRzVsZHlCRVlYUmxLQ2t1WjJWMFZHbHRaU2dwTzF4dUlDQWdJQ0FnSUNCM2VDNXlaWEYxWlhOMEtIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhWeWJEb2djbVZ4ZFdWemRFaGhibVJzWlhJdVptOXliV0YwS0dOdmJtWnBaeTVqYjJSbFZHOVRaWE56YVc5dUxuVnliQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdiV1YwYUc5a09pQmpiMjVtYVdjdVkyOWtaVlJ2VTJWemMybHZiaTV0WlhSb2IyUWdmSHdnSjBkRlZDY3NYRzRnSUNBZ0lDQWdJQ0FnSUNCemRXTmpaWE56S0hKbGN6b2dkM2d1VW1WeGRXVnpkRk4xWTJObGMzTkRZV3hzWW1GamExSmxjM1ZzZENrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h5WlhNdWMzUmhkSFZ6UTI5a1pTQTlQVDBnTWpBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dklPaUFsK2FYdHVTNGl1YUtwVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMjl1Wm1sbkxtTnZaR1ZVYjFObGMzTnBiMjR1Y21Wd2IzSjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1pXNWtJRDBnYm1WM0lFUmhkR1VvS1M1blpYUlVhVzFsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSmhkR2x2YmxKbGNHOXlkR1Z5TG5KbGNHOXlkQ2hqYjI1bWFXY3VZMjlrWlZSdlUyVnpjMmx2Ymk1eVpYQnZjblFzSUhOMFlYSjBMQ0JsYm1RcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnY3lBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6SUQwZ1kyOXVabWxuTG1OdlpHVlViMU5sYzNOcGIyNHVjM1ZqWTJWemN5aHlaWE11WkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1kyRjBZMmdnS0dVcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNoektTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0YwZFhNdWMyVnpjMmx2YmlBOUlITTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMeURtamFMbG01N21uYVhubW9SelpYTnphVzl1Nzd5TTVMaU42WnlBNkthQjVZYU5ZMmhsWTJ0VFpYTnphVzl1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1bWFXY3VaRzlPYjNSRGFHVmphMU5sYzNOcGIyNGdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGc1YWFDNXA2YzVweUo2SzYrNTcydTVweXM1Wnl3YzJWemMybHZidWkvaCthY24rYVh0dW1YdEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTnZibVpwWnk1elpYTnphVzl1Ulhod2FYSmxWR2x0WlNBbUppQmpiMjVtYVdjdWMyVnpjMmx2YmtWNGNHbHlaVXRsZVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE4wWVhSMWN5NXpaWE56YVc5dVJYaHdhWEpsSUQwZ2JtVjNJRVJoZEdVb0tTNW5aWFJVYVcxbEtDa2dLeUJqYjI1bWFXY3VjMlZ6YzJsdmJrVjRjR2x5WlZScGJXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZDNndWMyVjBVM1J2Y21GblpTaDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNUZlSEJwY21WTFpYa3NYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0U2SUZOMGNtbHVaeWh6ZEdGMGRYTXVjMlZ6YzJsdmJrVjRjR2x5WlNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkM2d1YzJWMFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMlY1T2lCamIyNW1hV2N1YzJWemMybHZiazVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVRvZ2MzUmhkSFZ6TG5ObGMzTnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYzI5c2RtVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ5WldwbFkzUW9aWEp5YjNKSVlXNWtiR1Z5TG1kbGRFVnljbTl5VFhObktISmxjeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVNklGd2k1NW03NWIyVjVhU3g2TFNsWENJc0lGd2lZMjl1ZEdWdWRGd2lPaUJjSXVpdnQrZW9qZVdRanVtSGplaXZsVndpZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR052YlhCc1pYUmxLQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHWmhhV3c2SUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZxWldOMEtIdDBhWFJzWlRvZ1hDTG5tYnZsdlpYbHBMSG90S1ZjSWl3Z1hDSmpiMjUwWlc1MFhDSTZJRndpNksrMzU2aU41WkNPNlllTjZLK1ZYQ0o5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlNsY2JpQWdJQ0I5S1Z4dWZWeHVYRzR2S2lEbXVJWG5xYnB6WlhOemFXOXVJQ292WEc1bWRXNWpkR2x2YmlCa1pXeFRaWE56YVc5dUtDa2dlMXh1SUNBZ0lITjBZWFIxY3k1elpYTnphVzl1SUQwZ0p5YzdYRzRnSUNBZ2QzZ3VjbVZ0YjNabFUzUnZjbUZuWlNoN1hHNGdJQ0FnSUNBZ0lHdGxlVG9nWTI5dVptbG5Mbk5sYzNOcGIyNU9ZVzFsSUdGeklITjBjbWx1WjF4dUlDQWdJSDBwTzF4dUlDQWdJR2xtSUNoamIyNW1hV2N1YzJWemMybHZia1Y0Y0dseVpWUnBiV1VnSmlZZ1kyOXVabWxuTG5ObGMzTnBiMjVGZUhCcGNtVkxaWGtwSUh0Y2JpQWdJQ0FnSUNBZ2MzUmhkSFZ6TG5ObGMzTnBiMjVGZUhCcGNtVWdQU0JKYm1acGJtbDBlVHRjYmlBZ0lDQWdJQ0FnZDNndWNtVnRiM1psVTNSdmNtRm5aU2g3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnJaWGs2SUdOdmJtWnBaeTV6WlhOemFXOXVSWGh3YVhKbFMyVjVYRzRnSUNBZ0lDQWdJSDBwWEc0Z0lDQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQnRZV2x1S0hKbGJHRjBaV1JTWlhGMVpYTjBUMkpxUHpvZ1NWSmxjWFZsYzNSUGNIUnBiMjRnZkNCSlZYQnNiMkZrUm1sc1pVOXdkR2x2YmlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1VISnZiV2x6WlNnb2NtVnpiMngyWlN3Z2NtVnFaV04wS1NBOVBpQjdYRzRnSUNBZ0lDQWdJR3hsZENCeVpYUnllU0E5SUNGeVpXeGhkR1ZrVW1WeGRXVnpkRTlpYWx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnNWFhQzVwNmM1cktoNXB5SjVZV3o2SUdVNTVxRTZLKzM1ckdDNzd5TTZZZU42SytWNVkyejZMQ0Q1NVNvNkllcTZMcXJYRzRnSUNBZ0lDQWdJQ0FnSUNBL0lDZ3BJRDArSUcxaGFXNG9LUzUwYUdWdUtISmxjMjlzZG1VcExtTmhkR05vS0hKbGFtVmpkQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZJT1dtZ3VhZW5PYWNpZVdGcytpQmxPZWFoT2l2dCtheGd1KzhqT21IamVpdmxlV05zK2l3ZytlVXFPYUpnT1dGcytpQmxPZWFoT2l2dCtheGdseHVJQ0FnSUNBZ0lDQWdJQ0FnT2lBb0tTQTlQaUJ5WlhGMVpYTjBLSEpsYkdGMFpXUlNaWEYxWlhOMFQySnFLUzUwYUdWdUtISmxiR0YwWldSU1pYRjFaWE4wVDJKcUxsOXlaWE52YkhabEtTNWpZWFJqYUNoeVpXeGhkR1ZrVW1WeGRXVnpkRTlpYWk1ZmNtVnFaV04wS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOb1pXTnJURzluYVc0b0tTNTBhR1Z1S0NncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCamIyNW1hV2N1Wkc5T2IzUkRhR1ZqYTFObGMzTnBiMjRnUHlCUWNtOXRhWE5sTG5KbGMyOXNkbVVvS1NBNklHTm9aV05yVTJWemMybHZiaWdwWEc0Z0lDQWdJQ0FnSUgwc0lDaDdkR2wwYkdVc0lHTnZiblJsYm5SOUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2toaGJtUnNaWEl1Wkc5RmNuSnZjaWgwYVhSc1pTd2dZMjl1ZEdWdWRDd2djbVYwY25rcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsYW1WamRDaDdkR2wwYkdVc0lHTnZiblJsYm5SOUtUdGNiaUFnSUNBZ0lDQWdmU2t1ZEdobGJpZ29LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjbVZ6YjJ4MlpTZ3BPMXh1SUNBZ0lDQWdJQ0I5TENBb2UzUnBkR3hsTENCamIyNTBaVzUwZlNrOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCbGNuSnZja2hoYm1Sc1pYSXVaRzlGY25KdmNpaDBhWFJzWlN3Z1kyOXVkR1Z1ZEN3Z2NtVjBjbmtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlISmxhbVZqZENoN2RHbDBiR1VzSUdOdmJuUmxiblI5S1R0Y2JpQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNCOUtWeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdiV0ZwYml4Y2JpQWdJQ0J6WlhSVFpYTnphVzl1TEZ4dUlDQWdJR1JsYkZObGMzTnBiMjVjYm4xY2JpSmRmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICBzZXNzaW9uTmFtZTogXCJzZXNzaW9uXCIsXG4gICAgbG9naW5UcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNvZGVUb1Nlc3Npb246IHtcbiAgICAgICAgdXJsOiBcIlwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7IH1cbiAgICB9LFxuICAgIHN1Y2Nlc3NUcmlnZ2VyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgdXJsUGVyZml4OiBcIlwiLFxuICAgIGRvTm90Q2hlY2tTZXNzaW9uOiBmYWxzZSxcbiAgICBlcnJvclRpdGxlOiBcIuaTjeS9nOWksei0pVwiLFxuICAgIGVycm9yQ29udGVudDogZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgZXJyb3JSZXRyeUJ0bjogZmFsc2UsXG4gICAgcmVMb2dpbkxpbWl0OiAzLFxuICAgIGVycm9yQ2FsbGJhY2s6IG51bGwsXG4gICAgcmVwb3J0Q0dJOiBmYWxzZSxcbiAgICBtb2NrSnNvbjogZmFsc2UsXG4gICAgZ2xvYmFsRGF0YTogZmFsc2UsXG4gICAgc2Vzc2lvbkV4cGlyZUtleTogXCJzZXNzaW9uRXhwaXJlS2V5XCJcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWZhdWx0Q29uZmlnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dVptbG5MbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2YzNKakwzTjBiM0psTDJOdmJtWnBaeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3p0QlFVVkJMRWxCUVUwc1lVRkJZU3hIUVVGblFqdEpRVU12UWl4WFFVRlhMRVZCUVVVc1UwRkJVenRKUVVOMFFpeFpRVUZaTzFGQlExSXNUMEZCVHl4TFFVRkxMRU5CUVVFN1NVRkRhRUlzUTBGQlF6dEpRVU5FTEdGQlFXRXNSVUZCUlR0UlFVTllMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRMUFzVDBGQlR5eEZRVUZGTEdOQlFVMHNRMEZCUXp0TFFVTnVRanRKUVVORUxHTkJRV003VVVGRFZpeFBRVUZQTEVsQlFVa3NRMEZCUVR0SlFVTm1MRU5CUVVNN1NVRkRSQ3hUUVVGVExFVkJRVVVzUlVGQlJUdEpRVU5pTEdsQ1FVRnBRaXhGUVVGRkxFdEJRVXM3U1VGRGVFSXNWVUZCVlN4RlFVRkZMRTFCUVUwN1NVRkRiRUlzV1VGQldTeFpRVUZETEVkQlFWRTdVVUZEYWtJc1QwRkJUeXhIUVVGSExFTkJRVUU3U1VGRFpDeERRVUZETzBsQlEwUXNZVUZCWVN4RlFVRkZMRXRCUVVzN1NVRkRjRUlzV1VGQldTeEZRVUZGTEVOQlFVTTdTVUZEWml4aFFVRmhMRVZCUVVVc1NVRkJTVHRKUVVOdVFpeFRRVUZUTEVWQlFVVXNTMEZCU3p0SlFVTm9RaXhSUVVGUkxFVkJRVVVzUzBGQlN6dEpRVU5tTEZWQlFWVXNSVUZCUlN4TFFVRkxPMGxCUldwQ0xHZENRVUZuUWl4RlFVRkZMR3RDUVVGclFqdERRVU4yUXl4RFFVRkRPMEZCUlVZc2EwSkJRV1VzWVVGQllTeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1NVbHVhWFJQY0hScGIyNGdmU0JtY205dElDY3VMaTlwYm5SbGNtWmhZMlVuWEc1Y2JtTnZibk4wSUdSbFptRjFiSFJEYjI1bWFXYzZJRWxKYm1sMFQzQjBhVzl1SUQwZ2UxeHVJQ0FnSUhObGMzTnBiMjVPWVcxbE9pQmNJbk5sYzNOcGIyNWNJaXhjYmlBZ0lDQnNiMmRwYmxSeWFXZG5aWElvS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVnh1SUNBZ0lIMHNYRzRnSUNBZ1kyOWtaVlJ2VTJWemMybHZiam9nZTF4dUlDQWdJQ0FnSUNCMWNtdzZJRndpWENJc1hHNGdJQ0FnSUNBZ0lITjFZMk5sYzNNNklDZ3BQVDRnZTMxY2JpQWdJQ0I5TEZ4dUlDQWdJSE4xWTJObGMzTlVjbWxuWjJWeUtDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlZ4dUlDQWdJSDBzWEc0Z0lDQWdkWEpzVUdWeVptbDRPaUJjSWx3aUxGeHVJQ0FnSUdSdlRtOTBRMmhsWTJ0VFpYTnphVzl1T2lCbVlXeHpaU3hjYmlBZ0lDQmxjbkp2Y2xScGRHeGxPaUJjSXVhVGplUzluT1drc2VpMHBWd2lMRnh1SUNBZ0lHVnljbTl5UTI5dWRHVnVkQ2h5WlhNNklHRnVlU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WelhHNGdJQ0FnZlN4Y2JpQWdJQ0JsY25KdmNsSmxkSEo1UW5SdU9pQm1ZV3h6WlN4Y2JpQWdJQ0J5WlV4dloybHVUR2x0YVhRNklETXNYRzRnSUNBZ1pYSnliM0pEWVd4c1ltRmphem9nYm5Wc2JDeGNiaUFnSUNCeVpYQnZjblJEUjBrNklHWmhiSE5sTEZ4dUlDQWdJRzF2WTJ0S2MyOXVPaUJtWVd4elpTeGNiaUFnSUNCbmJHOWlZV3hFWVhSaE9pQm1ZV3h6WlN4Y2JpQWdJQ0F2THlCelpYTnphVzl1NVp5bzVweXM1Wnl3NTd5VDVhMlk1NXFFYTJWNVhHNGdJQ0FnYzJWemMybHZia1Y0Y0dseVpVdGxlVG9nWENKelpYTnphVzl1Ulhod2FYSmxTMlY1WENKY2JuMDdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR1JsWm1GMWJIUkRiMjVtYVdjN1hHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2Vzc2lvbjogJycsXG4gICAgc2Vzc2lvbkV4cGlyZTogSW5maW5pdHlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM1JoZEhWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZjM0pqTDNOMGIzSmxMM04wWVhSMWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenRCUVVGQkxHdENRVUZsTzBsQlExZ3NUMEZCVHl4RlFVRkZMRVZCUVZrN1NVRkZja0lzWVVGQllTeEZRVUZGTEZGQlFXdENPME5CUXpkQ0xFTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKbGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMlZ6YzJsdmJqb2dKeWNnWVhNZ2MzUnlhVzVuTEZ4dUlDQWdJQzh2SUhObGMzTnBiMjdvdjRmbW5KL25tb1RtbDdicGw3VG5ncmxjYmlBZ0lDQnpaWE56YVc5dVJYaHdhWEpsT2lCSmJtWnBibWwwZVNCaGN5QnVkVzFpWlhKY2JuMGdZWE1nWVc1NVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBzaG93KHR4dCkge1xuICAgIHd4LnNob3dUb2FzdCh7XG4gICAgICAgIHRpdGxlOiB0eXBlb2YgdHh0ID09PSAnYm9vbGVhbicgPyAn5Yqg6L295LitJyA6IHR4dCxcbiAgICAgICAgaWNvbjogJ2xvYWRpbmcnLFxuICAgICAgICBtYXNrOiB0cnVlLFxuICAgICAgICBkdXJhdGlvbjogNjAwMDBcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgd3guaGlkZVRvYXN0KHt9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICBzaG93OiBzaG93LFxuICAgIGhpZGU6IGhpZGVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzloWkdsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5MWRHbHNMMnh2WVdScGJtY3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3UVVGQlFTeFRRVUZUTEVsQlFVa3NRMEZCUXl4SFFVRnhRanRKUVVNdlFpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTFRc1MwRkJTeXhGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzFGQlF6ZERMRWxCUVVrc1JVRkJSU3hUUVVGVE8xRkJRMllzU1VGQlNTeEZRVUZGTEVsQlFVazdVVUZEVml4UlFVRlJMRVZCUVVVc1MwRkJTenRMUVVOc1FpeERRVUZETEVOQlFVRTdRVUZEVGl4RFFVRkRPMEZCUlVRc1UwRkJVeXhKUVVGSk8wbEJRMVFzUlVGQlJTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOeVFpeERRVUZETzBGQlJVUXNhMEpCUVdVN1NVRkRXQ3hKUVVGSkxFMUJRVUU3U1VGRFNpeEpRVUZKTEUxQlFVRTdRMEZEVUN4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWm5WdVkzUnBiMjRnYzJodmR5aDBlSFE2SUdKdmIyeGxZVzRnZkNCemRISnBibWNwSUh0Y2JpQWdJQ0IzZUM1emFHOTNWRzloYzNRb2UxeHVJQ0FnSUNBZ0lDQjBhWFJzWlRvZ2RIbHdaVzltSUhSNGRDQTlQVDBnSjJKdmIyeGxZVzRuSUQ4Z0orV0tvT2k5dmVTNHJTY2dPaUIwZUhRc1hHNGdJQ0FnSUNBZ0lHbGpiMjQ2SUNkc2IyRmthVzVuSnl4Y2JpQWdJQ0FnSUNBZ2JXRnphem9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdaSFZ5WVhScGIyNDZJRFl3TURBd1hHNGdJQ0FnZlNsY2JuMWNibHh1Wm5WdVkzUnBiMjRnYUdsa1pTZ3BJSHRjYmlBZ0lDQjNlQzVvYVdSbFZHOWhjM1FvZTMwcE8xeHVmVnh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0I3WEc0Z0lDQWdjMmh2ZHl4Y2JpQWdJQ0JvYVdSbFhHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHNldFBhcmFtcyh1cmwsIHBhcmFtcykge1xuICAgIGlmICh1cmwgPT09IHZvaWQgMCkgeyB1cmwgPSBcIlwiOyB9XG4gICAgdmFyIHF1ZXJ5U3RyaW5nSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gICAgdmFyIGt2cCA9IHt9O1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgdmFyIG9sZFF1ZXJ5U3RyaW5nXzEgPSB1cmwuc3Vic3RyKHF1ZXJ5U3RyaW5nSW5kZXggKyAxKS5zcGxpdChcIiZcIik7XG4gICAgICAgIG9sZFF1ZXJ5U3RyaW5nXzEuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xuICAgICAgICAgICAgdmFyIGt2ID0gb2xkUXVlcnlTdHJpbmdfMVtpXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICBrdnBba3ZbMF1dID0ga3ZbMV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBrdnAgPSBfX2Fzc2lnbih7fSwga3ZwLCBwYXJhbXMpO1xuICAgIHZhciBxdWVyeVN0cmluZyA9IE9iamVjdC5rZXlzKGt2cClcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgKyBcIj1cIiArIGVuY29kZVVSSShrdnBba2V5XSk7XG4gICAgfSlcbiAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgIGlmIChxdWVyeVN0cmluZ0luZGV4ID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgcXVlcnlTdHJpbmdJbmRleCArIDEpICsgcXVlcnlTdHJpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsICsgXCI/XCIgKyBxdWVyeVN0cmluZztcbiAgICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgc2V0UGFyYW1zOiBzZXRQYXJhbXNcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWEpzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMM1YwYVd3dmRYSnNMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3pzN1FVRkJRU3hUUVVGVExGTkJRVk1zUTBGQlF5eEhRVUZuUWl4RlFVRkZMRTFCUVdNN1NVRkJhRU1zYjBKQlFVRXNSVUZCUVN4UlFVRm5RanRKUVVNdlFpeEpRVUZOTEdkQ1FVRm5RaXhIUVVGWExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRiRVFzU1VGQlNTeEhRVUZITEVkQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1EwRkJReXhGUVVGRk8xRkJRM1pDTEVsQlFVMHNaMEpCUVdNc1IwRkJSeXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWdVJTeG5Ra0ZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlEzaENMRWxCUVUwc1JVRkJSU3hIUVVGaExHZENRVUZqTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyeEVMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRUanRKUVVWRUxFZEJRVWNzWjBKQlFVOHNSMEZCUnl4RlFVRkxMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVEZDTEVsQlFVMHNWMEZCVnl4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlF5OUNMRWRCUVVjc1EwRkJReXhWUVVGQkxFZEJRVWM3VVVGRFNpeFBRVUZWTEVkQlFVY3NVMEZCU1N4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZITEVOQlFVTTdTVUZETTBNc1EwRkJReXhEUVVGRE8xTkJRMFFzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUldZc1NVRkJTU3huUWtGQlowSXNTVUZCU1N4RFFVRkRMRVZCUVVVN1VVRkRka0lzVDBGQlR5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU03UzBGREwwUTdVMEZCVFR0UlFVTklMRTlCUVU4c1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTTdTMEZEYkVNN1FVRkRUQ3hEUVVGRE8wRkJSVVFzYTBKQlFXVTdTVUZEV0N4VFFVRlRMRmRCUVVFN1EwRkRXaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lablZ1WTNScGIyNGdjMlYwVUdGeVlXMXpLSFZ5YkRvZ2MzUnlhVzVuSUQwZ1hDSmNJaXdnY0dGeVlXMXpPaUJ2WW1wbFkzUXBJSHRjYmlBZ0lDQmpiMjV6ZENCeGRXVnllVk4wY21sdVowbHVaR1Y0T2lCdWRXMWlaWElnUFNCMWNtd3VhVzVrWlhoUFppaGNJajljSWlrN1hHNGdJQ0FnYkdWMElHdDJjRG9nWVc1NUlEMGdlMzA3WEc0Z0lDQWdhV1lnS0hGMVpYSjVVM1J5YVc1blNXNWtaWGdnUGowZ01Da2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnZiR1JSZFdWeWVWTjBjbWx1WnlBOUlIVnliQzV6ZFdKemRISW9jWFZsY25sVGRISnBibWRKYm1SbGVDQXJJREVwTG5Od2JHbDBLRndpSmx3aUtUdGNiaUFnSUNBZ0lDQWdMeThnUUhSekxXbG5ibTl5WlZ4dUlDQWdJQ0FnSUNCdmJHUlJkV1Z5ZVZOMGNtbHVaeTVtYjNKRllXTm9LQ2g0TENCcEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCcmRqb2djM1J5YVc1blcxMGdQU0J2YkdSUmRXVnllVk4wY21sdVoxdHBYUzV6Y0d4cGRDaGNJajFjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JyZG5CYmEzWmJNRjFkSUQwZ2EzWmJNVjA3WEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd0MmNDQTlJSHN1TGk1cmRuQXNJQzR1TG5CaGNtRnRjMzA3WEc1Y2JpQWdJQ0JqYjI1emRDQnhkV1Z5ZVZOMGNtbHVaeUE5SUU5aWFtVmpkQzVyWlhsektHdDJjQ2xjYmlBZ0lDQWdJQ0FnTG0xaGNDaHJaWGtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR0FrZTJ0bGVYMDlKSHRsYm1OdlpHVlZVa2tvYTNad1cydGxlVjBwZldBN1hHNGdJQ0FnSUNBZ0lIMHBYRzRnSUNBZ0lDQWdJQzVxYjJsdUtGd2lKbHdpS1R0Y2JseHVJQ0FnSUdsbUlDaHhkV1Z5ZVZOMGNtbHVaMGx1WkdWNElENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDNXpkV0p6ZEhKcGJtY29NQ3dnY1hWbGNubFRkSEpwYm1kSmJtUmxlQ0FySURFcElDc2djWFZsY25sVGRISnBibWM3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQ0FySUZ3aVAxd2lJQ3NnY1hWbGNubFRkSEpwYm1jN1hHNGdJQ0FnZlZ4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQjdYRzRnSUNBZ2MyVjBVR0Z5WVcxelhHNTlPMXh1SWwxOSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZlcnNpb24gPSBfX1ZFUlNJT05fXztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZ5YzJsdmJpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTkyWlhKemFXOXVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3TzBGQlJVRXNTVUZCVFN4UFFVRlBMRWRCUVVjc1YwRkJWeXhEUVVGRE8wRkJSVzVDTERCQ1FVRlBJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWkdWamJHRnlaU0JqYjI1emRDQmZYMVpGVWxOSlQwNWZYem9nYzNSeWFXNW5PMXh1WEc1amIyNXpkQ0IyWlhKemFXOXVJRDBnWDE5V1JWSlRTVTlPWDE4N1hHNWNibVY0Y0c5eWRDQjdJSFpsY25OcGIyNGdmVHRjYmlKZGZRPT0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/build/weRequest.min.js b/build/weRequest.min.js index b0b17bd..bb82602 100644 --- a/build/weRequest.min.js +++ b/build/weRequest.min.js @@ -1,5 +1,5 @@ /*! - * weRequest 1.2.11 + * weRequest 1.2.12 * https://github.com/IvinWu/weRequest */ -module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;rn.default.sessionExpire&&(p(),1)?(o.default.doNotCheckSession=!0,d().then(function(){return e()},function(e){return t(e)})):e()})}var c=null;function d(){return c||(c=new Promise(function(e,t){new Promise(function(e,t){console.log("wx.login");var r=(new Date).getTime();wx.login({success:function(r){if(!r.code)return t({title:"登录失败",content:"请稍后重试[code 获取失败]"});(function(e){var t;return(t="function"==typeof o.default.codeToSession.data?o.default.codeToSession.data():o.default.codeToSession.data||{})[o.default.codeToSession.codeName]=e,new Promise(function(e,r){var s=(new Date).getTime();wx.request({url:a.default.format(o.default.codeToSession.url),data:t,method:o.default.codeToSession.method||"GET",success:function(t){if(200===t.statusCode){if(o.default.codeToSession.report){var a=(new Date).getTime();i.default.report(o.default.codeToSession.report,s,a)}var f="";try{f=o.default.codeToSession.success(t.data)}catch(e){}return f?(n.default.session=f,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(n.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:n.default.session}),e()):r(u.default.getErrorMsg(t))}return r({title:"登录失败",content:"请稍后重试"})},complete:function(){},fail:function(){return r({title:"登录失败",content:"请稍后重试"})}})})})(r.code).then(function(){return e()}).catch(function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_login",r,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return c=null,e()}).catch(function(e){return c=null,s.default.hide(),t(e)})})),c}function p(){n.default.session="",wx.removeStorage({key:o.default.sessionName}),o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=1/0,wx.removeStorage({key:o.default.sessionExpireKey}))}t.default={main:function(){return new Promise(function(e,t){return l().then(function(){return o.default.doNotCheckSession?Promise.resolve():(f||(f=new Promise(function(e,t){console.log("wx.checkSession()");var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return p(),d().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_checkSession",r,e)}})})),f)},function(e){var r=e.title,n=e.content;return u.default.doError(r,n),t({title:r,content:n})}).then(function(){return e()},function(e){var r=e.title,n=e.content;return u.default.doError(r,n),t({title:r,content:n})})})},setSession:function(e){n.default.session=e,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(n.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:n.default.session})},delSession:p}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0);function o(e){var t="";if("function"==typeof n.default.errorTitle)try{t=n.default.errorTitle(e.data)}catch(e){}else"string"==typeof n.default.errorTitle&&(t=n.default.errorTitle);var r="";if("function"==typeof n.default.errorContent)try{r=n.default.errorContent(e.data)}catch(e){}else"string"==typeof n.default.errorContent&&(r=n.default.errorContent);return{title:t,content:r}}function u(e,t){wx.showModal({title:e,content:t||"网络或服务异常,请稍后重试",showCancel:!1})}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):u("",t.errMsg)},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var r=o(t);u(r.title,r.content)}"function"==typeof n.default.errorCallback&&n.default.errorCallback(e,t),console.error(t)},doError:u,getErrorMsg:o}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(7);function u(e,t,r){"function"==typeof n.default.reportCGI&&n.default.reportCGI(e,t,r,o.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&u(e.report,e._reportStartTime,e._reportEndTime)},report:u}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2);t.default=function(e){return n.default.request(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){e.originUrl&&wx.getStorage({key:e.originUrl,success:function(t){(!0===e.cache||"function"==typeof e.cache&&e.cache(t.data))&&"function"==typeof e.success&&e.success(t.data,{isCache:!0}),"function"==typeof e.complete&&e.complete()}})},set:function(e,t){e.originUrl&&(!0===e.cache||"function"==typeof e.cache&&e.cache(t))&&wx.setStorage({key:e.originUrl,data:t})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),o=r(7),u=r(15),i=r(16),a=r(17),s=r(18),f=r(19),l=r(20),c={init:n.default,request:o.default,uploadFile:u.default,setSession:i.default,login:a.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(e){Object.assign(n.default,e);try{o.default.session=wx.getStorageSync(n.default.sessionName)||""}catch(e){console.error("wx.getStorageSync:fail, can not get session.")}try{o.default.sessionExpire=wx.getStorageSync(n.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){console.error("wx.getStorageSync:fail, can not get sessionExpire.")}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(4);t.default={get:function(e){if(!(n.default.mockJson[e.url]||e.originUrl&&n.default.mockJson[e.originUrl]))return console.error("mock 没有对应接口的数据"),!1;var t=n.default.mockJson[e.url]||(e.originUrl?n.default.mockJson[e.originUrl]:""),r={data:t=JSON.parse(JSON.stringify(t)),statusCode:200};return o.default.hide(),r}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2),u=r(8),i=r(6),a=r(3);t.default=function(e,t,r){if(200!==e.statusCode)throw{type:"http-error",res:e};if("string"==typeof e.data)try{e.data=JSON.parse(e.data)}catch(e){throw{type:"upload-error",res:e}}if(i.default.end(t),n.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var u=e.substr(r+1).split("&");u.forEach(function(e,t){var r=u[t].split("=");o[r[0]]=r[1]})}o=n(n({},o),t);var i=Object.keys(o).map(function(e){return e+"="+encodeURI(o[e])}).join("&");return r>=0?e.substring(0,r+1)+i:e+"?"+i}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(5);t.catchHandler=function(e,t,r){var o=e.type,u=e.res;if(t.catchError){if("http-error"===o)return r(new Error(u.statusCode.toString()));if("upload-error"===o)return r(new Error(u));if("logic-error"===o){var i=n.default.getErrorMsg(u);return r(new Error(i.content))}return r(e)}return e.type?n.default.logicError(t,e.res):r(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2);t.default=function(e){return n.default.uploadFile(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){n.default.setSession(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(){return n.default.main()}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1);t.default=function(){return n.default.session}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(){return{urlPerfix:n.default.urlPerfix,sessionExpireTime:n.default.sessionExpireTime,sessionExpireKey:n.default.sessionExpireKey,sessionExpire:o.default.sessionExpire}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.version="1.2.11"}]).default; \ No newline at end of file +module.exports=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={sessionName:"session",loginTrigger:function(){return!1},codeToSession:{url:"",success:function(){}},successTrigger:function(){return!0},urlPerfix:"",doNotCheckSession:!1,errorTitle:"操作失败",errorContent:function(e){return e},errorRetryBtn:!1,reLoginLimit:3,errorCallback:null,reportCGI:!1,mockJson:!1,globalData:!1,sessionExpireKey:"sessionExpireKey"}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={session:"",sessionExpire:1/0}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.request(e)}},function(e,t,r){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,r=1,n=arguments.length;rn.default.sessionExpire&&(g(),1)?(o.default.doNotCheckSession=!0,p().then(function(){return e()},function(e){return t(e)})):e()})}var d=null;function p(){return d||(d=new Promise(function(e,t){new Promise(function(e,t){console.log("wx.login");var r=(new Date).getTime();wx.login({success:function(r){if(!r.code)return t({title:"登录失败",content:"请稍后重试[code 获取失败]"});var s,f;(s=r.code,(f="function"==typeof o.default.codeToSession.data?o.default.codeToSession.data():o.default.codeToSession.data||{})[o.default.codeToSession.codeName]=s,new Promise(function(e,t){var r=(new Date).getTime();wx.request({url:a.default.format(o.default.codeToSession.url),data:f,method:o.default.codeToSession.method||"GET",success:function(a){if(200===a.statusCode){if(o.default.codeToSession.report){var s=(new Date).getTime();i.default.report(o.default.codeToSession.report,r,s)}var f="";try{f=o.default.codeToSession.success(a.data)}catch(e){}return f?(n.default.session=f,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(n.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:n.default.session}),e()):t(u.default.getErrorMsg(a))}return t({title:"登录失败",content:"请稍后重试"})},complete:function(){},fail:function(){return t({title:"登录失败",content:"请稍后重试"})}})})).then(function(){return e()}).catch(function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_login",r,e)},fail:function(e){return t({title:"登录失败",content:e.errMsg})}})}).then(function(){return d=null,e()}).catch(function(e){return d=null,s.default.hide(),t(e)})})),d}function g(){n.default.session="",wx.removeStorage({key:o.default.sessionName}),o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=1/0,wx.removeStorage({key:o.default.sessionExpireKey}))}t.default={main:function e(t){return new Promise(function(r,n){var a=t?function(){return f.default(t).then(t._resolve).catch(t._reject)}:function(){return e().then(r).catch(n)};return c().then(function(){return o.default.doNotCheckSession?Promise.resolve():(l||(l=new Promise(function(e,t){console.log("wx.checkSession()");var r=(new Date).getTime();wx.checkSession({success:function(){return e()},fail:function(){return g(),p().then(function(){return e()},function(e){return t(e)})},complete:function(){var e=(new Date).getTime();i.default.report("wx_checkSession",r,e)}})})),l)},function(e){var t=e.title,r=e.content;return u.default.doError(t,r,a),n({title:t,content:r})}).then(function(){return r()},function(e){var t=e.title,r=e.content;return u.default.doError(t,r,a),n({title:t,content:r})})})},setSession:function(e){n.default.session=e,o.default.doNotCheckSession=!0,o.default.sessionExpireTime&&o.default.sessionExpireKey&&(n.default.sessionExpire=(new Date).getTime()+o.default.sessionExpireTime,wx.setStorage({key:o.default.sessionExpireKey,data:String(n.default.sessionExpire)})),wx.setStorage({key:o.default.sessionName,data:n.default.session})},delSession:g}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={show:function(e){wx.showToast({title:"boolean"==typeof e?"加载中":e,icon:"loading",mask:!0,duration:6e4})},hide:function(){wx.hideToast({})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function u(e){var t="";if("function"==typeof n.default.errorTitle)try{t=n.default.errorTitle(e.data)}catch(e){}else"string"==typeof n.default.errorTitle&&(t=n.default.errorTitle);var r="";if("function"==typeof n.default.errorContent)try{r=n.default.errorContent(e.data)}catch(e){}else"string"==typeof n.default.errorContent&&(r=n.default.errorContent);return{title:t,content:r}}function i(e,t,r){var o=n.default.errorRetryBtn&&"function"==typeof r;wx.showModal(Object.assign({title:e,content:t||"网络或服务异常,请稍后重试"},o?{showCancel:!0,confirmText:"重试",success:function(e){e.confirm&&"function"==typeof r&&r()}}:{showCancel:!1}))}t.default={systemError:function(e,t){"function"==typeof e.fail?e.fail(t):i("",t.errMsg,function(){return o.default(e).then(e._resolve).catch(e._reject)})},logicError:function(e,t){if("function"==typeof e.fail)e.fail(t);else{var r=u(t);i(r.title,r.content,function(){return o.default(e).then(e._resolve).catch(e._reject)})}"function"==typeof n.default.errorCallback&&n.default.errorCallback(e,t),console.error(t)},doError:i,getErrorMsg:u}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(2);function u(e,t,r){"function"==typeof n.default.reportCGI&&n.default.reportCGI(e,t,r,o.default)}t.default={start:function(e){e._reportStartTime=(new Date).getTime()},end:function(e){e._reportEndTime=(new Date).getTime(),e.report&&e._reportStartTime&&u(e.report,e._reportStartTime,e._reportEndTime)},report:u}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){e.originUrl&&wx.getStorage({key:e.originUrl,success:function(t){(!0===e.cache||"function"==typeof e.cache&&e.cache(t.data))&&"function"==typeof e.success&&e.success(t.data,{isCache:!0}),"function"==typeof e.complete&&e.complete()}})},set:function(e,t){e.originUrl&&(!0===e.cache||"function"==typeof e.cache&&e.cache(t))&&wx.setStorage({key:e.originUrl,data:t})}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),o=r(2),u=r(15),i=r(16),a=r(17),s=r(18),f=r(19),l=r(20),c={init:n.default,request:o.default,uploadFile:u.default,setSession:i.default,login:a.default,getSession:s.default,getConfig:f.default,version:l.version};t.default=c},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(e){Object.assign(n.default,e);try{o.default.session=wx.getStorageSync(n.default.sessionName)||""}catch(e){console.error("wx.getStorageSync:fail, can not get session.")}try{o.default.sessionExpire=wx.getStorageSync(n.default.sessionExpireKey||"sessionExpireKey")||1/0}catch(e){console.error("wx.getStorageSync:fail, can not get sessionExpire.")}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(5);t.default={get:function(e){if(!(n.default.mockJson[e.url]||e.originUrl&&n.default.mockJson[e.originUrl]))return console.error("mock 没有对应接口的数据"),!1;var t=n.default.mockJson[e.url]||(e.originUrl?n.default.mockJson[e.originUrl]:""),r={data:t=JSON.parse(JSON.stringify(t)),statusCode:200};return o.default.hide(),r}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(3),u=r(8),i=r(7),a=r(4);t.default=function(e,t,r){if(200!==e.statusCode)throw{type:"http-error",res:e};if("string"==typeof e.data)try{e.data=JSON.parse(e.data)}catch(e){throw{type:"upload-error",res:e}}if(i.default.end(t),n.default.loginTrigger(e.data)&&void 0!==t.reLoginCount&&t.reLoginCount=0){var u=e.substr(r+1).split("&");u.forEach(function(e,t){var r=u[t].split("=");o[r[0]]=r[1]})}o=n({},o,t);var i=Object.keys(o).map(function(e){return e+"="+encodeURI(o[e])}).join("&");return r>=0?e.substring(0,r+1)+i:e+"?"+i}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(6);t.catchHandler=function(e,t,r){var o=e.type,u=e.res;if(t.catchError){if("http-error"===o)return r(new Error(u.statusCode.toString()));if("upload-error"===o)return r(new Error(u));if("logic-error"===o){var i=n.default.getErrorMsg(u);return r(new Error(i.content))}return r(e)}return e.type?n.default.logicError(t,e.res):r(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);t.default=function(e){return n.default.uploadFile(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(e){n.default.setSession(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);t.default=function(){return n.default.main()}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1);t.default=function(){return n.default.session}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(0),o=r(1);t.default=function(){return{urlPerfix:n.default.urlPerfix,sessionExpireTime:n.default.sessionExpireTime,sessionExpireKey:n.default.sessionExpireKey,sessionExpire:o.default.sessionExpire}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.version="1.2.12"}]).default; \ No newline at end of file diff --git a/example/request.js b/example/request.js index 81662d0..5929c0e 100644 --- a/example/request.js +++ b/example/request.js @@ -56,6 +56,8 @@ weRequest.init({ errorCallback: function(obj, res) { // do some report }, + // [可选] 当出现错误时,弹框是否显示重试按钮,默认为false + errorRetryBtn: true, // [可选] 是否需要调用checkSession,验证小程序的登录态过期,可不配置,默认为false doNotCheckSession: true, // [可选] 上报耗时的函数,name为上报名称,startTime为接口调用开始时的时间戳,endTime为接口返回时的时间戳 diff --git a/package.json b/package.json index 7668243..9b99b77 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "we-request", - "version": "1.2.11", + "version": "1.2.12", "description": "本工具通过拓展小程序的wx.request,让开发者通过简单的配置,实现自动管理登录态等功能", "keywords": [ "登录态", diff --git a/src/interface.ts b/src/interface.ts index 2d47e48..64b3183 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -40,6 +40,8 @@ export interface IInitOption { errorTitle?: string | ((res: string | IAnyObject | ArrayBuffer) => string); /* 接口逻辑失败时,错误弹窗的内容 */ errorContent?: string | ((res: string | IAnyObject | ArrayBuffer) => string); + /* 接口逻辑失败时,错误弹窗是否显示重试按钮 */ + errorRetryBtn?: boolean; /* 当请求为非GET时,不将登陆态等参数放在queryString上(默认都放queryString) */ doNotUseQueryString?: boolean; } @@ -98,6 +100,10 @@ export interface IRequestObject extends wx.RequestOption{ _reportStartTime?: number; /* 请求返回的时间戳 */ _reportEndTime?: number; + /* 请求成功resolve */ + _resolve?: (value?: any) => void; + /* 请求失败reject */ + _reject?: (reason?: any) => void; } export interface IUploadFileOption extends IUploadFileObject { @@ -126,6 +132,10 @@ export interface IUploadFileObject extends wx.UploadFileOption { _reportStartTime?: number; /* 请求返回的时间戳 */ _reportEndTime?: number; + /* 请求成功resolve */ + _resolve?: (value?: any) => void; + /* 请求失败reject */ + _reject?: (reason?: any) => void; } export interface IGetConfigResult { diff --git a/src/module/errorHandler.ts b/src/module/errorHandler.ts index 0928dd7..987fef5 100644 --- a/src/module/errorHandler.ts +++ b/src/module/errorHandler.ts @@ -1,11 +1,13 @@ import config from '../store/config' +import request from '../api/request'; import { IRequestOption, IUploadFileOption } from "../interface"; function systemError(obj: IRequestOption | IUploadFileOption, res: wx.GeneralCallbackResult) { if (typeof obj.fail === "function") { obj.fail(res); } else { - doError("", res.errMsg); + const retry = () => request(obj).then(obj._resolve).catch(obj._reject); + doError("", res.errMsg, retry); } } @@ -14,7 +16,8 @@ function logicError(obj: IRequestOption | IUploadFileOption, res: wx.RequestSucc obj.fail(res); } else { const {title, content} = getErrorMsg(res); - doError(title, content); + const retry = () => request(obj).then(obj._resolve).catch(obj._reject); + doError(title, content, retry); } // 如果有配置统一错误回调函数,则执行它 @@ -49,12 +52,21 @@ function getErrorMsg(res: wx.RequestSuccessCallbackResult | wx.UploadFileSuccess return {title, content} } -function doError(title: string, content: string) { - wx.showModal({ +function doError(title: string, content: string, retry?: () => any) { + // 是否显示重试按钮 + const showErrorRetryBtn = config.errorRetryBtn && typeof retry === "function"; + wx.showModal(Object.assign({ title, content: content || "网络或服务异常,请稍后重试", + }, !showErrorRetryBtn ? { showCancel: false - }) + } : { + showCancel: true, + confirmText: '重试', + success(res: wx.ShowModalSuccessCallbackResult) { + if (res.confirm && typeof retry === "function") retry(); + } + })); } export default { diff --git a/src/module/requestHandler.ts b/src/module/requestHandler.ts index 64bbbe6..565f2e6 100644 --- a/src/module/requestHandler.ts +++ b/src/module/requestHandler.ts @@ -25,7 +25,7 @@ function format(originUrl: string) { } // 所有请求发出前需要做的事情 -function preDo(obj: T): T { +function preDo(obj: T, resolve: (value?: any) => void, reject?: (reason?: any) => void): T { if (typeof obj.beforeSend === "function") { obj.beforeSend(); } @@ -45,6 +45,9 @@ function preDo(obj: T): T { obj.url = format(obj.url); } + obj._resolve = resolve; + obj._reject = reject; + return obj; } @@ -174,7 +177,7 @@ function doUploadFile(obj: IUploadFileOption) { function request(obj: IRequestOption): any { return new Promise((resolve, reject) => { - obj = preDo(obj); + obj = preDo(obj, resolve, reject); if (config.mockJson) { let mockResponse = mockManager.get(obj); @@ -188,7 +191,7 @@ function request(obj: IRequestOption): any { cacheManager.get(obj); } - sessionManager.main().then(() => { + sessionManager.main(obj).then(() => { return doRequest(obj) }).then((res) => { let response = responseHandler(res as wx.RequestSuccessCallbackResult, obj, 'request'); @@ -203,7 +206,7 @@ function request(obj: IRequestOption): any { function uploadFile(obj: IUploadFileOption): any { return new Promise((resolve, reject) => { - obj = preDo(obj); + obj = preDo(obj, resolve, reject); if (config.mockJson) { let mockResponse = mockManager.get(obj); @@ -213,7 +216,7 @@ function uploadFile(obj: IUploadFileOption): any { } } - sessionManager.main().then(() => { + sessionManager.main(obj).then(() => { return doUploadFile(obj) }).then((res) => { let response = responseHandler(res as wx.UploadFileSuccessCallbackResult, obj, 'uploadFile'); diff --git a/src/module/sessionManager.ts b/src/module/sessionManager.ts index 1fc8df4..b9e730c 100644 --- a/src/module/sessionManager.ts +++ b/src/module/sessionManager.ts @@ -4,6 +4,8 @@ import errorHandler from './errorHandler' import durationReporter from './durationReporter' import requestHandler from './requestHandler' import loading from '../util/loading' +import request from '../api/request' +import { IRequestOption, IUploadFileOption } from "../interface"; /* 生命周期内只做一次的checkSession */ let checkSessionPromise: any = null; @@ -209,17 +211,22 @@ function delSession() { } } -function main() { +function main(relatedRequestObj?: IRequestOption | IUploadFileOption) { return new Promise((resolve, reject) => { + let retry = !relatedRequestObj + // 如果没有关联的请求,重试即调用自身 + ? () => main().then(resolve).catch(reject) + // 如果有关联的请求,重试即调用所关联的请求 + : () => request(relatedRequestObj).then(relatedRequestObj._resolve).catch(relatedRequestObj._reject); return checkLogin().then(() => { return config.doNotCheckSession ? Promise.resolve() : checkSession() }, ({title, content}) => { - errorHandler.doError(title, content); + errorHandler.doError(title, content, retry); return reject({title, content}); }).then(() => { return resolve(); }, ({title, content})=> { - errorHandler.doError(title, content); + errorHandler.doError(title, content, retry); return reject({title, content}); }) }) diff --git a/src/store/config.ts b/src/store/config.ts index 157bef6..97e9074 100644 --- a/src/store/config.ts +++ b/src/store/config.ts @@ -18,6 +18,7 @@ const defaultConfig: IInitOption = { errorContent(res: any) { return res }, + errorRetryBtn: false, reLoginLimit: 3, errorCallback: null, reportCGI: false,