ccgf-game-tool 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +121 -62
- package/dist/panels/workbench/index.js +20 -4
- package/i18n/en.js +1 -0
- package/i18n/zh.js +1 -0
- package/package.json +1 -1
- package/static/template/workbench/panel.html +5 -0
package/dist/main.js
CHANGED
|
@@ -73,67 +73,126 @@ let registryCache = null;
|
|
|
73
73
|
* 之所以用 npm 命令而不是自己发 HTTPS 请求:npm 会自动带上工程的 `.npmrc`
|
|
74
74
|
* (私有源、镜像、代理等配置都跟着走),不用我们重复实现一遍。
|
|
75
75
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
76
|
+
/**
|
|
77
|
+
* **异步**跑一次 npm。
|
|
78
|
+
*
|
|
79
|
+
* 为什么不能继续用 spawnSync:这个函数在**编辑器主进程**里被调用,spawnSync 会把主循环
|
|
80
|
+
* 整个占住 —— 每查一个包几百毫秒,几个包下来编辑器 UI 就卡住、点别处没反应(实测)。
|
|
81
|
+
* 换成 spawn + Promise:同样等结果,但中间让出事件循环,编辑器不冻结。
|
|
82
|
+
*/
|
|
83
|
+
/**
|
|
84
|
+
* 查远程信息用的**短**超时。
|
|
85
|
+
*
|
|
86
|
+
* 不能用 NPM_TIMEOUT_MS(120 秒):那是给"安装"用的,用户可以等;
|
|
87
|
+
* 而"查一下最新版本"要是等两分钟,那一页就等于废了。
|
|
88
|
+
*/
|
|
89
|
+
const REGISTRY_QUERY_TIMEOUT_MS = 10000;
|
|
90
|
+
/** 同一时刻只允许一个后台刷新在跑,否则每次切页签都会再起一轮 npm */
|
|
91
|
+
let registryRefreshing = false;
|
|
92
|
+
function runNpmAsync(command, spawnSpec, cwd, timeoutMs = shared_1.NPM_TIMEOUT_MS) {
|
|
93
|
+
return new Promise((resolve) => {
|
|
94
|
+
var _a, _b;
|
|
95
|
+
const chunks = [];
|
|
96
|
+
const errChunks = [];
|
|
97
|
+
let child;
|
|
98
|
+
const finish = (exitCode, spawnError) => {
|
|
99
|
+
const stdout = (0, shared_1.decodeProcessOutput)(Buffer.concat(chunks));
|
|
100
|
+
resolve({
|
|
101
|
+
result: (0, shared_1.buildNpmResult)({
|
|
102
|
+
command,
|
|
103
|
+
exitCode,
|
|
104
|
+
stdout,
|
|
105
|
+
stderr: (0, shared_1.decodeProcessOutput)(Buffer.concat(errChunks)),
|
|
106
|
+
spawnError,
|
|
107
|
+
}),
|
|
108
|
+
stdout,
|
|
109
|
+
});
|
|
110
|
+
};
|
|
92
111
|
try {
|
|
93
|
-
|
|
94
|
-
cwd
|
|
95
|
-
timeout: shared_1.NPM_TIMEOUT_MS,
|
|
112
|
+
child = (0, child_process_1.spawn)(spawnSpec.command, spawnSpec.args, {
|
|
113
|
+
cwd,
|
|
96
114
|
windowsHide: true,
|
|
97
|
-
maxBuffer: 32 * 1024 * 1024,
|
|
98
115
|
windowsVerbatimArguments: spawnSpec.windowsVerbatimArguments,
|
|
99
116
|
});
|
|
100
|
-
stdout = (0, shared_1.decodeProcessOutput)(spawned.stdout);
|
|
101
|
-
result = (0, shared_1.buildNpmResult)({
|
|
102
|
-
command,
|
|
103
|
-
exitCode: typeof spawned.status === 'number' ? spawned.status : null,
|
|
104
|
-
stdout,
|
|
105
|
-
stderr: (0, shared_1.decodeProcessOutput)(spawned.stderr),
|
|
106
|
-
spawnError: spawned.error
|
|
107
|
-
? {
|
|
108
|
-
code: spawned.error.code,
|
|
109
|
-
message: spawned.error.message,
|
|
110
|
-
}
|
|
111
|
-
: null,
|
|
112
|
-
});
|
|
113
117
|
}
|
|
114
118
|
catch (err) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
119
|
+
finish(null, { message: (err === null || err === void 0 ? void 0 : err.message) ? String(err.message) : String(err) });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const timer = setTimeout(() => { try {
|
|
123
|
+
child.kill();
|
|
124
|
+
}
|
|
125
|
+
catch ( /* 已经退了 */_a) { /* 已经退了 */ } }, timeoutMs);
|
|
126
|
+
(_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (d) => chunks.push(d));
|
|
127
|
+
(_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (d) => errChunks.push(d));
|
|
128
|
+
child.on('error', (err) => {
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
finish(null, { code: err === null || err === void 0 ? void 0 : err.code, message: (err === null || err === void 0 ? void 0 : err.message) ? String(err.message) : String(err) });
|
|
131
|
+
});
|
|
132
|
+
child.on('close', (code) => {
|
|
133
|
+
clearTimeout(timer);
|
|
134
|
+
if (timer === null)
|
|
135
|
+
return;
|
|
136
|
+
finish(code, null);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* 远程信息(带缓存)。**这个函数永远不阻塞、永远不 await 外部进程**。
|
|
142
|
+
*
|
|
143
|
+
* 为什么这么设计:它跑在编辑器主进程里,而 npm 每个进程要 1~3 秒,网络坏了还可能一直不返回。
|
|
144
|
+
* 早先用同步 spawn + 逐个查,表现就是"点开这一页,编辑器别处也没反应"。
|
|
145
|
+
* 现在:命中缓存立刻返回;过期则**先返回旧值**,同时后台刷新(不 await);
|
|
146
|
+
* 从没成功过时返回明确的提示文案,而不是让调用方干等。
|
|
147
|
+
*
|
|
148
|
+
* 失败不抛异常,也不让面板空着装作"没有模块":把原因一起回传,面板显示成提示 ——
|
|
149
|
+
* 这是最初就定下的要求("没有网络就提示就行了")。
|
|
150
|
+
*/
|
|
151
|
+
function queryRegistry(force) {
|
|
152
|
+
const now = Date.now();
|
|
153
|
+
const fresh = registryCache && now - registryCache.at < constants_1.REGISTRY_CACHE_MS;
|
|
154
|
+
if (!force && fresh) {
|
|
155
|
+
return { entries: registryCache.entries, error: registryCache.error };
|
|
156
|
+
}
|
|
157
|
+
// 需要更新:后台去刷,不在这里等
|
|
158
|
+
void refreshRegistry();
|
|
159
|
+
if (registryCache) {
|
|
160
|
+
return { entries: registryCache.entries, error: registryCache.error };
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
entries: [],
|
|
164
|
+
error: registryRefreshing ? '正在获取远程信息…' : '远程信息暂不可用(离线或超时)',
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/** 真正的拉取:异步、有并发闸、单包失败不拖垮整份列表 */
|
|
168
|
+
async function refreshRegistry() {
|
|
169
|
+
var _a, _b;
|
|
170
|
+
if (registryRefreshing)
|
|
171
|
+
return;
|
|
172
|
+
registryRefreshing = true;
|
|
173
|
+
try {
|
|
174
|
+
const entries = [];
|
|
175
|
+
const failures = [];
|
|
176
|
+
for (const name of registry_1.KNOWN_PACKAGES) {
|
|
177
|
+
const command = 'npm view ' + name + ' --json';
|
|
178
|
+
const spawnSpec = (0, shared_1.spawnSpecFor)([process.platform === 'win32' ? 'npm.cmd' : 'npm', ...(0, registry_1.viewArgv)(name)]);
|
|
179
|
+
const { result, stdout } = await runNpmAsync(command, spawnSpec, projectPath(), REGISTRY_QUERY_TIMEOUT_MS);
|
|
180
|
+
if (!result.ok) {
|
|
181
|
+
failures.push(name + ':' + ((_a = result.hint) !== null && _a !== void 0 ? _a : ('超时或退出码 ' + ((_b = result.exitCode) !== null && _b !== void 0 ? _b : '未知'))));
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
const entry = (0, registry_1.parseViewResult)(stdout);
|
|
185
|
+
if (entry)
|
|
186
|
+
entries.push(entry);
|
|
187
|
+
else
|
|
188
|
+
failures.push(name + ':返回内容不是预期的 JSON 形状');
|
|
189
|
+
}
|
|
190
|
+
const error = entries.length === 0 && failures.length > 0 ? failures.join(';') : null;
|
|
191
|
+
registryCache = { at: Date.now(), entries, error };
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
registryRefreshing = false;
|
|
133
195
|
}
|
|
134
|
-
const error = entries.length === 0 && failures.length > 0 ? failures.join(';') : null;
|
|
135
|
-
registryCache = { at: now, entries, error };
|
|
136
|
-
return { entries, error };
|
|
137
196
|
}
|
|
138
197
|
/**
|
|
139
198
|
* 组装公共模块的完整状态。
|
|
@@ -147,7 +206,7 @@ function queryRegistry(force) {
|
|
|
147
206
|
* 刻意**不**靠包名匹配来识别公共模块:scope 还没定(见 ROADMAP 的 S1a),
|
|
148
207
|
* 换个 scope 就认不出来了。
|
|
149
208
|
*/
|
|
150
|
-
function querySharedState(forceRegistry = false) {
|
|
209
|
+
async function querySharedState(forceRegistry = false) {
|
|
151
210
|
var _a, _b;
|
|
152
211
|
const root = projectPath();
|
|
153
212
|
const manifest = (0, project_1.readProjectManifest)(root);
|
|
@@ -161,7 +220,7 @@ function querySharedState(forceRegistry = false) {
|
|
|
161
220
|
installedShared.push((0, shared_1.catalogEntryFromInstalled)(name, pkg.manifest, pkg.version));
|
|
162
221
|
}
|
|
163
222
|
}
|
|
164
|
-
const registry = queryRegistry(forceRegistry);
|
|
223
|
+
const registry = await queryRegistry(forceRegistry);
|
|
165
224
|
// 框架与扩展不是公共模块,虽然它们也装着、也在 KNOWN_PACKAGES 里 —— 两处都要滤掉,
|
|
166
225
|
// 否则使用者的"公共模块"列表里会冒出框架和编辑器扩展。
|
|
167
226
|
const sharedOnly = (e) => (0, registry_1.isSharedModulePackage)(e.name);
|
|
@@ -257,11 +316,11 @@ function runNpm(action, specs) {
|
|
|
257
316
|
*
|
|
258
317
|
* 只接受 catalog 里存在的包名 —— 不把扩展变成"任意 npm 命令执行器"。
|
|
259
318
|
*/
|
|
260
|
-
function runSharedAction(action, packageName) {
|
|
319
|
+
async function runSharedAction(action, packageName) {
|
|
261
320
|
if (!packageName || typeof packageName !== 'string') {
|
|
262
321
|
throw new Error('缺少包名');
|
|
263
322
|
}
|
|
264
|
-
const before = querySharedState();
|
|
323
|
+
const before = await querySharedState();
|
|
265
324
|
const entry = before.modules.find((m) => m.name === packageName);
|
|
266
325
|
if (!entry) {
|
|
267
326
|
const known = before.modules.map((m) => m.name);
|
|
@@ -352,9 +411,9 @@ exports.methods = {
|
|
|
352
411
|
(0, fs_extra_1.copySync)(from, to);
|
|
353
412
|
return { ok: true, path: to };
|
|
354
413
|
},
|
|
355
|
-
queryVersions(forceRegistry = false) {
|
|
414
|
+
async queryVersions(forceRegistry = false) {
|
|
356
415
|
const root = projectPath();
|
|
357
|
-
const registry = queryRegistry(forceRegistry);
|
|
416
|
+
const registry = await queryRegistry(forceRegistry);
|
|
358
417
|
const latestOf = (name) => {
|
|
359
418
|
const hit = registry.entries.find((entry) => entry.name === name);
|
|
360
419
|
return hit ? hit.version : null;
|
|
@@ -774,7 +833,7 @@ exports.methods = {
|
|
|
774
833
|
* @param force 强制重新拉取远程列表(面板的「刷新」用)
|
|
775
834
|
*/
|
|
776
835
|
async querySharedModules(force) {
|
|
777
|
-
return querySharedState(force === true);
|
|
836
|
+
return await querySharedState(force === true);
|
|
778
837
|
},
|
|
779
838
|
/**
|
|
780
839
|
* 安装一个公共模块:**直接代跑 `npm install`**。
|
|
@@ -798,4 +857,4 @@ function load() { }
|
|
|
798
857
|
* @zh 卸载扩展时触发的方法
|
|
799
858
|
*/
|
|
800
859
|
function unload() { }
|
|
801
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWs3QkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQXg3QjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQTBDO0FBQzFDLHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxZQUFZO1lBQ2hCLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLFFBQVEseUJBQWEsUUFBUSxDQUFDLENBQUM7UUFDekYsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyx3QkFBWSxDQUFDLENBQUMsQ0FBQztRQUUvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWU7UUFDcEMsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFtQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUI7UUFDM0MsT0FBTyxlQUFlLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsSUFBSSxLQUFLLENBQUM7QUFFMUI7OztHQUdHO0FBQ0gsU0FBZ0IsTUFBTSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXHJcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgY29weVN5bmMsIGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHJlbW92ZVN5bmMsIHN0YXRTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7XHJcbiAgICBHQU1FUExBWV9ESVIsXHJcbiAgICBMQVlFUlMsXHJcbiAgICBNQU5BR0VSX0RJUixcclxuICAgIFBSRUZBQl9URU1QTEFURVMsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVfTEFCRUxTLFxyXG4gICAgUkVHSVNUUllfQ0FDSEVfTVMsXHJcbiAgICBSRVNPVVJDRVNfRElSLFxyXG4gICAgVFByZWZhYlRlbXBsYXRlLFxyXG4gICAgVklFV1NfU1VCRElSLFxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgYnVpbGRPcmRlclBsYW4sIGxpc3RNYW5hZ2VycywgbGlzdE1vZHVsZXMsIGxpc3RWaWV3cywgcnVuRG9jdG9yIH0gZnJvbSAnLi9kb2N0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgSURFTlRJRklFUl9SRSxcclxuICAgIG5vcm1hbGl6ZU1hbmFnZXJOYW1lLFxyXG4gICAgbm9ybWFsaXplTW9kdWxlLFxyXG4gICAgbm9ybWFsaXplVmlld05hbWUsXHJcbiAgICB2aWV3UHJlZmFiUGF0aCxcclxufSBmcm9tICcuL25hbWluZyc7XHJcbmltcG9ydCB7XHJcbiAgICBjb2xsZWN0U25hcHNob3QsXHJcbiAgICBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIsXHJcbiAgICBsaXN0TG9jYWxDYXRhbG9nLFxyXG4gICAgcmVhZEluc3RhbGxlZFBhY2thZ2UsXHJcbiAgICByZWFkUHJvamVjdE1hbmlmZXN0LFxyXG59IGZyb20gJy4vcHJvamVjdCc7XHJcbmltcG9ydCB7XHJcbiAgICBpc1NoYXJlZE1vZHVsZVBhY2thZ2UsXHJcbiAgICBLTk9XTl9QQUNLQUdFUyxcclxuICAgIHBhcnNlVmlld1Jlc3VsdCxcclxuICAgIHZpZXdBcmd2LFxyXG59IGZyb20gJy4vcmVnaXN0cnknO1xyXG5pbXBvcnQge1xyXG4gICAgTlBNX1RJTUVPVVRfTVMsXHJcbiAgICBidWlsZE5wbVJlc3VsdCxcclxuICAgIGJ1aWxkU2hhcmVkU3RhdHVzLFxyXG4gICAgY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZCxcclxuICAgIGNvbGxlY3RJbnN0YWxsU3BlY3MsXHJcbiAgICBkZWNvZGVQcm9jZXNzT3V0cHV0LFxyXG4gICAgZmluZFBhY2thZ2VSZWZzLFxyXG4gICAgZm9ybWF0TnBtQ29tbWFuZCxcclxuICAgIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QsXHJcbiAgICBtZXJnZUNhdGFsb2csXHJcbiAgICBucG1TcGF3blNwZWMsXHJcbiAgICBzcGF3blNwZWNGb3IsXHJcbiAgICBzdW1tYXJpemVOcG1GYWlsdXJlLFxyXG59IGZyb20gJy4vc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICAgIGJ1aWxkTWFuYWdlclNjcmlwdCxcclxuICAgIGJ1aWxkRXZlbnRzU2NyaXB0LFxyXG4gICAgYnVpbGRNb2RlbFNjcmlwdCxcclxuICAgIGJ1aWxkTW9kdWxlU2NyaXB0LFxyXG4gICAgYnVpbGRWaWV3UHJlZmFiLFxyXG4gICAgYnVpbGRWaWV3U2NyaXB0LFxyXG4gICAgaXNQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFRGcmFtZXdvcmtJbXBvcnQsfSBmcm9tICcuL3RlbXBsYXRlcyc7XHJcbmltcG9ydCB7IElGaW5kaW5nLCBJTnBtUnVuUmVzdWx0LCBJSW5zdGFsbGVkUGFja2FnZVZpZXcsIElQcm9qZWN0U25hcHNob3QsIElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5paH5qGIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiDmianlsZXoh6rluKbnmoTkuK3mlofmlofmoYjooajjgIJcclxuICog5a6D5pei5piv44CMa2V5IOWFqOmbhuOAjeeahOadpea6kO+8jOS5n+aYr+e8lui+keWZqCBpMThuIOaLv+S4jeWIsOaXtueahOWFnOW6leOAglxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuY29uc3QgWkhfU1RSSU5HUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHJlcXVpcmUoJy4uL2kxOG4vemguanMnKTtcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5bCP5bel5YW3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKiDlt6XnqIvmoLnnm67lvZUgKi9cclxuZnVuY3Rpb24gcHJvamVjdFBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG59XHJcblxyXG4vKipcclxuICog6L+Z5Liq5bel56iL5byV55So5qGG5p626K+l55So5ZOq56eN5YaZ5rOVOlxyXG4gKiAtIOW8gOWPkeW3peS9nOWMuijku5PlupPph4ws5qGG5p625rqQ56CB5ZyoIGFzc2V0cy9zY3JpcHRzL2ZyYW1ld29yayDkuIspIC0+IOebuOWvuei3r+W+hFxyXG4gKiAtIOijheaIkCBucG0g5YyF55qE5paw5bel56iLIC0+IOWMheWQjSBAY2NnZi9mcmFtZXdvcmtcclxuICpcclxuICog5Yik5o2u5pivXCLmoYbmnrbmupDnoIHlnKjkuI3lnKhcIizkuI4gY29uc3RhbnRzLnRzIOeahCBGUkFNRVdPUktfREVWX0RJUiDlkIzkuIDkuKrlgLzjgIJcclxuICovXHJcbmZ1bmN0aW9uIGZyYW1ld29ya0ltcG9ydE1vZGUoKTogVEZyYW1ld29ya0ltcG9ydCB7XHJcbiAgICByZXR1cm4gZXhpc3RzU3luYyhqb2luKHByb2plY3RQYXRoKCksICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSkgPyAnd29ya3NwYWNlJyA6ICdwYWNrYWdlJztcclxufVxyXG5cclxuLyoqIOebuOWvuei3r+W+hCAtPiBkYjovLyDotYTmupAgdXJsICovXHJcbmZ1bmN0aW9uIGRiVXJsKHJlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZGI6Ly8nICsgcmVsLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxufVxyXG5cclxuLyoqIHV1aWQgLT4g6aKE5Yi25L2T6YeM6ISa5pys57uE5Lu255qEIF9fdHlwZV9fICovXHJcbmZ1bmN0aW9uIGNvbXByZXNzVXVpZCh1dWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5VdGlscy5VVUlELmNvbXByZXNzVVVJRCh1dWlkLCBmYWxzZSk7XHJcbn1cclxuXHJcbi8qKiDlj5bkuIDku73lt6XnqIvlv6vnhafvvIjkvZPmo4DjgIHliJfooajpg73ln7rkuo7lroPvvIzkv53or4HpnaLmnb/nnIvliLDnmoTlkozkvZPmo4DnnIvliLDnmoTmmK/lkIzkuIDku73mlbDmja7vvIkgKi9cclxuZnVuY3Rpb24gc25hcHNob3QoKTogSVByb2plY3RTbmFwc2hvdCB7XHJcbiAgICByZXR1cm4gY29sbGVjdFNuYXBzaG90KHByb2plY3RQYXRoKCksIGNvbXByZXNzVXVpZCk7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogcmVnaXN0cnkg5pCc57Si57uT5p6c55qE57yT5a2Y44CCXHJcbiAqXHJcbiAqIOS4gOasoeaQnOe0ouWunua1iyAxfjQg56eSIOKAlOKAlCDogIzpnaLmnb/liIfpobXjgIHoo4XlrozliLfmlrDpg73kvJrosIPnlKjmn6Xor6LvvIzkuI3og73mr4/mrKHpg73ljrvmkJzjgIJcclxuICog5pi+5byP54K544CM5Yi35paw44CN5pe255SoIGBmb3JjZWAg57uV6L+H5a6D44CCXHJcbiAqL1xyXG5sZXQgcmVnaXN0cnlDYWNoZTogeyBhdDogbnVtYmVyOyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbi8qKlxyXG4gKiAqKuWksei0peS4jeaKm+W8guW4uCzkuZ/kuI3orqnpnaLmnb/nqbrnnYDoo4XkvZxcIuayoeacieaooeWdl1wiKio65oqK5Y6f5Zug5LiA6LW35Zue5LygLOmdouadv+aYvuekuuaIkOaPkOekuiDigJTigJRcclxuICog6L+Z5piv5pyA5Yid5bCx5a6a5LiL55qE6KaB5rGCKFwi5rKh5pyJ572R57uc5bCx5o+Q56S65bCx6KGM5LqGXCIp44CCXHJcbiAqXHJcbiAqIOi/nOeoi+S/oeaBr+eahOadpea6kDoqKumAkOS4qiBgbnBtIHZpZXcgPG5hbWU+IC0tanNvbmAg57K+56Gu5p+l6K+iKirjgIJcclxuICpcclxuICog5pu+57uP55SoIGBucG0gc2VhcmNoYCArIOWFs+mUruivjSzlt7Llup/lvIMg4oCU4oCUIOaQnOe0ouWvuSBzY29wZWQg5YyFKGBAY2NnZi8qYCnlvojkuI3lj6/pnaAsXHJcbiAqIOW4uOW4uOaQnOS4jeWIsCzkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKMXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahCjlrp7mtYvouKnov4cp44CCXHJcbiAqIOS7o+S7tzrljIXlkI3opoHnu7TmiqTlnKggcmVnaXN0cnkudHMg55qEIEtOT1dOX1BBQ0tBR0VTIOmHjCzmlrDlop7ljIXml7bliqDkuIDooYzjgIJcclxuICpcclxuICog5LmL5omA5Lul55SoIG5wbSDlkb3ku6TogIzkuI3mmK/oh6rlt7Hlj5EgSFRUUFMg6K+35rGCOm5wbSDkvJroh6rliqjluKbkuIrlt6XnqIvnmoQgYC5ucG1yY2BcclxuICogKOengeaciea6kOOAgemVnOWDj+OAgeS7o+eQhuetiemFjee9rumDvei3n+edgOi1sCks5LiN55So5oiR5Lus6YeN5aSN5a6e546w5LiA6YGN44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBxdWVyeVJlZ2lzdHJ5KGZvcmNlOiBib29sZWFuKTogeyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgIGlmICghZm9yY2UgJiYgcmVnaXN0cnlDYWNoZSAmJiBub3cgLSByZWdpc3RyeUNhY2hlLmF0IDwgUkVHSVNUUllfQ0FDSEVfTVMpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlLmVycm9yIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pa55qGIIEI66YCQ5LiqKirnsr7noa7mn6Xor6IqKizkuI3lho3nlKggbnBtIHNlYXJjaOOAglxyXG4gICAgLy8g5pCc57Si5a+5IHNjb3BlZCDljIUoQGNjZ2YvKinlvojkuI3lj6/pnaAs5bi45bi45pCc5LiN5YiwIOKAlOKAlCDpgqPmoLdcIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwiXHJcbiAgICAvLyDlkoxcIuacgOaWsOeJiOacrFwi6YO95Lya5piv56m655qE44CC5ZCN5Y2V5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4zjgIJcclxuICAgIGNvbnN0IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEtOT1dOX1BBQ0tBR0VTKSB7XHJcbiAgICAgICAgY29uc3QgY29tbWFuZCA9ICducG0gdmlldyAnICsgbmFtZSArICcgLS1qc29uJztcclxuICAgICAgICBjb25zdCBzcGF3blNwZWMgPSBzcGF3blNwZWNGb3IoXHJcbiAgICAgICAgICAgIFtwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbScsIC4uLnZpZXdBcmd2KG5hbWUpXSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgc3Rkb3V0ID0gJyc7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogSU5wbVJ1blJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBzcGF3bmVkID0gc3Bhd25TeW5jKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1heEJ1ZmZlcjogMzIgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHN0ZG91dCA9IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IHR5cGVvZiBzcGF3bmVkLnN0YXR1cyA9PT0gJ251bWJlcicgPyBzcGF3bmVkLnN0YXR1cyA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5Y2V5Liq5YyF5p+l5LiN5YiwKOayoeWPkeW4gyAvIOemu+e6vynkuI3or6XorqnmlbTku73liJfooajlpLHotKUs5Y+q6K6w5LiL5p2lXHJcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuYW1lICsgJzonICsgKHJlc3VsdC5oaW50ID8/ICgn6YCA5Ye656CBICcgKyAocmVzdWx0LmV4aXRDb2RlID8/ICfmnKrnn6UnKSkpKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcGFyc2VWaWV3UmVzdWx0KHN0ZG91dCk7XHJcbiAgICAgICAgaWYgKGVudHJ5KSBlbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgICAgIGVsc2UgZmFpbHVyZXMucHVzaChuYW1lICsgJzrov5Tlm57lhoXlrrnkuI3mmK/pooTmnJ/nmoQgSlNPTiDlvaLnirYnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvciA9IGVudHJpZXMubGVuZ3RoID09PSAwICYmIGZhaWx1cmVzLmxlbmd0aCA+IDAgPyBmYWlsdXJlcy5qb2luKCc7JykgOiBudWxsO1xyXG4gICAgcmVnaXN0cnlDYWNoZSA9IHsgYXQ6IG5vdywgZW50cmllcywgZXJyb3IgfTtcclxuICAgIHJldHVybiB7IGVudHJpZXMsIGVycm9yIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnu4Too4XlhazlhbHmqKHlnZfnmoTlrozmlbTnirbmgIHjgIJcclxuICpcclxuICog5LiJ5Liq5p2l5rqQ5ZCI6LW35p2l5omN5piv5a6M5pW05YiX6KGo77yaXHJcbiAqIDEuIOacrOahhuaetioq5byA5Y+R5bel5L2c5Yy6Kirph4znmoQgYHBhY2thZ2VzL3NoYXJlZC8qYO+8iOWPquacieacrOS7k+W6k+aJjeiupO+8jOingVxyXG4gKiAgICBgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyYO+8ieKAlOKAlCDog73nu5nlh7ogYGZpbGU6YCDlronoo4Xor7TmmI7nrKbvvJtcclxuICogMi4gYG5vZGVfbW9kdWxlc2Ag6YeM5bey57uP6KOF5LqG55qE77yI6Z2g5YyF5riF5Y2V6YeM55qE5qCH6K6w6K6k5Ye65p2l77yJ77ybXHJcbiAqIDMuICoq6L+c56iLIHJlZ2lzdHJ5KirvvIjmjInlj5HnjrDlhbPplK7or43mkJzntKLvvInigJTigJQg6KaG55uWXCLov5jmsqHoo4XjgIHkvYblj6/ku6Xoo4VcIueahOmCo+S6m+OAglxyXG4gKlxyXG4gKiDliLvmhI8qKuS4jSoq6Z2g5YyF5ZCN5Yy56YWN5p2l6K+G5Yir5YWs5YWx5qih5Z2X77yac2NvcGUg6L+Y5rKh5a6a77yI6KeBIFJPQURNQVAg55qEIFMxYe+8ie+8jFxyXG4gKiDmjaLkuKogc2NvcGUg5bCx6K6k5LiN5Ye65p2l5LqG44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRQcm9qZWN0TWFuaWZlc3Qocm9vdCk7XHJcbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRldkRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZERpciA9IGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0Rpcihyb290KTtcclxuICAgIGNvbnN0IGxvY2FsID0gc2hhcmVkRGlyID8gbGlzdExvY2FsQ2F0YWxvZyhzaGFyZWREaXIsIHJvb3QpIDogW107XHJcblxyXG4gICAgY29uc3QgaW5zdGFsbGVkU2hhcmVkOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhwcm9qZWN0RGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGlmIChwa2cuaW5zdGFsbGVkICYmIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSkge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWRTaGFyZWQucHVzaChjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkKG5hbWUsIHBrZy5tYW5pZmVzdCwgcGtnLnZlcnNpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgLy8g5qGG5p625LiO5omp5bGV5LiN5piv5YWs5YWx5qih5Z2XLOiZveeEtuWug+S7rOS5n+ijheedgOOAgeS5n+WcqCBLTk9XTl9QQUNLQUdFUyDph4wg4oCU4oCUIOS4pOWkhOmDveimgea7pOaOiSxcclxuICAgIC8vIOWQpuWImeS9v+eUqOiAheeahFwi5YWs5YWx5qih5Z2XXCLliJfooajph4zkvJrlhpLlh7rmoYbmnrblkoznvJbovpHlmajmianlsZXjgIJcclxuICAgIGNvbnN0IHNoYXJlZE9ubHkgPSAoZTogSVNoYXJlZENhdGFsb2dFbnRyeSkgPT4gaXNTaGFyZWRNb2R1bGVQYWNrYWdlKGUubmFtZSk7XHJcbiAgICBjb25zdCBjYXRhbG9nID0gbWVyZ2VDYXRhbG9nKFxyXG4gICAgICAgIG1lcmdlQ2F0YWxvZyhsb2NhbCwgcmVnaXN0cnkuZW50cmllcy5maWx0ZXIoc2hhcmVkT25seSkpLFxyXG4gICAgICAgIGluc3RhbGxlZFNoYXJlZC5maWx0ZXIoc2hhcmVkT25seSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFwi5Y+v5pu05pawXCLopoHpnaDov5znqIvnmoTmnIDmlrDniYjmnKzlj7fvvIzogIwgbWVyZ2VDYXRhbG9nIOiuqeacrOWcsOmhueS8mOWFiO+8iOWQjOWQjeeahOi/nOeoi+mhueS8muiiq+ebluaOie+8ie+8jFxyXG4gICAgLy8g5omA5Lul6L+Z6YeM5Y2V54us55WZ5LiA5Lu95YyF5ZCNIC0+IOi/nOeoi+acgOaWsOeJiOacrOOAglxyXG4gICAgY29uc3QgcmVnaXN0cnlWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5lbnRyaWVzKSB7XHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9uc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZlcnNpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6KaB5p+l5a6e5pe254q25oCB55qE5YyFID0g5YiX6KGo6YeM55qEICsg5a6D5Lus5aOw5piO55qE5L6d6LWW44CCXHJcbiAgICAvLyDkvp3otZblj6/og73kuI3lnKjliJfooajph4zvvIjmma7pgJogbnBtIOWMhe+8ie+8jOS9huWug+ijheayoeijheWQjOagt+imgeaYvuekuuWHuuadpeOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhdGFsb2cpIHtcclxuICAgICAgICB3YW50ZWQuYWRkKGVudHJ5Lm5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIE9iamVjdC5rZXlzKGVudHJ5LmRlY2xhcmVkRGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgICAgICB3YW50ZWQuYWRkKGRlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaW5zdGFsbGVkUGFja2FnZXM6IFJlY29yZDxzdHJpbmcsIElJbnN0YWxsZWRQYWNrYWdlVmlldz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB3YW50ZWQpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkOiBwa2cuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcclxuICAgICAgICAgICAgaXNTaGFyZWRNb2R1bGU6IGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IHsgLi4uc25hcC5nYW1lcGxheVNvdXJjZXMsIC4uLnNuYXAubWFuYWdlclNvdXJjZXMgfTtcclxuXHJcbiAgICBjb25zdCBtb2R1bGVzID0gY2F0YWxvZy5tYXAoKGVudHJ5KSA9PiBidWlsZFNoYXJlZFN0YXR1cyhlbnRyeSwge1xyXG4gICAgICAgIHByb2plY3REZXBlbmRlbmNpZXMsXHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXMsXHJcbiAgICAgICAgcmVmZXJlbmNlczogeyBbZW50cnkubmFtZV06IGZpbmRQYWNrYWdlUmVmcyhzb3VyY2VzLCBlbnRyeS5uYW1lKSB9LFxyXG4gICAgICAgIGNhdGFsb2csXHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9ucyxcclxuICAgIH0pKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZHVsZXMsXHJcbiAgICAgICAgLyoqIOacrOWcsOWuieijhea6kO+8myoq5Y+q5pyJ5pys5qGG5p6255qE5byA5Y+R5LuT5bqT6YeM5omN6Z2eIG51bGwqKu+8iOmdouWQkeeUqOaIt+eahOW3peeoi+mHjOawuOi/nOaYryBudWxs77yJICovXHJcbiAgICAgICAgbG9jYWxTb3VyY2U6IHNoYXJlZERpcixcclxuICAgICAgICAvKiog5bel56iL5pyJ5Y+v6K+755qEIHBhY2thZ2UuanNvbiDlkJcgKi9cclxuICAgICAgICBoYXNNYW5pZmVzdDogbWFuaWZlc3QgIT09IG51bGwsXHJcbiAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8m+S4uiBudWxsIOihqOekuui/measoeaYr+aIkOWKn+eahO+8iOaIlueUqOS6hue8k+WtmO+8iSAqL1xyXG4gICAgICAgIHJlZ2lzdHJ5RXJyb3I6IHJlZ2lzdHJ5LmVycm9yLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5YWo56iLKirkuI3mipvlvILluLgqKu+8mumAgOWHuueggeOAgXN0ZG91dOOAgXN0ZGVycuOAgeS7peWPiiBzcGF3biDoh6rouqvnmoTlpLHotKXpg73mlLbov5sgSU5wbVJ1blJlc3VsdFxyXG4gKiDlm57kvKDnu5npnaLmnb8g4oCU4oCUIOeUqOaIt+imgeeci+eahOaYryBucG0g6Ieq5bex6K+055qE6K+d77yM6ICM5LiN5piv5LiA5Y+l6L2s6L+w55qEXCLlronoo4XlpLHotKVcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuTnBtKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHNwZWNzOiBzdHJpbmdbXSk6IElOcG1SdW5SZXN1bHQge1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gbnBtU3Bhd25TcGVjKGFjdGlvbiwgc3BlY3MpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyAxLiAqKuS4jeaMh+WumiBlbmNvZGluZyoq77ya5ou/5Yiw5Y6f5aeLIEJ1ZmZlciDoh6rlt7Hop6PnoIHvvIzlkKbliJkgY21kIOeahCBHQksg5raI5oGv5Lya5Y+Y5Lmx56CB77ybXHJcbiAgICAgICAgLy8gMi4gKip3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMg5b+F6aG75p2l6IeqIHNwYXduU3BlYyoq77ya5bCR5LqG5a6D77yMTm9kZSDkvJrmiormiJHliqDlpb3nmoRcclxuICAgICAgICAvLyAgICDlvJXlj7flho3ovazkuYnkuIDpgY3vvIxjbWQg5pS25YiwIGBcXFwibnBtLmNtZCBpbnN0YWxsIC4uLlxcXCJg77yM5LqO5piv5pW06KGM6KKr5b2T5oiQ5ZG95Luk5ZCNXHJcbiAgICAgICAgLy8gICAg77yI5oqlXCInbnBtLmNtZCBpbnN0YWxsIC4uLicg5LiN5piv5YaF6YOo5oiW5aSW6YOo5ZG95LukXCLvvIxucG0g5qC55pys5rKh6KKr5ZCv5Yqo77yJ44CCXHJcbiAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBOUE1fVElNRU9VVF9NUyxcclxuICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIG1heEJ1ZmZlcjogMTYgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpLFxyXG4gICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiBzcGF3bmVkLmVycm9yXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3Bhd25lZC5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7o+i3kSBucG0g6KOFIC8g5Y245LiA5Liq5YWs5YWx5qih5Z2X77yM54S25ZCO5Zue5LiA5Lu95Yi35paw6L+H55qE54q25oCB44CCXHJcbiAqXHJcbiAqIOWPquaOpeWPlyBjYXRhbG9nIOmHjOWtmOWcqOeahOWMheWQjSDigJTigJQg5LiN5oqK5omp5bGV5Y+Y5oiQXCLku7vmhI8gbnBtIOWRveS7pOaJp+ihjOWZqFwi44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBydW5TaGFyZWRBY3Rpb24oYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJywgcGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKCFwYWNrYWdlTmFtZSB8fCB0eXBlb2YgcGFja2FnZU5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfnvLrlsJHljIXlkI0nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiZWZvcmUgPSBxdWVyeVNoYXJlZFN0YXRlKCk7XHJcbiAgICBjb25zdCBlbnRyeSA9IGJlZm9yZS5tb2R1bGVzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gcGFja2FnZU5hbWUpO1xyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgIGNvbnN0IGtub3duID0gYmVmb3JlLm1vZHVsZXMubWFwKChtKSA9PiBtLm5hbWUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYOS4jeWcqOWPr+WuieijheWIl+ihqOmHjOeahOWMhe+8miR7cGFja2FnZU5hbWV9YFxyXG4gICAgICAgICAgICArIChrbm93bi5sZW5ndGggPyBg77yI5b2T5YmN5YiX6KGo77yaJHtrbm93bi5qb2luKCcsICcpfe+8iWAgOiAn77yI5b2T5YmN5YiX6KGo5Li656m677yJJyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlronoo4XopoHmiooqKuacrOWcsOiDveino+aekOWIsOeahOS+nei1luS4gOi1t+W4puS4iioq77ya5Y+q6KOF5a6D5LiA5Liq55qE6K+d77yMbnBtIOS8muWOuyByZWdpc3RyeSDmib7kvp3otZbvvIxcclxuICAgIC8vIOiAjOacrOWcsOa6kOmHjOeahOS+nei1luW5tuayoeacieWPkeW4gyDigJTigJQg5b+F54S2IEU0MDTvvIjlrp7mtYvov4fvvInjgIJcclxuICAgIC8vIOWNuOi9veaMiSoq5YyF5ZCNKirvvIhucG0g6K6k5YyF5ZCN77yM5LiN6K6kIGZpbGU6IOivtOaYjuespu+8ieOAglxyXG4gICAgY29uc3Qgc3BlY3MgPSBhY3Rpb24gPT09ICd1bmluc3RhbGwnXHJcbiAgICAgICAgPyBbZW50cnkubmFtZV1cclxuICAgICAgICA6IGNvbGxlY3RJbnN0YWxsU3BlY3MoZW50cnksIGJlZm9yZS5tb2R1bGVzKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJ1bk5wbShhY3Rpb24sIHNwZWNzKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0pSoq5LiN5oqb5byC5bi4KirvvJrpnaLmnb/pnIDopoHmi7/liLDnu5PmnoTljJbnmoTnu5PmnpzvvIjlkb3ku6TjgIHpgIDlh7rnoIHjgIHljp/lp4vovpPlh7rvvInvvIxcclxuICAgICAgICAgKiDmiY3og73lnKjlvLnnqpfph4zljp/moLflsZXnpLogbnBtIOiHquW3seivtOeahOivneOAgumdnuazlei+k+WFpeS7jeeEtuaKmyDigJTigJQg6YKj5piv6LCD55So5pa55YaZ6ZSZ5LqG44CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb2s6IHJlc3VsdC5vayxcclxuICAgICAgICByZXN1bHQsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICog5aSx6LSl5pe25LiA5Y+lKirljZXooYwqKuaRmOimge+8iOmdouadv+a2iOaBr+WMuueUqO+8ieOAguWujOaVtOi+k+WHuuWcqCBgcmVzdWx0YCDph4zvvIznlLHlvLnnqpflsZXnpLog4oCU4oCUXHJcbiAgICAgICAgICog5LmL5YmN5oqK5pW05q61IG5wbSDovpPlh7rloZ7ov5vmtojmga/ljLrvvIzkvJrmiorlj7PmoI/mjKTlj5jlvaLlubblkozmtojmga/lj6DlnKjkuIDotbfjgIJcclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXNzYWdlOiByZXN1bHQub2sgPyBudWxsIDogc3VtbWFyaXplTnBtRmFpbHVyZShhY3Rpb24sIHBhY2thZ2VOYW1lLCByZXN1bHQpLFxyXG4gICAgICAgIC8vIOijheWujOeri+WIu+WbnuS4gOS7veaWsOeKtuaAge+8jOmdouadv+S4jeeUqOWGjei3keS4gOasoeafpeivolxyXG4gICAgICAgIC4uLnF1ZXJ5U2hhcmVkU3RhdGUoKSxcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiDotYTmupDmmK/lkKblrZjlnKggKi9cclxuZnVuY3Rpb24gYXNzZXRFeGlzdHModXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKS50aGVuKChpbmZvOiB1bmtub3duKSA9PiAhIWluZm8pO1xyXG59XHJcblxyXG4vKipcclxuICog56Gu5L+d55uu5b2V5a2Y5Zyo77yM5LiN5a2Y5Zyo5YiZ5Yib5bu6XHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVEaXIoZGlyVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgZGlyVXJsKTtcclxuICAgIGlmICghaW5mbykge1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIGRpclVybCwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDnm67lvZXkuI3lrZjlnKjliJnlu7rvvIznqbrnm67lvZXliJnliKDmjonvvIjnlJ/miJAv5Yig6Zmk5ZCO5riF55CG55So77yJICovXHJcbmFzeW5jIGZ1bmN0aW9uIHBydW5lRW1wdHlEaXIoYWJzRGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHN0YXRTeW5jKGFic0RpcikuaXNEaXJlY3RvcnkoKSAmJiByZWFkZGlyU3luYyhhYnNEaXIpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZW1vdmVTeW5jKGFic0Rpcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8qIOS4jeWtmOWcqOWwseeul+S6hiAqL1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog5om+5Ye65byV55So5LqG5oyH5a6aIGNpZCDpm4blkIjnmoTlt7Lluo/liJfljJbotYTmupAgKi9cclxuZnVuY3Rpb24gZmluZEFzc2V0UmVmcyhzbmFwOiBJUHJvamVjdFNuYXBzaG90LCBjaWRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGhpdHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoIWNpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGhpdHM7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHJlbCBvZiBPYmplY3Qua2V5cyhzbmFwLnNlcmlhbGl6ZWQpKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IHNuYXAuc2VyaWFsaXplZFtyZWxdO1xyXG4gICAgICAgIGlmIChjaWRzLnNvbWUoKGNpZCkgPT4gdGV4dC5pbmNsdWRlcyhjaWQpKSkge1xyXG4gICAgICAgICAgICBoaXRzLnB1c2gocmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGl0cztcclxufVxyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5pa55rOVIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5leHBvcnQgY29uc3QgbWV0aG9kczogeyBba2V5OiBzdHJpbmddOiAoLi4uYW55OiBhbnkpID0+IGFueSB9ID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiDmoYbmnrbkuI7mianlsZXlkIToh6rnmoTniYjmnKzkv6Hmga8o5pys5ZywICsgbnBtIOacgOaWsCnjgIJcclxuICAgICAqXHJcbiAgICAgKiDmianlsZXoh6rouqvniYjmnKzor7vlroPoh6rlt7HnmoQgcGFja2FnZS5qc29uO+ahhuaetueJiOacrOivu+W3peeoiyBub2RlX21vZHVsZXMg6YeM55qE6YKj5Lu9IOKAlOKAlFxyXG4gICAgICog5Lik6ICF6YO95pivXCLlrp7pmYXoo4Xkuobku4DkuYhcIueahOS6i+WunizkuI3mmK/phY3nva7ph4zlhpnkuobku4DkuYjjgIJcclxuICAgICAqIOacieayoeacieaWsOeJiOS6pOe7memdouadv+avlOi+gyB2ZXJzaW9uIOS4jiBsYXRlc3Qs6L+Z6YeM5LiN5pu/5a6D5Yik5patKOWFjeW+l+S4pOi+ueWQhOWGmeS4gOWllynjgIJcclxuICAgICAqL1xyXG4gICAgLyoqXHJcbiAgICAgKiDmioogbm9kZV9tb2R1bGVzIOmHjOeahOaJqeWxleaLt+i/myBleHRlbnNpb25zL+OAglxyXG4gICAgICpcclxuICAgICAqIOe8lui+keWZqCoq5Y+q5LuO5bel56iL55qEIGV4dGVuc2lvbnMvIOWKoOi9veaJqeWxlSoqLOaJgOS7pSBucG0gaW5zdGFsbCDlrozlv4XpobvokL3ov5nkuIDnm5gsXHJcbiAgICAgKiDlkKbliJlcIuabtOaWsOaIkOWKn1wi5Y+q5Y+R55Sf5ZyoIG5vZGVfbW9kdWxlcyDph4ws57yW6L6R5Zmo6YeM5LiA54K55Y+Y5YyW6YO95rKh5pyJ44CCXHJcbiAgICAgKiDokL3nm5jkuYvlkI7pnIDopoHph43lkK/nvJbovpHlmajmiY3nlJ/mlYgg4oCU4oCUIOi/meS4gOeCueeUsemdouadv+aWh+ahiOWRiuefpSzov5nph4zkuI3lgYfoo4Xng63mm7TmlrDjgIJcclxuICAgICAqL1xyXG4gICAgc3luY0V4dGVuc2lvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgICAgICBjb25zdCBmcm9tID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKTtcclxuICAgICAgICBpZiAoIWV4aXN0c1N5bmMoZnJvbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBtZXNzYWdlOiBcIm5vZGVfbW9kdWxlcyDph4zmsqHmnIkgXCIgKyBuYW1lICsgXCIs5YWI5a6J6KOF5YaN6JC955uYXCIgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG8gPSBqb2luKHJvb3QsIFwiZXh0ZW5zaW9uc1wiLCBuYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHJlbW92ZVN5bmModG8pO1xyXG4gICAgICAgIGNvcHlTeW5jKGZyb20sIHRvKTtcclxuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgcGF0aDogdG8gfTtcclxuICAgIH0sXHJcblxyXG4gICAgcXVlcnlWZXJzaW9ucyhmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgICAgICBjb25zdCByZWdpc3RyeSA9IHF1ZXJ5UmVnaXN0cnkoZm9yY2VSZWdpc3RyeSk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T2YgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhpdCA9IHJlZ2lzdHJ5LmVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaGl0ID8gaGl0LnZlcnNpb24gOiBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGZyYW1ld29ya05hbWUgPSAnQGNjZ2YvZnJhbWV3b3JrJztcclxuICAgICAgICBjb25zdCBmcmFtZXdvcmsgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBmcmFtZXdvcmtOYW1lKTtcclxuXHJcbiAgICAgICAgLyoqIOacrOS7k+W6k+eahOW8gOWPkeW3peS9nOWMujrmoYbmnrbmmK/mupDnoIHjgIHmianlsZXlsLHmmK/ov5nkuIDku70g4oCU4oCUIOmdouadv+aNruatpOaUueensOWRvOW5tuemgeeUqOabtOaWsCAqL1xyXG4gICAgICAgIGNvbnN0IGluV29ya3NwYWNlID0gZXhpc3RzU3luYyhqb2luKHJvb3QsICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZyYW1ld29yazoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZnJhbWV3b3JrTmFtZSxcclxuICAgICAgICAgICAgICAgIGluc3RhbGxlZDogZnJhbWV3b3JrLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZTogaW5Xb3Jrc3BhY2UsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBmcmFtZXdvcmsudmVyc2lvbixcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YoZnJhbWV3b3JrTmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4dGVuc2lvbjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcGFja2FnZUpTT04ubmFtZSxcclxuICAgICAgICAgICAgICAgIHZlcnNpb246IHBhY2thZ2VKU09OLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgbGF0ZXN0OiBsYXRlc3RPZihwYWNrYWdlSlNPTi5uYW1lKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIG9wZW5Xb3JrYmVuY2goKSB7XHJcbiAgICAgICAgRWRpdG9yLlBhbmVsLm9wZW4oYCR7cGFja2FnZUpTT04ubmFtZX0ud29ya2JlbmNoYCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpnaLmnb/nmoTlsYLnuqfkuIvmi4nnlLHkuLvov5vnqIvkuIvlj5HvvIzpgb/lhY3mianlsZXph4zlh7rnjrDnrKzkuozku73lsYLnuqfliJfooaggKi9cclxuICAgIHF1ZXJ5TGF5ZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gWy4uLkxBWUVSU107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6Z2i5p2/5paH5qGI77ya5LulIGkxOG4vemguanMg55qEIGtleSDlhajpm4bkuLrlh4bvvIzpgJDkuKrkuqTnu5nnvJbovpHlmaggaTE4biDop6PmnpDlvZPliY3or63oqIDjgIJcclxuICAgICAqIOi/meagt+mdouadv+S+p+S4jemcgOimgeWIpOaWreivreiogO+8jOS5n+S4jeS+nei1liBFZGl0b3IuSTE4biDmmK/lkKblrZjlnKjkuo7pnaLmnb/kuIrkuIvmlofph4zjgIJcclxuICAgICAqL1xyXG4gICAgcXVlcnlJMThuKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoWkhfU1RSSU5HUykpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbCA9IGAke3BhY2thZ2VKU09OLm5hbWV9LiR7a2V5fWA7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID0gWkhfU1RSSU5HU1trZXldO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGl0ID0gRWRpdG9yLkkxOG4udChmdWxsKTtcclxuICAgICAgICAgICAgICAgIGlmIChoaXQgJiYgaGl0ICE9PSBmdWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGhpdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLyog57yW6L6R5ZmoIGkxOG4g5LiN5Y+v55So5bCx5L+d55WZ5Lit5paHICovXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFibGVba2V5XSA9IHRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOmihOWItuS9k+aooeadv+WIl+ihqO+8iOS+m+mdouadv+S4i+aLie+8iSAqL1xyXG4gICAgcXVlcnlUZW1wbGF0ZXMoKTogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHtcclxuICAgICAgICByZXR1cm4gUFJFRkFCX1RFTVBMQVRFUy5tYXAoKGlkKSA9PiAoeyBpZCwgbGFiZWw6IFBSRUZBQl9URU1QTEFURV9MQUJFTFNbaWRdIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6IgZ2FtZXBsYXkg5LiL5bey5pyJ55qE5qih5Z2X5YiX6KGo77yI5ZCrIG9yZGVy77yJ44CCXHJcbiAgICAgKiDkuI7kvZPmo4DlhbHnlKggZG9jdG9yLmxpc3RNb2R1bGVz77yM5L+d6K+B6Z2i5p2/5pi+56S65ZKM5L2T5qOA5Yik5a6a5LiA6Ie044CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TW9kdWxlcygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdE1vZHVsZXMoc25hcCkubWFwKChtKSA9PiAoe1xyXG4gICAgICAgICAgICBuYW1lOiBtLmRpcixcclxuICAgICAgICAgICAgb3JkZXI6IG0ub3JkZXIgPz8gMCxcclxuICAgICAgICAgICAgaGFzTW9kZWw6IG0ubW9kZWxGaWxlICE9PSBudWxsLFxyXG4gICAgICAgICAgICBoYXNNb2R1bGU6IHRydWUsXHJcbiAgICAgICAgICAgIC8vIOmdouadv+eUqOi/meS4ieS4qui3r+W+hOWBmuOAjOS4gOmUruaJk+W8gOiEmuacrOOAje+8m2V2ZW50c0ZpbGUg5Y+v6IO95Li6IG51bGzvvIjogIHmqKHlnZfvvIlcclxuICAgICAgICAgICAgbW9kdWxlRmlsZTogbS5tb2R1bGVGaWxlLFxyXG4gICAgICAgICAgICBtb2RlbEZpbGU6IG0ubW9kZWxGaWxlLFxyXG4gICAgICAgICAgICBldmVudHNGaWxlOiBtLmV2ZW50c0ZpbGUsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5ZCv5Yqo6aG65bqP6aKE6KeIICsg5bGC57qn5Y2g55So77yI5byA5Y+R6L6F5Yqp77yJICovXHJcbiAgICBhc3luYyBxdWVyeU92ZXJ2aWV3KCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApO1xyXG4gICAgICAgIGNvbnN0IHVzYWdlID0gTEFZRVJTLm1hcCgobGF5ZXIpID0+ICh7XHJcbiAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICB2aWV3czogdmlld3MuZmlsdGVyKCh2KSA9PiB2LnJlZ2lzdGVyZWRMYXllciA9PT0gbGF5ZXIpLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gbGlzdE1vZHVsZXMoc25hcCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb3JkZXI6IGJ1aWxkT3JkZXJQbGFuKHNuYXApLFxyXG4gICAgICAgICAgICBsYXllcnM6IHVzYWdlLFxyXG4gICAgICAgICAgICBtb2R1bGVDb3VudDogbW9kdWxlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIG1hbmFnZXJDb3VudDogbGlzdE1hbmFnZXJzKHNuYXApLmxlbmd0aCxcclxuICAgICAgICAgICAgdmlld0NvdW50OiB2aWV3cy5sZW5ndGgsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOS4gOmUruS9k+ajgCAqL1xyXG4gICAgYXN5bmMgcnVuRG9jdG9yKCk6IFByb21pc2U8eyBmaW5kaW5nczogSUZpbmRpbmdbXTsgc3VtbWFyeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB9PiB7XHJcbiAgICAgICAgY29uc3QgZmluZGluZ3MgPSBydW5Eb2N0b3Ioc25hcHNob3QoKSwgTEFZRVJTKTtcclxuICAgICAgICBjb25zdCBzdW1tYXJ5ID0geyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9O1xyXG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmaW5kaW5ncykge1xyXG4gICAgICAgICAgICBzdW1tYXJ5W2Yuc2V2ZXJpdHldID0gKHN1bW1hcnlbZi5zZXZlcml0eV0gPz8gMCkgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBmaW5kaW5ncywgc3VtbWFyeSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivouafkOaooeWdl+eahCBWaWV3IOWIl+ihqOOAglxyXG4gICAgICog5q+U5pen5a6e546w5aSa5LqGIHByZWZhYkV4aXN0cyDigJTigJQg5pen54mI5oyJ57qm5a6a5ou8IFVSTCDljbTku47kuI3mn6Xnm5jvvIxcclxuICAgICAqIOS6juaYr+KAnOiEmuacrOWcqOOAgemihOWItuS9k+S4ouS6huKAneeahCBWaWV3IOS5n+S8muiiq+WIl+WHuuadpe+8jOeCueS6huaJjeWksei0peOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeVZpZXdzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIHJldHVybiBsaXN0Vmlld3Moc25hcClcclxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcilcclxuICAgICAgICAgICAgLm1hcCgodikgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHYuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgc2NyaXB0VXJsOiBkYlVybCh2LnNjcmlwdEZpbGUpLFxyXG4gICAgICAgICAgICAgICAgcHJlZmFiVXJsOiB2LnJlZ2lzdGVyZWRQYXRoID8gZGJVcmwoYCR7UkVTT1VSQ0VTX0RJUn0vJHt2LnJlZ2lzdGVyZWRQYXRofS5wcmVmYWJgKSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgcHJlZmFiRXhpc3RzOiB2LnJlZ2lzdGVyZWRQYXRoID8gc25hcC5wcmVmYWJzQnlSZXNvdXJjZVBhdGhbdi5yZWdpc3RlcmVkUGF0aF0gIT09IHVuZGVmaW5lZCA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXI6IHYucmVnaXN0ZXJlZExheWVyID8/ICcnLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYW5hZ2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgIC8qKiBtYW5hZ2VyIOWIl+ihqO+8iGFzc2V0cy9zY3JpcHRzL21hbmFnZXIg5LiL55u05bGe55qEICpNYW5hZ2VyLnRz77yJICovXHJcbiAgICBhc3luYyBxdWVyeU1hbmFnZXJzKCkge1xyXG4gICAgICAgIHJldHVybiBsaXN0TWFuYWdlcnMoc25hcHNob3QoKSkubWFwKChtKSA9PiAoe1xyXG4gICAgICAgICAgICBuYW1lOiBtLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgZmlsZTogbS5zY3JpcHRGaWxlLFxyXG4gICAgICAgICAgICBleHRlbmRzU2luZ2xldG9uOiBtLmV4dGVuZHNTaW5nbGV0b24sXHJcbiAgICAgICAgICAgIGJhc2VDbGFzczogbS5iYXNlQ2xhc3MsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uiBtYW5hZ2Vy77ya55Sf5oiQ5LiA5Liq57un5om/5qGG5p62IEFTaW5nbGV0b24g55qE5YWo5bGA5Y2V5L6L6ISa5pys44CCXHJcbiAgICAgKiBAcGFyYW0gbWFuYWdlck5hbWUg5ZCN5a2X77yM5aaCIFwiY29uZmlnXCIgLyBcIkNvbmZpZ1wiIC8gXCJDb25maWdNYW5hZ2VyXCJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlTWFuYWdlcihtYW5hZ2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtYW5hZ2VyTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1hbmFnZXJOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBtYW5hZ2VyIOWQjTogXCIke21hbmFnZXJOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZU1hbmFnZXJOYW1lKG1hbmFnZXJOYW1lKTtcclxuICAgICAgICBjb25zdCBkaXJVcmwgPSBgZGI6Ly8ke01BTkFHRVJfRElSfWA7XHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKGRpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke2RpclVybH0vJHtjbGFzc05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoc2NyaXB0VXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1hbmFnZXIg5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk5a6D77yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBzY3JpcHRVcmwsIGJ1aWxkTWFuYWdlclNjcmlwdChjbGFzc05hbWUsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uiBtYW5hZ2VyIOWksei0pTogJHtzY3JpcHRVcmx9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGlyVXJsKTtcclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIHNjcmlwdFVybCwgZmlsZTogYCR7TUFOQUdFUl9ESVJ9LyR7Y2xhc3NOYW1lfS50c2AgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWIoOmZpCBtYW5hZ2VyIOiEmuacrCAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTWFuYWdlcihtYW5hZ2VyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtYW5hZ2VyTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1hbmFnZXJOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBtYW5hZ2VyIOWQjTogXCIke21hbmFnZXJOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZU1hbmFnZXJOYW1lKG1hbmFnZXJOYW1lKTtcclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgZGI6Ly8ke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgO1xyXG5cclxuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHNjcmlwdFVybCk7XHJcbiAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5YiwIG1hbmFnZXIg6ISa5pys77yaJHtjbGFzc05hbWV9LnRzYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7TUFOQUdFUl9ESVJ9YCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCByZW1vdmVkOiBzY3JpcHRVcmwgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaTmqKHlnZfliY3nmoTlvJXnlKjmo4Dmn6XvvJrlk6rkupvotYTmupDlvJXnlKjkuobor6XmqKHlnZfnmoTohJrmnKzjgIJcclxuICAgICAqIOmdouadv+WcqOehruiupOahhumHjOWxleekuu+8jOmBv+WFjeWIoOWujOeVmeS4i+aCrOepuuW8leeUqOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZVJlZnMobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3Qgdmlld3MgPSBsaXN0Vmlld3Moc25hcCkuZmlsdGVyKCh2KSA9PiB2Lm1vZHVsZURpciA9PT0gbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBjaWRzID0gdmlld3MubWFwKCh2KSA9PiBzbmFwLnNjcmlwdENpZHNbdi5zY3JpcHRGaWxlXSkuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZUNpZCA9IHNuYXAuc2NyaXB0Q2lkc1tgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke25vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5tb2R1bGVDbGFzc30udHNgXTtcclxuICAgICAgICBjb25zdCBhbGxDaWRzID0gbW9kdWxlQ2lkID8gY2lkcy5jb25jYXQoW21vZHVsZUNpZF0pIDogY2lkcztcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2aWV3czogdmlld3MubWFwKCh2KSA9PiB2LmNsYXNzTmFtZSksXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZWRCeTogZmluZEFzc2V0UmVmcyhzbmFwLCBhbGxDaWRzKSxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Zyo57yW6L6R5Zmo6YeM5omT5byA5p+Q5Liq5bel56iL5YaF5paH5Lu277yI5L2T5qOA57uT5p6cL+amguiniOeCueWHu+WumuS9jeeUqO+8iSAqL1xyXG4gICAgYXN5bmMgb3BlblNvdXJjZShyZWxQYXRoOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXJlbFBhdGggfHwgcmVsUGF0aC5pbmNsdWRlcygnLi4nKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOi3r+W+hDogXCIke3JlbFBhdGh9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXJsID0gZGJVcmwocmVsUGF0aCk7XHJcbiAgICAgICAgLy8g5YWI56Gu6K6k6LWE5rqQ5a2Y5Zyo5LiU5bey6KKr57yW6L6R5Zmo5a+85YWl77yM5YaN6LCI5omT5byA77yb5ZCm5YiZ57uZ5Ye65piO56Gu5Y6f5ZugXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOi1hOa6kOS4jeWtmOWcqOaIluacquiiq+e8lui+keWZqOWvvOWFpTogJHtyZWxQYXRofWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdvcGVuLWFzc2V0JywgdXJsKTtcclxuICAgICAgICByZXR1cm4geyB1cmwgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7rmqKHlnZfvvJrnlJ/miJAgTW9kdWxlICsgTW9kZWwgKyDkuovku7blo7DmmI4g5LiJ5Liq6ISa5pys44CCXHJcbiAgICAgKiBAcGFyYW0gbW9kdWxlTmFtZSDmqKHlnZflkI3vvIzlpoIgXCJiYWdcIiAvIFwiQmFnXCIgLyBcIkJhZ01vZHVsZVwiXHJcbiAgICAgKiBAcGFyYW0gb3JkZXIgICAgICDmqKHlnZflkK/liqjpobrluo9cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlTW9kdWxlKG1vZHVsZU5hbWU6IHN0cmluZywgb3JkZXI6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKG9yZGVyKSB8fCBvcmRlciA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgb3JkZXI6ICR7b3JkZXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuYW1pbmcgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bmFtaW5nLmRpcn1gO1xyXG5cclxuICAgICAgICAvLyDlhYjmn6XlrZjlnKjmgKfvvIznu5nlh7rmmI7noa7ljp/lm6DvvIjml6fniYjlj6rlnKggY3JlYXRlLWFzc2V0IOi/lOWbnuepuuaXtuivtOKAnOWPr+iDveW3suWtmOWcqOKAne+8iVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZVVybCA9IGAke21vZHVsZURpclVybH0vJHtuYW1pbmcubW9kdWxlQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBtb2RlbFVybCA9IGAke21vZHVsZURpclVybH0vJHtuYW1pbmcubW9kZWxDbGFzc30udHNgO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50c1VybCA9IGAke21vZHVsZURpclVybH0vJHtuYW1pbmcuZXZlbnRzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhtb2R1bGVVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z2X5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kdWxlQ2xhc3N9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhtb2RlbFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmqKHlnovlt7LlrZjlnKjvvJoke25hbWluZy5tb2RlbENsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoZXZlbnRzVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOS6i+S7tuWjsOaYjuW3suWtmOWcqO+8miR7bmFtaW5nLmV2ZW50c05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIobW9kdWxlRGlyVXJsKTtcclxuXHJcbiAgICAgICAgLyoqIOW3suWIm+W7uuaIkOWKn+eahOi1hOa6kO+8m+S7u+S4gOatpeWksei0peaXtuaMiemAhuW6j+Wbnua7mu+8jOmBv+WFjeeVmeS4i+WNiuaIkOWTgSAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgY29uc3QgY3JlYXRlT3JSb2xsYmFjayA9IGFzeW5jICh1cmw6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCB1cmwsIGNvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoIWFzc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGNyZWF0ZWQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb25lIG9mIGNyZWF0ZWQucmV2ZXJzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0JywgZG9uZSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBtb2R1bGVEaXJVcmwpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGDliJvlu7oke2xhYmVsfeWksei0pTogJHt1cmx9JHtjb3VudCA+IDAgPyBg77yI5bey5Zue5ruaICR7Y291bnR9IOS4quaWh+S7tu+8iWAgOiAnJ31gLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcmVhdGVkLnB1c2godXJsKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKFxyXG4gICAgICAgICAgICBtb2R1bGVVcmwsIGJ1aWxkTW9kdWxlU2NyaXB0KG5hbWluZy5tb2R1bGVDbGFzcywgbmFtaW5nLm1vZGVsQ2xhc3MsIG9yZGVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z2XJyxcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2sobW9kZWxVcmwsIGJ1aWxkTW9kZWxTY3JpcHQobmFtaW5nLm1vZGVsQ2xhc3MsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksICfmqKHlnosnKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKGV2ZW50c1VybCwgYnVpbGRFdmVudHNTY3JpcHQobmFtaW5nLmRpciwgbmFtaW5nLm1vZHVsZUNsYXNzKSwgJ+S6i+S7tuWjsOaYjicpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGlyTmFtZTogbmFtaW5nLmRpcixcclxuICAgICAgICAgICAgcHJlZml4OiBuYW1pbmcucHJlZml4LFxyXG4gICAgICAgICAgICBtb2R1bGVVcmwsXHJcbiAgICAgICAgICAgIG1vZGVsVXJsLFxyXG4gICAgICAgICAgICBldmVudHNVcmwsXHJcbiAgICAgICAgICAgIG9yZGVyLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5pu05paw5qih5Z2X55qEIG9yZGVy77ya5YaZ5ZueIE1vZHVsZSDohJrmnKznmoQgQFJlZ2lzdGVyTW9kdWxlKHtvcmRlcn0p44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHVwZGF0ZU1vZHVsZU9yZGVyKG1vZHVsZU5hbWU6IHN0cmluZywgb3JkZXI6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKG9yZGVyKSB8fCBvcmRlciA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgb3JkZXI6ICR7b3JkZXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuXHJcbiAgICAgICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZpbGVzID0gcmVhZGRpclN5bmMobW9kdWxlRGlyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+ebruW9lTogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZUZpbGUgPSBmaWxlcy5maW5kKChmKSA9PiBmLmVuZHNXaXRoKCdNb2R1bGUudHMnKSk7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVGaWxlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5Yiw5qih5Z2X6ISa5pysOiAke21vZHVsZURpcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gam9pbihtb2R1bGVEaXJQYXRoLCBtb2R1bGVGaWxlKTtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmLTgnKTtcclxuICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gY29udGVudC5yZXBsYWNlKC9vcmRlclxccyo6XFxzKlxcZCsvLCBgb3JkZXI6ICR7b3JkZXJ9YCk7XHJcbiAgICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmnKrlnKggJHttb2R1bGVGaWxlfSDkuK3mib7liLAgb3JkZXIg5a2X5q61YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIG5ld0NvbnRlbnQpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IG1vZHVsZU5hbWU6IG1vZHVsZURpciwgb3JkZXIgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogVmlld++8muWcqOaMh+WumuaooeWdl+S4i+eUn+aIkOiEmuacrCArIOmihOWItuS9k++8jOW5tuaKiuiEmuacrOaMgui9veWIsOmihOWItuS9k+agueiKgueCueOAglxyXG4gICAgICogQHBhcmFtIHRlbXBsYXRlIOmihOWItuS9k+aooeadv++8jOingSBjb25zdGFudHMuUFJFRkFCX1RFTVBMQVRFU1xyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVWaWV3KG1vZHVsZU5hbWU6IHN0cmluZywgdmlld05hbWU6IHN0cmluZywgbGF5ZXI6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZyA9ICdlbXB0eScpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2aWV3TmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KHZpZXdOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOinhuWbvuWQjTogXCIke3ZpZXdOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghTEFZRVJTLmluY2x1ZGVzKGxheWVyIGFzIGFueSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTlsYLnuqc6IFwiJHtsYXllcn1cIu+8iOWQiOazleWAvO+8miR7TEFZRVJTLmpvaW4oJywgJyl977yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNQcmVmYWJUZW1wbGF0ZSh0ZW1wbGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTpooTliLbkvZPmqKHmnb86IFwiJHt0ZW1wbGF0ZX1cIu+8iOWQiOazleWAvO+8miR7UFJFRkFCX1RFTVBMQVRFUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiUGF0aCA9IHZpZXdQcmVmYWJQYXRoKG1vZHVsZURpciwgY2xhc3NOYW1lKTtcclxuXHJcbiAgICAgICAgLy8g6Leo5qih5Z2X6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yIVmlld01hbmFnZXIg5oyJ57G75ZCN5YWo5bGA5p+l5om+77yJ77yM5o+Q5YmN5oyh5L2PXHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3QgY2xhc2ggPSBsaXN0Vmlld3Moc25hcCkuZmluZChcclxuICAgICAgICAgICAgKHYpID0+IHYuY2xhc3NOYW1lID09PSBjbGFzc05hbWUgJiYgdi5tb2R1bGVEaXIgIT09IG1vZHVsZURpcixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjbGFzaCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgVmlldyDlkI3lrZcgXCIke2NsYXNzTmFtZX1cIiDlt7LooqvmqKHlnZcgXCIke2NsYXNoLm1vZHVsZURpcn1cIiDljaDnlKjvvJtgICtcclxuICAgICAgICAgICAgICAgIGDmoYbmnrbmjInnsbvlkI3lhajlsYDmn6Xmib7vvIzph43lkI3kvJrliqDovb3plJnpooTliLbkvZPvvIzor7fmjaLkuKrlkI3lrZdgLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgdmlld3NEaXJVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7VklFV1NfU1VCRElSfWA7XHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYCR7dmlld3NEaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWaWV3IOiEmuacrOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRDb250ZW50ID0gYnVpbGRWaWV3U2NyaXB0KGNsYXNzTmFtZSwgcHJlZmFiUGF0aCwgbGF5ZXIsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0QXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBzY3JpcHRDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghc2NyaXB0QXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rohJrmnKzlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJlZmFiRGlyVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn1gO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlVybCA9IGAke3ByZWZhYkRpclVybH0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKHByZWZhYkRpclVybCk7XHJcblxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhwcmVmYWJVcmwpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpooTliLbkvZPlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0ucHJlZmFi77yI5bey5Zue5rua6ISa5pys77yM5aaC6ZyA6YeN5bu66K+35YWI5Yig6Zmk6K+lIFZpZXfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXByZXNzZWRVdWlkID0gY29tcHJlc3NVdWlkKHNjcmlwdEFzc2V0LnV1aWQpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoYnVpbGRWaWV3UHJlZmFiKGNsYXNzTmFtZSwgY29tcHJlc3NlZFV1aWQsIHRlbXBsYXRlKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZhYkFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBwcmVmYWJVcmwsIHByZWZhYkNvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoIXByZWZhYkFzc2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uumihOWItuS9k+Wksei0pTogJHtwcmVmYWJVcmx9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIOWbnua7muiEmuacrO+8jOmBv+WFjeeVmeS4i+KAnOacieiEmuacrOayoemihOWItuS9k+KAneeahOWNiuaIkOWTgVxyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCB2aWV3c0RpclVybCk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgcHJlZmFiRGlyVXJsKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIG1vZHVsZURpciwgc2NyaXB0VXJsLCBwcmVmYWJVcmwsIHByZWZhYlBhdGgsIGxheWVyLCB0ZW1wbGF0ZSB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpCB2aWV377ya5Y+q5Yig6Ieq6Lqr77yI6ISa5pysICsg6aKE5Yi25L2TICsg5ZCE6IeqIG1ldGHvvInvvIzkuI3norDlhbbku5botYTmupDjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF2aWV3TmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KHZpZXdOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOinhuWbvuWQjTogXCIke3ZpZXdOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZVZpZXdOYW1lKHZpZXdOYW1lKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfS8ke2NsYXNzTmFtZX0ucHJlZmFiYDtcclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7VklFV1NfU1VCRElSfS8ke2NsYXNzTmFtZX0udHNgO1xyXG5cclxuICAgICAgICBjb25zdCBkZWxldGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgdXJsIG9mIFtwcmVmYWJVcmwsIHNjcmlwdFVybF0pIHtcclxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpO1xyXG4gICAgICAgICAgICBpZiAoaW5mbykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0JywgdXJsKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZWQucHVzaCh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmuIXnkIbnqbrnm67lvZXvvIjml6fniYjkvJrnlZnkuIsgcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+IOi/meenjeepuuWjs++8iVxyXG4gICAgICAgIGF3YWl0IHBydW5lRW1wdHlEaXIoam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7VklFV1NfU1VCRElSfWApKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIGRlbGV0ZWQgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaTmqKHlnZfvvJrliKAgZ2FtZXBsYXkvPOaooeWdlz4vIOS4jiByZXNvdXJjZXMvdmlld3MvPOaooeWdlz4vIOS4pOS4quebruW9le+8iOi/nuWQjCBtZXRh77yJ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgR0FNRVBMQVlfRElSLCBtb2R1bGVEaXIpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIFJFU09VUkNFU19ESVIsICd2aWV3cycsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIFtwcmVmYWJEaXJQYXRoLCBtb2R1bGVEaXJQYXRoXSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVTeW5jKHApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLyog5LiN5a2Y5Zyo5YiZ6Lez6L+HICovXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzYCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKEdBTUVQTEFZX0RJUikpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVEaXIsIHJlbW92ZWQgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivouWFrOWFseaooeWdl++8muacrOWcsOW3peS9nOWMuiArIOW3suWuieijhSArIOi/nOeoiyByZWdpc3RyeeOAglxyXG4gICAgICogQHBhcmFtIGZvcmNlIOW8uuWItumHjeaWsOaLieWPlui/nOeoi+WIl+ihqO+8iOmdouadv+eahOOAjOWIt+aWsOOAjeeUqO+8iVxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeVNoYXJlZE1vZHVsZXMoZm9yY2U/OiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXJ5U2hhcmVkU3RhdGUoZm9yY2UgPT09IHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWuieijheS4gOS4quWFrOWFseaooeWdl++8mioq55u05o6l5Luj6LeRIGBucG0gaW5zdGFsbGAqKuOAglxyXG4gICAgICog5aSx6LSl5pe25oqb5Ye655qE6ZSZ6K+v6YeM5bim552AIG5wbSDnmoTljp/lp4vovpPlh7rvvIzpnaLmnb/kvJrljp/moLflsZXnpLrjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5zdGFsbFNoYXJlZE1vZHVsZShwYWNrYWdlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1blNoYXJlZEFjdGlvbignaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWNuOi9veS4gOS4quWFrOWFseaooeWdl++8muebtOaOpeS7o+i3kSBgbnBtIHVuaW5zdGFsbGAgKi9cclxuICAgIGFzeW5jIHVuaW5zdGFsbFNoYXJlZE1vZHVsZShwYWNrYWdlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1blNoYXJlZEFjdGlvbigndW5pbnN0YWxsJywgcGFja2FnZU5hbWUpO1xyXG4gICAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIFRyaWdnZXJlZCBvbiBFeHRlbnNpb24gU3RhcnR1cFxyXG4gKiBAemgg5omp5bGV5ZCv5Yqo5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbG9hZCgpIHsgfVxyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgdHJpZ2dlcmVkIHdoZW4gdW5pbnN0YWxsaW5nIHRoZSBleHRlbnNpb25cclxuICogQHpoIOWNuOi9veaJqeWxleaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVubG9hZCgpIHsgfVxyXG4iXX0=
|
|
860
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQTgrQkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQXAvQjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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QUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELHdFQUF3RTtJQUV4RTs7O09BR0c7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBZTtRQUNwQyxPQUFPLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBbUI7UUFDekMsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFdBQW1CO1FBQzNDLE9BQU8sZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0osQ0FBQztBQUVGOzs7R0FHRztBQUNILFNBQWdCLElBQUksS0FBSyxDQUFDO0FBRTFCOzs7R0FHRztBQUNILFNBQWdCLE1BQU0sS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxyXG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vcGFja2FnZS5qc29uJztcclxuaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBjb3B5U3luYywgZXhpc3RzU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgcmVtb3ZlU3luYywgc3RhdFN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHtcclxuICAgIEdBTUVQTEFZX0RJUixcclxuICAgIExBWUVSUyxcclxuICAgIE1BTkFHRVJfRElSLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFUyxcclxuICAgIFBSRUZBQl9URU1QTEFURV9MQUJFTFMsXHJcbiAgICBSRUdJU1RSWV9DQUNIRV9NUyxcclxuICAgIFJFU09VUkNFU19ESVIsXHJcbiAgICBUUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBWSUVXU19TVUJESVIsXHJcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBidWlsZE9yZGVyUGxhbiwgbGlzdE1hbmFnZXJzLCBsaXN0TW9kdWxlcywgbGlzdFZpZXdzLCBydW5Eb2N0b3IgfSBmcm9tICcuL2RvY3Rvcic7XHJcbmltcG9ydCB7XHJcbiAgICBJREVOVElGSUVSX1JFLFxyXG4gICAgbm9ybWFsaXplTWFuYWdlck5hbWUsXHJcbiAgICBub3JtYWxpemVNb2R1bGUsXHJcbiAgICBub3JtYWxpemVWaWV3TmFtZSxcclxuICAgIHZpZXdQcmVmYWJQYXRoLFxyXG59IGZyb20gJy4vbmFtaW5nJztcclxuaW1wb3J0IHtcclxuICAgIGNvbGxlY3RTbmFwc2hvdCxcclxuICAgIGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcixcclxuICAgIGxpc3RMb2NhbENhdGFsb2csXHJcbiAgICByZWFkSW5zdGFsbGVkUGFja2FnZSxcclxuICAgIHJlYWRQcm9qZWN0TWFuaWZlc3QsXHJcbn0gZnJvbSAnLi9wcm9qZWN0JztcclxuaW1wb3J0IHtcclxuICAgIGlzU2hhcmVkTW9kdWxlUGFja2FnZSxcclxuICAgIEtOT1dOX1BBQ0tBR0VTLFxyXG4gICAgcGFyc2VWaWV3UmVzdWx0LFxyXG4gICAgdmlld0FyZ3YsXHJcbn0gZnJvbSAnLi9yZWdpc3RyeSc7XHJcbmltcG9ydCB7XHJcbiAgICBOUE1fVElNRU9VVF9NUyxcclxuICAgIGJ1aWxkTnBtUmVzdWx0LFxyXG4gICAgYnVpbGRTaGFyZWRTdGF0dXMsXHJcbiAgICBjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkLFxyXG4gICAgY29sbGVjdEluc3RhbGxTcGVjcyxcclxuICAgIGRlY29kZVByb2Nlc3NPdXRwdXQsXHJcbiAgICBmaW5kUGFja2FnZVJlZnMsXHJcbiAgICBmb3JtYXROcG1Db21tYW5kLFxyXG4gICAgaXNTaGFyZWRNb2R1bGVNYW5pZmVzdCxcclxuICAgIG1lcmdlQ2F0YWxvZyxcclxuICAgIG5wbVNwYXduU3BlYyxcclxuICAgIHNwYXduU3BlY0ZvcixcclxuICAgIHN1bW1hcml6ZU5wbUZhaWx1cmUsXHJcbn0gZnJvbSAnLi9zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gICAgYnVpbGRNYW5hZ2VyU2NyaXB0LFxyXG4gICAgYnVpbGRFdmVudHNTY3JpcHQsXHJcbiAgICBidWlsZE1vZGVsU2NyaXB0LFxyXG4gICAgYnVpbGRNb2R1bGVTY3JpcHQsXHJcbiAgICBidWlsZFZpZXdQcmVmYWIsXHJcbiAgICBidWlsZFZpZXdTY3JpcHQsXHJcbiAgICBpc1ByZWZhYlRlbXBsYXRlLFxyXG4gICAgVEZyYW1ld29ya0ltcG9ydCx9IGZyb20gJy4vdGVtcGxhdGVzJztcclxuaW1wb3J0IHsgSUZpbmRpbmcsIElOcG1SdW5SZXN1bHQsIElJbnN0YWxsZWRQYWNrYWdlVmlldywgSVByb2plY3RTbmFwc2hvdCwgSVNoYXJlZENhdGFsb2dFbnRyeSB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmlofmoYggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIOaJqeWxleiHquW4pueahOS4reaWh+aWh+ahiOihqOOAglxyXG4gKiDlroPml6LmmK/jgIxrZXkg5YWo6ZuG44CN55qE5p2l5rqQ77yM5Lmf5piv57yW6L6R5ZmoIGkxOG4g5ou/5LiN5Yiw5pe255qE5YWc5bqV44CCXHJcbiAqL1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG5jb25zdCBaSF9TVFJJTkdTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gcmVxdWlyZSgnLi4vaTE4bi96aC5qcycpO1xyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlsI/lt6XlhbcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqIOW3peeoi+agueebruW9lSAqL1xyXG5mdW5jdGlvbiBwcm9qZWN0UGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5Qcm9qZWN0LnBhdGg7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDov5nkuKrlt6XnqIvlvJXnlKjmoYbmnrbor6XnlKjlk6rnp43lhpnms5U6XHJcbiAqIC0g5byA5Y+R5bel5L2c5Yy6KOS7k+W6k+mHjCzmoYbmnrbmupDnoIHlnKggYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrIOS4iykgLT4g55u45a+56Lev5b6EXHJcbiAqIC0g6KOF5oiQIG5wbSDljIXnmoTmlrDlt6XnqIsgLT4g5YyF5ZCNIEBjY2dmL2ZyYW1ld29ya1xyXG4gKlxyXG4gKiDliKTmja7mmK9cIuahhuaetua6kOeggeWcqOS4jeWcqFwiLOS4jiBjb25zdGFudHMudHMg55qEIEZSQU1FV09SS19ERVZfRElSIOWQjOS4gOS4quWAvOOAglxyXG4gKi9cclxuZnVuY3Rpb24gZnJhbWV3b3JrSW1wb3J0TW9kZSgpOiBURnJhbWV3b3JrSW1wb3J0IHtcclxuICAgIHJldHVybiBleGlzdHNTeW5jKGpvaW4ocHJvamVjdFBhdGgoKSwgJ2Fzc2V0cy9zY3JpcHRzL2ZyYW1ld29yaycpKSA/ICd3b3Jrc3BhY2UnIDogJ3BhY2thZ2UnO1xyXG59XHJcblxyXG4vKiog55u45a+56Lev5b6EIC0+IGRiOi8vIOi1hOa6kCB1cmwgKi9cclxuZnVuY3Rpb24gZGJVcmwocmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdkYjovLycgKyByZWwucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG59XHJcblxyXG4vKiogdXVpZCAtPiDpooTliLbkvZPph4zohJrmnKznu4Tku7bnmoQgX190eXBlX18gKi9cclxuZnVuY3Rpb24gY29tcHJlc3NVdWlkKHV1aWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlV0aWxzLlVVSUQuY29tcHJlc3NVVUlEKHV1aWQsIGZhbHNlKTtcclxufVxyXG5cclxuLyoqIOWPluS4gOS7veW3peeoi+W/q+eFp++8iOS9k+ajgOOAgeWIl+ihqOmDveWfuuS6juWug++8jOS/neivgemdouadv+eci+WIsOeahOWSjOS9k+ajgOeci+WIsOeahOaYr+WQjOS4gOS7veaVsOaNru+8iSAqL1xyXG5mdW5jdGlvbiBzbmFwc2hvdCgpOiBJUHJvamVjdFNuYXBzaG90IHtcclxuICAgIHJldHVybiBjb2xsZWN0U25hcHNob3QocHJvamVjdFBhdGgoKSwgY29tcHJlc3NVdWlkKTtcclxufVxyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiByZWdpc3RyeSDmkJzntKLnu5PmnpznmoTnvJPlrZjjgIJcclxuICpcclxuICog5LiA5qyh5pCc57Si5a6e5rWLIDF+NCDnp5Ig4oCU4oCUIOiAjOmdouadv+WIh+mhteOAgeijheWujOWIt+aWsOmDveS8muiwg+eUqOafpeivou+8jOS4jeiDveavj+asoemDveWOu+aQnOOAglxyXG4gKiDmmL7lvI/ngrnjgIzliLfmlrDjgI3ml7bnlKggYGZvcmNlYCDnu5Xov4flroPjgIJcclxuICovXHJcbmxldCByZWdpc3RyeUNhY2hlOiB7IGF0OiBudW1iZXI7IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuLyoqXHJcbiAqICoq5aSx6LSl5LiN5oqb5byC5bi4LOS5n+S4jeiuqemdouadv+epuuedgOijheS9nFwi5rKh5pyJ5qih5Z2XXCIqKjrmiorljp/lm6DkuIDotbflm57kvKAs6Z2i5p2/5pi+56S65oiQ5o+Q56S6IOKAlOKAlFxyXG4gKiDov5nmmK/mnIDliJ3lsLHlrprkuIvnmoTopoHmsYIoXCLmsqHmnInnvZHnu5zlsLHmj5DnpLrlsLHooYzkuoZcIinjgIJcclxuICpcclxuICog6L+c56iL5L+h5oGv55qE5p2l5rqQOioq6YCQ5LiqIGBucG0gdmlldyA8bmFtZT4gLS1qc29uYCDnsr7noa7mn6Xor6IqKuOAglxyXG4gKlxyXG4gKiDmm77nu4/nlKggYG5wbSBzZWFyY2hgICsg5YWz6ZSu6K+NLOW3suW6n+W8gyDigJTigJQg5pCc57Si5a+5IHNjb3BlZCDljIUoYEBjY2dmLypgKeW+iOS4jeWPr+mdoCxcclxuICog5bi45bi45pCc5LiN5YiwLOS6juaYr1wi5YWs5YWx5qih5Z2X6L+c56iL5YiX6KGoXCLlkoxcIuacgOaWsOeJiOacrFwi6YO95Lya5piv56m655qEKOWunua1i+i4qei/hynjgIJcclxuICog5Luj5Lu3OuWMheWQjeimgee7tOaKpOWcqCByZWdpc3RyeS50cyDnmoQgS05PV05fUEFDS0FHRVMg6YeMLOaWsOWinuWMheaXtuWKoOS4gOihjOOAglxyXG4gKlxyXG4gKiDkuYvmiYDku6XnlKggbnBtIOWRveS7pOiAjOS4jeaYr+iHquW3seWPkSBIVFRQUyDor7fmsYI6bnBtIOS8muiHquWKqOW4puS4iuW3peeoi+eahCBgLm5wbXJjYFxyXG4gKiAo56eB5pyJ5rqQ44CB6ZWc5YOP44CB5Luj55CG562J6YWN572u6YO96Lef552A6LWwKSzkuI3nlKjmiJHku6zph43lpI3lrp7njrDkuIDpgY3jgIJcclxuICovXHJcbi8qKlxyXG4gKiAqKuW8guatpSoq6LeR5LiA5qyhIG5wbeOAglxyXG4gKlxyXG4gKiDkuLrku4DkuYjkuI3og73nu6fnu63nlKggc3Bhd25TeW5jOui/meS4quWHveaVsOWcqCoq57yW6L6R5Zmo5Li76L+b56iLKirph4zooqvosIPnlKgsc3Bhd25TeW5jIOS8muaKiuS4u+W+queOr1xyXG4gKiDmlbTkuKrljaDkvY8g4oCU4oCUIOavj+afpeS4gOS4quWMheWHoOeZvuavq+enkizlh6DkuKrljIXkuIvmnaXnvJbovpHlmaggVUkg5bCx5Y2h5L2P44CB54K55Yir5aSE5rKh5Y+N5bqUKOWunua1iynjgIJcclxuICog5o2i5oiQIHNwYXduICsgUHJvbWlzZTrlkIzmoLfnrYnnu5Pmnpws5L2G5Lit6Ze06K6p5Ye65LqL5Lu25b6q546vLOe8lui+keWZqOS4jeWGu+e7k+OAglxyXG4gKi9cclxuLyoqXHJcbiAqIOafpei/nOeoi+S/oeaBr+eUqOeahCoq55+tKirotoXml7bjgIJcclxuICpcclxuICog5LiN6IO955SoIE5QTV9USU1FT1VUX01TKDEyMCDnp5IpOumCo+aYr+e7mVwi5a6J6KOFXCLnlKjnmoQs55So5oi35Y+v5Lul562JO1xyXG4gKiDogIxcIuafpeS4gOS4i+acgOaWsOeJiOacrFwi6KaB5piv562J5Lik5YiG6ZKfLOmCo+S4gOmhteWwseetieS6juW6n+S6huOAglxyXG4gKi9cclxuY29uc3QgUkVHSVNUUllfUVVFUllfVElNRU9VVF9NUyA9IDEwMDAwO1xyXG5cclxuLyoqIOWQjOS4gOaXtuWIu+WPquWFgeiuuOS4gOS4quWQjuWPsOWIt+aWsOWcqOi3kSzlkKbliJnmr4/mrKHliIfpobXnrb7pg73kvJrlho3otbfkuIDova4gbnBtICovXHJcbmxldCByZWdpc3RyeVJlZnJlc2hpbmcgPSBmYWxzZTtcclxuXHJcbmZ1bmN0aW9uIHJ1bk5wbUFzeW5jKFxyXG4gICAgY29tbWFuZDogc3RyaW5nLFxyXG4gICAgc3Bhd25TcGVjOiB7IGNvbW1hbmQ6IHN0cmluZzsgYXJnczogc3RyaW5nW107IHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cz86IGJvb2xlYW4gfSxcclxuICAgIGN3ZDogc3RyaW5nLFxyXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSBOUE1fVElNRU9VVF9NUyxcclxuKTogUHJvbWlzZTx7IHJlc3VsdDogSU5wbVJ1blJlc3VsdDsgc3Rkb3V0OiBzdHJpbmcgfT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGVyckNodW5rczogQnVmZmVyW10gPSBbXTtcclxuICAgICAgICBsZXQgY2hpbGQ6IGFueTtcclxuICAgICAgICBjb25zdCBmaW5pc2ggPSAoZXhpdENvZGU6IG51bWJlciB8IG51bGwsIHNwYXduRXJyb3I6IHsgY29kZT86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ZG91dCA9IGRlY29kZVByb2Nlc3NPdXRwdXQoQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4aXRDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ZG91dCxcclxuICAgICAgICAgICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoQnVmZmVyLmNvbmNhdChlcnJDaHVua3MpKSxcclxuICAgICAgICAgICAgICAgICAgICBzcGF3bkVycm9yLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY2hpbGQgPSBzcGF3bihzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgICAgIGN3ZCxcclxuICAgICAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgICBmaW5pc2gobnVsbCwgeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgdHJ5IHsgY2hpbGQua2lsbCgpOyB9IGNhdGNoIHsgLyog5bey57uP6YCA5LqGICovIH0gfSwgdGltZW91dE1zKTtcclxuICAgICAgICBjaGlsZC5zdGRvdXQ/Lm9uKCdkYXRhJywgKGQ6IEJ1ZmZlcikgPT4gY2h1bmtzLnB1c2goZCkpO1xyXG4gICAgICAgIGNoaWxkLnN0ZGVycj8ub24oJ2RhdGEnLCAoZDogQnVmZmVyKSA9PiBlcnJDaHVua3MucHVzaChkKSk7XHJcbiAgICAgICAgY2hpbGQub24oJ2Vycm9yJywgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgIGZpbmlzaChudWxsLCB7IGNvZGU6IGVycj8uY29kZSwgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNoaWxkLm9uKCdjbG9zZScsIChjb2RlOiBudW1iZXIgfCBudWxsKSA9PiB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgIGlmICh0aW1lciA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBmaW5pc2goY29kZSwgbnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG4vKipcclxuICog6L+c56iL5L+h5oGvKOW4pue8k+WtmCnjgIIqKui/meS4quWHveaVsOawuOi/nOS4jemYu+WhnuOAgeawuOi/nOS4jSBhd2FpdCDlpJbpg6jov5vnqIsqKuOAglxyXG4gKlxyXG4gKiDkuLrku4DkuYjov5nkuYjorr7orqE65a6D6LeR5Zyo57yW6L6R5Zmo5Li76L+b56iL6YeMLOiAjCBucG0g5q+P5Liq6L+b56iL6KaBIDF+MyDnp5Is572R57uc5Z2P5LqG6L+Y5Y+v6IO95LiA55u05LiN6L+U5Zue44CCXHJcbiAqIOaXqeWFiOeUqOWQjOatpSBzcGF3biArIOmAkOS4quafpSzooajnjrDlsLHmmK9cIueCueW8gOi/meS4gOmhtSznvJbovpHlmajliKvlpITkuZ/msqHlj43lupRcIuOAglxyXG4gKiDnjrDlnKg65ZG95Lit57yT5a2Y56uL5Yi76L+U5ZueO+i/h+acn+WImSoq5YWI6L+U5Zue5pen5YC8Kios5ZCM5pe25ZCO5Y+w5Yi35pawKOS4jSBhd2FpdCk7XHJcbiAqIOS7juayoeaIkOWKn+i/h+aXtui/lOWbnuaYjuehrueahOaPkOekuuaWh+ahiCzogIzkuI3mmK/orqnosIPnlKjmlrnlubLnrYnjgIJcclxuICpcclxuICog5aSx6LSl5LiN5oqb5byC5bi4LOS5n+S4jeiuqemdouadv+epuuedgOijheS9nFwi5rKh5pyJ5qih5Z2XXCI65oqK5Y6f5Zug5LiA6LW35Zue5LygLOmdouadv+aYvuekuuaIkOaPkOekuiDigJTigJRcclxuICog6L+Z5piv5pyA5Yid5bCx5a6a5LiL55qE6KaB5rGCKFwi5rKh5pyJ572R57uc5bCx5o+Q56S65bCx6KGM5LqGXCIp44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBxdWVyeVJlZ2lzdHJ5KGZvcmNlOiBib29sZWFuKTogeyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGZyZXNoID0gcmVnaXN0cnlDYWNoZSAmJiBub3cgLSByZWdpc3RyeUNhY2hlLmF0IDwgUkVHSVNUUllfQ0FDSEVfTVM7XHJcblxyXG4gICAgaWYgKCFmb3JjZSAmJiBmcmVzaCkge1xyXG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IHJlZ2lzdHJ5Q2FjaGUhLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlIS5lcnJvciB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOmcgOimgeabtOaWsDrlkI7lj7DljrvliLcs5LiN5Zyo6L+Z6YeM562JXHJcbiAgICB2b2lkIHJlZnJlc2hSZWdpc3RyeSgpO1xyXG5cclxuICAgIGlmIChyZWdpc3RyeUNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZS5lbnRyaWVzLCBlcnJvcjogcmVnaXN0cnlDYWNoZS5lcnJvciB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlbnRyaWVzOiBbXSxcclxuICAgICAgICBlcnJvcjogcmVnaXN0cnlSZWZyZXNoaW5nID8gJ+ato+WcqOiOt+WPlui/nOeoi+S/oeaBr+KApicgOiAn6L+c56iL5L+h5oGv5pqC5LiN5Y+v55SoKOemu+e6v+aIlui2heaXtiknLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIOecn+ato+eahOaLieWPljrlvILmraXjgIHmnInlubblj5Hpl7jjgIHljZXljIXlpLHotKXkuI3mi5blnq7mlbTku73liJfooaggKi9cclxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFJlZ2lzdHJ5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHJlZ2lzdHJ5UmVmcmVzaGluZykgcmV0dXJuO1xyXG4gICAgcmVnaXN0cnlSZWZyZXNoaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICAgICAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBLTk9XTl9QQUNLQUdFUykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gJ25wbSB2aWV3ICcgKyBuYW1lICsgJyAtLWpzb24nO1xyXG4gICAgICAgICAgICBjb25zdCBzcGF3blNwZWMgPSBzcGF3blNwZWNGb3IoXHJcbiAgICAgICAgICAgICAgICBbcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICducG0uY21kJyA6ICducG0nLCAuLi52aWV3QXJndihuYW1lKV0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVzdWx0LCBzdGRvdXQgfSA9IGF3YWl0IHJ1bk5wbUFzeW5jKGNvbW1hbmQsIHNwYXduU3BlYywgcHJvamVjdFBhdGgoKSwgUkVHSVNUUllfUVVFUllfVElNRU9VVF9NUyk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICBmYWlsdXJlcy5wdXNoKG5hbWUgKyAnOicgKyAocmVzdWx0LmhpbnQgPz8gKCfotoXml7bmiJbpgIDlh7rnoIEgJyArIChyZXN1bHQuZXhpdENvZGUgPz8gJ+acquefpScpKSkpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBwYXJzZVZpZXdSZXN1bHQoc3Rkb3V0KTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5KSBlbnRyaWVzLnB1c2goZW50cnkpO1xyXG4gICAgICAgICAgICBlbHNlIGZhaWx1cmVzLnB1c2gobmFtZSArICc66L+U5Zue5YaF5a655LiN5piv6aKE5pyf55qEIEpTT04g5b2i54q2Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlcnJvciA9IGVudHJpZXMubGVuZ3RoID09PSAwICYmIGZhaWx1cmVzLmxlbmd0aCA+IDAgPyBmYWlsdXJlcy5qb2luKCc7JykgOiBudWxsO1xyXG4gICAgICAgIHJlZ2lzdHJ5Q2FjaGUgPSB7IGF0OiBEYXRlLm5vdygpLCBlbnRyaWVzLCBlcnJvciB9O1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICByZWdpc3RyeVJlZnJlc2hpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOe7hOijheWFrOWFseaooeWdl+eahOWujOaVtOeKtuaAgeOAglxyXG4gKlxyXG4gKiDkuInkuKrmnaXmupDlkIjotbfmnaXmiY3mmK/lrozmlbTliJfooajvvJpcclxuICogMS4g5pys5qGG5p62KirlvIDlj5Hlt6XkvZzljLoqKumHjOeahCBgcGFja2FnZXMvc2hhcmVkLypg77yI5Y+q5pyJ5pys5LuT5bqT5omN6K6k77yM6KeBXHJcbiAqICAgIGBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXJg77yJ4oCU4oCUIOiDvee7meWHuiBgZmlsZTpgIOWuieijheivtOaYjuespu+8m1xyXG4gKiAyLiBgbm9kZV9tb2R1bGVzYCDph4zlt7Lnu4/oo4XkuobnmoTvvIjpnaDljIXmuIXljZXph4znmoTmoIforrDorqTlh7rmnaXvvInvvJtcclxuICogMy4gKirov5znqIsgcmVnaXN0cnkqKu+8iOaMieWPkeeOsOWFs+mUruivjeaQnOe0ou+8ieKAlOKAlCDopobnm5ZcIui/mOayoeijheOAgeS9huWPr+S7peijhVwi55qE6YKj5Lqb44CCXHJcbiAqXHJcbiAqIOWIu+aEjyoq5LiNKirpnaDljIXlkI3ljLnphY3mnaXor4bliKvlhazlhbHmqKHlnZfvvJpzY29wZSDov5jmsqHlrprvvIjop4EgUk9BRE1BUCDnmoQgUzFh77yJ77yMXHJcbiAqIOaNouS4qiBzY29wZSDlsLHorqTkuI3lh7rmnaXkuobjgIJcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIHF1ZXJ5U2hhcmVkU3RhdGUoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgIGNvbnN0IG1hbmlmZXN0ID0gcmVhZFByb2plY3RNYW5pZmVzdChyb290KTtcclxuICAgIGNvbnN0IHByb2plY3REZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGV2RGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2hhcmVkRGlyID0gZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyKHJvb3QpO1xyXG4gICAgY29uc3QgbG9jYWwgPSBzaGFyZWREaXIgPyBsaXN0TG9jYWxDYXRhbG9nKHNoYXJlZERpciwgcm9vdCkgOiBbXTtcclxuXHJcbiAgICBjb25zdCBpbnN0YWxsZWRTaGFyZWQ6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHByb2plY3REZXBlbmRlbmNpZXMpKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaWYgKHBrZy5pbnN0YWxsZWQgJiYgaXNTaGFyZWRNb2R1bGVNYW5pZmVzdChwa2cubWFuaWZlc3QpKSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZFNoYXJlZC5wdXNoKGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQobmFtZSwgcGtnLm1hbmlmZXN0LCBwa2cudmVyc2lvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWdpc3RyeSA9IGF3YWl0IHF1ZXJ5UmVnaXN0cnkoZm9yY2VSZWdpc3RyeSk7XHJcbiAgICAvLyDmoYbmnrbkuI7mianlsZXkuI3mmK/lhazlhbHmqKHlnZcs6Jm954S25a6D5Lus5Lmf6KOF552A44CB5Lmf5ZyoIEtOT1dOX1BBQ0tBR0VTIOmHjCDigJTigJQg5Lik5aSE6YO96KaB5ruk5o6JLFxyXG4gICAgLy8g5ZCm5YiZ5L2/55So6ICF55qEXCLlhazlhbHmqKHlnZdcIuWIl+ihqOmHjOS8muWGkuWHuuahhuaetuWSjOe8lui+keWZqOaJqeWxleOAglxyXG4gICAgY29uc3Qgc2hhcmVkT25seSA9IChlOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5KSA9PiBpc1NoYXJlZE1vZHVsZVBhY2thZ2UoZS5uYW1lKTtcclxuICAgIGNvbnN0IGNhdGFsb2cgPSBtZXJnZUNhdGFsb2coXHJcbiAgICAgICAgbWVyZ2VDYXRhbG9nKGxvY2FsLCByZWdpc3RyeS5lbnRyaWVzLmZpbHRlcihzaGFyZWRPbmx5KSksXHJcbiAgICAgICAgaW5zdGFsbGVkU2hhcmVkLmZpbHRlcihzaGFyZWRPbmx5KSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gXCLlj6/mm7TmlrBcIuimgemdoOi/nOeoi+eahOacgOaWsOeJiOacrOWPt++8jOiAjCBtZXJnZUNhdGFsb2cg6K6p5pys5Zyw6aG55LyY5YWI77yI5ZCM5ZCN55qE6L+c56iL6aG55Lya6KKr55uW5o6J77yJ77yMXHJcbiAgICAvLyDmiYDku6Xov5nph4zljZXni6znlZnkuIDku73ljIXlkI0gLT4g6L+c56iL5pyA5paw54mI5pys44CCXHJcbiAgICBjb25zdCByZWdpc3RyeVZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlZ2lzdHJ5LmVudHJpZXMpIHtcclxuICAgICAgICByZWdpc3RyeVZlcnNpb25zW2VudHJ5Lm5hbWVdID0gZW50cnkudmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDopoHmn6Xlrp7ml7bnirbmgIHnmoTljIUgPSDliJfooajph4znmoQgKyDlroPku6zlo7DmmI7nmoTkvp3otZbjgIJcclxuICAgIC8vIOS+nei1luWPr+iDveS4jeWcqOWIl+ihqOmHjO+8iOaZrumAmiBucG0g5YyF77yJ77yM5L2G5a6D6KOF5rKh6KOF5ZCM5qC36KaB5pi+56S65Ye65p2l44CCXHJcbiAgICBjb25zdCB3YW50ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY2F0YWxvZykge1xyXG4gICAgICAgIHdhbnRlZC5hZGQoZW50cnkubmFtZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgT2JqZWN0LmtleXMoZW50cnkuZGVjbGFyZWREZXBlbmRlbmNpZXMpKSB7XHJcbiAgICAgICAgICAgIHdhbnRlZC5hZGQoZGVwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbnN0YWxsZWRQYWNrYWdlczogUmVjb3JkPHN0cmluZywgSUluc3RhbGxlZFBhY2thZ2VWaWV3PiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHdhbnRlZCkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzW25hbWVdID0ge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWQ6IHBrZy5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxyXG4gICAgICAgICAgICBpc1NoYXJlZE1vZHVsZTogaXNTaGFyZWRNb2R1bGVNYW5pZmVzdChwa2cubWFuaWZlc3QpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICBjb25zdCBzb3VyY2VzID0geyAuLi5zbmFwLmdhbWVwbGF5U291cmNlcywgLi4uc25hcC5tYW5hZ2VyU291cmNlcyB9O1xyXG5cclxuICAgIGNvbnN0IG1vZHVsZXMgPSBjYXRhbG9nLm1hcCgoZW50cnkpID0+IGJ1aWxkU2hhcmVkU3RhdHVzKGVudHJ5LCB7XHJcbiAgICAgICAgcHJvamVjdERlcGVuZGVuY2llcyxcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlcyxcclxuICAgICAgICByZWZlcmVuY2VzOiB7IFtlbnRyeS5uYW1lXTogZmluZFBhY2thZ2VSZWZzKHNvdXJjZXMsIGVudHJ5Lm5hbWUpIH0sXHJcbiAgICAgICAgY2F0YWxvZyxcclxuICAgICAgICByZWdpc3RyeVZlcnNpb25zLFxyXG4gICAgfSkpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kdWxlcyxcclxuICAgICAgICAvKiog5pys5Zyw5a6J6KOF5rqQ77ybKirlj6rmnInmnKzmoYbmnrbnmoTlvIDlj5Hku5PlupPph4zmiY3pnZ4gbnVsbCoq77yI6Z2i5ZCR55So5oi355qE5bel56iL6YeM5rC46L+c5pivIG51bGzvvIkgKi9cclxuICAgICAgICBsb2NhbFNvdXJjZTogc2hhcmVkRGlyLFxyXG4gICAgICAgIC8qKiDlt6XnqIvmnInlj6/or7vnmoQgcGFja2FnZS5qc29uIOWQlyAqL1xyXG4gICAgICAgIGhhc01hbmlmZXN0OiBtYW5pZmVzdCAhPT0gbnVsbCxcclxuICAgICAgICAvKiog6L+c56iL5YiX6KGo5ouJ5Y+W5aSx6LSl55qE5Y6f5Zug77yb5Li6IG51bGwg6KGo56S66L+Z5qyh5piv5oiQ5Yqf55qE77yI5oiW55So5LqG57yT5a2Y77yJICovXHJcbiAgICAgICAgcmVnaXN0cnlFcnJvcjogcmVnaXN0cnkuZXJyb3IsXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICog6LeR5LiA5qyhIG5wbeOAglxyXG4gKlxyXG4gKiDlhajnqIsqKuS4jeaKm+W8guW4uCoq77ya6YCA5Ye656CB44CBc3Rkb3V044CBc3RkZXJy44CB5Lul5Y+KIHNwYXduIOiHqui6q+eahOWksei0pemDveaUtui/myBJTnBtUnVuUmVzdWx0XHJcbiAqIOWbnuS8oOe7memdouadvyDigJTigJQg55So5oi36KaB55yL55qE5pivIG5wbSDoh6rlt7Hor7TnmoTor53vvIzogIzkuI3mmK/kuIDlj6Xovazov7DnmoRcIuWuieijheWksei0pVwi44CCXHJcbiAqL1xyXG5mdW5jdGlvbiBydW5OcG0oYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJywgc3BlY3M6IHN0cmluZ1tdKTogSU5wbVJ1blJlc3VsdCB7XHJcbiAgICBjb25zdCBzcGF3blNwZWMgPSBucG1TcGF3blNwZWMoYWN0aW9uLCBzcGVjcyk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIDEuICoq5LiN5oyH5a6aIGVuY29kaW5nKirvvJrmi7/liLDljp/lp4sgQnVmZmVyIOiHquW3seino+egge+8jOWQpuWImSBjbWQg55qEIEdCSyDmtojmga/kvJrlj5jkubHnoIHvvJtcclxuICAgICAgICAvLyAyLiAqKndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyDlv4XpobvmnaXoh6ogc3Bhd25TcGVjKirvvJrlsJHkuoblroPvvIxOb2RlIOS8muaKiuaIkeWKoOWlveeahFxyXG4gICAgICAgIC8vICAgIOW8leWPt+WGjei9rOS5ieS4gOmBje+8jGNtZCDmlLbliLAgYFxcXCJucG0uY21kIGluc3RhbGwgLi4uXFxcImDvvIzkuo7mmK/mlbTooYzooqvlvZPmiJDlkb3ku6TlkI1cclxuICAgICAgICAvLyAgICDvvIjmiqVcIiducG0uY21kIGluc3RhbGwgLi4uJyDkuI3mmK/lhoXpg6jmiJblpJbpg6jlkb3ku6RcIu+8jG5wbSDmoLnmnKzmsqHooqvlkK/liqjvvInjgIJcclxuICAgICAgICBjb25zdCBzcGF3bmVkID0gc3Bhd25TeW5jKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICBjd2Q6IHByb2plY3RQYXRoKCksXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IE5QTV9USU1FT1VUX01TLFxyXG4gICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgbWF4QnVmZmVyOiAxNiAqIDEwMjQgKiAxMDI0LFxyXG4gICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IHR5cGVvZiBzcGF3bmVkLnN0YXR1cyA9PT0gJ251bWJlcicgPyBzcGF3bmVkLnN0YXR1cyA6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogZGVjb2RlUHJvY2Vzc091dHB1dChzcGF3bmVkLnN0ZG91dCksXHJcbiAgICAgICAgICAgIHN0ZGVycjogZGVjb2RlUHJvY2Vzc091dHB1dChzcGF3bmVkLnN0ZGVyciksXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHNwYXduZWQuZXJyb3JcclxuICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IChzcGF3bmVkLmVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzcGF3bmVkLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6ICcnLFxyXG4gICAgICAgICAgICBzdGRlcnI6ICcnLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICog5Luj6LeRIG5wbSDoo4UgLyDljbjkuIDkuKrlhazlhbHmqKHlnZfvvIznhLblkI7lm57kuIDku73liLfmlrDov4fnmoTnirbmgIHjgIJcclxuICpcclxuICog5Y+q5o6l5Y+XIGNhdGFsb2cg6YeM5a2Y5Zyo55qE5YyF5ZCNIOKAlOKAlCDkuI3miormianlsZXlj5jmiJBcIuS7u+aEjyBucG0g5ZG95Luk5omn6KGM5ZmoXCLjgIJcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIHJ1blNoYXJlZEFjdGlvbihhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBwYWNrYWdlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXBhY2thZ2VOYW1lIHx8IHR5cGVvZiBwYWNrYWdlTmFtZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+e8uuWwkeWMheWQjScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IHF1ZXJ5U2hhcmVkU3RhdGUoKTtcclxuICAgIGNvbnN0IGVudHJ5ID0gYmVmb3JlLm1vZHVsZXMuZmluZCgobSkgPT4gbS5uYW1lID09PSBwYWNrYWdlTmFtZSk7XHJcbiAgICBpZiAoIWVudHJ5KSB7XHJcbiAgICAgICAgY29uc3Qga25vd24gPSBiZWZvcmUubW9kdWxlcy5tYXAoKG0pID0+IG0ubmFtZSk7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBg5LiN5Zyo5Y+v5a6J6KOF5YiX6KGo6YeM55qE5YyF77yaJHtwYWNrYWdlTmFtZX1gXHJcbiAgICAgICAgICAgICsgKGtub3duLmxlbmd0aCA/IGDvvIjlvZPliY3liJfooajvvJoke2tub3duLmpvaW4oJywgJyl977yJYCA6ICfvvIjlvZPliY3liJfooajkuLrnqbrvvIknKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWuieijheimgeaKiioq5pys5Zyw6IO96Kej5p6Q5Yiw55qE5L6d6LWW5LiA6LW35bim5LiKKirvvJrlj6roo4XlroPkuIDkuKrnmoTor53vvIxucG0g5Lya5Y67IHJlZ2lzdHJ5IOaJvuS+nei1lu+8jFxyXG4gICAgLy8g6ICM5pys5Zyw5rqQ6YeM55qE5L6d6LWW5bm25rKh5pyJ5Y+R5biDIOKAlOKAlCDlv4XnhLYgRTQwNO+8iOWunua1i+i/h++8ieOAglxyXG4gICAgLy8g5Y246L295oyJKirljIXlkI0qKu+8iG5wbSDorqTljIXlkI3vvIzkuI3orqQgZmlsZTog6K+05piO56ym77yJ44CCXHJcbiAgICBjb25zdCBzcGVjcyA9IGFjdGlvbiA9PT0gJ3VuaW5zdGFsbCdcclxuICAgICAgICA/IFtlbnRyeS5uYW1lXVxyXG4gICAgICAgIDogY29sbGVjdEluc3RhbGxTcGVjcyhlbnRyeSwgYmVmb3JlLm1vZHVsZXMpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuTnBtKGFjdGlvbiwgc3BlY3MpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICog5aSx6LSlKirkuI3mipvlvILluLgqKu+8mumdouadv+mcgOimgeaLv+WIsOe7k+aehOWMlueahOe7k+aenO+8iOWRveS7pOOAgemAgOWHuueggeOAgeWOn+Wni+i+k+WHuu+8ie+8jFxyXG4gICAgICAgICAqIOaJjeiDveWcqOW8ueeql+mHjOWOn+agt+WxleekuiBucG0g6Ieq5bex6K+055qE6K+d44CC6Z2e5rOV6L6T5YWl5LuN54S25oqbIOKAlOKAlCDpgqPmmK/osIPnlKjmlrnlhpnplJnkuobjgIJcclxuICAgICAgICAgKi9cclxuICAgICAgICBvazogcmVzdWx0Lm9rLFxyXG4gICAgICAgIHJlc3VsdCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKXml7bkuIDlj6UqKuWNleihjCoq5pGY6KaB77yI6Z2i5p2/5raI5oGv5Yy655So77yJ44CC5a6M5pW06L6T5Ye65ZyoIGByZXN1bHRgIOmHjO+8jOeUseW8ueeql+WxleekuiDigJTigJRcclxuICAgICAgICAgKiDkuYvliY3miormlbTmrrUgbnBtIOi+k+WHuuWhnui/m+a2iOaBr+WMuu+8jOS8muaKiuWPs+agj+aMpOWPmOW9ouW5tuWSjOa2iOaBr+WPoOWcqOS4gOi1t+OAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5vayA/IG51bGwgOiBzdW1tYXJpemVOcG1GYWlsdXJlKGFjdGlvbiwgcGFja2FnZU5hbWUsIHJlc3VsdCksXHJcbiAgICAgICAgLy8g6KOF5a6M56uL5Yi75Zue5LiA5Lu95paw54q25oCB77yM6Z2i5p2/5LiN55So5YaN6LeR5LiA5qyh5p+l6K+iXHJcbiAgICAgICAgLi4ucXVlcnlTaGFyZWRTdGF0ZSgpLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIOi1hOa6kOaYr+WQpuWtmOWcqCAqL1xyXG5mdW5jdGlvbiBhc3NldEV4aXN0cyh1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpLnRoZW4oKGluZm86IHVua25vd24pID0+ICEhaW5mbyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnoa7kv53nm67lvZXlrZjlnKjvvIzkuI3lrZjlnKjliJnliJvlu7pcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcihkaXJVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBkaXJVcmwpO1xyXG4gICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgZGlyVXJsLCBudWxsKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIOebruW9leS4jeWtmOWcqOWImeW7uu+8jOepuuebruW9leWImeWIoOaOie+8iOeUn+aIkC/liKDpmaTlkI7muIXnkIbnlKjvvIkgKi9cclxuYXN5bmMgZnVuY3Rpb24gcHJ1bmVFbXB0eURpcihhYnNEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoc3RhdFN5bmMoYWJzRGlyKS5pc0RpcmVjdG9yeSgpICYmIHJlYWRkaXJTeW5jKGFic0RpcikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVN5bmMoYWJzRGlyKTtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLyog5LiN5a2Y5Zyo5bCx566X5LqGICovXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDmib7lh7rlvJXnlKjkuobmjIflrpogY2lkIOmbhuWQiOeahOW3suW6j+WIl+WMlui1hOa6kCAqL1xyXG5mdW5jdGlvbiBmaW5kQXNzZXRSZWZzKHNuYXA6IElQcm9qZWN0U25hcHNob3QsIGNpZHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgaGl0czogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICghY2lkcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gaGl0cztcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcmVsIG9mIE9iamVjdC5rZXlzKHNuYXAuc2VyaWFsaXplZCkpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gc25hcC5zZXJpYWxpemVkW3JlbF07XHJcbiAgICAgICAgaWYgKGNpZHMuc29tZSgoY2lkKSA9PiB0ZXh0LmluY2x1ZGVzKGNpZCkpKSB7XHJcbiAgICAgICAgICAgIGhpdHMucHVzaChyZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaXRzO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmlrnms5UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBtZXRob2RzOiB7IFtrZXk6IHN0cmluZ106ICguLi5hbnk6IGFueSkgPT4gYW55IH0gPSB7XHJcbiAgICAvKipcclxuICAgICAqIOahhuaetuS4juaJqeWxleWQhOiHqueahOeJiOacrOS/oeaBryjmnKzlnLAgKyBucG0g5pyA5pawKeOAglxyXG4gICAgICpcclxuICAgICAqIOaJqeWxleiHqui6q+eJiOacrOivu+Wug+iHquW3seeahCBwYWNrYWdlLmpzb2475qGG5p6254mI5pys6K+75bel56iLIG5vZGVfbW9kdWxlcyDph4znmoTpgqPku70g4oCU4oCUXHJcbiAgICAgKiDkuKTogIXpg73mmK9cIuWunumZheijheS6huS7gOS5iFwi55qE5LqL5a6eLOS4jeaYr+mFjee9rumHjOWGmeS6huS7gOS5iOOAglxyXG4gICAgICog5pyJ5rKh5pyJ5paw54mI5Lqk57uZ6Z2i5p2/5q+U6L6DIHZlcnNpb24g5LiOIGxhdGVzdCzov5nph4zkuI3mm7/lroPliKTmlq0o5YWN5b6X5Lik6L655ZCE5YaZ5LiA5aWXKeOAglxyXG4gICAgICovXHJcbiAgICAvKipcclxuICAgICAqIOaKiiBub2RlX21vZHVsZXMg6YeM55qE5omp5bGV5ou36L+bIGV4dGVuc2lvbnMv44CCXHJcbiAgICAgKlxyXG4gICAgICog57yW6L6R5ZmoKirlj6rku47lt6XnqIvnmoQgZXh0ZW5zaW9ucy8g5Yqg6L295omp5bGVKios5omA5LulIG5wbSBpbnN0YWxsIOWujOW/hemhu+iQvei/meS4gOebmCxcclxuICAgICAqIOWQpuWImVwi5pu05paw5oiQ5YqfXCLlj6rlj5HnlJ/lnKggbm9kZV9tb2R1bGVzIOmHjCznvJbovpHlmajph4zkuIDngrnlj5jljJbpg73msqHmnInjgIJcclxuICAgICAqIOiQveebmOS5i+WQjumcgOimgemHjeWQr+e8lui+keWZqOaJjeeUn+aViCDigJTigJQg6L+Z5LiA54K555Sx6Z2i5p2/5paH5qGI5ZGK55+lLOi/memHjOS4jeWBh+ijheeDreabtOaWsOOAglxyXG4gICAgICovXHJcbiAgICBzeW5jRXh0ZW5zaW9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IGZyb20gPSBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpO1xyXG4gICAgICAgIGlmICghZXhpc3RzU3luYyhmcm9tKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IFwibm9kZV9tb2R1bGVzIOmHjOayoeaciSBcIiArIG5hbWUgKyBcIizlhYjlronoo4Xlho3okL3nm5hcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0byA9IGpvaW4ocm9vdCwgXCJleHRlbnNpb25zXCIsIG5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpIGFzIHN0cmluZyk7XHJcbiAgICAgICAgcmVtb3ZlU3luYyh0byk7XHJcbiAgICAgICAgY29weVN5bmMoZnJvbSwgdG8pO1xyXG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBwYXRoOiB0byB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBhc3luYyBxdWVyeVZlcnNpb25zKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgICAgICBjb25zdCBsYXRlc3RPZiA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGl0ID0gcmVnaXN0cnkuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBoaXQgPyBoaXQudmVyc2lvbiA6IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrTmFtZSA9ICdAY2NnZi9mcmFtZXdvcmsnO1xyXG4gICAgICAgIGNvbnN0IGZyYW1ld29yayA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIGZyYW1ld29ya05hbWUpO1xyXG5cclxuICAgICAgICAvKiog5pys5LuT5bqT55qE5byA5Y+R5bel5L2c5Yy6OuahhuaetuaYr+a6kOeggeOAgeaJqeWxleWwseaYr+i/meS4gOS7vSDigJTigJQg6Z2i5p2/5o2u5q2k5pS556ew5ZG85bm256aB55So5pu05pawICovXHJcbiAgICAgICAgY29uc3QgaW5Xb3Jrc3BhY2UgPSBleGlzdHNTeW5jKGpvaW4ocm9vdCwgJ2Fzc2V0cy9zY3JpcHRzL2ZyYW1ld29yaycpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZnJhbWV3b3JrOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBmcmFtZXdvcmtOYW1lLFxyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkOiBmcmFtZXdvcmsuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIHZlcnNpb246IGZyYW1ld29yay52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgbGF0ZXN0OiBsYXRlc3RPZihmcmFtZXdvcmtOYW1lKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBwYWNrYWdlSlNPTi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcGFja2FnZUpTT04udmVyc2lvbixcclxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZTogaW5Xb3Jrc3BhY2UsXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKHBhY2thZ2VKU09OLm5hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgb3BlbldvcmtiZW5jaCgpIHtcclxuICAgICAgICBFZGl0b3IuUGFuZWwub3BlbihgJHtwYWNrYWdlSlNPTi5uYW1lfS53b3JrYmVuY2hgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOmdouadv+eahOWxgue6p+S4i+aLieeUseS4u+i/m+eoi+S4i+WPke+8jOmBv+WFjeaJqeWxlemHjOWHuueOsOesrOS6jOS7veWxgue6p+WIl+ihqCAqL1xyXG4gICAgcXVlcnlMYXllcnMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbLi4uTEFZRVJTXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDpnaLmnb/mlofmoYjvvJrku6UgaTE4bi96aC5qcyDnmoQga2V5IOWFqOmbhuS4uuWHhu+8jOmAkOS4quS6pOe7mee8lui+keWZqCBpMThuIOino+aekOW9k+WJjeivreiogOOAglxyXG4gICAgICog6L+Z5qC36Z2i5p2/5L6n5LiN6ZyA6KaB5Yik5pat6K+t6KiA77yM5Lmf5LiN5L6d6LWWIEVkaXRvci5JMThuIOaYr+WQpuWtmOWcqOS6jumdouadv+S4iuS4i+aWh+mHjOOAglxyXG4gICAgICovXHJcbiAgICBxdWVyeUkxOG4oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgdGFibGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhaSF9TVFJJTkdTKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsID0gYCR7cGFja2FnZUpTT04ubmFtZX0uJHtrZXl9YDtcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBaSF9TVFJJTkdTW2tleV07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaXQgPSBFZGl0b3IuSTE4bi50KGZ1bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpdCAmJiBoaXQgIT09IGZ1bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gaGl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiDnvJbovpHlmaggaTE4biDkuI3lj6/nlKjlsLHkv53nlZnkuK3mlocgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YWJsZVtrZXldID0gdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6aKE5Yi25L2T5qih5p2/5YiX6KGo77yI5L6b6Z2i5p2/5LiL5ouJ77yJICovXHJcbiAgICBxdWVyeVRlbXBsYXRlcygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xyXG4gICAgICAgIHJldHVybiBQUkVGQUJfVEVNUExBVEVTLm1hcCgoaWQpID0+ICh7IGlkLCBsYWJlbDogUFJFRkFCX1RFTVBMQVRFX0xBQkVMU1tpZF0gfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivoiBnYW1lcGxheSDkuIvlt7LmnInnmoTmqKHlnZfliJfooajvvIjlkKsgb3JkZXLvvInjgIJcclxuICAgICAqIOS4juS9k+ajgOWFseeUqCBkb2N0b3IubGlzdE1vZHVsZXPvvIzkv53or4HpnaLmnb/mmL7npLrlkozkvZPmo4DliKTlrprkuIDoh7TjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVzKCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIHJldHVybiBsaXN0TW9kdWxlcyhzbmFwKS5tYXAoKG0pID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG0uZGlyLFxyXG4gICAgICAgICAgICBvcmRlcjogbS5vcmRlciA/PyAwLFxyXG4gICAgICAgICAgICBoYXNNb2RlbDogbS5tb2RlbEZpbGUgIT09IG51bGwsXHJcbiAgICAgICAgICAgIGhhc01vZHVsZTogdHJ1ZSxcclxuICAgICAgICAgICAgLy8g6Z2i5p2/55So6L+Z5LiJ5Liq6Lev5b6E5YGa44CM5LiA6ZSu5omT5byA6ISa5pys44CN77ybZXZlbnRzRmlsZSDlj6/og73kuLogbnVsbO+8iOiAgeaooeWdl++8iVxyXG4gICAgICAgICAgICBtb2R1bGVGaWxlOiBtLm1vZHVsZUZpbGUsXHJcbiAgICAgICAgICAgIG1vZGVsRmlsZTogbS5tb2RlbEZpbGUsXHJcbiAgICAgICAgICAgIGV2ZW50c0ZpbGU6IG0uZXZlbnRzRmlsZSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDlkK/liqjpobrluo/pooTop4ggKyDlsYLnuqfljaDnlKjvvIjlvIDlj5HovoXliqnvvIkgKi9cclxuICAgIGFzeW5jIHF1ZXJ5T3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3Qgdmlld3MgPSBsaXN0Vmlld3Moc25hcCk7XHJcbiAgICAgICAgY29uc3QgdXNhZ2UgPSBMQVlFUlMubWFwKChsYXllcikgPT4gKHtcclxuICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgIHZpZXdzOiB2aWV3cy5maWx0ZXIoKHYpID0+IHYucmVnaXN0ZXJlZExheWVyID09PSBsYXllcikubWFwKCh2KSA9PiB2LmNsYXNzTmFtZSksXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBsaXN0TW9kdWxlcyhzbmFwKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcmRlcjogYnVpbGRPcmRlclBsYW4oc25hcCksXHJcbiAgICAgICAgICAgIGxheWVyczogdXNhZ2UsXHJcbiAgICAgICAgICAgIG1vZHVsZUNvdW50OiBtb2R1bGVzLmxlbmd0aCxcclxuICAgICAgICAgICAgbWFuYWdlckNvdW50OiBsaXN0TWFuYWdlcnMoc25hcCkubGVuZ3RoLFxyXG4gICAgICAgICAgICB2aWV3Q291bnQ6IHZpZXdzLmxlbmd0aCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5LiA6ZSu5L2T5qOAICovXHJcbiAgICBhc3luYyBydW5Eb2N0b3IoKTogUHJvbWlzZTx7IGZpbmRpbmdzOiBJRmluZGluZ1tdOyBzdW1tYXJ5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0+IHtcclxuICAgICAgICBjb25zdCBmaW5kaW5ncyA9IHJ1bkRvY3RvcihzbmFwc2hvdCgpLCBMQVlFUlMpO1xyXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbmRpbmdzKSB7XHJcbiAgICAgICAgICAgIHN1bW1hcnlbZi5zZXZlcml0eV0gPSAoc3VtbWFyeVtmLnNldmVyaXR5XSA/PyAwKSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGZpbmRpbmdzLCBzdW1tYXJ5IH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+i5p+Q5qih5Z2X55qEIFZpZXcg5YiX6KGo44CCXHJcbiAgICAgKiDmr5Tml6flrp7njrDlpJrkuoYgcHJlZmFiRXhpc3RzIOKAlOKAlCDml6fniYjmjInnuqblrprmi7wgVVJMIOWNtOS7juS4jeafpeebmO+8jFxyXG4gICAgICog5LqO5piv4oCc6ISa5pys5Zyo44CB6aKE5Yi25L2T5Lii5LqG4oCd55qEIFZpZXcg5Lmf5Lya6KKr5YiX5Ye65p2l77yM54K55LqG5omN5aSx6LSl44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5Vmlld3MobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RWaWV3cyhzbmFwKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2Lm1vZHVsZURpciA9PT0gbW9kdWxlRGlyKVxyXG4gICAgICAgICAgICAubWFwKCh2KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdi5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBzY3JpcHRVcmw6IGRiVXJsKHYuc2NyaXB0RmlsZSksXHJcbiAgICAgICAgICAgICAgICBwcmVmYWJVcmw6IHYucmVnaXN0ZXJlZFBhdGggPyBkYlVybChgJHtSRVNPVVJDRVNfRElSfS8ke3YucmVnaXN0ZXJlZFBhdGh9LnByZWZhYmApIDogJycsXHJcbiAgICAgICAgICAgICAgICBwcmVmYWJFeGlzdHM6IHYucmVnaXN0ZXJlZFBhdGggPyBzbmFwLnByZWZhYnNCeVJlc291cmNlUGF0aFt2LnJlZ2lzdGVyZWRQYXRoXSAhPT0gdW5kZWZpbmVkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogdi5yZWdpc3RlcmVkTGF5ZXIgPz8gJycsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbmFnZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqIG1hbmFnZXIg5YiX6KGo77yIYXNzZXRzL3NjcmlwdHMvbWFuYWdlciDkuIvnm7TlsZ7nmoQgKk1hbmFnZXIudHPvvIkgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TWFuYWdlcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNYW5hZ2VycyhzbmFwc2hvdCgpKS5tYXAoKG0pID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG0uY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICBmaWxlOiBtLnNjcmlwdEZpbGUsXHJcbiAgICAgICAgICAgIGV4dGVuZHNTaW5nbGV0b246IG0uZXh0ZW5kc1NpbmdsZXRvbixcclxuICAgICAgICAgICAgYmFzZUNsYXNzOiBtLmJhc2VDbGFzcyxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IG1hbmFnZXLvvJrnlJ/miJDkuIDkuKrnu6fmib/moYbmnrYgQVNpbmdsZXRvbiDnmoTlhajlsYDljZXkvovohJrmnKzjgIJcclxuICAgICAqIEBwYXJhbSBtYW5hZ2VyTmFtZSDlkI3lrZfvvIzlpoIgXCJjb25maWdcIiAvIFwiQ29uZmlnXCIgLyBcIkNvbmZpZ01hbmFnZXJcIlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVNYW5hZ2VyKG1hbmFnZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1hbmFnZXJOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobWFuYWdlck5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG1hbmFnZXIg5ZCNOiBcIiR7bWFuYWdlck5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplTWFuYWdlck5hbWUobWFuYWdlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpclVybCA9IGBkYjovLyR7TUFOQUdFUl9ESVJ9YDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIoZGlyVXJsKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYCR7ZGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWFuYWdlciDlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTlroPvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgYnVpbGRNYW5hZ2VyU2NyaXB0KGNsYXNzTmFtZSwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIWFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu6IG1hbmFnZXIg5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkaXJVcmwpO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgc2NyaXB0VXJsLCBmaWxlOiBgJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Yig6ZmkIG1hbmFnZXIg6ISa5pysICovXHJcbiAgICBhc3luYyBkZWxldGVNYW5hZ2VyKG1hbmFnZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1hbmFnZXJOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobWFuYWdlck5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG1hbmFnZXIg5ZCNOiBcIiR7bWFuYWdlck5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplTWFuYWdlck5hbWUobWFuYWdlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGBkYjovLyR7TUFOQUdFUl9ESVJ9LyR7Y2xhc3NOYW1lfS50c2A7XHJcblxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgc2NyaXB0VXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLAgbWFuYWdlciDohJrmnKzvvJoke2NsYXNzTmFtZX0udHNgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtNQU5BR0VSX0RJUn1gKTtcclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIHJlbW92ZWQ6IHNjcmlwdFVybCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpOaooeWdl+WJjeeahOW8leeUqOajgOafpe+8muWTquS6m+i1hOa6kOW8leeUqOS6huivpeaooeWdl+eahOiEmuacrOOAglxyXG4gICAgICog6Z2i5p2/5Zyo56Gu6K6k5qGG6YeM5bGV56S677yM6YG/5YWN5Yig5a6M55WZ5LiL5oKs56m65byV55So44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TW9kdWxlUmVmcyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKS5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpO1xyXG4gICAgICAgIGNvbnN0IGNpZHMgPSB2aWV3cy5tYXAoKHYpID0+IHNuYXAuc2NyaXB0Q2lkc1t2LnNjcmlwdEZpbGVdKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlQ2lkID0gc25hcC5zY3JpcHRDaWRzW2Ake0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7bm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLm1vZHVsZUNsYXNzfS50c2BdO1xyXG4gICAgICAgIGNvbnN0IGFsbENpZHMgPSBtb2R1bGVDaWQgPyBjaWRzLmNvbmNhdChbbW9kdWxlQ2lkXSkgOiBjaWRzO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZpZXdzOiB2aWV3cy5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlZEJ5OiBmaW5kQXNzZXRSZWZzKHNuYXAsIGFsbENpZHMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDlnKjnvJbovpHlmajph4zmiZPlvIDmn5DkuKrlt6XnqIvlhoXmlofku7bvvIjkvZPmo4Dnu5Pmnpwv5qaC6KeI54K55Ye75a6a5L2N55So77yJICovXHJcbiAgICBhc3luYyBvcGVuU291cmNlKHJlbFBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghcmVsUGF0aCB8fCByZWxQYXRoLmluY2x1ZGVzKCcuLicpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6Lev5b6EOiBcIiR7cmVsUGF0aH1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cmwgPSBkYlVybChyZWxQYXRoKTtcclxuICAgICAgICAvLyDlhYjnoa7orqTotYTmupDlrZjlnKjkuJTlt7LooqvnvJbovpHlmajlr7zlhaXvvIzlho3osIjmiZPlvIDvvJvlkKbliJnnu5nlh7rmmI7noa7ljp/lm6BcclxuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCk7XHJcbiAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6LWE5rqQ5LiN5a2Y5Zyo5oiW5pyq6KKr57yW6L6R5Zmo5a+85YWlOiAke3JlbFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ29wZW4tYXNzZXQnLCB1cmwpO1xyXG4gICAgICAgIHJldHVybiB7IHVybCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uuaooeWdl++8mueUn+aIkCBNb2R1bGUgKyBNb2RlbCArIOS6i+S7tuWjsOaYjiDkuInkuKrohJrmnKzjgIJcclxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIOaooeWdl+WQje+8jOWmgiBcImJhZ1wiIC8gXCJCYWdcIiAvIFwiQmFnTW9kdWxlXCJcclxuICAgICAqIEBwYXJhbSBvcmRlciAgICAgIOaooeWdl+WQr+WKqOmhuuW6j1xyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUob3JkZXIpIHx8IG9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5hbWluZyA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHtuYW1pbmcuZGlyfWA7XHJcblxyXG4gICAgICAgIC8vIOWFiOafpeWtmOWcqOaAp++8jOe7meWHuuaYjuehruWOn+WboO+8iOaXp+eJiOWPquWcqCBjcmVhdGUtYXNzZXQg6L+U5Zue56m65pe26K+04oCc5Y+v6IO95bey5a2Y5Zyo4oCd77yJXHJcbiAgICAgICAgY29uc3QgbW9kdWxlVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5tb2R1bGVDbGFzc30udHNgO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5tb2RlbENsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5ldmVudHNOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKG1vZHVsZVVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmqKHlnZflt7LlrZjlnKjvvJoke25hbWluZy5tb2R1bGVDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKG1vZGVsVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWei+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhldmVudHNVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5LqL5Lu25aOw5piO5bey5a2Y5Zyo77yaJHtuYW1pbmcuZXZlbnRzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihtb2R1bGVEaXJVcmwpO1xyXG5cclxuICAgICAgICAvKiog5bey5Yib5bu65oiQ5Yqf55qE6LWE5rqQ77yb5Lu75LiA5q2l5aSx6LSl5pe25oyJ6YCG5bqP5Zue5rua77yM6YG/5YWN55WZ5LiL5Y2K5oiQ5ZOBICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBjb25zdCBjcmVhdGVPclJvbGxiYWNrID0gYXN5bmMgKHVybDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHVybCwgY29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gY3JlYXRlZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRvbmUgb2YgY3JlYXRlZC5yZXZlcnNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBkb25lKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgYOWIm+W7uiR7bGFiZWx95aSx6LSlOiAke3VybH0ke2NvdW50ID4gMCA/IGDvvIjlt7Llm57mu5ogJHtjb3VudH0g5Liq5paH5Lu277yJYCA6ICcnfWAsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyZWF0ZWQucHVzaCh1cmwpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2soXHJcbiAgICAgICAgICAgIG1vZHVsZVVybCwgYnVpbGRNb2R1bGVTY3JpcHQobmFtaW5nLm1vZHVsZUNsYXNzLCBuYW1pbmcubW9kZWxDbGFzcywgb3JkZXIsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksICfmqKHlnZcnLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhtb2RlbFVybCwgYnVpbGRNb2RlbFNjcmlwdChuYW1pbmcubW9kZWxDbGFzcywgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWeiycpO1xyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2soZXZlbnRzVXJsLCBidWlsZEV2ZW50c1NjcmlwdChuYW1pbmcuZGlyLCBuYW1pbmcubW9kdWxlQ2xhc3MpLCAn5LqL5Lu25aOw5piOJyk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBtb2R1bGVEaXJVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkaXJOYW1lOiBuYW1pbmcuZGlyLFxyXG4gICAgICAgICAgICBwcmVmaXg6IG5hbWluZy5wcmVmaXgsXHJcbiAgICAgICAgICAgIG1vZHVsZVVybCxcclxuICAgICAgICAgICAgbW9kZWxVcmwsXHJcbiAgICAgICAgICAgIGV2ZW50c1VybCxcclxuICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmm7TmlrDmqKHlnZfnmoQgb3JkZXLvvJrlhpnlm54gTW9kdWxlIOiEmuacrOeahCBAUmVnaXN0ZXJNb2R1bGUoe29yZGVyfSnjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlTW9kdWxlT3JkZXIobW9kdWxlTmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUob3JkZXIpIHx8IG9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgR0FNRVBMQVlfRElSLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZmlsZXMgPSByZWFkZGlyU3luYyhtb2R1bGVEaXJQYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5Yiw5qih5Z2X55uu5b2VOiAke21vZHVsZURpcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRmlsZSA9IGZpbGVzLmZpbmQoKGYpID0+IGYuZW5kc1dpdGgoJ01vZHVsZS50cycpKTtcclxuICAgICAgICBpZiAoIW1vZHVsZUZpbGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfohJrmnKw6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKG1vZHVsZURpclBhdGgsIG1vZHVsZUZpbGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZnVsbFBhdGgsICd1dGYtOCcpO1xyXG4gICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL29yZGVyXFxzKjpcXHMqXFxkKy8sIGBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gY29udGVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOacquWcqCAke21vZHVsZUZpbGV9IOS4reaJvuWIsCBvcmRlciDlrZfmrrVgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgbmV3Q29udGVudCk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfWApKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlTmFtZTogbW9kdWxlRGlyLCBvcmRlciB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uiBWaWV377ya5Zyo5oyH5a6a5qih5Z2X5LiL55Sf5oiQ6ISa5pysICsg6aKE5Yi25L2T77yM5bm25oqK6ISa5pys5oyC6L295Yiw6aKE5Yi25L2T5qC56IqC54K544CCXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGUg6aKE5Yi25L2T5qih5p2/77yM6KeBIGNvbnN0YW50cy5QUkVGQUJfVEVNUExBVEVTXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nLCBsYXllcjogc3RyaW5nLCB0ZW1wbGF0ZTogc3RyaW5nID0gJ2VtcHR5Jykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZpZXdOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3Qodmlld05hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6KeG5Zu+5ZCNOiBcIiR7dmlld05hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFMQVlFUlMuaW5jbHVkZXMobGF5ZXIgYXMgYW55KSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOWxgue6pzogXCIke2xheWVyfVwi77yI5ZCI5rOV5YC877yaJHtMQVlFUlMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1ByZWZhYlRlbXBsYXRlKHRlbXBsYXRlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOmihOWItuS9k+aooeadvzogXCIke3RlbXBsYXRlfVwi77yI5ZCI5rOV5YC877yaJHtQUkVGQUJfVEVNUExBVEVTLmpvaW4oJywgJyl977yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZVZpZXdOYW1lKHZpZXdOYW1lKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJQYXRoID0gdmlld1ByZWZhYlBhdGgobW9kdWxlRGlyLCBjbGFzc05hbWUpO1xyXG5cclxuICAgICAgICAvLyDot6jmqKHlnZfph43lkI3kvJrliqDovb3plJnpooTliLbkvZPvvIhWaWV3TWFuYWdlciDmjInnsbvlkI3lhajlsYDmn6Xmib7vvInvvIzmj5DliY3mjKHkvY9cclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCBjbGFzaCA9IGxpc3RWaWV3cyhzbmFwKS5maW5kKFxyXG4gICAgICAgICAgICAodikgPT4gdi5jbGFzc05hbWUgPT09IGNsYXNzTmFtZSAmJiB2Lm1vZHVsZURpciAhPT0gbW9kdWxlRGlyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNsYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIGBWaWV3IOWQjeWtlyBcIiR7Y2xhc3NOYW1lfVwiIOW3suiiq+aooeWdlyBcIiR7Y2xhc2gubW9kdWxlRGlyfVwiIOWNoOeUqO+8m2AgK1xyXG4gICAgICAgICAgICAgICAgYOahhuaetuaMieexu+WQjeWFqOWxgOafpeaJvu+8jOmHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8jOivt+aNouS4quWQjeWtl2AsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2aWV3c0RpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9YDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIodmlld3NEaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHt2aWV3c0RpclVybH0vJHtjbGFzc05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoc2NyaXB0VXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZXcg6ISa5pys5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+lIFZpZXfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFZpZXdTY3JpcHQoY2xhc3NOYW1lLCBwcmVmYWJQYXRoLCBsYXllciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKTtcclxuICAgICAgICBjb25zdCBzY3JpcHRBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBzY3JpcHRVcmwsIHNjcmlwdENvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFzY3JpcHRBc3NldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uuiEmuacrOWksei0pTogJHtzY3JpcHRVcmx9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJVcmwgPSBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWA7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYCR7cHJlZmFiRGlyVXJsfS8ke2NsYXNzTmFtZX0ucHJlZmFiYDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIocHJlZmFiRGlyVXJsKTtcclxuXHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHByZWZhYlVybCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmihOWItuS9k+W3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS5wcmVmYWLvvIjlt7Llm57mu5rohJrmnKzvvIzlpoLpnIDph43lu7ror7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29tcHJlc3NlZFV1aWQgPSBjb21wcmVzc1V1aWQoc2NyaXB0QXNzZXQudXVpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZhYkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShidWlsZFZpZXdQcmVmYWIoY2xhc3NOYW1lLCBjb21wcmVzc2VkVXVpZCwgdGVtcGxhdGUpKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHByZWZhYlVybCwgcHJlZmFiQ29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghcHJlZmFiQXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66aKE5Yi25L2T5aSx6LSlOiAke3ByZWZhYlVybH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8g5Zue5rua6ISa5pys77yM6YG/5YWN55WZ5LiL4oCc5pyJ6ISa5pys5rKh6aKE5Yi25L2T4oCd55qE5Y2K5oiQ5ZOBXHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBwcmVmYWJEaXJVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCB2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBzY3JpcHRVcmwsIHByZWZhYlVybCwgcHJlZmFiUGF0aCwgbGF5ZXIsIHRlbXBsYXRlIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6ZmkIHZpZXfvvJrlj6rliKDoh6rouqvvvIjohJrmnKwgKyDpooTliLbkvZMgKyDlkIToh6ogbWV0Ye+8ie+8jOS4jeeisOWFtuS7lui1hOa6kOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVWaWV3KG1vZHVsZU5hbWU6IHN0cmluZywgdmlld05hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZpZXdOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3Qodmlld05hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6KeG5Zu+5ZCNOiBcIiR7dmlld05hbWV9XCJgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9LyR7Y2xhc3NOYW1lfS50c2A7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgW3ByZWZhYlVybCwgc2NyaXB0VXJsXSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCk7XHJcbiAgICAgICAgICAgIGlmIChpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOa4heeQhuepuuebruW9le+8iOaXp+eJiOS8mueVmeS4iyByZXNvdXJjZXMvdmlld3MvPOaooeWdlz4g6L+Z56eN56m65aOz77yJXHJcbiAgICAgICAgYXdhaXQgcHJ1bmVFbXB0eURpcihqb2luKHByb2plY3RQYXRoKCksIFJFU09VUkNFU19ESVIsICd2aWV3cycsIG1vZHVsZURpcikpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn1gKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIG1vZHVsZURpciwgZGVsZXRlZCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpOaooeWdl++8muWIoCBnYW1lcGxheS885qih5Z2XPi8g5LiOIHJlc291cmNlcy92aWV3cy885qih5Z2XPi8g5Lik5Liq55uu5b2V77yI6L+e5ZCMIG1ldGHvvInjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTW9kdWxlKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgW3ByZWZhYkRpclBhdGgsIG1vZHVsZURpclBhdGhdKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdFN5bmMocCkuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVN5bmMocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiDkuI3lrZjlnKjliJnot7Pov4cgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3NgKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoR0FNRVBMQVlfRElSKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IG1vZHVsZURpciwgcmVtb3ZlZCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+i5YWs5YWx5qih5Z2X77ya5pys5Zyw5bel5L2c5Yy6ICsg5bey5a6J6KOFICsg6L+c56iLIHJlZ2lzdHJ544CCXHJcbiAgICAgKiBAcGFyYW0gZm9yY2Ug5by65Yi26YeN5paw5ouJ5Y+W6L+c56iL5YiX6KGo77yI6Z2i5p2/55qE44CM5Yi35paw44CN55So77yJXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5U2hhcmVkTW9kdWxlcyhmb3JjZT86IGJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlTaGFyZWRTdGF0ZShmb3JjZSA9PT0gdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5a6J6KOF5LiA5Liq5YWs5YWx5qih5Z2X77yaKirnm7TmjqXku6Pot5EgYG5wbSBpbnN0YWxsYCoq44CCXHJcbiAgICAgKiDlpLHotKXml7bmipvlh7rnmoTplJnor6/ph4zluKbnnYAgbnBtIOeahOWOn+Wni+i+k+WHuu+8jOmdouadv+S8muWOn+agt+WxleekuuOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbnN0YWxsU2hhcmVkTW9kdWxlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCdpbnN0YWxsJywgcGFja2FnZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Y246L295LiA5Liq5YWs5YWx5qih5Z2X77ya55u05o6l5Luj6LeRIGBucG0gdW5pbnN0YWxsYCAqL1xyXG4gICAgYXN5bmMgdW5pbnN0YWxsU2hhcmVkTW9kdWxlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCd1bmluc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgVHJpZ2dlcmVkIG9uIEV4dGVuc2lvbiBTdGFydHVwXHJcbiAqIEB6aCDmianlsZXlkK/liqjml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkKCkgeyB9XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB1bmluc3RhbGxpbmcgdGhlIGV4dGVuc2lvblxyXG4gKiBAemgg5Y246L295omp5bGV5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW5sb2FkKCkgeyB9XHJcbiJdfQ==
|
|
@@ -4,6 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const fs_extra_1 = require("fs-extra");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const vue_1 = require("vue");
|
|
7
|
+
/** 自动重试的定时器(模块级:同一时刻只留一个) */
|
|
8
|
+
let sharedRetryTimer = null;
|
|
7
9
|
const panelDataMap = new WeakMap();
|
|
8
10
|
const SEVERITIES = ['error', 'warn', 'info'];
|
|
9
11
|
/** 体检严重级别 -> i18n key */
|
|
@@ -93,6 +95,7 @@ module.exports = Editor.Panel.define({
|
|
|
93
95
|
/** 本地安装源目录;为 null 说明这是普通工程 */
|
|
94
96
|
localSource: null,
|
|
95
97
|
/** 远程列表拉取失败的原因(有值时面板显示提示,但不影响其它功能) */
|
|
98
|
+
sharedRegistryPending: false,
|
|
96
99
|
sharedRegistryError: null,
|
|
97
100
|
/** 正在拉远程列表(一次搜索 1~4 秒,要给个反馈) */
|
|
98
101
|
sharedRegistryLoading: false,
|
|
@@ -212,15 +215,16 @@ module.exports = Editor.Panel.define({
|
|
|
212
215
|
return !!(info && info.latest && info.version && info.latest !== info.version);
|
|
213
216
|
},
|
|
214
217
|
async updateFramework() {
|
|
215
|
-
|
|
216
|
-
await this.runUpdate('install-shared-module',
|
|
218
|
+
// 于是 sync-extension 拷回来的还是旧版本 —— 表现就是'点了没用'。
|
|
219
|
+
await this.runUpdate('install-shared-module', name + '@latest');
|
|
217
220
|
},
|
|
218
221
|
async updateExtension() {
|
|
219
222
|
var _a, _b, _c, _d;
|
|
220
223
|
const name = (_b = (_a = this.versions) === null || _a === void 0 ? void 0 : _a.extension) === null || _b === void 0 ? void 0 : _b.name;
|
|
221
224
|
if (!name)
|
|
222
225
|
return;
|
|
223
|
-
|
|
226
|
+
// 于是 sync-extension 拷回来的还是旧版本 —— 表现就是'点了没用'。
|
|
227
|
+
await this.runUpdate('install-shared-module', name + '@latest');
|
|
224
228
|
// 装进 node_modules 还不够:编辑器只认 extensions/ 下那份,必须落盘
|
|
225
229
|
try {
|
|
226
230
|
await Editor.Message.request('ccgf-game-tool', 'sync-extension', name);
|
|
@@ -581,6 +585,18 @@ module.exports = Editor.Panel.define({
|
|
|
581
585
|
var _a, _b, _c;
|
|
582
586
|
this.sharedModules = (_a = res === null || res === void 0 ? void 0 : res.modules) !== null && _a !== void 0 ? _a : [];
|
|
583
587
|
this.localSource = (_b = res === null || res === void 0 ? void 0 : res.localSource) !== null && _b !== void 0 ? _b : null;
|
|
588
|
+
// 主进程在"后台刷新中"时会带回一个进行中的说明 —— 那不是失败,不该按失败显示。
|
|
589
|
+
const pending = typeof (res === null || res === void 0 ? void 0 : res.registryError) === 'string' && res.registryError.indexOf('正在获取') >= 0;
|
|
590
|
+
this.sharedRegistryPending = pending;
|
|
591
|
+
if (pending) {
|
|
592
|
+
// 一次性的自动重试:几秒后后台已经刷好了,这一页自己更新,不用用户去点刷新
|
|
593
|
+
if (sharedRetryTimer === null) {
|
|
594
|
+
sharedRetryTimer = setTimeout(() => {
|
|
595
|
+
sharedRetryTimer = null;
|
|
596
|
+
this.loadSharedModules();
|
|
597
|
+
}, 10000);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
584
600
|
this.sharedRegistryError = (_c = res === null || res === void 0 ? void 0 : res.registryError) !== null && _c !== void 0 ? _c : null;
|
|
585
601
|
// 选中项可能已经不在列表里了(比如刚被卸载)
|
|
586
602
|
if (this.selectedShared
|
|
@@ -686,4 +702,4 @@ module.exports = Editor.Panel.define({
|
|
|
686
702
|
}
|
|
687
703
|
},
|
|
688
704
|
});
|
|
689
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBWSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVUsQ0FBQztBQUN0RCx5QkFBeUI7QUFDekIsTUFBTSxhQUFhLEdBQTJCO0lBQzFDLEtBQUssRUFBRSxtQkFBbUI7SUFDMUIsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QixJQUFJLEVBQUUsa0JBQWtCO0NBQzNCLENBQUM7QUFFRixNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2pDLFNBQVMsRUFBRTtRQUNQLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxLQUFLLENBQUM7S0FDYjtJQUNELFFBQVEsRUFBRSxJQUFBLHVCQUFZLEVBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLCtDQUErQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ2pHLEtBQUssRUFBRSxJQUFBLHVCQUFZLEVBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLDJDQUEyQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzFGLENBQUMsRUFBRTtRQUNDLEdBQUcsRUFBRSxNQUFNO0tBQ2Q7SUFDRCxLQUFLLENBQUMsS0FBSztRQUNQLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE9BQU87UUFDWCxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksT0FBTyxHQUEyQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDO1lBQ0QsT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCwwQkFBMEI7UUFDOUIsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUEsZUFBUyxFQUFDO1lBQ2xCLElBQUk7Z0JBQ0EsT0FBTztvQkFDSCx5QkFBeUI7b0JBQ3pCLE9BQU87b0JBRVAsNEJBQTRCO29CQUM1QixHQUFHLEVBQUUsUUFBUTtvQkFFYixPQUFPO29CQUNQLE9BQU8sRUFBRSxFQUFFO29CQUNYLGNBQWMsRUFBRSxJQUFJO29CQUNwQixnQkFBZ0IsRUFBRSxLQUFLO29CQUV2QixxQkFBcUI7b0JBQ3JCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSxJQUFJO29CQUNyQixpQkFBaUIsRUFBRSxLQUFLO29CQUN4QixjQUFjLEVBQUUsRUFBRTtvQkFFbEIsU0FBUztvQkFDVCxhQUFhLEVBQUUsRUFBRTtvQkFDakIsY0FBYyxFQUFFLENBQUM7b0JBRWpCLGNBQWM7b0JBQ2QsU0FBUyxFQUFFLENBQUM7b0JBRVosZ0JBQWdCO29CQUNoQixLQUFLLEVBQUUsRUFBRTtvQkFFVCxhQUFhO29CQUNiLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLFFBQVEsRUFBRSxFQUFFO29CQUNaLEtBQUssRUFBRSxRQUFRO29CQUNmLFFBQVEsRUFBRSxPQUFPO29CQUNqQiw2QkFBNkI7b0JBQzdCLE1BQU0sRUFBRSxFQUFFO29CQUNWLFNBQVMsRUFBRSxFQUFFO29CQUViLGtCQUFrQjtvQkFDbEIsWUFBWSxFQUFFLEtBQUs7b0JBQ25CLFFBQVEsRUFBRSxJQUFJO29CQUNsQixRQUFRLEVBQUUsSUFBVztvQkFDckIsUUFBUSxFQUFFLEtBQUs7b0JBQ1gsZUFBZSxFQUFFLEtBQUs7b0JBRXRCLEtBQUs7b0JBQ0wsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLGFBQWEsRUFBRSxLQUFLO29CQUNwQixRQUFRLEVBQUUsRUFBRTtvQkFDWixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBRTdDLEtBQUs7b0JBQ0wsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEtBQUs7b0JBRWQsT0FBTztvQkFDUCxhQUFhLEVBQUUsRUFBRTtvQkFDakIsY0FBYyxFQUFFLElBQUk7b0JBQ3BCLDBCQUEwQjtvQkFDMUIsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLDZCQUE2QjtvQkFDN0IsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLHNDQUFzQztvQkFDdEMsZ0JBQWdCLEVBQUUsS0FBSztvQkFDdkIsOEJBQThCO29CQUM5QixXQUFXLEVBQUUsSUFBSTtvQkFDakIsc0NBQXNDO29CQUN0QyxtQkFBbUIsRUFBRSxJQUFJO29CQUN6QixnQ0FBZ0M7b0JBQ2hDLHFCQUFxQixFQUFFLEtBQUs7aUJBQy9CLENBQUM7WUFDTixDQUFDO1lBQ0QsUUFBUSxFQUFFO2dCQUNOLHNDQUFzQztnQkFDdEMsa0JBQWtCO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYzt3QkFBRSxPQUFPLElBQUksQ0FBQztvQkFDdEMsT0FBUSxJQUFJLENBQUMsT0FBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQztnQkFDNUYsQ0FBQztnQkFFRDs7O21CQUdHO2dCQUNILG1CQUFtQjtvQkFDZixNQUFNLElBQUksR0FBUSxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQzFDLElBQUksQ0FBQyxJQUFJO3dCQUFFLE9BQU8sRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7eUJBQ3BELE1BQU0sQ0FBQyxDQUFDLElBQWEsRUFBa0IsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQzt5QkFDbkUsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEYsQ0FBQztnQkFFRCxvREFBb0Q7Z0JBQ3BELGVBQWU7b0JBQ1gsT0FBUSxJQUFJLENBQUMsYUFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUM7Z0JBQ3JGLENBQUM7Z0JBRUQsdUNBQXVDO2dCQUN2QyxlQUFlO29CQUNYLE9BQVEsSUFBSSxDQUFDLGFBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDO2dCQUNyRixDQUFDO2dCQUVELGtCQUFrQjtvQkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7d0JBQUUsT0FBTyxJQUFJLENBQUM7b0JBQ3RDLE9BQVEsSUFBSSxDQUFDLGFBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ2xHLENBQUM7Z0JBRUQ7Ozs7bUJBSUc7Z0JBQ0gsbUJBQW1CO29CQUNmLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLElBQUk7d0JBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDcEYsQ0FBQztnQkFFRDs7Ozs7O21CQU1HO2dCQUNILGlCQUFpQjtvQkFDYixNQUFNLElBQUksR0FBUSxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDUixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztvQkFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssa0JBQWtCLEVBQUUsQ0FBQzt3QkFDMUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO29CQUMxRSxDQUFDO29CQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXO3dCQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDdEMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLHdFQUF3RTtnQkFFeEU7OzttQkFHRztnQkFDSCxDQUFDLENBQUMsR0FBVyxFQUFFLE1BQXdDOztvQkFDbkQsSUFBSSxJQUFJLEdBQVcsTUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBSSxHQUFHLENBQUM7b0JBQzVDLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ1QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7NEJBQ2xDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hELENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQztnQkFFRCxtRUFBbUU7Z0JBRW5FLEtBQUssQ0FBQyxVQUFVO29CQUNaLElBQUksQ0FBQzt3QkFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7d0JBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO3dCQUNuRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7NEJBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDaEMsQ0FBQztvQkFDTCxDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxLQUFLLENBQUMsWUFBWTtvQkFDZCxJQUFJLENBQUM7d0JBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQ3JGLENBQUM7b0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELHNEQUFzRDtnQkFDdEQsS0FBSyxDQUFDLFlBQVk7b0JBQ2QsSUFBSSxDQUFDO3dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNyRixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxzQ0FBc0M7Z0JBQ3RDLFFBQVEsQ0FBQyxJQUFTO29CQUNkLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkYsQ0FBQztnQkFFRCxLQUFLLENBQUMsZUFBZTs7b0JBQ2pCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxNQUFBLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsU0FBUywwQ0FBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztnQkFFRCxLQUFLLENBQUMsZUFBZTs7b0JBQ2pCLE1BQU0sSUFBSSxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxTQUFTLDBDQUFFLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLElBQUk7d0JBQUUsT0FBTztvQkFDbEIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNwRCxpREFBaUQ7b0JBQ2pELElBQUksQ0FBQzt3QkFDRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUN2RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsU0FBUywwQ0FBRSxNQUFNLEtBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDM0csQ0FBQztvQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQscUNBQXFDO2dCQUNyQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQWUsRUFBRSxJQUFZO29CQUN6QyxJQUFJLENBQUMsSUFBSTt3QkFBRSxPQUFPO29CQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQzt3QkFDRCxNQUFNLEdBQUcsR0FBUSxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUN2RixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ25ELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssS0FBSzs0QkFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekQsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzlCLENBQUM7b0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEMsQ0FBQzs0QkFBUyxDQUFDO3dCQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUMxQixDQUFDO2dCQUNMLENBQUM7Z0JBRUQsS0FBSyxDQUFDLFdBQVc7b0JBQ2IsSUFBSSxDQUFDO3dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQzt3QkFDL0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ3ZDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDOzRCQUN4RixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzs0QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ3BCLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNyQixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDOUIsQ0FBQztvQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsU0FBUztvQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO3dCQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO2dCQUVELG9FQUFvRTtnQkFFcEUsWUFBWSxDQUFDLElBQVk7b0JBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JCLENBQUM7Z0JBRUQsYUFBYTtvQkFDVCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLEdBQUc7NEJBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO29CQUN4QyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsS0FBSyxDQUFDLFNBQVM7b0JBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ2hCLE9BQU87b0JBQ1gsQ0FBQztvQkFDRCxJQUFJLENBQUM7d0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3BHLENBQUM7b0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELEtBQUssQ0FBQyxjQUFjO29CQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN2QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzt3QkFDOUMsT0FBTztvQkFDWCxDQUFDO29CQUNELElBQUksQ0FBQzt3QkFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUN2RyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7d0JBQzlCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7d0JBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNyQixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxLQUFLLENBQUMsYUFBYTtvQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO3dCQUNoRCxPQUFPO29CQUNYLENBQUM7b0JBQ0QsSUFBSSxDQUFDO3dCQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3ZILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM3RixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQztvQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsS0FBSyxDQUFDLGNBQWM7O29CQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7d0JBQUUsT0FBTztvQkFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBRXBDLDBCQUEwQjtvQkFDMUIsSUFBSSxJQUFJLEdBQWEsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUM7d0JBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3JHLElBQUksR0FBRyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxZQUFZLG1DQUFJLEVBQUUsQ0FBQztvQkFDbkMsQ0FBQztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNULHVCQUF1QjtvQkFDM0IsQ0FBQztvQkFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTTt3QkFDeEIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDM0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFFVCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUM5RixFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUNqRixDQUFDO29CQUNGLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDO3dCQUFFLE9BQU87b0JBQ2xDLElBQUksQ0FBQzt3QkFDRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3JGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNqRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM3QixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCwwRUFBMEU7Z0JBRTFFLFNBQVMsQ0FBQyxJQUFZO29CQUNsQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3hCLENBQUM7eUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQzt5QkFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQzdCLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxLQUFLLENBQUMsWUFBWTs7b0JBQ2QsSUFBSSxDQUFDO3dCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO3dCQUNqRiw4QkFBOEI7d0JBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTzs0QkFDMUIsQ0FBQyxDQUFDLE1BQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBSSxJQUFJOzRCQUNqRSxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNmLENBQUM7b0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLE9BQU8sS0FBSSxDQUFDLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELGFBQWEsQ0FBQyxPQUFZO29CQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztvQkFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBRUQsS0FBSyxDQUFDLGVBQWU7b0JBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO3dCQUMvQyxPQUFPO29CQUNYLENBQUM7b0JBQ0QsSUFBSSxDQUFDO3dCQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1RSxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQzt3QkFDL0IsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDekUsSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDVixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNoQyxDQUFDO3dCQUNELE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM5QixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxLQUFLLENBQUMsZUFBZTtvQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO3dCQUFFLE9BQU87b0JBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO29CQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFDN0MsRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FDakYsQ0FBQztvQkFDRixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQzt3QkFBRSxPQUFPO29CQUNsQyxJQUFJLENBQUM7d0JBQ0QsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDNUIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzFCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM5QixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxnQkFBZ0IsQ0FBQyxDQUFNO29CQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxDQUFDO2dCQUVELHlFQUF5RTtnQkFFekUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZO29CQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7d0JBQUUsT0FBTztvQkFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQzFDLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQ2pGLENBQUM7b0JBQ0YsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLENBQUM7d0JBQUUsT0FBTztvQkFDbEMsSUFBSSxDQUFDO3dCQUNELE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3pGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQ3ZCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUM5QixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxtQkFBbUI7b0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO3dCQUFFLE9BQU87b0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDcEMsQ0FBQztnQkFFRCxvQkFBb0I7b0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7Z0JBQ3JDLENBQUM7Z0JBRUQsS0FBSyxDQUFDLFlBQVk7b0JBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLE9BQU87b0JBQ1gsQ0FBQztvQkFDRCxJQUFJLENBQUM7d0JBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FDeEYsQ0FBQzt3QkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDakcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQzt3QkFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQ25CLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUN2QixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDOUIsQ0FBQztvQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsNEJBQTRCO2dCQUM1QixLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7b0JBQ3pCLElBQUksQ0FBQyxJQUFJO3dCQUFFLE9BQU87b0JBQ2xCLElBQUksQ0FBQzt3QkFDRCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDeEUsQ0FBQztvQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsc0VBQXNFO2dCQUV0RSxLQUFLLENBQUMsU0FBUzs7b0JBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUM7d0JBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFBLEdBQUcsQ0FBQyxRQUFRLG1DQUFJLEVBQUUsQ0FBQzt3QkFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLEdBQUcsQ0FBQyxPQUFPLG1DQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkUsaUNBQWlDO3dCQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVU7NkJBQ3pCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDaEIsUUFBUTs0QkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7eUJBQ25FLENBQUMsQ0FBQzs2QkFDRixNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUMzQixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7NEJBQVMsQ0FBQzt3QkFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDL0IsQ0FBQztnQkFDTCxDQUFDO2dCQUVELHNFQUFzRTtnQkFFdEUsS0FBSyxDQUFDLFlBQVk7b0JBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksQ0FBQzt3QkFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQzdCLENBQUM7NEJBQVMsQ0FBQzt3QkFDUCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztvQkFDakMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELGFBQWE7b0JBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzlCLENBQUM7Z0JBRUQsb0VBQW9FO2dCQUVwRSxlQUFlLENBQUMsQ0FBTTtvQkFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxnQkFBZ0IsQ0FBQyxDQUFNO29CQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztnQkFDRCxXQUFXLENBQUMsQ0FBTTtvQkFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakQsQ0FBQztnQkFDRCxVQUFVLENBQUMsQ0FBTTtvQkFDYixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxLQUFhO29CQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxVQUFVLENBQUMsS0FBYTtvQkFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQzFCLENBQUM7Z0JBRUQsV0FBVyxDQUFDLEdBQVc7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO29CQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxTQUFTLENBQUMsR0FBVztvQkFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixDQUFDO2dCQUVELG9FQUFvRTtnQkFFcEUsa0RBQWtEO2dCQUNsRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBaUIsS0FBSztvQkFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztvQkFDbEMsSUFBSSxDQUFDO3dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FDakIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FDaEYsQ0FBQztvQkFDTixDQUFDO29CQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7d0JBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxPQUFPLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7NEJBQVMsQ0FBQzt3QkFDUCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO29CQUN2QyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsNENBQTRDO2dCQUM1QyxnQkFBZ0IsQ0FBQyxHQUFROztvQkFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxPQUFPLG1DQUFJLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxXQUFXLG1DQUFJLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLGFBQWEsbUNBQUksSUFBSSxDQUFDO29CQUN0RCx3QkFBd0I7b0JBQ3hCLElBQUksSUFBSSxDQUFDLGNBQWM7MkJBQ2hCLENBQUUsSUFBSSxDQUFDLGFBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO3dCQUNyRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDL0IsQ0FBQztnQkFDTCxDQUFDO2dCQUVELFlBQVksQ0FBQyxJQUFZO29CQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBRUQsS0FBSyxDQUFDLGVBQWU7b0JBQ2pCLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFFRCxLQUFLLENBQUMsaUJBQWlCO29CQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxJQUFJO3dCQUFFLE9BQU87b0JBRWxCLDRDQUE0QztvQkFDNUMsNkJBQTZCO29CQUM3QixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7b0JBQzlCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDM0IsUUFBUSxDQUFDLElBQUksQ0FDVCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDakYsQ0FBQztvQkFDTixDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDekIsUUFBUSxDQUFDLElBQUksQ0FDVCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDL0UsQ0FBQztvQkFDTixDQUFDO29CQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOzBCQUN4RCxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDekQ7d0JBQ0ksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzdELE9BQU8sRUFBRSxDQUFDO3dCQUNWLE1BQU0sRUFBRSxDQUFDO3FCQUNaLENBQ0osQ0FBQztvQkFDRixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQzt3QkFBRSxPQUFPO29CQUVsQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBRUQsK0JBQStCO2dCQUMvQixpQkFBaUIsQ0FBQyxVQUFlO29CQUM3QixJQUFJLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxjQUFjLEVBQUUsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRDs7OzttQkFJRztnQkFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQStCOztvQkFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNyQyxJQUFJLENBQUMsSUFBSTt3QkFBRSxPQUFPO29CQUVsQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQzt3QkFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUNwQyxnQkFBZ0IsRUFDaEIsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUMxRSxJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7d0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUUzQixJQUFJLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxFQUFFLEVBQUUsQ0FBQzs0QkFDVixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ25CLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQywyQkFBMkIsRUFDOUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUN0QixDQUFDLENBQUM7d0JBQ1AsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLHNCQUFzQjs0QkFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxNQUFNLG1DQUFJLElBQUksQ0FBQzs0QkFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDOzRCQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE9BQU8sS0FBSSxPQUFPLE1BQU0sU0FBUyxDQUFDLENBQUM7d0JBQzNELENBQUM7b0JBQ0wsQ0FBQztvQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO3dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsT0FBTyxLQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDOzRCQUFTLENBQUM7d0JBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7b0JBQzVCLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCx5QkFBeUI7Z0JBQ3pCLGdCQUFnQjtvQkFDWixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztvQkFDakMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELHlDQUF5QztnQkFDekMsaUJBQWlCO29CQUNiLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLENBQUM7YUFDSjtZQUNELE9BQU87Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBQ0QsUUFBUSxFQUFFLElBQUEsdUJBQVksRUFBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsK0NBQStDLENBQUMsRUFBRSxPQUFPLENBQUM7U0FDcEcsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELFdBQVcsS0FBSyxDQUFDO0lBQ2pCLEtBQUs7UUFDRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNMLENBQUM7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvb25lLWNvbXBvbmVudC1wZXItZmlsZSAqL1xyXG5cclxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IGNyZWF0ZUFwcCwgQXBwIH0gZnJvbSAndnVlJztcclxuXHJcbmNvbnN0IHBhbmVsRGF0YU1hcCA9IG5ldyBXZWFrTWFwPGFueSwgQXBwPigpO1xyXG5cclxuY29uc3QgU0VWRVJJVElFUyA9IFsnZXJyb3InLCAnd2FybicsICdpbmZvJ10gYXMgY29uc3Q7XHJcbi8qKiDkvZPmo4DkuKXph43nuqfliKsgLT4gaTE4biBrZXkgKi9cclxuY29uc3QgU0VWRVJJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGVycm9yOiAndWlfc2V2ZXJpdHlfZXJyb3InLFxyXG4gICAgd2FybjogJ3VpX3NldmVyaXR5X3dhcm4nLFxyXG4gICAgaW5mbzogJ3VpX3NldmVyaXR5X2luZm8nLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3IuUGFuZWwuZGVmaW5lKHtcclxuICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgIHNob3coKSB7IH0sXHJcbiAgICAgICAgaGlkZSgpIHsgfSxcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3RlbXBsYXRlL3dvcmtiZW5jaC9pbmRleC5odG1sJyksICd1dGYtOCcpLFxyXG4gICAgc3R5bGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy9zdHlsZS93b3JrYmVuY2gvaW5kZXguY3NzJyksICd1dGYtOCcpLFxyXG4gICAgJDoge1xyXG4gICAgICAgIGFwcDogJyNhcHAnLFxyXG4gICAgfSxcclxuICAgIGFzeW5jIHJlYWR5KCkge1xyXG4gICAgICAgIGNvbnN0ICRhcHAgPSB0aGlzLiQuYXBwO1xyXG4gICAgICAgIGlmICghJGFwcCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmlofmoYjlhYjlj5blm57mnaXlho3mjILovb3vvJrlkKbliJnpppbluKfkvJrmiorljp/lp4sga2V5IOaYvuekuue7meeUqOaIt1xyXG4gICAgICAgIGxldCBzdHJpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyaW5ncyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LWkxOG4nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8qIOWPluS4jeWIsOWwsemAgOWMluS4uiBrZXnvvIzkvYbkuI3lvbHlk43pnaLmnb/lip/og70gKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZUFwcCh7XHJcbiAgICAgICAgICAgIGRhdGEoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvmjInlvZPliY3nvJbovpHlmajor63oqIDop6PmnpDlpb3nmoTmlofmoYjooaggKi9cclxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiog5b2T5YmN5YiH6aG177yabW9kdWxlIHwgbWFuYWdlciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYjogJ21vZHVsZScsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeWdl+WIl+ihqFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVNb2R1bGU6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBtYW5hZ2VyIOWIl+ihqO+8iOWFqOWxgOWNleS+i+acjeWKoe+8iVxyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1hbmFnZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZU1hbmFnZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01hbmFnZXJOYW1lOiAnJyxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5paw5bu65qih5Z2X6KGo5Y2VXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3TW9kdWxlTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3TW9kdWxlT3JkZXI6IDEsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeWdlyBvcmRlciDnvJbovpFcclxuICAgICAgICAgICAgICAgICAgICBlZGl0T3JkZXI6IDAsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOW9k+WJjeaooeWdl+eahCB2aWV3IOWIl+ihqFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdzOiBbXSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yib5bu6IHZpZXcg5by556qXXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZVZpZXdNb2RhbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyOiAnV2luZG93JyxcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogJ2VtcHR5JyxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5bGC57qn5LiO5qih5p2/6YO955Sx5Li76L+b56iL5LiL5Y+R77yM5omp5bGV6YeM5LiN5YaN5a2Y56ys5LqM5Lu9ICovXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IFtdLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmpoLop4jvvIjlkK/liqjpobrluo8gKyDlsYLnuqfljaDnlKjvvIlcclxuICAgICAgICAgICAgICAgICAgICBzaG93T3ZlcnZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJ2aWV3OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbnM6IG51bGwgYXMgYW55LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJ2aWV3TG9hZGluZzogZmFsc2UsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS9k+ajgFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dEb2N0b3I6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3RvclJ1bm5pbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmRpbmdzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JHcm91cHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3RvclN1bW1hcnk6IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5raI5oGvXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNFcnJvcjogZmFsc2UsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWFrOWFseaooeWdl1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZE1vZHVsZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkU2hhcmVkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDmraPlnKjot5EgbnBt77ya5pyf6Ze056aB55So5a6J6KOFL+WNuOi9veaMiemSriAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZEJ1c3k6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiBucG0g57uT5p6c5by556qX55qE5pWw5o2u77yI5aSx6LSl5pe25bGV56S65Y6f5aeL6L6T5Ye677yJICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVzdWx0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDlvLnnqpfmmK/lkKblj6/op4Eg4oCU4oCUIOS4juaVsOaNruWIhuW8gO+8jOi/meagt+WFs+aOieS5i+WQjui/mOiDveS7jua2iOaBr+ihjOWGjeeCueW8gCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3dTaGFyZWRSZXN1bHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDmnKzlnLDlronoo4XmupDnm67lvZXvvJvkuLogbnVsbCDor7TmmI7ov5nmmK/mma7pgJrlt6XnqIsgKi9cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFNvdXJjZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog6L+c56iL5YiX6KGo5ouJ5Y+W5aSx6LSl55qE5Y6f5Zug77yI5pyJ5YC85pe26Z2i5p2/5pi+56S65o+Q56S677yM5L2G5LiN5b2x5ZON5YW25a6D5Yqf6IO977yJICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0cnlFcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo5ouJ6L+c56iL5YiX6KGo77yI5LiA5qyh5pCc57SiIDF+NCDnp5LvvIzopoHnu5nkuKrlj43ppojvvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RyeUxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIC8qKiDlvZPliY3pgInkuK3nmoTmqKHlnZflr7nosaHvvIjliJfooajph4zlj6rlrZjkuobnsr7nroDkv6Hmga/vvIzov5nph4zlj5blm57lrozmlbTnmoTpgqPmnaHvvIkgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlSW5mbygpOiBhbnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kdWxlKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOW9k+WJjeaooeWdl+eahOiEmuacrOaWh+S7tu+8jOS+m+mdouadv+S4gOmUruaJk+W8gOOAglxyXG4gICAgICAgICAgICAgICAgICog5LqL5Lu25aOw5piO5paH5Lu25Y+v6IO95LiN5a2Y5Zyo77yI5qih5Z2X5piv5pen54mI5omp5bGV5bu655qE77yJ77yM5omA5Lul5oyJ5a2Y5Zyo5oCn6L+H5ruk44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlRmlsZXMoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGZpbGU6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbzogYW55ID0gdGhpcy5zZWxlY3RlZE1vZHVsZUluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm4gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpbmZvLm1vZHVsZUZpbGUsIGluZm8ubW9kZWxGaWxlLCBpbmZvLmV2ZW50c0ZpbGVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIHN0cmluZyA9PiB0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGZpbGU6IHN0cmluZykgPT4gKHsgbmFtZTogZmlsZS5zcGxpdCgnLycpLnBvcCgpIHx8IGZpbGUsIGZpbGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5bey5a6J6KOFID0gcGFja2FnZS5qc29uIOmHjOWjsOaYjuS6hioq5LiUKiogbm9kZV9tb2R1bGVzIOmHjOWtmOWcqCAqL1xyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgPT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOacquWuieijhe+8iOWQq1wi5aOw5piO5LqG5L2GIG5vZGVfbW9kdWxlcyDph4zmsqHmnIlcIui/meS4gOaAge+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgIT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTaGFyZWRJbmZvKCk6IGFueSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkU2hhcmVkKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTaGFyZWQpIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog55WM6Z2i5LiK6KaB5bGV56S655qE6YKj5p2hIG5wbSDlkb3ku6Qg4oCU4oCUIOS4juaMiemSruWNs+WwhuaJp+ihjOeahOWKqOS9nOS4gOiHtFxyXG4gICAgICAgICAgICAgICAgICog77yI5pyq5a6J6KOF5pi+56S6IGluc3RhbGzvvIzlt7Llronoo4XmmL7npLogdW5pbnN0YWxs77yJ44CCXHJcbiAgICAgICAgICAgICAgICAgKiDlkb3ku6TnlLHkuLvov5vnqIvkuIvlj5HvvIzpnaLmnb/kuI3oh6rlt7Hmi7zlj4LmlbDjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uQ29tbWFuZCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm86IGFueSA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJyA/IGluZm8udW5pbnN0YWxsQ29tbWFuZCA6IGluZm8uaW5zdGFsbENvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5a6J6KOF5oyJ6ZKu55qE5paH5a2X44CCXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICog5bey5pyJ5paw54mI5pys5pe255u05o6l5YaZ5oiQXCLmm7TmlrDliLAgeC55LnpcIiDigJTigJQg55So5oi35LiN6ZyA6KaB6Ieq5bex5Y675q+U5a+554mI5pys5Y+344CCXHJcbiAgICAgICAgICAgICAgICAgKiDms6jmhI/lj6rlnKggYHVwZGF0ZS1hdmFpbGFibGVgIOaXtui/meS5iOWGme+8mueci+S4jeWIsOi/nOeoi+eJiOacrO+8iHVua25vd27vvInml7ZcclxuICAgICAgICAgICAgICAgICAqIOS4jeiDveaal+ekulwi6L+Z5bCx5piv5pyA5pawXCLvvIzpgqPkuKrnirbmgIHlnKjor6bmg4Xph4zlj6bmnInor7TmmI7jgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvOiBhbnkgPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudCgndWlfc2hhcmVkX2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8udXBkYXRlU3RhdGUgPT09ICd1cGRhdGUtYXZhaWxhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50KCd1aV9zaGFyZWRfdXBkYXRlX3RvJywgeyB2ZXJzaW9uOiBpbmZvLmxhdGVzdFZlcnNpb24gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudCgndWlfc2hhcmVkX3JlaW5zdGFsbCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50KCd1aV9zaGFyZWRfaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGkxOG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDlj5bmlofmoYjjgIJge25hbWV9YCDlvaLlvI/nmoTljaDkvY3nrKbnlKggcGFyYW1zIOabv+aNouOAglxyXG4gICAgICAgICAgICAgICAgICog5paH5qGI6KGo55Sx5Li76L+b56iL5oyJ5b2T5YmN57yW6L6R5Zmo6K+t6KiA6Kej5p6Q5ZCO5LiL5Y+R77yM6L+Z6YeM5LiN5YGa6K+t6KiA5Yik5pat44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHQoa2V5OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gdGhpcy5zdHJpbmdzW2tleV0gPz8ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KGB7JHtrfX1gKS5qb2luKFN0cmluZyhwYXJhbXNba10pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDliJ3lp4vljJYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRDb25maWcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1sYXllcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS10ZW1wbGF0ZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCAmJiAhdGhpcy5sYXllcnMuaW5jbHVkZXModGhpcy5sYXllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXcgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1vdmVydmlldycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOeJiOacrOS/oeaBrzrmoYbmnrbor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOmCo+S7vSzmianlsZXor7voh6rlt7Eg4oCU4oCUIOmDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCIgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWZXJzaW9ucygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnNpb25zID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdmVyc2lvbnMnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuKTovrnniYjmnKzkuI3kuIDmoLflsLHnrpfmnInmlrDniYgo5q+U6L6D6YC76L6R5Y+q5q2k5LiA5aSELOS4u+i/m+eoi+S4jemHjeWkjeWIpOaWrSkgKi9cclxuICAgICAgICAgICAgICAgIHVwZGF0ZU9mKGluZm86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhIShpbmZvICYmIGluZm8ubGF0ZXN0ICYmIGluZm8udmVyc2lvbiAmJiBpbmZvLmxhdGVzdCAhPT0gaW5mby52ZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRnJhbWV3b3JrKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuVXBkYXRlKCdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnLCB0aGlzLnZlcnNpb25zPy5mcmFtZXdvcms/Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyB1cGRhdGVFeHRlbnNpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbj8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blVwZGF0ZSgnaW5zdGFsbC1zaGFyZWQtbW9kdWxlJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6KOF6L+bIG5vZGVfbW9kdWxlcyDov5jkuI3lpJ8657yW6L6R5Zmo5Y+q6K6kIGV4dGVuc2lvbnMvIOS4i+mCo+S7vSzlv4XpobvokL3nm5hcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdzeW5jLWV4dGVuc2lvbicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLnQoJ3VpX21zZ19leHRlbnNpb25fdXBkYXRlZCcsIHsgdmVyc2lvbjogdGhpcy52ZXJzaW9ucz8uZXh0ZW5zaW9uPy5sYXRlc3QgfHwgJycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5LiO5YWs5YWx5qih5Z2X5a6J6KOF6LWw5ZCM5LiA5p2h6LevOuWkjeeUqOeOsOaIkOeahCBucG0g5omn6KGM5LiO5aSx6LSl5bGV56S6ICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5VcGRhdGUobWVzc2FnZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgbWVzc2FnZSwgW25hbWVdLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVzICYmIHJlcy5vayA9PT0gZmFsc2UgPyAnJyA6IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLm9rID09PSBmYWxzZSkgdGhpcy5zaG93RXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWZXJzaW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNb2R1bGVzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1vZHVsZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVPcmRlciA9IHRoaXMubmV4dE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlICYmICF0aGlzLm1vZHVsZXMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2R1bGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG5leHRPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kdWxlcy5sZW5ndGgpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLm1vZHVsZXMubWFwKChtOiBhbnkpID0+IG0ub3JkZXIpKSArIDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5qih5Z2X5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RNb2R1bGUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc3luY0VkaXRPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZXMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB0aGlzLmVkaXRPcmRlciA9IG1vZC5vcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWaWV3cygpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS12aWV3cycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25DcmVhdGVNb2R1bGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TW9kdWxlTmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9tb2R1bGVfbmFtZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtbW9kdWxlJywgbmFtZSwgdGhpcy5uZXdNb2R1bGVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbW9kdWxlX2NyZWF0ZWQnLCB7IG5hbWU6IHJlcy5kaXJOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZU1vZHVsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSByZXMuZGlyTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvblVwZGF0ZU9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfc2VsZWN0X21vZHVsZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICd1cGRhdGUtbW9kdWxlLW9yZGVyJywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgdGhpcy5lZGl0T3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX29yZGVyX3VwZGF0ZWQnLCB7IG5hbWU6IHJlcy5tb2R1bGVOYW1lLCBvcmRlcjogcmVzLm9yZGVyIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVNb2R1bGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld0NvdW50ID0gdGhpcy52aWV3cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIoOmZpOWJjeWFiOmXruS4u+i/m+eoi++8muacieayoeaciei1hOa6kOW8leeUqOS6huivpeaooeWdl+eahOiEmuacrFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1vZHVsZS1yZWZzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnMgPSByZXM/LnJlZmVyZW5jZWRCeSA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIOafpeS4jeWIsOWwseS4jemYu+aWreWIoOmZpO+8jOWPquaYr+WwkeS4gOWxguaPkOmGkiAqL1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuUmVmcyA9IHJlZnMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1xcblxcbuKaoCAnICsgdGhpcy50KCd1aV9jb25maXJtX3JlZnMnLCB7IGNvdW50OiByZWZzLmxlbmd0aCB9KSArICdcXG7CtyAnICsgcmVmcy5qb2luKCdcXG7CtyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfbW9kdWxlJywgeyBuYW1lOiB0aGlzLnNlbGVjdGVkTW9kdWxlLCBjb3VudDogdmlld0NvdW50IH0pICsgd2FyblJlZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbW9kdWxlJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbW9kdWxlX2RlbGV0ZWQnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbmFnZXIg5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hUYWIobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWIgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAndmVyc2lvbnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbWFuYWdlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdzaGFyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNoYXJlZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkTWFuYWdlcnMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW5hZ2VycyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1hbmFnZXJzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+ihqOmHjeW7uuWQjuaKiumAieS4remhuemHjeaWsOe7keWumuWIsOaWsOWvueixoeS4iu+8jOmBv+WFjeaYvuekuui/h+acn+aVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZE1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gY3VycmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hbmFnZXJzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSBjdXJyZW50Lm5hbWUpID8/IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1hbmFnZXIobWFuYWdlcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBtYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TWFuYWdlck5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbWFuYWdlcl9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tYW5hZ2VyJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9jcmVhdGVkJywgeyBuYW1lOiByZXMuY2xhc3NOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVNYW5hZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLm1hbmFnZXJzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSByZXMuY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TWFuYWdlcihjcmVhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVNYW5hZ2VyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1hbmFnZXIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5zZWxlY3RlZE1hbmFnZXIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfbWFuYWdlcicsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tYW5hZ2VyJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgb25OZXdNYW5hZ2VyTmFtZShlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01hbmFnZXJOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZpZXcg5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVWaWV3KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV92aWV3JywgeyBuYW1lIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGJ1dHRvbnM6IFt0aGlzLnQoJ3VpX2RlbGV0ZScpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSwgZGVmYXVsdDogMSwgY2FuY2VsOiAxIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnZGVsZXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ192aWV3X2RlbGV0ZWQnLCB7IG5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgb3BlbkNyZWF0ZVZpZXdNb2RhbCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY2xvc2VDcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uQ3JlYXRlVmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy52aWV3TmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF92aWV3X25hbWUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtdmlldycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUsIG5hbWUsIHRoaXMubGF5ZXIsIHRoaXMudGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19jcmVhdGVkJywgeyBuYW1lOiByZXMuY2xhc3NOYW1lLCB0ZW1wbGF0ZTogcmVzLnRlbXBsYXRlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkvZPmo4Dnu5Pmnpzph4znmoTmlofku7bot6/lvoQgLT4g5Zyo57yW6L6R5Zmo6YeM5omT5byAICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvcGVuU291cmNlKGZpbGU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ29wZW4tc291cmNlJywgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5L2T5qOAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1bkRvY3RvcigpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3RvclJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3J1bi1kb2N0b3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kaW5ncyA9IHJlcy5maW5kaW5ncyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JTdW1tYXJ5ID0gcmVzLnN1bW1hcnkgPz8geyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjIkgZXJyb3Ig4oaSIHdhcm4g4oaSIGluZm8g5YiG57uE77yM56m657uE5LiN5pi+56S6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yR3JvdXBzID0gU0VWRVJJVElFU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoc2V2ZXJpdHkpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudChTRVZFUklUWV9LRVlTW3NldmVyaXR5XSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHRoaXMuZmluZGluZ3MuZmlsdGVyKChmOiBhbnkpID0+IGYuc2V2ZXJpdHkgPT09IHNldmVyaXR5KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZzogYW55KSA9PiBnLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RvY3RvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5qaC6KeIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9wZW5PdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93T3ZlcnZpZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXdMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZU92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd092ZXJ2aWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g6KGo5Y2V5LqL5Lu2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBvbk5ld01vZHVsZU5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25OZXdNb2R1bGVPcmRlcihlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uRWRpdE9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdE9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uVmlld05hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTGF5ZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNob3dTdWNjZXNzKG1zZzogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNob3dFcnJvcihtc2c6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjjgIzliLfmlrDjgI3mjInpkq7nlKjvvJvlkKbliJnnlKjkuLvov5vnqIvph4znmoTnvJPlrZjvvIkgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRTaGFyZWRNb2R1bGVzKGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNoYXJlZFN0YXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktc2hhcmVkLW1vZHVsZXMnLCBmb3JjZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvlm57mnaXnmoTnirbmgIHnu5/kuIDlnKjov5nph4zokL3liLAgZGF0YSDkuIrvvIjmn6Xor6LkuI7oo4Uv5Y245YWx55So5ZCM5LiA5Lu957uT5p6E77yJICovXHJcbiAgICAgICAgICAgICAgICBhcHBseVNoYXJlZFN0YXRlKHJlczogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRNb2R1bGVzID0gcmVzPy5tb2R1bGVzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTb3VyY2UgPSByZXM/LmxvY2FsU291cmNlID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUVycm9yID0gcmVzPy5yZWdpc3RyeUVycm9yID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6YCJ5Lit6aG55Y+v6IO95bey57uP5LiN5Zyo5YiX6KGo6YeM5LqG77yI5q+U5aaC5Yia6KKr5Y246L2977yJXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTaGFyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2hhcmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcmVkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdFNoYXJlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcmVkID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25JbnN0YWxsU2hhcmVkKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2hhcmVkKCdpbnN0YWxsJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVW5pbnN0YWxsU2hhcmVkKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y246L295YmN5o+Q6YaS5Lik57G75Lya6KKr5omT5pat55qE5Lic6KW/77ya6L+Y5ZyoIGltcG9ydCDlroPnmoTohJrmnKzjgIHku6Xlj4rkvp3otZblroPnmoTlhazlhbHmqKHlnZfjgIJcclxuICAgICAgICAgICAgICAgICAgICAvLyDlj6rmo4Dmn6XliY3ogIXnmoTor53vvIxcIuWPpuS4gOS4quWFrOWFseaooeWdl+S+nei1luWug1wi5Lya5a6M5YWo5ryP5o6J44CCXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVmZXJlbmNlZEJ5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KaoCAnICsgdGhpcy50KCd1aV9zaGFyZWRfcmVmc193YXJuJykgKyAnXFxuwrcgJyArIGluZm8ucmVmZXJlbmNlZEJ5LmpvaW4oJ1xcbsK3ICcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5kZXBlbmRlbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KaoCAnICsgdGhpcy50KCd1aV9zaGFyZWRfZGVwc193YXJuJykgKyAnXFxuwrcgJyArIGluZm8uZGVwZW5kZW50cy5qb2luKCdcXG7CtyAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX3VuaW5zdGFsbF9zaGFyZWQnLCB7IG5hbWU6IGluZm8ubmFtZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArICh3YXJuaW5ncy5sZW5ndGggPyAnXFxuXFxuJyArIHdhcm5pbmdzLmpvaW4oJ1xcblxcbicpIDogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbdGhpcy50KCd1aV9zaGFyZWRfdW5pbnN0YWxsJyksIHRoaXMudCgndWlfY2FuY2VsJyldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5TaGFyZWQoJ3VuaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5L6d6LWW6aG55pys6Lqr5Lmf5piv5YWs5YWx5qih5Z2X5pe277yM54K55LiA5LiL6Lez6L+H5Y6755yL5a6D55qE54q25oCBICovXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRGVwZW5kZW5jeShkZXBlbmRlbmN5OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeT8uaXNTaGFyZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaGFyZWQoZGVwZW5kZW5jeS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5Luj6LeRIG5wbSDlronoo4UgLyDljbjovb3jgIJcclxuICAgICAgICAgICAgICAgICAqIOWksei0peaXtioq5LiN5by55LiA5p2h6L2s6L+w55qEXCLlronoo4XlpLHotKVcIioq77yM6ICM5piv5oqKIG5wbSDnmoTljp/lp4vovpPlh7rmlbTkuKrmlL7ov5vlvLnnqpcg4oCU4oCUXHJcbiAgICAgICAgICAgICAgICAgKiDnlKjmiLfopoHor4rmlq3nmoTlsLHmmK/pgqPmrrXovpPlh7rjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgcnVuU2hhcmVkKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkQnVzeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjY2dmLWdhbWUtdG9vbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT09ICdpbnN0YWxsJyA/ICdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnIDogJ3VuaW5zdGFsbC1zaGFyZWQtbW9kdWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNoYXJlZFN0YXRlKHJlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSAnaW5zdGFsbCcgPyAndWlfbXNnX3NoYXJlZF9pbnN0YWxsZWQnIDogJ3VpX21zZ19zaGFyZWRfdW5pbnN0YWxsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogaW5mby5uYW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWksei0pe+8muaVsOaNrueVmeedgOS+m+W8ueeql+Wxleekuu+8jOW5tueri+WIu+aJk+W8gOWug1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZXN1bHQgPSByZXM/LnJlc3VsdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gdGhpcy5zaGFyZWRSZXN1bHQgIT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihyZXM/Lm1lc3NhZ2UgfHwgYG5wbSAke2FjdGlvbn0gZmFpbGVkYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZEJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDku47mtojmga/ooYzlho3ngrnlvIDkuIrkuIDmrKHnmoQgbnBtIOi+k+WHuiAqL1xyXG4gICAgICAgICAgICAgICAgb3BlblNoYXJlZFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDlj6rlhbPlvLnnqpfvvIwqKuS/neeVmeaVsOaNrioqIOKAlOKAlCDlkKbliJnlhbPmjonkuYvlkI7lsLHlho3kuZ/nnIvkuI3liLDpgqPmrrXovpPlh7rkuoYgKi9cclxuICAgICAgICAgICAgICAgIGNsb3NlU2hhcmVkUmVzdWx0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbW91bnRlZCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENvbmZpZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGVtcGxhdGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy90ZW1wbGF0ZS93b3JrYmVuY2gvcGFuZWwuaHRtbCcpLCAndXRmLTgnKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBhcHAuY29uZmlnLmNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQgPSAodGFnOiBzdHJpbmcpID0+IHRhZy5zdGFydHNXaXRoKCd1aS0nKTtcclxuICAgICAgICBhcHAubW91bnQoJGFwcCk7XHJcbiAgICAgICAgcGFuZWxEYXRhTWFwLnNldCh0aGlzLCBhcHApO1xyXG4gICAgfSxcclxuICAgIGJlZm9yZUNsb3NlKCkgeyB9LFxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gcGFuZWxEYXRhTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpZiAoYXBwKSB7XHJcbiAgICAgICAgICAgIGFwcC51bm1vdW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufSk7XHJcbiJdfQ==
|
|
705
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyw2QkFBNkI7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7QUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDdEQseUJBQXlCO0FBQ3pCLE1BQU0sYUFBYSxHQUEyQjtJQUMxQyxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxTQUFTLEVBQUU7UUFDUCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO0tBQ2I7SUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRixDQUFDLEVBQUU7UUFDQyxHQUFHLEVBQUUsTUFBTTtLQUNkO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtR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LCtDQUErQyxDQUFDLEVBQUUsT0FBTyxDQUFDO1NBQ3BHLENBQUMsQ0FBQztRQUNILEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxXQUFXLEtBQUssQ0FBQztJQUNqQixLQUFLO1FBQ0QsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdnVlL29uZS1jb21wb25lbnQtcGVyLWZpbGUgKi9cclxuXHJcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBjcmVhdGVBcHAsIEFwcCB9IGZyb20gJ3Z1ZSc7XHJcblxyXG4vKiog6Ieq5Yqo6YeN6K+V55qE5a6a5pe25ZmoKOaooeWdl+e6pzrlkIzkuIDml7bliLvlj6rnlZnkuIDkuKopICovXHJcbmxldCBzaGFyZWRSZXRyeVRpbWVyOiBhbnkgPSBudWxsO1xyXG5cclxuY29uc3QgcGFuZWxEYXRhTWFwID0gbmV3IFdlYWtNYXA8YW55LCBBcHA+KCk7XHJcblxyXG5jb25zdCBTRVZFUklUSUVTID0gWydlcnJvcicsICd3YXJuJywgJ2luZm8nXSBhcyBjb25zdDtcclxuLyoqIOS9k+ajgOS4pemHjee6p+WIqyAtPiBpMThuIGtleSAqL1xyXG5jb25zdCBTRVZFUklUWV9LRVlTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgZXJyb3I6ICd1aV9zZXZlcml0eV9lcnJvcicsXHJcbiAgICB3YXJuOiAndWlfc2V2ZXJpdHlfd2FybicsXHJcbiAgICBpbmZvOiAndWlfc2V2ZXJpdHlfaW5mbycsXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVkaXRvci5QYW5lbC5kZWZpbmUoe1xyXG4gICAgbGlzdGVuZXJzOiB7XHJcbiAgICAgICAgc2hvdygpIHsgfSxcclxuICAgICAgICBoaWRlKCkgeyB9LFxyXG4gICAgfSxcclxuICAgIHRlbXBsYXRlOiByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvdGVtcGxhdGUvd29ya2JlbmNoL2luZGV4Lmh0bWwnKSwgJ3V0Zi04JyksXHJcbiAgICBzdHlsZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3N0eWxlL3dvcmtiZW5jaC9pbmRleC5jc3MnKSwgJ3V0Zi04JyksXHJcbiAgICAkOiB7XHJcbiAgICAgICAgYXBwOiAnI2FwcCcsXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgcmVhZHkoKSB7XHJcbiAgICAgICAgY29uc3QgJGFwcCA9IHRoaXMuJC5hcHA7XHJcbiAgICAgICAgaWYgKCEkYXBwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOaWh+ahiOWFiOWPluWbnuadpeWGjeaMgui9ve+8muWQpuWImemmluW4p+S8muaKiuWOn+WniyBrZXkg5pi+56S657uZ55So5oi3XHJcbiAgICAgICAgbGV0IHN0cmluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdHJpbmdzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktaTE4bicpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLyog5Y+W5LiN5Yiw5bCx6YCA5YyW5Li6IGtlee+8jOS9huS4jeW9seWTjemdouadv+WKn+iDvSAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXBwID0gY3JlYXRlQXBwKHtcclxuICAgICAgICAgICAgZGF0YSgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOS4u+i/m+eoi+aMieW9k+WJjee8lui+keWZqOivreiogOino+aekOWlveeahOaWh+ahiOihqCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ3MsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDlvZPliY3liIfpobXvvJptb2R1bGUgfCBtYW5hZ2VyICovXHJcbiAgICAgICAgICAgICAgICAgICAgdGFiOiAnbW9kdWxlJyxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2X5YiX6KGoXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRNb2R1bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZU1vZHVsZTogZmFsc2UsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hbmFnZXIg5YiX6KGo77yI5YWo5bGA5Y2V5L6L5pyN5Yqh77yJXHJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWFuYWdlcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q3JlYXRlTWFuYWdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3TWFuYWdlck5hbWU6ICcnLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlu7rmqKHlnZfooajljZVcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVPcmRlcjogMSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2XIG9yZGVyIOe8lui+kVxyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRPcmRlcjogMCxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN5qih5Z2X55qEIHZpZXcg5YiX6KGoXHJcbiAgICAgICAgICAgICAgICAgICAgdmlld3M6IFtdLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDliJvlu7ogdmlldyDlvLnnqpdcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q3JlYXRlVmlld01vZGFsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXI6ICdXaW5kb3cnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAnZW1wdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDlsYLnuqfkuI7mqKHmnb/pg73nlLHkuLvov5vnqIvkuIvlj5HvvIzmianlsZXph4zkuI3lho3lrZjnrKzkuozku70gKi9cclxuICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczogW10sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOamguiniO+8iOWQr+WKqOmhuuW6jyArIOWxgue6p+WNoOeUqO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dPdmVydmlldzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uczogbnVsbCBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXdMb2FkaW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5L2T5qOAXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0RvY3RvcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yUnVubmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmluZGluZ3M6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3Rvckdyb3VwczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yU3VtbWFyeTogeyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9LFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmtojmga9cclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBpc0Vycm9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5YWs5YWx5qih5Z2XXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkTW9kdWxlczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTaGFyZWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOato+WcqOi3kSBucG3vvJrmnJ/pl7TnpoHnlKjlronoo4Uv5Y246L295oyJ6ZKuICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkQnVzeTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIG5wbSDnu5PmnpzlvLnnqpfnmoTmlbDmja7vvIjlpLHotKXml7blsZXnpLrljp/lp4vovpPlh7rvvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXN1bHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOW8ueeql+aYr+WQpuWPr+ingSDigJTigJQg5LiO5pWw5o2u5YiG5byA77yM6L+Z5qC35YWz5o6J5LmL5ZCO6L+Y6IO95LuO5raI5oGv6KGM5YaN54K55byAICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NoYXJlZFJlc3VsdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOacrOWcsOWuieijhea6kOebruW9le+8m+S4uiBudWxsIOivtOaYjui/meaYr+aZrumAmuW3peeoiyAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU291cmNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvIjmnInlgLzml7bpnaLmnb/mmL7npLrmj5DnpLrvvIzkvYbkuI3lvbHlk43lhbblroPlip/og73vvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RyeVBlbmRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdHJ5RXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOato+WcqOaLiei/nOeoi+WIl+ihqO+8iOS4gOasoeaQnOe0oiAxfjQg56eS77yM6KaB57uZ5Liq5Y+N6aaI77yJICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0cnlMb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgICAgICAvKiog5b2T5YmN6YCJ5Lit55qE5qih5Z2X5a+56LGh77yI5YiX6KGo6YeM5Y+q5a2Y5LqG57K+566A5L+h5oGv77yM6L+Z6YeM5Y+W5Zue5a6M5pW055qE6YKj5p2h77yJICovXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1vZHVsZUluZm8oKTogYW55IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5tb2R1bGVzIGFzIGFueVtdKS5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSkgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDlvZPliY3mqKHlnZfnmoTohJrmnKzmlofku7bvvIzkvpvpnaLmnb/kuIDplK7miZPlvIDjgIJcclxuICAgICAgICAgICAgICAgICAqIOS6i+S7tuWjsOaYjuaWh+S7tuWPr+iDveS4jeWtmOWcqO+8iOaooeWdl+aYr+aXp+eJiOaJqeWxleW7uueahO+8ie+8jOaJgOS7peaMieWtmOWcqOaAp+i/h+a7pOOAglxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1vZHVsZUZpbGVzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBmaWxlOiBzdHJpbmcgfT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm86IGFueSA9IHRoaXMuc2VsZWN0ZWRNb2R1bGVJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5mby5tb2R1bGVGaWxlLCBpbmZvLm1vZGVsRmlsZSwgaW5mby5ldmVudHNGaWxlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWxlOiB1bmtub3duKTogZmlsZSBpcyBzdHJpbmcgPT4gdHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChmaWxlOiBzdHJpbmcpID0+ICh7IG5hbWU6IGZpbGUuc3BsaXQoJy8nKS5wb3AoKSB8fCBmaWxlLCBmaWxlIH0pKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOW3suWuieijhSA9IHBhY2thZ2UuanNvbiDph4zlo7DmmI7kuoYqKuS4lCoqIG5vZGVfbW9kdWxlcyDph4zlrZjlnKggKi9cclxuICAgICAgICAgICAgICAgIGluc3RhbGxlZFNoYXJlZCgpOiBhbnlbXSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbHRlcigobTogYW55KSA9PiBtLnN0YXRlID09PSAnaW5zdGFsbGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDmnKrlronoo4XvvIjlkKtcIuWjsOaYjuS6huS9hiBub2RlX21vZHVsZXMg6YeM5rKh5pyJXCLov5nkuIDmgIHvvIkgKi9cclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNoYXJlZCgpOiBhbnlbXSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbHRlcigobTogYW55KSA9PiBtLnN0YXRlICE9PSAnaW5zdGFsbGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU2hhcmVkSW5mbygpOiBhbnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFNoYXJlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2hhcmVkKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOeVjOmdouS4iuimgeWxleekuueahOmCo+adoSBucG0g5ZG95LukIOKAlOKAlCDkuI7mjInpkq7ljbPlsIbmiafooYznmoTliqjkvZzkuIDoh7RcclxuICAgICAgICAgICAgICAgICAqIO+8iOacquWuieijheaYvuekuiBpbnN0YWxs77yM5bey5a6J6KOF5pi+56S6IHVuaW5zdGFsbO+8ieOAglxyXG4gICAgICAgICAgICAgICAgICog5ZG95Luk55Sx5Li76L+b56iL5LiL5Y+R77yM6Z2i5p2/5LiN6Ieq5bex5ou85Y+C5pWw44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNoYXJlZEFjdGlvbkNvbW1hbmQoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvOiBhbnkgPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5zdGF0ZSA9PT0gJ2luc3RhbGxlZCcgPyBpbmZvLnVuaW5zdGFsbENvbW1hbmQgOiBpbmZvLmluc3RhbGxDb21tYW5kO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOWuieijheaMiemSrueahOaWh+Wtl+OAglxyXG4gICAgICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICAgICAqIOW3suacieaWsOeJiOacrOaXtuebtOaOpeWGmeaIkFwi5pu05paw5YiwIHgueS56XCIg4oCU4oCUIOeUqOaIt+S4jemcgOimgeiHquW3seWOu+avlOWvueeJiOacrOWPt+OAglxyXG4gICAgICAgICAgICAgICAgICog5rOo5oSP5Y+q5ZyoIGB1cGRhdGUtYXZhaWxhYmxlYCDml7bov5nkuYjlhpnvvJrnnIvkuI3liLDov5znqIvniYjmnKzvvIh1bmtub3du77yJ5pe2XHJcbiAgICAgICAgICAgICAgICAgKiDkuI3og73mmpfnpLpcIui/meWwseaYr+acgOaWsFwi77yM6YKj5Liq54q25oCB5Zyo6K+m5oOF6YeM5Y+m5pyJ6K+05piO44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNoYXJlZEFjdGlvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbzogYW55ID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnQoJ3VpX3NoYXJlZF9pbnN0YWxsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnVwZGF0ZVN0YXRlID09PSAndXBkYXRlLWF2YWlsYWJsZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudCgndWlfc2hhcmVkX3VwZGF0ZV90bycsIHsgdmVyc2lvbjogaW5mby5sYXRlc3RWZXJzaW9uIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5zdGF0ZSA9PT0gJ2luc3RhbGxlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnQoJ3VpX3NoYXJlZF9yZWluc3RhbGwnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudCgndWlfc2hhcmVkX2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpMThuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5Y+W5paH5qGI44CCYHtuYW1lfWAg5b2i5byP55qE5Y2g5L2N56ym55SoIHBhcmFtcyDmm7/mjaLjgIJcclxuICAgICAgICAgICAgICAgICAqIOaWh+ahiOihqOeUseS4u+i/m+eoi+aMieW9k+WJjee8lui+keWZqOivreiogOino+aekOWQjuS4i+WPke+8jOi/memHjOS4jeWBmuivreiogOWIpOaWreOAglxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB0KGtleTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHRoaXMuc3RyaW5nc1trZXldID8/IGtleTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zcGxpdChgeyR7a319YCkuam9pbihTdHJpbmcocGFyYW1zW2tdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5Yid5aeL5YyWIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkQ29uZmlnKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbGF5ZXJzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdGVtcGxhdGVzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxheWVycy5sZW5ndGggJiYgIXRoaXMubGF5ZXJzLmluY2x1ZGVzKHRoaXMubGF5ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVyID0gdGhpcy5sYXllcnNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRPdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktb3ZlcnZpZXcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDniYjmnKzkv6Hmga865qGG5p626K+75bel56iLIG5vZGVfbW9kdWxlcyDph4zpgqPku70s5omp5bGV6K+76Ieq5bexIOKAlOKAlCDpg73mmK9cIuWunumZheijheS6huS7gOS5iFwiICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkVmVyc2lvbnMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJzaW9ucyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXZlcnNpb25zJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Lik6L6554mI5pys5LiN5LiA5qC35bCx566X5pyJ5paw54mIKOavlOi+g+mAu+i+keWPquatpOS4gOWkhCzkuLvov5vnqIvkuI3ph43lpI3liKTmlq0pICovXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVPZihpbmZvOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISEoaW5mbyAmJiBpbmZvLmxhdGVzdCAmJiBpbmZvLnZlcnNpb24gJiYgaW5mby5sYXRlc3QgIT09IGluZm8udmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIHVwZGF0ZUZyYW1ld29yaygpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuo7mmK8gc3luYy1leHRlbnNpb24g5ou35Zue5p2l55qE6L+Y5piv5pen54mI5pysIOKAlOKAlCDooajnjrDlsLHmmK8n54K55LqG5rKh55SoJ+OAglxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuVXBkYXRlKCdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnLCBuYW1lICsgJ0BsYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRXh0ZW5zaW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5LqO5pivIHN5bmMtZXh0ZW5zaW9uIOaLt+WbnuadpeeahOi/mOaYr+aXp+eJiOacrCDigJTigJQg6KGo546w5bCx5pivJ+eCueS6huayoeeUqCfjgIJcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blVwZGF0ZSgnaW5zdGFsbC1zaGFyZWQtbW9kdWxlJywgbmFtZSArICdAbGF0ZXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6KOF6L+bIG5vZGVfbW9kdWxlcyDov5jkuI3lpJ8657yW6L6R5Zmo5Y+q6K6kIGV4dGVuc2lvbnMvIOS4i+mCo+S7vSzlv4XpobvokL3nm5hcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdzeW5jLWV4dGVuc2lvbicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLnQoJ3VpX21zZ19leHRlbnNpb25fdXBkYXRlZCcsIHsgdmVyc2lvbjogdGhpcy52ZXJzaW9ucz8uZXh0ZW5zaW9uPy5sYXRlc3QgfHwgJycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5LiO5YWs5YWx5qih5Z2X5a6J6KOF6LWw5ZCM5LiA5p2h6LevOuWkjeeUqOeOsOaIkOeahCBucG0g5omn6KGM5LiO5aSx6LSl5bGV56S6ICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5VcGRhdGUobWVzc2FnZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgbWVzc2FnZSwgW25hbWVdLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVzICYmIHJlcy5vayA9PT0gZmFsc2UgPyAnJyA6IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLm9rID09PSBmYWxzZSkgdGhpcy5zaG93RXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWZXJzaW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNb2R1bGVzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1vZHVsZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVPcmRlciA9IHRoaXMubmV4dE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlICYmICF0aGlzLm1vZHVsZXMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2R1bGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG5leHRPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kdWxlcy5sZW5ndGgpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLm1vZHVsZXMubWFwKChtOiBhbnkpID0+IG0ub3JkZXIpKSArIDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5qih5Z2X5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RNb2R1bGUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc3luY0VkaXRPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZXMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB0aGlzLmVkaXRPcmRlciA9IG1vZC5vcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWaWV3cygpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS12aWV3cycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25DcmVhdGVNb2R1bGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TW9kdWxlTmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9tb2R1bGVfbmFtZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtbW9kdWxlJywgbmFtZSwgdGhpcy5uZXdNb2R1bGVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbW9kdWxlX2NyZWF0ZWQnLCB7IG5hbWU6IHJlcy5kaXJOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZU1vZHVsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSByZXMuZGlyTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvblVwZGF0ZU9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfc2VsZWN0X21vZHVsZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICd1cGRhdGUtbW9kdWxlLW9yZGVyJywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgdGhpcy5lZGl0T3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX29yZGVyX3VwZGF0ZWQnLCB7IG5hbWU6IHJlcy5tb2R1bGVOYW1lLCBvcmRlcjogcmVzLm9yZGVyIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVNb2R1bGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld0NvdW50ID0gdGhpcy52aWV3cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIoOmZpOWJjeWFiOmXruS4u+i/m+eoi++8muacieayoeaciei1hOa6kOW8leeUqOS6huivpeaooeWdl+eahOiEmuacrFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1vZHVsZS1yZWZzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnMgPSByZXM/LnJlZmVyZW5jZWRCeSA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIOafpeS4jeWIsOWwseS4jemYu+aWreWIoOmZpO+8jOWPquaYr+WwkeS4gOWxguaPkOmGkiAqL1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuUmVmcyA9IHJlZnMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1xcblxcbuKaoCAnICsgdGhpcy50KCd1aV9jb25maXJtX3JlZnMnLCB7IGNvdW50OiByZWZzLmxlbmd0aCB9KSArICdcXG7CtyAnICsgcmVmcy5qb2luKCdcXG7CtyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfbW9kdWxlJywgeyBuYW1lOiB0aGlzLnNlbGVjdGVkTW9kdWxlLCBjb3VudDogdmlld0NvdW50IH0pICsgd2FyblJlZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbW9kdWxlJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbW9kdWxlX2RlbGV0ZWQnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbmFnZXIg5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hUYWIobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWIgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAndmVyc2lvbnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbWFuYWdlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdzaGFyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNoYXJlZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkTWFuYWdlcnMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW5hZ2VycyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1hbmFnZXJzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+ihqOmHjeW7uuWQjuaKiumAieS4remhuemHjeaWsOe7keWumuWIsOaWsOWvueixoeS4iu+8jOmBv+WFjeaYvuekuui/h+acn+aVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZE1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gY3VycmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hbmFnZXJzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSBjdXJyZW50Lm5hbWUpID8/IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1hbmFnZXIobWFuYWdlcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBtYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TWFuYWdlck5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbWFuYWdlcl9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tYW5hZ2VyJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9jcmVhdGVkJywgeyBuYW1lOiByZXMuY2xhc3NOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVNYW5hZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLm1hbmFnZXJzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSByZXMuY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TWFuYWdlcihjcmVhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVNYW5hZ2VyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1hbmFnZXIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5zZWxlY3RlZE1hbmFnZXIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfbWFuYWdlcicsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tYW5hZ2VyJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgb25OZXdNYW5hZ2VyTmFtZShlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01hbmFnZXJOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZpZXcg5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVWaWV3KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV92aWV3JywgeyBuYW1lIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGJ1dHRvbnM6IFt0aGlzLnQoJ3VpX2RlbGV0ZScpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSwgZGVmYXVsdDogMSwgY2FuY2VsOiAxIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnZGVsZXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ192aWV3X2RlbGV0ZWQnLCB7IG5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgb3BlbkNyZWF0ZVZpZXdNb2RhbCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY2xvc2VDcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uQ3JlYXRlVmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy52aWV3TmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF92aWV3X25hbWUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtdmlldycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUsIG5hbWUsIHRoaXMubGF5ZXIsIHRoaXMudGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19jcmVhdGVkJywgeyBuYW1lOiByZXMuY2xhc3NOYW1lLCB0ZW1wbGF0ZTogcmVzLnRlbXBsYXRlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkvZPmo4Dnu5Pmnpzph4znmoTmlofku7bot6/lvoQgLT4g5Zyo57yW6L6R5Zmo6YeM5omT5byAICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvcGVuU291cmNlKGZpbGU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ29wZW4tc291cmNlJywgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5L2T5qOAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1bkRvY3RvcigpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3RvclJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3J1bi1kb2N0b3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kaW5ncyA9IHJlcy5maW5kaW5ncyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JTdW1tYXJ5ID0gcmVzLnN1bW1hcnkgPz8geyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjIkgZXJyb3Ig4oaSIHdhcm4g4oaSIGluZm8g5YiG57uE77yM56m657uE5LiN5pi+56S6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yR3JvdXBzID0gU0VWRVJJVElFU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoc2V2ZXJpdHkpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudChTRVZFUklUWV9LRVlTW3NldmVyaXR5XSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHRoaXMuZmluZGluZ3MuZmlsdGVyKChmOiBhbnkpID0+IGYuc2V2ZXJpdHkgPT09IHNldmVyaXR5KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZzogYW55KSA9PiBnLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RvY3RvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5qaC6KeIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9wZW5PdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93T3ZlcnZpZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXdMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZU92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd092ZXJ2aWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g6KGo5Y2V5LqL5Lu2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBvbk5ld01vZHVsZU5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25OZXdNb2R1bGVPcmRlcihlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uRWRpdE9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdE9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uVmlld05hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTGF5ZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNob3dTdWNjZXNzKG1zZzogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNob3dFcnJvcihtc2c6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjjgIzliLfmlrDjgI3mjInpkq7nlKjvvJvlkKbliJnnlKjkuLvov5vnqIvph4znmoTnvJPlrZjvvIkgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRTaGFyZWRNb2R1bGVzKGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNoYXJlZFN0YXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktc2hhcmVkLW1vZHVsZXMnLCBmb3JjZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvlm57mnaXnmoTnirbmgIHnu5/kuIDlnKjov5nph4zokL3liLAgZGF0YSDkuIrvvIjmn6Xor6LkuI7oo4Uv5Y245YWx55So5ZCM5LiA5Lu957uT5p6E77yJICovXHJcbiAgICAgICAgICAgICAgICBhcHBseVNoYXJlZFN0YXRlKHJlczogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRNb2R1bGVzID0gcmVzPy5tb2R1bGVzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTb3VyY2UgPSByZXM/LmxvY2FsU291cmNlID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Li76L+b56iL5ZyoXCLlkI7lj7DliLfmlrDkuK1cIuaXtuS8muW4puWbnuS4gOS4qui/m+ihjOS4reeahOivtOaYjiDigJTigJQg6YKj5LiN5piv5aSx6LSlLOS4jeivpeaMieWksei0peaYvuekuuOAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0eXBlb2YgcmVzPy5yZWdpc3RyeUVycm9yID09PSAnc3RyaW5nJyAmJiByZXMucmVnaXN0cnlFcnJvci5pbmRleE9mKCfmraPlnKjojrflj5YnKSA+PSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlQZW5kaW5nID0gcGVuZGluZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDkuIDmrKHmgKfnmoToh6rliqjph43or5U65Yeg56eS5ZCO5ZCO5Y+w5bey57uP5Yi35aW95LqGLOi/meS4gOmhteiHquW3seabtOaWsCzkuI3nlKjnlKjmiLfljrvngrnliLfmlrBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXJlZFJldHJ5VGltZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXRyeVRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaGFyZWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUVycm9yID0gcmVzPy5yZWdpc3RyeUVycm9yID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6YCJ5Lit6aG55Y+v6IO95bey57uP5LiN5Zyo5YiX6KGo6YeM5LqG77yI5q+U5aaC5Yia6KKr5Y246L2977yJXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTaGFyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2hhcmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcmVkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdFNoYXJlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcmVkID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25JbnN0YWxsU2hhcmVkKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2hhcmVkKCdpbnN0YWxsJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVW5pbnN0YWxsU2hhcmVkKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y246L295YmN5o+Q6YaS5Lik57G75Lya6KKr5omT5pat55qE5Lic6KW/77ya6L+Y5ZyoIGltcG9ydCDlroPnmoTohJrmnKzjgIHku6Xlj4rkvp3otZblroPnmoTlhazlhbHmqKHlnZfjgIJcclxuICAgICAgICAgICAgICAgICAgICAvLyDlj6rmo4Dmn6XliY3ogIXnmoTor53vvIxcIuWPpuS4gOS4quWFrOWFseaooeWdl+S+nei1luWug1wi5Lya5a6M5YWo5ryP5o6J44CCXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVmZXJlbmNlZEJ5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KaoCAnICsgdGhpcy50KCd1aV9zaGFyZWRfcmVmc193YXJuJykgKyAnXFxuwrcgJyArIGluZm8ucmVmZXJlbmNlZEJ5LmpvaW4oJ1xcbsK3ICcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5kZXBlbmRlbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KaoCAnICsgdGhpcy50KCd1aV9zaGFyZWRfZGVwc193YXJuJykgKyAnXFxuwrcgJyArIGluZm8uZGVwZW5kZW50cy5qb2luKCdcXG7CtyAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX3VuaW5zdGFsbF9zaGFyZWQnLCB7IG5hbWU6IGluZm8ubmFtZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArICh3YXJuaW5ncy5sZW5ndGggPyAnXFxuXFxuJyArIHdhcm5pbmdzLmpvaW4oJ1xcblxcbicpIDogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbdGhpcy50KCd1aV9zaGFyZWRfdW5pbnN0YWxsJyksIHRoaXMudCgndWlfY2FuY2VsJyldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5TaGFyZWQoJ3VuaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5L6d6LWW6aG55pys6Lqr5Lmf5piv5YWs5YWx5qih5Z2X5pe277yM54K55LiA5LiL6Lez6L+H5Y6755yL5a6D55qE54q25oCBICovXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRGVwZW5kZW5jeShkZXBlbmRlbmN5OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeT8uaXNTaGFyZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaGFyZWQoZGVwZW5kZW5jeS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5Luj6LeRIG5wbSDlronoo4UgLyDljbjovb3jgIJcclxuICAgICAgICAgICAgICAgICAqIOWksei0peaXtioq5LiN5by55LiA5p2h6L2s6L+w55qEXCLlronoo4XlpLHotKVcIioq77yM6ICM5piv5oqKIG5wbSDnmoTljp/lp4vovpPlh7rmlbTkuKrmlL7ov5vlvLnnqpcg4oCU4oCUXHJcbiAgICAgICAgICAgICAgICAgKiDnlKjmiLfopoHor4rmlq3nmoTlsLHmmK/pgqPmrrXovpPlh7rjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgcnVuU2hhcmVkKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkQnVzeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjY2dmLWdhbWUtdG9vbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT09ICdpbnN0YWxsJyA/ICdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnIDogJ3VuaW5zdGFsbC1zaGFyZWQtbW9kdWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNoYXJlZFN0YXRlKHJlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSAnaW5zdGFsbCcgPyAndWlfbXNnX3NoYXJlZF9pbnN0YWxsZWQnIDogJ3VpX21zZ19zaGFyZWRfdW5pbnN0YWxsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogaW5mby5uYW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWksei0pe+8muaVsOaNrueVmeedgOS+m+W8ueeql+Wxleekuu+8jOW5tueri+WIu+aJk+W8gOWug1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZXN1bHQgPSByZXM/LnJlc3VsdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gdGhpcy5zaGFyZWRSZXN1bHQgIT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihyZXM/Lm1lc3NhZ2UgfHwgYG5wbSAke2FjdGlvbn0gZmFpbGVkYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZEJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDku47mtojmga/ooYzlho3ngrnlvIDkuIrkuIDmrKHnmoQgbnBtIOi+k+WHuiAqL1xyXG4gICAgICAgICAgICAgICAgb3BlblNoYXJlZFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDlj6rlhbPlvLnnqpfvvIwqKuS/neeVmeaVsOaNrioqIOKAlOKAlCDlkKbliJnlhbPmjonkuYvlkI7lsLHlho3kuZ/nnIvkuI3liLDpgqPmrrXovpPlh7rkuoYgKi9cclxuICAgICAgICAgICAgICAgIGNsb3NlU2hhcmVkUmVzdWx0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbW91bnRlZCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENvbmZpZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGVtcGxhdGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy90ZW1wbGF0ZS93b3JrYmVuY2gvcGFuZWwuaHRtbCcpLCAndXRmLTgnKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBhcHAuY29uZmlnLmNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQgPSAodGFnOiBzdHJpbmcpID0+IHRhZy5zdGFydHNXaXRoKCd1aS0nKTtcclxuICAgICAgICBhcHAubW91bnQoJGFwcCk7XHJcbiAgICAgICAgcGFuZWxEYXRhTWFwLnNldCh0aGlzLCBhcHApO1xyXG4gICAgfSxcclxuICAgIGJlZm9yZUNsb3NlKCkgeyB9LFxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gcGFuZWxEYXRhTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpZiAoYXBwKSB7XHJcbiAgICAgICAgICAgIGFwcC51bm1vdW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufSk7XHJcbiJdfQ==
|
package/i18n/en.js
CHANGED
|
@@ -120,6 +120,7 @@ module.exports = {
|
|
|
120
120
|
ui_shared_empty_catalog_hint: "There are no shared modules in the remote registry yet.",
|
|
121
121
|
ui_shared_registry_loading: "Fetching the list from the remote registry…",
|
|
122
122
|
ui_shared_registry_error: "Could not fetch the remote list: {reason} (the rest of the panel still works)",
|
|
123
|
+
ui_shared_registry_pending: "Fetching remote info… (updates by itself in a few seconds; or press Refresh)",
|
|
123
124
|
ui_shared_deps_after_install: "Not installed yet, so its dependencies cannot be read — install it to see them.",
|
|
124
125
|
ui_shared_update_available: "New version available: {latest} (currently {current})",
|
|
125
126
|
ui_shared_up_to_date: "Up to date",
|
package/i18n/zh.js
CHANGED
|
@@ -120,6 +120,7 @@ module.exports = {
|
|
|
120
120
|
ui_shared_empty_catalog_hint: "远程仓库里暂时没有可用的公共模块。",
|
|
121
121
|
ui_shared_registry_loading: "正在从远程仓库获取列表…",
|
|
122
122
|
ui_shared_registry_error: "远程仓库列表获取失败:{reason}(面板其余功能不受影响)",
|
|
123
|
+
ui_shared_registry_pending: "正在获取远程信息…(几秒后会自动更新;也可以点「刷新」)",
|
|
123
124
|
ui_shared_deps_after_install: "这个模块还没装,读不到它的依赖 —— 装好之后就能看到。",
|
|
124
125
|
ui_shared_update_available: "有新版本:{latest}(当前 {current})",
|
|
125
126
|
ui_shared_up_to_date: "已是最新版本",
|
package/package.json
CHANGED
|
@@ -158,9 +158,14 @@
|
|
|
158
158
|
|
|
159
159
|
<!-- 远程列表的状态:一次搜索 1~4 秒,失败时只提示、不影响其它功能 -->
|
|
160
160
|
<div v-if="sharedRegistryLoading" class="empty-hint inset-note">{{ t('ui_shared_registry_loading') }}</div>
|
|
161
|
+
<div v-else-if="sharedRegistryPending" class="empty-hint inset-note">{{ t('ui_shared_registry_pending') }}</div>
|
|
161
162
|
<div v-else-if="sharedRegistryError" class="state-banner error">
|
|
162
163
|
{{ t('ui_shared_registry_error', { reason: sharedRegistryError }) }}
|
|
163
164
|
</div>
|
|
165
|
+
<div v-else-if="sharedRegistryError" class="state-banner error">
|
|
166
|
+
<div v-if="sharedRegistryPending" class="empty-hint">{{ t('ui_shared_registry_pending') }}</div>
|
|
167
|
+
{{ t('ui_shared_registry_error', { reason: sharedRegistryError }) }}
|
|
168
|
+
</div>
|
|
164
169
|
|
|
165
170
|
<template v-if="sharedModules.length">
|
|
166
171
|
<div class="group-title" v-if="installedShared.length">
|