@plumile/router 0.1.13 → 0.1.14
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/lib/esm/routing/createRouter.d.ts.map +1 -1
- package/lib/esm/routing/createRouter.js +72 -25
- package/lib/esm/routing/devtools.d.ts +1 -0
- package/lib/esm/routing/devtools.d.ts.map +1 -1
- package/lib/esm/routing/devtools.js +22 -10
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/routing/createRouter.d.ts.map +1 -1
- package/lib/types/routing/devtools.d.ts +1 -0
- package/lib/types/routing/devtools.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -96,7 +96,7 @@ function mountDevtoolsPanel(params) {
|
|
|
96
96
|
return function alreadyMountedRecorder() {
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
|
-
const { context, shortcut } = params;
|
|
99
|
+
const { context, shortcut, verbose } = params;
|
|
100
100
|
const host = document.createElement('div');
|
|
101
101
|
host.setAttribute('data-plumile-router-devtools-panel', '');
|
|
102
102
|
const hostStyle = host.style;
|
|
@@ -306,7 +306,8 @@ function mountDevtoolsPanel(params) {
|
|
|
306
306
|
varsPre.textContent = `vars: ${JSON.stringify(entry.route?.params ?? {}, null, 2)}`;
|
|
307
307
|
rawQueryPre.textContent = `raw: ${JSON.stringify(entry.query, null, 2)}`;
|
|
308
308
|
typedQueryPre.textContent = `typed: ${JSON.stringify(entry.typedQuery, null, 2)}`;
|
|
309
|
-
|
|
309
|
+
const rawChanged = entry.rawSearch !== lastSearch;
|
|
310
|
+
if (rawChanged || verbose) {
|
|
310
311
|
const currentQuery = entry.query;
|
|
311
312
|
const diff = diffQueries(lastQuery, currentQuery);
|
|
312
313
|
const row = document.createElement('div');
|
|
@@ -360,10 +361,15 @@ function mountDevtoolsPanel(params) {
|
|
|
360
361
|
body.appendChild(createQueryDiffPill(`-${k}`, 'removed'));
|
|
361
362
|
}
|
|
362
363
|
}
|
|
363
|
-
if (
|
|
364
|
-
diff.
|
|
365
|
-
|
|
366
|
-
|
|
364
|
+
if (rawChanged) {
|
|
365
|
+
if (diff.added.length === 0 &&
|
|
366
|
+
diff.changed.length === 0 &&
|
|
367
|
+
diff.removed.length === 0) {
|
|
368
|
+
body.appendChild(createQueryDiffPill('no-change', 'unchanged'));
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else if (verbose) {
|
|
372
|
+
body.appendChild(createQueryDiffPill('same-search', 'unchanged'));
|
|
367
373
|
}
|
|
368
374
|
row.appendChild(head);
|
|
369
375
|
row.appendChild(body);
|
|
@@ -374,8 +380,10 @@ function mountDevtoolsPanel(params) {
|
|
|
374
380
|
timeline.removeChild(first);
|
|
375
381
|
}
|
|
376
382
|
}
|
|
377
|
-
|
|
378
|
-
|
|
383
|
+
if (rawChanged) {
|
|
384
|
+
lastQuery = currentQuery;
|
|
385
|
+
lastSearch = entry.rawSearch;
|
|
386
|
+
}
|
|
379
387
|
}
|
|
380
388
|
try {
|
|
381
389
|
const merged = context.currentMergedFilterSchema();
|
|
@@ -667,7 +675,11 @@ export function initRouterDevtools(params) {
|
|
|
667
675
|
}
|
|
668
676
|
let navRecorder = noopNavRecorder;
|
|
669
677
|
if (panel) {
|
|
670
|
-
navRecorder = mountDevtoolsPanel({
|
|
678
|
+
navRecorder = mountDevtoolsPanel({
|
|
679
|
+
context,
|
|
680
|
+
shortcut,
|
|
681
|
+
verbose: options.verbose,
|
|
682
|
+
});
|
|
671
683
|
}
|
|
672
684
|
function handleNavEvent(meta) {
|
|
673
685
|
navRecorder(meta);
|
|
@@ -675,4 +687,4 @@ export function initRouterDevtools(params) {
|
|
|
675
687
|
return handleNavEvent;
|
|
676
688
|
}
|
|
677
689
|
export default initRouterDevtools;
|
|
678
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBd0I1QyxTQUFTLFdBQVcsQ0FDbEIsSUFBeUMsRUFDekMsSUFBNkI7SUFFN0IsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0RSxJQUFJLEdBQUcsRUFBRSxDQUFD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RUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxjQUFjLENBQUMsSUFBd0I7UUFDOUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQsZUFBZSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIFJvdXRlciBEZXZ0b29scyBleHRyYWN0ZWQgbW9kdWxlIChkZXZlbG9wbWVudC1vbmx5KS5cbiAqIE9iamVjdGlmIHJlZmFjdG9yOiBsaXNpYmlsaXTDqSBhbcOpbGlvcsOpZSAobm9tcyBleHBsaWNpdGVzLCBoZWxwZXJzIGV4dGVybmFsaXPDqXMpLlxuICovXG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdDb250ZXh0VHlwZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IHBhcnNlRmlsdGVycyB9IGZyb20gJy4vZmlsdGVycy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFJvdXRlckRldnRvb2xzT3B0aW9ucyB7XG4gIGdsb2JhbDogYm9vbGVhbjtcbiAgcGFuZWw6IGJvb2xlYW47XG4gIHNob3J0Y3V0OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE5hdkV2ZW50TWV0YVB1YmxpYyB7XG4gIGtpbmQ6IHN0cmluZztcbiAgbW9kZTogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICBwYXRobmFtZTogc3RyaW5nO1xuICBzZWFyY2g6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbi8qKiBJbml0IGRldnRvb2xzIGFuZCByZXR1cm4gbmF2IGV2ZW50IGNhbGxiYWNrIChzZWUgZXhwb3J0ZWQgaW5pdCkuICovXG4vKipcbiAqIENvbXB1dGUgYSBkaWZmIGJldHdlZW4gdHdvIHF1ZXJ5IG9iamVjdHMgKGZsYXQga2V5LXZhbHVlIG1hcHMpLlxuICogQ2xvbmVzIGFyZSBub3QgcGVyZm9ybWVkOiBrZXlzIGFyZSBpbnNwZWN0ZWQgZGlyZWN0bHkgYW5kIGNhdGVnb3JpemVkLlxuICogQHBhcmFtIHByZXYgUHJldmlvdXMgcXVlcnkgb2JqZWN0IChjYW4gYmUgdW5kZWZpbmVkIG9uIGZpcnN0IHJlbmRlcikuXG4gKiBAcGFyYW0gbmV4dCBDdXJyZW50IHF1ZXJ5IG9iamVjdC5cbiAqIEByZXR1cm5zIEJ1Y2tldHMgb2Yga2V5czogYWRkZWQsIHJlbW92ZWQsIGNoYW5nZWQsIHVuY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gZGlmZlF1ZXJpZXMoXG4gIHByZXY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICBuZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbikge1xuICBjb25zdCBhZGRlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgdW5jaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBwcmV2T2JqID0gcHJldiA/PyB7fTtcbiAgY29uc3QgcHJldktleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKHByZXZPYmopKTtcbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG5leHQpKSB7XG4gICAgaWYgKCFwcmV2S2V5cy5oYXMoaykpIHtcbiAgICAgIGFkZGVkLnB1c2goayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHB2ID0gcHJldk9ialtrXTtcbiAgICAgIGNvbnN0IG52ID0gbmV4dFtrXTtcbiAgICAgIGxldCBzYW1lID0gZmFsc2U7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwdikgJiYgQXJyYXkuaXNBcnJheShudikgJiYgcHYubGVuZ3RoID09PSBudi5sZW5ndGgpIHtcbiAgICAgICAgc2FtZSA9IHB2LmV2ZXJ5KCh2LCBpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHYgPT09IG52W2ldO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNhbWUgPSBwdiA9PT0gbnY7XG4gICAgICB9XG4gICAgICBpZiAoc2FtZSkge1xuICAgICAgICB1bmNoYW5nZWQucHVzaChrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZWQucHVzaChrKTtcbiAgICAgIH1cbiAgICAgIHByZXZLZXlzLmRlbGV0ZShrKTtcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrIG9mIHByZXZLZXlzKSB7XG4gICAgcmVtb3ZlZC5wdXNoKGspO1xuICB9XG4gIHJldHVybiB7IGFkZGVkLCByZW1vdmVkLCBjaGFuZ2VkLCB1bmNoYW5nZWQgfTtcbn1cbi8qKlxuICogQXBwbHkgbWluaW1hbCBidXR0b24gc3R5bGluZyB1c2VkIGZvciBzbWFsbCBhY3Rpb24gYnV0dG9ucyBpbiB0aGUgZGV2dG9vbHMgcGFuZWwuXG4gKiBAcGFyYW0gYnRuIFRhcmdldCBidXR0b24gZWxlbWVudC5cbiAqIEBwYXJhbSBjb2xvciBUZXh0IGNvbG9yIHRvIGFwcGx5LlxuICovXG5mdW5jdGlvbiBzdHlsZU1pbmlCdXR0b24oYnRuOiBIVE1MQnV0dG9uRWxlbWVudCwgY29sb3I6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCB7IHN0eWxlIH0gPSBidG47XG4gIHN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmJztcbiAgc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gIHN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICBzdHlsZS5saW5lSGVpZ2h0ID0gJzEnO1xuICBzdHlsZS5wYWRkaW5nID0gJzJweCA2cHgnO1xuICBzdHlsZS5jb2xvciA9IGNvbG9yO1xufVxuLyoqXG4gKiBTdHlsZSB0aGUgY2xvc2UgKHgpIGJ1dHRvbiB0aGF0IGFwcGVhcnMgaW5zaWRlIHF1ZXJ5IC8gb3BlcmF0b3IgcGlsbHMuXG4gKiBAcGFyYW0gYnRuIFRhcmdldCBidXR0b24gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gc3R5bGVQaWxsQ2xvc2UoYnRuOiBIVE1MQnV0dG9uRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCB7IHN0eWxlIH0gPSBidG47XG4gIHN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgc3R5bGUuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gIHN0eWxlLmJvcmRlciA9ICdub25lJztcbiAgc3R5bGUuZm9udFNpemUgPSAnMTBweCc7XG4gIHN0eWxlLmxpbmVIZWlnaHQgPSAnMSc7XG4gIHN0eWxlLnBhZGRpbmcgPSAnMCAycHgnO1xuICBzdHlsZS5jb2xvciA9ICcjNDQ0Jztcbn1cbi8qKlxuICogQ3JlYXRlIGEgY29sb3JlZCBwaWxsIGVsZW1lbnQgcmVwcmVzZW50aW5nIG9uZSBrZXkgaW4gYSBxdWVyeSBkaWZmLlxuICogQ29sb3Igc2NoZW1lIGNvbW11bmljYXRlcyBzZW1hbnRpYyAoYWRkZWQgLyByZW1vdmVkIC8gY2hhbmdlZCAvIHVuY2hhbmdlZCkuXG4gKiBAcGFyYW0gbGFiZWwgRGlzcGxheSB0ZXh0IGZvciB0aGUgcGlsbC5cbiAqIEBwYXJhbSBraW5kIERpZmYgY2F0ZWdvcnkuXG4gKiBAcmV0dXJucyBTcGFuIGVsZW1lbnQgcmVhZHkgdG8gYXR0YWNoLlxuICovXG5mdW5jdGlvbiBjcmVhdGVRdWVyeURpZmZQaWxsKFxuICBsYWJlbDogc3RyaW5nLFxuICBraW5kOiAnYWRkZWQnIHwgJ3JlbW92ZWQnIHwgJ2NoYW5nZWQnIHwgJ3VuY2hhbmdlZCcsXG4pOiBIVE1MU3BhbkVsZW1lbnQge1xuICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICBzcGFuLnRleHRDb250ZW50ID0gbGFiZWw7XG4gIHNwYW4uc3R5bGUucGFkZGluZyA9ICcxcHggNHB4JztcbiAgc3Bhbi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnMTBweCc7XG4gIHNwYW4uc3R5bGUuZm9udFNpemUgPSAnMTBweCc7XG4gIHNwYW4uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCc7XG4gIGlmIChraW5kID09PSAnYWRkZWQnKSB7XG4gICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlNmZmZWQnO1xuICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzJjYmU0ZSc7XG4gICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjMjI4NjNhJztcbiAgfSBlbHNlIGlmIChraW5kID09PSAncmVtb3ZlZCcpIHtcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZWVmMCc7XG4gICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZDczYTQ5JztcbiAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyNjYjI0MzEnO1xuICB9IGVsc2UgaWYgKGtpbmQgPT09ICdjaGFuZ2VkJykge1xuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmNWIxJztcbiAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyNmZmQzM2QnO1xuICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzczNWMwZic7XG4gIH0gZWxzZSB7XG4gICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmMWY4ZmYnO1xuICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzc5YjhmZic7XG4gICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjMDM2NmQ2JztcbiAgfVxuICByZXR1cm4gc3Bhbjtcbn1cbi8qKlxuICogTW91bnQgdGhlIGZsb2F0aW5nIGRldnRvb2xzIHBhbmVsIChTaGFkb3cgRE9NIGhvc3QgKyBpbnRlcm5hbCBzdHJ1Y3R1cmUpLlxuICogR3VhcmRlZCBmb3Igbm9uLURPTSBlbnZpcm9ubWVudHMgYW5kIGlkZW1wb3RlbnQgKHdvbid0IG1vdW50IHR3aWNlKS5cbiAqIEBwYXJhbSBwYXJhbXMuY29udGV4dCBSb3V0aW5nIGNvbnRleHQgKHByb3ZpZGVzIHN0YXRlICsgc3Vic2NyaWJlKS5cbiAqIEBwYXJhbSBwYXJhbXMuc2hvcnRjdXQgS2V5Ym9hcmQgc2hvcnRjdXQgKGUuZy4gXCJDdHJsK1NoaWZ0K1JcIikgdG8gdG9nZ2xlIHZpc2liaWxpdHkuXG4gKiBAcmV0dXJucyBSZWNvcmRlciBmdW5jdGlvbiB0byBjYXB0dXJlIG5hdmlnYXRpb24gZXZlbnRzIGZvciB0aW1lbGluZSBvcmlnaW4gbWV0YWRhdGEuXG4gKi9cbmZ1bmN0aW9uIG1vdW50RGV2dG9vbHNQYW5lbChwYXJhbXM6IHtcbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT47XG4gIHNob3J0Y3V0OiBzdHJpbmc7XG59KTogKG1ldGE6IE5hdkV2ZW50TWV0YVB1YmxpYykgPT4gdm9pZCB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBub29wUmVjb3JkZXIoKSB7XG4gICAgICAgIC8qIG5vb3AgKG5vbi1ET00gZW52KSAqL1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGx1bWlsZS1yb3V0ZXItZGV2dG9vbHMtcGFuZWxdJykgIT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGFscmVhZHlNb3VudGVkUmVjb3JkZXIoKSB7XG4gICAgICAgIC8qIG5vb3AgKGFscmVhZHkgbW91bnRlZCkgKi9cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHsgY29udGV4dCwgc2hvcnRjdXQgfSA9IHBhcmFtcztcblxuICAgIC8vIEhvc3RcbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaG9zdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGx1bWlsZS1yb3V0ZXItZGV2dG9vbHMtcGFuZWwnLCAnJyk7XG4gICAgY29uc3QgaG9zdFN0eWxlID0gaG9zdC5zdHlsZTtcbiAgICBob3N0U3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIGhvc3RTdHlsZS56SW5kZXggPSAnMjE0NzQ4MzY0Nic7XG4gICAgaG9zdFN0eWxlLmJvdHRvbSA9ICc4cHgnO1xuICAgIGhvc3RTdHlsZS5yaWdodCA9ICc4cHgnO1xuICAgIGhvc3RTdHlsZS5mb250RmFtaWx5ID0gW1xuICAgICAgJ3VpLW1vbm9zcGFjZScsXG4gICAgICAnU0ZNb25vLVJlZ3VsYXInLFxuICAgICAgJ01lbmxvJyxcbiAgICAgICdNb25hY28nLFxuICAgICAgJ0NvbnNvbGFzJyxcbiAgICAgICdcIkxpYmVyYXRpb24gTW9ub1wiJyxcbiAgICAgICdtb25vc3BhY2UnLFxuICAgIF0uam9pbignLCAnKTtcbiAgICBob3N0U3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgaG9zdFN0eWxlLmxpbmVIZWlnaHQgPSAnMS4zJztcbiAgICBob3N0U3R5bGUuY29sb3IgPSAnIzExMSc7XG4gICAgaG9zdFN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgIGhvc3RTdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIGNvbnN0IHNoYWRvdyA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuXG4gICAgLy8gUGFuZWwgY29udGFpbmVyXG4gICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBwYW5lbFN0eWxlID0gcGFuZWwuc3R5bGU7XG4gICAgcGFuZWxTdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgIHBhbmVsU3R5bGUubWluV2lkdGggPSAnMjYwcHgnO1xuICAgIHBhbmVsU3R5bGUubWF4V2lkdGggPSAnNDIwcHgnO1xuICAgIHBhbmVsU3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgIHBhbmVsU3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgcGFuZWxTdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMC45NSknO1xuICAgIHBhbmVsU3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICBwYW5lbFN0eWxlLmJvcmRlclJhZGl1cyA9ICc2cHgnO1xuICAgIHBhbmVsU3R5bGUuYm94U2hhZG93ID0gJzAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMTUpJztcbiAgICBwYW5lbFN0eWxlLnBhZGRpbmcgPSAnNnB4IDhweCA4cHgnO1xuICAgIHBhbmVsU3R5bGUuYmFja2Ryb3BGaWx0ZXIgPSAnYmx1cig0cHgpJztcbiAgICBwYW5lbFN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgcGFuZWxTdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgcGFuZWxTdHlsZS5yb3dHYXAgPSAnNHB4JztcblxuICAgIC8vIEhlYWRlclxuICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGhlYWRlclN0eWxlID0gaGVhZGVyLnN0eWxlO1xuICAgIGhlYWRlclN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgaGVhZGVyU3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgIGhlYWRlclN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgIGhlYWRlclN0eWxlLmdhcCA9ICc4cHgnO1xuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHRpdGxlLnRleHRDb250ZW50ID0gJ1BsdW1pbGUgUm91dGVyJztcbiAgICB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgY29uc3QgaGVhZGVyQnRucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGhlYWRlckJ0bnNTdHlsZSA9IGhlYWRlckJ0bnMuc3R5bGU7XG4gICAgaGVhZGVyQnRuc1N0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgaGVhZGVyQnRuc1N0eWxlLmdhcCA9ICc0cHgnO1xuICAgIGhlYWRlckJ0bnNTdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgY29uc3QgdGFic1dyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCB0YWJzV3JhcFN0eWxlID0gdGFic1dyYXAuc3R5bGU7XG4gICAgdGFic1dyYXBTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIHRhYnNXcmFwU3R5bGUuZ2FwID0gJzRweCc7XG4gICAgdGFic1dyYXBTdHlsZS5tYXJnaW5SaWdodCA9ICc2cHgnO1xuICAgIGNvbnN0IHJvdXRlVGFiQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgcm91dGVUYWJCdXR0b24udGV4dENvbnRlbnQgPSAnUm91dGUnO1xuICAgIGNvbnN0IGZpbHRlcnNUYWJCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICBmaWx0ZXJzVGFiQnV0dG9uLnRleHRDb250ZW50ID0gJ0ZpbHRlcnMnO1xuICAgIGNvbnN0IHRhYkJ1dHRvbnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbcm91dGVUYWJCdXR0b24sIGZpbHRlcnNUYWJCdXR0b25dO1xuICAgIGZvciAoY29uc3QgdGIgb2YgdGFiQnV0dG9ucykge1xuICAgICAgY29uc3QgcyA9IHRiLnN0eWxlO1xuICAgICAgcy5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICBzLmJhY2tncm91bmQgPSAnI2YxZjFmMSc7XG4gICAgICBzLmJvcmRlciA9ICcxcHggc29saWQgI2NjYyc7XG4gICAgICBzLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgcy5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgIHMucGFkZGluZyA9ICcycHggNnB4JztcbiAgICB9XG4gICAgcm91dGVUYWJCdXR0b24uc3R5bGUuZm9udFdlaWdodCA9ICc2MDAnO1xuICAgIHJvdXRlVGFiQnV0dG9uLmRhdGFzZXQuYWN0aXZlID0gJ3RydWUnO1xuICAgIHRhYnNXcmFwLmFwcGVuZENoaWxkKHJvdXRlVGFiQnV0dG9uKTtcbiAgICB0YWJzV3JhcC5hcHBlbmRDaGlsZChmaWx0ZXJzVGFiQnV0dG9uKTtcbiAgICBjb25zdCBjb2xsYXBzZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgY29uc3QgY2xvc2VCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICBjbG9zZUJ0bi50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgY29uc3QgaGVhZGVyQWN0aW9uQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtjb2xsYXBzZUJ0biwgY2xvc2VCdG5dO1xuICAgIGZvciAoY29uc3QgYiBvZiBoZWFkZXJBY3Rpb25CdXR0b25zKSB7XG4gICAgICBjb25zdCBzdCA9IGIuc3R5bGU7XG4gICAgICBzdC5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICBzdC5iYWNrZ3JvdW5kID0gJyNlZWUnO1xuICAgICAgc3QuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgIHN0LmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgc3QuZm9udFNpemUgPSAnMTFweCc7XG4gICAgICBzdC5saW5lSGVpZ2h0ID0gJzEnO1xuICAgICAgc3QucGFkZGluZyA9ICcycHggNXB4JztcbiAgICB9XG4gICAgaGVhZGVyLmFwcGVuZENoaWxkKHRpdGxlKTtcbiAgICBoZWFkZXJCdG5zLmFwcGVuZENoaWxkKHRhYnNXcmFwKTtcbiAgICBoZWFkZXJCdG5zLmFwcGVuZENoaWxkKGNvbGxhcHNlQnRuKTtcbiAgICBoZWFkZXJCdG5zLmFwcGVuZENoaWxkKGNsb3NlQnRuKTtcbiAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaGVhZGVyQnRucyk7XG5cbiAgICAvLyBSb3V0ZSB0YWIgZWxlbWVudHNcbiAgICBjb25zdCBwYXRoRGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHBhdGhEaXNwbGF5LnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICBjb25zdCB2YXJzUHJlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgY29uc3QgcmF3UXVlcnlQcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICBjb25zdCB0eXBlZFF1ZXJ5UHJlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgY29uc3QgcHJlQmxvY2tzOiBIVE1MUHJlRWxlbWVudFtdID0gW3ZhcnNQcmUsIHJhd1F1ZXJ5UHJlLCB0eXBlZFF1ZXJ5UHJlXTtcbiAgICBmb3IgKGNvbnN0IHBiIG9mIHByZUJsb2Nrcykge1xuICAgICAgY29uc3Qgc3RwID0gcGIuc3R5bGU7XG4gICAgICBzdHAubWFyZ2luID0gJzAnO1xuICAgICAgc3RwLnBhZGRpbmcgPSAnNHB4JztcbiAgICAgIHN0cC5iYWNrZ3JvdW5kID0gJyNmNmY4ZmEnO1xuICAgICAgc3RwLmJvcmRlciA9ICcxcHggc29saWQgI2UyZTJlMic7XG4gICAgICBzdHAuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICBzdHAub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgc3RwLm1heEhlaWdodCA9ICcxNjBweCc7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVsaW5lV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHRpbWVsaW5lV3JhcFN0eWxlID0gdGltZWxpbmVXcmFwLnN0eWxlO1xuICAgIHRpbWVsaW5lV3JhcFN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgdGltZWxpbmVXcmFwU3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgIHRpbWVsaW5lV3JhcFN0eWxlLmdhcCA9ICcycHgnO1xuICAgIHRpbWVsaW5lV3JhcFN0eWxlLm1hcmdpblRvcCA9ICc0cHgnO1xuICAgIGNvbnN0IHRpbWVsaW5lSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGltZWxpbmVIZWFkZXIudGV4dENvbnRlbnQgPSAnVGltZWxpbmUgKHF1ZXJ5IGNoYW5nZXMpJztcbiAgICB0aW1lbGluZUhlYWRlci5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgdGltZWxpbmVIZWFkZXIuc3R5bGUuZm9udFNpemUgPSAnMTFweCc7XG4gICAgY29uc3QgdGltZWxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCB0aW1lbGluZVN0eWxlID0gdGltZWxpbmUuc3R5bGU7XG4gICAgdGltZWxpbmVTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIHRpbWVsaW5lU3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4tcmV2ZXJzZSc7XG4gICAgdGltZWxpbmVTdHlsZS5tYXhIZWlnaHQgPSAnMTQwcHgnO1xuICAgIHRpbWVsaW5lU3R5bGUub3ZlcmZsb3dZID0gJ2F1dG8nO1xuICAgIHRpbWVsaW5lU3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICB0aW1lbGluZVN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgIHRpbWVsaW5lU3R5bGUuYmFja2dyb3VuZCA9ICcjZmFmYmZjJztcbiAgICB0aW1lbGluZVN0eWxlLmZvbnRGYW1pbHkgPSAnaW5oZXJpdCc7XG4gICAgdGltZWxpbmVTdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmVIZWFkZXIpO1xuICAgIHRpbWVsaW5lV3JhcC5hcHBlbmRDaGlsZCh0aW1lbGluZSk7XG4gICAgY29uc3Qgcm91dGVUYWJDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3Qgcm91dGVUYWJDb250ZW50U3R5bGUgPSByb3V0ZVRhYkNvbnRlbnQuc3R5bGU7XG4gICAgcm91dGVUYWJDb250ZW50U3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICByb3V0ZVRhYkNvbnRlbnRTdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgcm91dGVUYWJDb250ZW50U3R5bGUuZ2FwID0gJzRweCc7XG4gICAgcm91dGVUYWJDb250ZW50LmFwcGVuZENoaWxkKHBhdGhEaXNwbGF5KTtcbiAgICByb3V0ZVRhYkNvbnRlbnQuYXBwZW5kQ2hpbGQodmFyc1ByZSk7XG4gICAgcm91dGVUYWJDb250ZW50LmFwcGVuZENoaWxkKHJhd1F1ZXJ5UHJlKTtcbiAgICByb3V0ZVRhYkNvbnRlbnQuYXBwZW5kQ2hpbGQodHlwZWRRdWVyeVByZSk7XG4gICAgcm91dGVUYWJDb250ZW50LmFwcGVuZENoaWxkKHRpbWVsaW5lV3JhcCk7XG5cbiAgICAvLyBGaWx0ZXJzIHRhYiBza2VsZXRvblxuICAgIGNvbnN0IGZpbHRlcnNUYWJDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgZmlsdGVyc1RhYkNvbnRlbnRTdHlsZSA9IGZpbHRlcnNUYWJDb250ZW50LnN0eWxlO1xuICAgIGZpbHRlcnNUYWJDb250ZW50U3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBmaWx0ZXJzVGFiQ29udGVudFN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICBmaWx0ZXJzVGFiQ29udGVudFN0eWxlLmdhcCA9ICc0cHgnO1xuICAgIGNvbnN0IGZpbHRlckFjdGlvbnNXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgZmlsdGVyQWN0aW9uc1dyYXBTdHlsZSA9IGZpbHRlckFjdGlvbnNXcmFwLnN0eWxlO1xuICAgIGZpbHRlckFjdGlvbnNXcmFwU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBmaWx0ZXJBY3Rpb25zV3JhcFN0eWxlLmZsZXhXcmFwID0gJ3dyYXAnO1xuICAgIGZpbHRlckFjdGlvbnNXcmFwU3R5bGUuZ2FwID0gJzRweCc7XG4gICAgY29uc3QgZmlsdGVyc0JvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBmaWx0ZXJzQm9keVN0eWxlID0gZmlsdGVyc0JvZHkuc3R5bGU7XG4gICAgZmlsdGVyc0JvZHlTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGZpbHRlcnNCb2R5U3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgIGZpbHRlcnNCb2R5U3R5bGUuZ2FwID0gJzRweCc7XG4gICAgZmlsdGVyc1RhYkNvbnRlbnQuYXBwZW5kQ2hpbGQoZmlsdGVyQWN0aW9uc1dyYXApO1xuICAgIGZpbHRlcnNUYWJDb250ZW50LmFwcGVuZENoaWxkKGZpbHRlcnNCb2R5KTtcblxuICAgIGNvbnN0IHNob3J0Y3V0SGludCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHNob3J0Y3V0SGludC50ZXh0Q29udGVudCA9IGBTaG9ydGN1dDogJHtzaG9ydGN1dH1gO1xuICAgIHNob3J0Y3V0SGludC5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICBzaG9ydGN1dEhpbnQuc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuXG4gICAgcGFuZWwuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICBwYW5lbC5hcHBlbmRDaGlsZChyb3V0ZVRhYkNvbnRlbnQpO1xuICAgIHBhbmVsLmFwcGVuZENoaWxkKGZpbHRlcnNUYWJDb250ZW50KTtcbiAgICBwYW5lbC5hcHBlbmRDaGlsZChzaG9ydGN1dEhpbnQpO1xuICAgIHNoYWRvdy5hcHBlbmRDaGlsZChwYW5lbCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcblxuICAgIC8vIENvbGxhcHNlIC8gY2xvc2UgbG9naWNcbiAgICBsZXQgY29sbGFwc2VkID0gZmFsc2U7XG4gICAgLyoqIFRvZ2dsZSBjb2xsYXBzZWQvZXhwYW5kZWQgcGFuZWwgc3RhdGUuICovXG4gICAgZnVuY3Rpb24gb25Db2xsYXBzZVRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9ICcyNHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgY29sbGFwc2VCdG4udGV4dENvbnRlbnQgPSAnKyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgfVxuICAgIH1cbiAgICBjb2xsYXBzZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uQ29sbGFwc2VUb2dnbGUpO1xuICAgIGxldCB1bnN1YnNjcmliZTogdW5kZWZpbmVkIHwgKCgpID0+IHZvaWQpO1xuICAgIC8qKiBDbG9zZSBhbmQgdW5tb3VudCB0aGUgcGFuZWwsIHVuc3Vic2NyaWJpbmcgbGlzdGVuZXIuICovXG4gICAgZnVuY3Rpb24gb25DbG9zZSgpOiB2b2lkIHtcbiAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICBpZiAodHlwZW9mIHVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbG9zZSk7XG5cbiAgICAvLyBOYXYgZXZlbnQgc3RvcmVcbiAgICBjb25zdCBuYXZFdmVudHM6IE5hdkV2ZW50TWV0YVB1YmxpY1tdID0gW107XG4gICAgLyoqXG4gICAgICogUmVjb3JkIGEgbmF2aWdhdGlvbiBldmVudCBmb3IgbGF0ZXIgYXR0cmlidXRpb24gd2hlbiByZW5kZXJpbmcgdGltZWxpbmUgcm93cy5cbiAgICAgKiBTdG9yZXMgb25seSBhIGJvdW5kZWQgcmluZyAoRklGTyB0cmltbWluZyBiZXlvbmQgNjAgZW50cmllcykuXG4gICAgICogQHBhcmFtIG1ldGEgTmF2aWdhdGlvbiBtZXRhIGV2ZW50IG9iamVjdC5cbiAgICAgKi9cbiAgICAvKiogUmVjb3JkIGEgbmF2IGV2ZW50IChib3VuZGVkIGhpc3RvcnkgbGVuZ3RoKS4gKi9cbiAgICBmdW5jdGlvbiByZWNvcmROYXZFdmVudChtZXRhOiBOYXZFdmVudE1ldGFQdWJsaWMpOiB2b2lkIHtcbiAgICAgIG5hdkV2ZW50cy5wdXNoKG1ldGEpO1xuICAgICAgaWYgKG5hdkV2ZW50cy5sZW5ndGggPiA2MCkgbmF2RXZlbnRzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIHN0YXRlIGNhY2hlXG4gICAgbGV0IGxhc3RRdWVyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGxhc3RTZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFJlLXJlbmRlciB0aGUgcGFuZWwgVUkgZnJvbSBjdXJyZW50IHJvdXRpbmcgY29udGV4dCAmIGNhY2hlZCBuYXZpZ2F0aW9uIGV2ZW50cy5cbiAgICAgKiBDb250YWlucyBkZWZlbnNpdmUgdHJ5L2NhdGNoIGJsb2NrcyB0byBhdm9pZCBicmVha2luZyB0aGUgYXBwIGlmIGRldnRvb2xzIGZhaWxzLlxuICAgICAqL1xuICAgIC8qKiBSZW5kZXIgcGFuZWwgY29udGVudHMgZnJvbSBjb250ZXh0IHN0YXRlLiAqL1xuICAgIGZ1bmN0aW9uIHJlbmRlcigpOiB2b2lkIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gY29udGV4dC5nZXQoKTtcbiAgICAgICAgcGF0aERpc3BsYXkudGV4dENvbnRlbnQgPSBgJHtlbnRyeS5sb2NhdGlvbi5wYXRobmFtZX0ke2VudHJ5LmxvY2F0aW9uLnNlYXJjaH1gO1xuICAgICAgICB2YXJzUHJlLnRleHRDb250ZW50ID0gYHZhcnM6ICR7SlNPTi5zdHJpbmdpZnkoZW50cnkucm91dGU/LnBhcmFtcyA/PyB7fSwgbnVsbCwgMil9YDtcbiAgICAgICAgcmF3UXVlcnlQcmUudGV4dENvbnRlbnQgPSBgcmF3OiAgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5xdWVyeSwgbnVsbCwgMil9YDtcbiAgICAgICAgdHlwZWRRdWVyeVByZS50ZXh0Q29udGVudCA9IGB0eXBlZDogJHtKU09OLnN0cmluZ2lmeShlbnRyeS50eXBlZFF1ZXJ5LCBudWxsLCAyKX1gO1xuICAgICAgICBpZiAoZW50cnkucmF3U2VhcmNoICE9PSBsYXN0U2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFF1ZXJ5ID0gZW50cnkucXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgY29uc3QgZGlmZiA9IGRpZmZRdWVyaWVzKGxhc3RRdWVyeSwgY3VycmVudFF1ZXJ5KTtcbiAgICAgICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBjb25zdCByb3dTdHlsZSA9IHJvdy5zdHlsZTtcbiAgICAgICAgICByb3dTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgIHJvd1N0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgICByb3dTdHlsZS5ib3JkZXJCb3R0b20gPSAnMXB4IHNvbGlkICNlOWU5ZTknO1xuICAgICAgICAgIHJvd1N0eWxlLnBhZGRpbmcgPSAnM3B4IDRweCc7XG4gICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGNvbnN0IGhlYWRTdHlsZSA9IGhlYWQuc3R5bGU7XG4gICAgICAgICAgaGVhZFN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgaGVhZFN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgICAgICAgIGNvbnN0IHRpbWVTdHIgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICAgICAgICAgIGxldCBzZWFyY2hEaXNwbGF5ID0gJyhlbXB0eSknO1xuICAgICAgICAgIGlmIChlbnRyeS5sb2NhdGlvbi5zZWFyY2ggIT09ICcnKSB7XG4gICAgICAgICAgICBzZWFyY2hEaXNwbGF5ID0gZW50cnkubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgb3JpZ2luID0gJ3N5c3RlbSc7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IG5hdkV2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgICAgY29uc3QgZXYgPSBuYXZFdmVudHNbaV07XG4gICAgICAgICAgICBpZiAoZXYgIT0gbnVsbCAmJiBldi5zZWFyY2ggPT09IGVudHJ5LnJhd1NlYXJjaCkge1xuICAgICAgICAgICAgICBvcmlnaW4gPSBgJHtldi5raW5kfToke2V2Lm1vZGV9YDtcbiAgICAgICAgICAgICAgaWYgKGV2LmtpbmQgPT09ICdiYXRjaC1mbHVzaCcpIHtcbiAgICAgICAgICAgICAgICBvcmlnaW4gPSBgJHtvcmlnaW59KCR7ZXYuY291bnR9KWA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGhlYWQuaW5uZXJIVE1MID0gW1xuICAgICAgICAgICAgYDxzdHJvbmc+JHt0aW1lU3RyfTwvc3Ryb25nPmAsXG4gICAgICAgICAgICBgPGNvZGUgc3R5bGU9XCJiYWNrZ3JvdW5kOiNlZWU7cGFkZGluZzoxcHggM3B4O2JvcmRlci1yYWRpdXM6M3B4O1wiPiR7c2VhcmNoRGlzcGxheX08L2NvZGU+YCxcbiAgICAgICAgICAgIGA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMHB4O29wYWNpdHk6MC43O1wiPiR7b3JpZ2lufTwvc3Bhbj5gLFxuICAgICAgICAgIF0uam9pbignICcpO1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBjb25zdCBib2R5U3R5bGUgPSBib2R5LnN0eWxlO1xuICAgICAgICAgIGJvZHlTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgIGJvZHlTdHlsZS5mbGV4V3JhcCA9ICd3cmFwJztcbiAgICAgICAgICBib2R5U3R5bGUuZ2FwID0gJzRweCc7XG4gICAgICAgICAgaWYgKGRpZmYuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGRpZmYuYWRkZWQpIHtcbiAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChjcmVhdGVRdWVyeURpZmZQaWxsKGArJHtrfWAsICdhZGRlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRpZmYuY2hhbmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgZGlmZi5jaGFuZ2VkKSB7XG4gICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlUXVlcnlEaWZmUGlsbChgfiR7a31gLCAnY2hhbmdlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRpZmYucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgZGlmZi5yZW1vdmVkKSB7XG4gICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlUXVlcnlEaWZmUGlsbChgLSR7a31gLCAncmVtb3ZlZCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGlmZi5hZGRlZC5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIGRpZmYuY2hhbmdlZC5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIGRpZmYucmVtb3ZlZC5sZW5ndGggPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoY3JlYXRlUXVlcnlEaWZmUGlsbCgnbm8tY2hhbmdlJywgJ3VuY2hhbmdlZCcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWQpO1xuICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChib2R5KTtcbiAgICAgICAgICB0aW1lbGluZS5hcHBlbmRDaGlsZChyb3cpO1xuICAgICAgICAgIGlmICh0aW1lbGluZS5jaGlsZEVsZW1lbnRDb3VudCA+IDUwKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgaWYgKGZpcnN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGltZWxpbmUucmVtb3ZlQ2hpbGQoZmlyc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0UXVlcnkgPSBjdXJyZW50UXVlcnk7XG4gICAgICAgICAgbGFzdFNlYXJjaCA9IGVudHJ5LnJhd1NlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaWx0ZXJzIHRhYlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IGNvbnRleHQuY3VycmVudE1lcmdlZEZpbHRlclNjaGVtYSgpO1xuICAgICAgICAgIHdoaWxlIChmaWx0ZXJBY3Rpb25zV3JhcC5maXJzdENoaWxkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZpbHRlckFjdGlvbnNXcmFwLnJlbW92ZUNoaWxkKGZpbHRlckFjdGlvbnNXcmFwLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoZmlsdGVyc0JvZHkuZmlyc3RDaGlsZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJzQm9keS5yZW1vdmVDaGlsZChmaWx0ZXJzQm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1lcmdlZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBlbXB0eU1zZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZW1wdHlNc2cudGV4dENvbnRlbnQgPSAnTm8gZmlsdGVyIHNjaGVtYSBmb3IgY3VycmVudCByb3V0ZSc7XG4gICAgICAgICAgICBlbXB0eU1zZy5zdHlsZS5mb250U3R5bGUgPSAnaXRhbGljJztcbiAgICAgICAgICAgIGZpbHRlcnNCb2R5LmFwcGVuZENoaWxkKGVtcHR5TXNnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hT2JqID0gbWVyZ2VkLnNjaGVtYSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIG9wZXJhdG9ycz86IHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgIGtpbmQ/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPjtcbiAgICAgICAgICAgIGxldCBwYXJzZWRGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHBhcnNlZEZpbHRlcnMgPSBwYXJzZUZpbHRlcnMoXG4gICAgICAgICAgICAgICAgbWVyZ2VkIGFzIGFueSxcbiAgICAgICAgICAgICAgICBlbnRyeS5xdWVyeSBhcyBhbnksXG4gICAgICAgICAgICAgICkgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8qIGlnbm9yZSBwYXJzZSAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmllbGROYW1lcyA9IE9iamVjdC5rZXlzKHNjaGVtYU9iaikuc29ydCgpO1xuICAgICAgICAgICAgbGV0IGFueUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkTmFtZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBwYXJzZWRGaWx0ZXJzW2ZdO1xuICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFueUFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbnlBY3RpdmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgY2xlYXJBbGxCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgICAgY2xlYXJBbGxCdG4udGV4dENvbnRlbnQgPSAnQ2xlYXIgQWxsIEZpbHRlcnMnO1xuICAgICAgICAgICAgICBzdHlsZU1pbmlCdXR0b24oY2xlYXJBbGxCdG4sICcjZDczYTQ5Jyk7XG4gICAgICAgICAgICAgIC8qKiBDbGVhciBhbGwgZmlsdGVycyBhY3Jvc3MgZXZlcnkgZmllbGQuICovXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIG9uQ2xlYXJBbGxGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBibGFuazogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge307XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZuYW1lIG9mIGZpZWxkTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhbmtbZm5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb250ZXh0Lm5hdmlnYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogYmxhbmssXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclNjaGVtYTogbWVyZ2VkLFxuICAgICAgICAgICAgICAgICAgICBiYXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsZWFyQWxsQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25DbGVhckFsbEZpbHRlcnMpO1xuICAgICAgICAgICAgICBmaWx0ZXJBY3Rpb25zV3JhcC5hcHBlbmRDaGlsZChjbGVhckFsbEJ0bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkTmFtZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGVmTGlrZSA9IHNjaGVtYU9ialtmaWVsZF07XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkQm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGNvbnN0IGZiU3R5bGUgPSBmaWVsZEJveC5zdHlsZTtcbiAgICAgICAgICAgICAgZmJTdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNlMmUyZTInO1xuICAgICAgICAgICAgICBmYlN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICAgICAgICBmYlN0eWxlLnBhZGRpbmcgPSAnNHB4IDZweCc7XG4gICAgICAgICAgICAgIGZiU3R5bGUuYmFja2dyb3VuZCA9ICcjZjlmYWZiJztcbiAgICAgICAgICAgICAgZmJTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBmYlN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgICAgICAgZmJTdHlsZS5nYXAgPSAnM3B4JztcbiAgICAgICAgICAgICAgY29uc3QgZmllbGRIZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGNvbnN0IGhlYWRTdHlsZTIgPSBmaWVsZEhlYWQuc3R5bGU7XG4gICAgICAgICAgICAgIGhlYWRTdHlsZTIuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgaGVhZFN0eWxlMi5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgICAgICAgaGVhZFN0eWxlMi5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHJvbmcnKTtcbiAgICAgICAgICAgICAgbGV0IGxhYmVsVGV4dCA9IGZpZWxkO1xuICAgICAgICAgICAgICBpZiAoZGVmTGlrZT8ubGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxhYmVsVGV4dCA9IFN0cmluZyhkZWZMaWtlLmxhYmVsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbEVsLnRleHRDb250ZW50ID0gbGFiZWxUZXh0O1xuICAgICAgICAgICAgICBsYWJlbEVsLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICAgICAgICBjb25zdCBoZWFkQWN0aW9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBoZWFkQWN0aW9ucy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBoZWFkQWN0aW9ucy5zdHlsZS5nYXAgPSAnNHB4JztcbiAgICAgICAgICAgICAgY29uc3QgY2xlYXJGaWVsZEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgICBjbGVhckZpZWxkQnRuLnRleHRDb250ZW50ID0gJ2NsZWFyJztcbiAgICAgICAgICAgICAgc3R5bGVNaW5pQnV0dG9uKGNsZWFyRmllbGRCdG4sICcjNmE3MzdkJyk7XG4gICAgICAgICAgICAgIC8qKiBDbGVhciBvbmx5IHRoaXMgZmllbGQncyBmaWx0ZXJzLiAqL1xuICAgICAgICAgICAgICBmdW5jdGlvbiBvbkNsZWFyRmllbGQoKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnBhcnNlZEZpbHRlcnMgfTtcbiAgICAgICAgICAgICAgICAgIG5leHRbZmllbGRdID0ge307XG4gICAgICAgICAgICAgICAgICBjb250ZXh0Lm5hdmlnYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogbmV4dCxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2NoZW1hOiBtZXJnZWQsXG4gICAgICAgICAgICAgICAgICAgIGJhdGNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAvKiBpZ25vcmUgKi9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2xlYXJGaWVsZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uQ2xlYXJGaWVsZCk7XG4gICAgICAgICAgICAgIGhlYWRBY3Rpb25zLmFwcGVuZENoaWxkKGNsZWFyRmllbGRCdG4pO1xuICAgICAgICAgICAgICBmaWVsZEhlYWQuYXBwZW5kQ2hpbGQobGFiZWxFbCk7XG4gICAgICAgICAgICAgIGZpZWxkSGVhZC5hcHBlbmRDaGlsZChoZWFkQWN0aW9ucyk7XG4gICAgICAgICAgICAgIGZpZWxkQm94LmFwcGVuZENoaWxkKGZpZWxkSGVhZCk7XG4gICAgICAgICAgICAgIGNvbnN0IG9wc1dyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgY29uc3Qgb3BzV3JhcFN0eWxlID0gb3BzV3JhcC5zdHlsZTtcbiAgICAgICAgICAgICAgb3BzV3JhcFN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIG9wc1dyYXBTdHlsZS5mbGV4V3JhcCA9ICd3cmFwJztcbiAgICAgICAgICAgICAgb3BzV3JhcFN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICAgICAgICBjb25zdCBwcmVzZW50ID0gcGFyc2VkRmlsdGVyc1tmaWVsZF0gPz8ge307XG4gICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRzID0gZGVmTGlrZT8uZGVmYXVsdHMgPz8ge307XG4gICAgICAgICAgICAgIGxldCBhbGxvd2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZMaWtlPy5vcGVyYXRvcnMpKSB7XG4gICAgICAgICAgICAgICAgYWxsb3dlZCA9IGRlZkxpa2Uub3BlcmF0b3JzLnNsaWNlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmTGlrZT8ua2luZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkID0gW1xuICAgICAgICAgICAgICAgICAgJ2VxJyxcbiAgICAgICAgICAgICAgICAgICduZXEnLFxuICAgICAgICAgICAgICAgICAgJ2d0JyxcbiAgICAgICAgICAgICAgICAgICdndGUnLFxuICAgICAgICAgICAgICAgICAgJ2x0JyxcbiAgICAgICAgICAgICAgICAgICdsdGUnLFxuICAgICAgICAgICAgICAgICAgJ2luJyxcbiAgICAgICAgICAgICAgICAgICduaW4nLFxuICAgICAgICAgICAgICAgICAgJ2JldHdlZW4nLFxuICAgICAgICAgICAgICAgICAgJ2V4aXN0cycsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkID0gW1xuICAgICAgICAgICAgICAgICAgJ2VxJyxcbiAgICAgICAgICAgICAgICAgICduZXEnLFxuICAgICAgICAgICAgICAgICAgJ2luJyxcbiAgICAgICAgICAgICAgICAgICduaW4nLFxuICAgICAgICAgICAgICAgICAgJ2JldHdlZW4nLFxuICAgICAgICAgICAgICAgICAgJ2V4aXN0cycsXG4gICAgICAgICAgICAgICAgICAnY29udGFpbnMnLFxuICAgICAgICAgICAgICAgICAgJ3N0YXJ0cycsXG4gICAgICAgICAgICAgICAgICAnZW5kcycsXG4gICAgICAgICAgICAgICAgICAncmVnZXgnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBvcCBvZiBhbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuU3R5bGUgPSBzcGFuLnN0eWxlO1xuICAgICAgICAgICAgICAgIHNwYW5TdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1mbGV4JztcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgICAgICAgICAgICAgIHNwYW5TdHlsZS5nYXAgPSAnMnB4JztcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUucGFkZGluZyA9ICcxcHggNXB4JztcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUuYm9yZGVyUmFkaXVzID0gJzEycHgnO1xuICAgICAgICAgICAgICAgIHNwYW5TdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNkMGQ3ZGUnO1xuICAgICAgICAgICAgICAgIHNwYW5TdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVWYWwgPSBwcmVzZW50W29wXTtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHNwYW5TdHlsZS5iYWNrZ3JvdW5kID0gJyNlNmZmZWQnO1xuICAgICAgICAgICAgICAgICAgc3BhblN0eWxlLmJvcmRlckNvbG9yID0gJyMzNGQwNTgnO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb3BUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgb3BUZXh0LnRleHRDb250ZW50ID0gb3A7XG4gICAgICAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKG9wVGV4dCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZUJ0bk9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgICBjbG9zZUJ0bk9wLnRleHRDb250ZW50ID0gJ8OXJztcbiAgICAgICAgICAgICAgICAgIHN0eWxlUGlsbENsb3NlKGNsb3NlQnRuT3ApO1xuICAgICAgICAgICAgICAgICAgLyoqIFJlbW92ZSB0aGlzIG9wZXJhdG9yIGZyb20gdGhlIGZpZWxkIGZpbHRlci4gKi9cbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uUmVtb3ZlT3BlcmF0b3IoKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucGFyc2VkRmlsdGVycyB9IGFzIFJlY29yZDxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgICAgICAgICAgICAgPjtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFtmaWVsZF0gPz8ge307XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29weUZpZWxkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhleGlzdGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrICE9PSBvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5RmllbGRba10gPSBleGlzdGluZ1trXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFtmaWVsZF0gPSBjb3B5RmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uYXZpZ2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBuZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2NoZW1hOiBtZXJnZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNsb3NlQnRuT3AuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvblJlbW92ZU9wZXJhdG9yKTtcbiAgICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoY2xvc2VCdG5PcCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGAke29wfSAoZGVmYXVsdClgO1xuICAgICAgICAgICAgICAgICAgICBzcGFuU3R5bGUuZm9udFN0eWxlID0gJ2l0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4udGl0bGUgPSAnRGVmYXVsdCB2YWx1ZSBvbWl0dGVkIGluIFVSTCc7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gb3A7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzcGFuU3R5bGUub3BhY2l0eSA9ICcwLjU1JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3BzV3JhcC5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmaWVsZEJveC5hcHBlbmRDaGlsZChvcHNXcmFwKTtcbiAgICAgICAgICAgICAgZmlsdGVyc0JvZHkuYXBwZW5kQ2hpbGQoZmllbGRCb3gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLyogaWdub3JlIGZpbHRlcnMgdGFiICovXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBpZ25vcmUgcmVuZGVyICovXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCk7XG4gICAgdW5zdWJzY3JpYmUgPSBjb250ZXh0LnN1YnNjcmliZShyZW5kZXIpO1xuICAgIC8qKlxuICAgICAqIFN3aXRjaCB2aXNpYmxlIHRhYiBiZXR3ZWVuIFJvdXRlIGFuZCBGaWx0ZXJzIHZpZXdzLlxuICAgICAqIEBwYXJhbSBuYW1lIFRhcmdldCB0YWIgaWRlbnRpZmllci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhY3RpdmF0ZVRhYihuYW1lOiAncm91dGUnIHwgJ2ZpbHRlcnMnKTogdm9pZCB7XG4gICAgICBpZiAobmFtZSA9PT0gJ3JvdXRlJykge1xuICAgICAgICByb3V0ZVRhYkNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgZmlsdGVyc1RhYkNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgcm91dGVUYWJCdXR0b24uZGF0YXNldC5hY3RpdmUgPSAndHJ1ZSc7XG4gICAgICAgIGZpbHRlcnNUYWJCdXR0b24uZGF0YXNldC5hY3RpdmUgPSAnZmFsc2UnO1xuICAgICAgICByb3V0ZVRhYkJ1dHRvbi5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIGZpbHRlcnNUYWJCdXR0b24uc3R5bGUuZm9udFdlaWdodCA9ICdub3JtYWwnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm91dGVUYWJDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGZpbHRlcnNUYWJDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGZpbHRlcnNUYWJCdXR0b24uZGF0YXNldC5hY3RpdmUgPSAndHJ1ZSc7XG4gICAgICAgIHJvdXRlVGFiQnV0dG9uLmRhdGFzZXQuYWN0aXZlID0gJ2ZhbHNlJztcbiAgICAgICAgZmlsdGVyc1RhYkJ1dHRvbi5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIHJvdXRlVGFiQnV0dG9uLnN0eWxlLmZvbnRXZWlnaHQgPSAnbm9ybWFsJztcbiAgICAgIH1cbiAgICB9XG4gICAgLyoqIEFjdGl2YXRlIHJvdXRlIHRhYi4gKi9cbiAgICBmdW5jdGlvbiBvblJvdXRlVGFiQ2xpY2soKTogdm9pZCB7XG4gICAgICBhY3RpdmF0ZVRhYigncm91dGUnKTtcbiAgICB9XG4gICAgLyoqIEFjdGl2YXRlIGZpbHRlcnMgdGFiLiAqL1xuICAgIGZ1bmN0aW9uIG9uRmlsdGVyc1RhYkNsaWNrKCk6IHZvaWQge1xuICAgICAgYWN0aXZhdGVUYWIoJ2ZpbHRlcnMnKTtcbiAgICB9XG4gICAgcm91dGVUYWJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvblJvdXRlVGFiQ2xpY2spO1xuICAgIGZpbHRlcnNUYWJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkZpbHRlcnNUYWJDbGljayk7XG4gICAgLyoqIEtleWRvd24gaGFuZGxlciBmb3Igc2hvcnRjdXQgdG9nZ2xlLiAqL1xuICAgIGZ1bmN0aW9uIG9uS2V5ZG93bihldjogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChldi5hbHRLZXkpIHBhcnRzLnB1c2goJ0FsdCcpO1xuICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHBhcnRzLnB1c2goJ1NoaWZ0Jyk7XG4gICAgICAgIGlmIChldi5jdHJsS2V5KSBwYXJ0cy5wdXNoKCdDdHJsJyk7XG4gICAgICAgIGxldCBrZXlQYXJ0ID0gZXYua2V5O1xuICAgICAgICBpZiAoZXYua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGtleVBhcnQgPSBldi5rZXkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGtleVBhcnQpO1xuICAgICAgICBjb25zdCBjb21ibyA9IHBhcnRzLmpvaW4oJysnKTtcbiAgICAgICAgY29uc3Qgbm9ybVNob3J0Y3V0ID0gc2hvcnRjdXQucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICAgIGlmIChjb21ibyA9PT0gbm9ybVNob3J0Y3V0KSB7XG4gICAgICAgICAgaWYgKGhvc3Quc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogaWdub3JlIHNob3J0Y3V0ICovXG4gICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlkb3duKTtcbiAgICByZXR1cm4gcmVjb3JkTmF2RXZlbnQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmdW5jdGlvbiBzaWxlbnRSZWNvcmRlcigpIHtcbiAgICAgIC8qIGlnbm9yZSBlcnJvcnMgbW91bnRpbmcgKi9cbiAgICB9O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIEFQSVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSW5pdGlhbGl6ZSByb3V0ZXIgZGV2dG9vbHMgYmFzZWQgb24gcHJvdmlkZWQgb3B0aW9ucy5cbiAqIE9wdGlvbmFsbHkgZXhwb3NlcyBjb250ZXh0IGdsb2JhbGx5LCBtb3VudHMgVUkgcGFuZWwsIGFuZCByZXR1cm5zIGEgbmF2IGV2ZW50IGhhbmRsZXIuXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gc2hvdWxkIGJlIGludm9rZWQgYnkgcm91dGVyIGNvZGUgd2hlbmV2ZXIgYSBuYXZpZ2F0aW9uIG1ldGEgZXZlbnQgb2NjdXJzLlxuICogQHBhcmFtIHBhcmFtcy5jb250ZXh0IFRoZSByb3V0aW5nIGNvbnRleHQgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGFyYW1zLm9wdGlvbnMgRGV2dG9vbHMgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgRnVuY3Rpb24gcmVjZWl2aW5nIGEgTmF2RXZlbnRNZXRhUHVibGljIHRvIGZlZWQgdGhlIHRpbWVsaW5lIChub29wIGlmIHBhbmVsIGRpc2FibGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRSb3V0ZXJEZXZ0b29scyhwYXJhbXM6IHtcbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT47XG4gIG9wdGlvbnM6IEluaXRSb3V0ZXJEZXZ0b29sc09wdGlvbnM7XG59KTogKG1ldGE6IE5hdkV2ZW50TWV0YVB1YmxpYykgPT4gdm9pZCB7XG4gIGNvbnN0IHsgY29udGV4dCwgb3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCB7IGdsb2JhbCwgcGFuZWwsIHNob3J0Y3V0IH0gPSBvcHRpb25zO1xuXG4gIC8vIEdsb2JhbCB3aW5kb3cgZXhwb3N1cmVcbiAgaWYgKGdsb2JhbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAod2luZG93IGFzIGFueSkuX19QTFVNSUxFX1JPVVRFUl9fID0ge1xuICAgICAgICAgIGdldDogY29udGV4dC5nZXQsXG4gICAgICAgICAgc3Vic2NyaWJlOiBjb250ZXh0LnN1YnNjcmliZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGlnbm9yZSAqL1xuICAgIH1cbiAgfVxuXG4gIC8qKiBOby1vcCByZWNvcmRlciB1c2VkIHdoZW4gcGFuZWwgZGlzYWJsZWQuICovXG4gIGZ1bmN0aW9uIG5vb3BOYXZSZWNvcmRlcigpOiB2b2lkIHtcbiAgICAvKiBub29wICovXG4gIH1cbiAgbGV0IG5hdlJlY29yZGVyOiAobTogTmF2RXZlbnRNZXRhUHVibGljKSA9PiB2b2lkID0gbm9vcE5hdlJlY29yZGVyO1xuICBpZiAocGFuZWwpIHtcbiAgICBuYXZSZWNvcmRlciA9IG1vdW50RGV2dG9vbHNQYW5lbCh7IGNvbnRleHQsIHNob3J0Y3V0IH0pO1xuICB9XG4gIC8qKiBGb3J3YXJkIG5hdmlnYXRpb24gbWV0YSBldmVudCB0byBhY3RpdmUgcmVjb3JkZXIuICovXG4gIGZ1bmN0aW9uIGhhbmRsZU5hdkV2ZW50KG1ldGE6IE5hdkV2ZW50TWV0YVB1YmxpYyk6IHZvaWQge1xuICAgIG5hdlJlY29yZGVyKG1ldGEpO1xuICB9XG4gIHJldHVybiBoYW5kbGVOYXZFdmVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdFJvdXRlckRldnRvb2xzO1xuIl19
|
|
690
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBeUI1QyxTQUFTLFdBQVcsQ0FDbEIsSUFBeUMsRUFDekMsSUFBNkI7SUFFN0IsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0RSxJQUFJLEdBQUcsRUFBRSxDQUFD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QUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7b0JBQ2hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLGVBQWU7SUFFeEIsQ0FBQztJQUNELElBQUksV0FBVyxHQUFvQyxlQUFlLENBQUM7SUFDbkUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztZQUMvQixPQUFPO1lBQ1AsUUFBUTtZQUNSLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxjQUFjLENBQUMsSUFBd0I7UUFDOUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQsZUFBZSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIFJvdXRlciBEZXZ0b29scyBleHRyYWN0ZWQgbW9kdWxlIChkZXZlbG9wbWVudC1vbmx5KS5cbiAqIE9iamVjdGlmIHJlZmFjdG9yOiBsaXNpYmlsaXTDqSBhbcOpbGlvcsOpZSAobm9tcyBleHBsaWNpdGVzLCBoZWxwZXJzIGV4dGVybmFsaXPDqXMpLlxuICovXG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdDb250ZXh0VHlwZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IHBhcnNlRmlsdGVycyB9IGZyb20gJy4vZmlsdGVycy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFJvdXRlckRldnRvb2xzT3B0aW9ucyB7XG4gIGdsb2JhbDogYm9vbGVhbjtcbiAgcGFuZWw6IGJvb2xlYW47XG4gIHNob3J0Y3V0OiBzdHJpbmc7XG4gIHZlcmJvc2U/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBOYXZFdmVudE1ldGFQdWJsaWMge1xuICBraW5kOiBzdHJpbmc7XG4gIG1vZGU6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgcGF0aG5hbWU6IHN0cmluZztcbiAgc2VhcmNoOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG4vKiogSW5pdCBkZXZ0b29scyBhbmQgcmV0dXJuIG5hdiBldmVudCBjYWxsYmFjayAoc2VlIGV4cG9ydGVkIGluaXQpLiAqL1xuLyoqXG4gKiBDb21wdXRlIGEgZGlmZiBiZXR3ZWVuIHR3byBxdWVyeSBvYmplY3RzIChmbGF0IGtleS12YWx1ZSBtYXBzKS5cbiAqIENsb25lcyBhcmUgbm90IHBlcmZvcm1lZDoga2V5cyBhcmUgaW5zcGVjdGVkIGRpcmVjdGx5IGFuZCBjYXRlZ29yaXplZC5cbiAqIEBwYXJhbSBwcmV2IFByZXZpb3VzIHF1ZXJ5IG9iamVjdCAoY2FuIGJlIHVuZGVmaW5lZCBvbiBmaXJzdCByZW5kZXIpLlxuICogQHBhcmFtIG5leHQgQ3VycmVudCBxdWVyeSBvYmplY3QuXG4gKiBAcmV0dXJucyBCdWNrZXRzIG9mIGtleXM6IGFkZGVkLCByZW1vdmVkLCBjaGFuZ2VkLCB1bmNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGRpZmZRdWVyaWVzKFxuICBwcmV2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pIHtcbiAgY29uc3QgYWRkZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHJlbW92ZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNoYW5nZWQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHVuY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcHJldk9iaiA9IHByZXYgPz8ge307XG4gIGNvbnN0IHByZXZLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhwcmV2T2JqKSk7XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhuZXh0KSkge1xuICAgIGlmICghcHJldktleXMuaGFzKGspKSB7XG4gICAgICBhZGRlZC5wdXNoKGspO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwdiA9IHByZXZPYmpba107XG4gICAgICBjb25zdCBudiA9IG5leHRba107XG4gICAgICBsZXQgc2FtZSA9IGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHYpICYmIEFycmF5LmlzQXJyYXkobnYpICYmIHB2Lmxlbmd0aCA9PT0gbnYubGVuZ3RoKSB7XG4gICAgICAgIHNhbWUgPSBwdi5ldmVyeSgodiwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2ID09PSBudltpXTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYW1lID0gcHYgPT09IG52O1xuICAgICAgfVxuICAgICAgaWYgKHNhbWUpIHtcbiAgICAgICAgdW5jaGFuZ2VkLnB1c2goayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFuZ2VkLnB1c2goayk7XG4gICAgICB9XG4gICAgICBwcmV2S2V5cy5kZWxldGUoayk7XG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgayBvZiBwcmV2S2V5cykge1xuICAgIHJlbW92ZWQucHVzaChrKTtcbiAgfVxuICByZXR1cm4geyBhZGRlZCwgcmVtb3ZlZCwgY2hhbmdlZCwgdW5jaGFuZ2VkIH07XG59XG4vKipcbiAqIEFwcGx5IG1pbmltYWwgYnV0dG9uIHN0eWxpbmcgdXNlZCBmb3Igc21hbGwgYWN0aW9uIGJ1dHRvbnMgaW4gdGhlIGRldnRvb2xzIHBhbmVsLlxuICogQHBhcmFtIGJ0biBUYXJnZXQgYnV0dG9uIGVsZW1lbnQuXG4gKiBAcGFyYW0gY29sb3IgVGV4dCBjb2xvciB0byBhcHBseS5cbiAqL1xuZnVuY3Rpb24gc3R5bGVNaW5pQnV0dG9uKGJ0bjogSFRNTEJ1dHRvbkVsZW1lbnQsIGNvbG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyBzdHlsZSB9ID0gYnRuO1xuICBzdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gIHN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XG4gIHN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2NjYyc7XG4gIHN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICBzdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgc3R5bGUubGluZUhlaWdodCA9ICcxJztcbiAgc3R5bGUucGFkZGluZyA9ICcycHggNnB4JztcbiAgc3R5bGUuY29sb3IgPSBjb2xvcjtcbn1cbi8qKlxuICogU3R5bGUgdGhlIGNsb3NlICh4KSBidXR0b24gdGhhdCBhcHBlYXJzIGluc2lkZSBxdWVyeSAvIG9wZXJhdG9yIHBpbGxzLlxuICogQHBhcmFtIGJ0biBUYXJnZXQgYnV0dG9uIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHN0eWxlUGlsbENsb3NlKGJ0bjogSFRNTEJ1dHRvbkVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgeyBzdHlsZSB9ID0gYnRuO1xuICBzdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gIHN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICBzdHlsZS5ib3JkZXIgPSAnbm9uZSc7XG4gIHN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICBzdHlsZS5saW5lSGVpZ2h0ID0gJzEnO1xuICBzdHlsZS5wYWRkaW5nID0gJzAgMnB4JztcbiAgc3R5bGUuY29sb3IgPSAnIzQ0NCc7XG59XG4vKipcbiAqIENyZWF0ZSBhIGNvbG9yZWQgcGlsbCBlbGVtZW50IHJlcHJlc2VudGluZyBvbmUga2V5IGluIGEgcXVlcnkgZGlmZi5cbiAqIENvbG9yIHNjaGVtZSBjb21tdW5pY2F0ZXMgc2VtYW50aWMgKGFkZGVkIC8gcmVtb3ZlZCAvIGNoYW5nZWQgLyB1bmNoYW5nZWQpLlxuICogQHBhcmFtIGxhYmVsIERpc3BsYXkgdGV4dCBmb3IgdGhlIHBpbGwuXG4gKiBAcGFyYW0ga2luZCBEaWZmIGNhdGVnb3J5LlxuICogQHJldHVybnMgU3BhbiBlbGVtZW50IHJlYWR5IHRvIGF0dGFjaC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUXVlcnlEaWZmUGlsbChcbiAgbGFiZWw6IHN0cmluZyxcbiAga2luZDogJ2FkZGVkJyB8ICdyZW1vdmVkJyB8ICdjaGFuZ2VkJyB8ICd1bmNoYW5nZWQnLFxuKTogSFRNTFNwYW5FbGVtZW50IHtcbiAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgc3Bhbi50ZXh0Q29udGVudCA9IGxhYmVsO1xuICBzcGFuLnN0eWxlLnBhZGRpbmcgPSAnMXB4IDRweCc7XG4gIHNwYW4uc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEwcHgnO1xuICBzcGFuLnN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICBzcGFuLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQnO1xuICBpZiAoa2luZCA9PT0gJ2FkZGVkJykge1xuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZTZmZmVkJztcbiAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyMyY2JlNGUnO1xuICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzIyODYzYSc7XG4gIH0gZWxzZSBpZiAoa2luZCA9PT0gJ3JlbW92ZWQnKSB7XG4gICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmVlZjAnO1xuICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2Q3M2E0OSc7XG4gICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjY2IyNDMxJztcbiAgfSBlbHNlIGlmIChraW5kID09PSAnY2hhbmdlZCcpIHtcbiAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZjViMSc7XG4gICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZmZkMzNkJztcbiAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyM3MzVjMGYnO1xuICB9IGVsc2Uge1xuICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZjFmOGZmJztcbiAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyM3OWI4ZmYnO1xuICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzAzNjZkNic7XG4gIH1cbiAgcmV0dXJuIHNwYW47XG59XG4vKipcbiAqIE1vdW50IHRoZSBmbG9hdGluZyBkZXZ0b29scyBwYW5lbCAoU2hhZG93IERPTSBob3N0ICsgaW50ZXJuYWwgc3RydWN0dXJlKS5cbiAqIEd1YXJkZWQgZm9yIG5vbi1ET00gZW52aXJvbm1lbnRzIGFuZCBpZGVtcG90ZW50ICh3b24ndCBtb3VudCB0d2ljZSkuXG4gKiBAcGFyYW0gcGFyYW1zLmNvbnRleHQgUm91dGluZyBjb250ZXh0IChwcm92aWRlcyBzdGF0ZSArIHN1YnNjcmliZSkuXG4gKiBAcGFyYW0gcGFyYW1zLnNob3J0Y3V0IEtleWJvYXJkIHNob3J0Y3V0IChlLmcuIFwiQ3RybCtTaGlmdCtSXCIpIHRvIHRvZ2dsZSB2aXNpYmlsaXR5LlxuICogQHJldHVybnMgUmVjb3JkZXIgZnVuY3Rpb24gdG8gY2FwdHVyZSBuYXZpZ2F0aW9uIGV2ZW50cyBmb3IgdGltZWxpbmUgb3JpZ2luIG1ldGFkYXRhLlxuICovXG5mdW5jdGlvbiBtb3VudERldnRvb2xzUGFuZWwocGFyYW1zOiB7XG4gIGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+O1xuICBzaG9ydGN1dDogc3RyaW5nO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn0pOiAobWV0YTogTmF2RXZlbnRNZXRhUHVibGljKSA9PiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIG5vb3BSZWNvcmRlcigpIHtcbiAgICAgICAgLyogbm9vcCAobm9uLURPTSBlbnYpICovXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wbHVtaWxlLXJvdXRlci1kZXZ0b29scy1wYW5lbF0nKSAhPSBudWxsXG4gICAgKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gYWxyZWFkeU1vdW50ZWRSZWNvcmRlcigpIHtcbiAgICAgICAgLyogbm9vcCAoYWxyZWFkeSBtb3VudGVkKSAqL1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgeyBjb250ZXh0LCBzaG9ydGN1dCwgdmVyYm9zZSB9ID0gcGFyYW1zO1xuXG4gICAgLy8gSG9zdFxuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBob3N0LnNldEF0dHJpYnV0ZSgnZGF0YS1wbHVtaWxlLXJvdXRlci1kZXZ0b29scy1wYW5lbCcsICcnKTtcbiAgICBjb25zdCBob3N0U3R5bGUgPSBob3N0LnN0eWxlO1xuICAgIGhvc3RTdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgaG9zdFN0eWxlLnpJbmRleCA9ICcyMTQ3NDgzNjQ2JztcbiAgICBob3N0U3R5bGUuYm90dG9tID0gJzhweCc7XG4gICAgaG9zdFN0eWxlLnJpZ2h0ID0gJzhweCc7XG4gICAgaG9zdFN0eWxlLmZvbnRGYW1pbHkgPSBbXG4gICAgICAndWktbW9ub3NwYWNlJyxcbiAgICAgICdTRk1vbm8tUmVndWxhcicsXG4gICAgICAnTWVubG8nLFxuICAgICAgJ01vbmFjbycsXG4gICAgICAnQ29uc29sYXMnLFxuICAgICAgJ1wiTGliZXJhdGlvbiBNb25vXCInLFxuICAgICAgJ21vbm9zcGFjZScsXG4gICAgXS5qb2luKCcsICcpO1xuICAgIGhvc3RTdHlsZS5mb250U2l6ZSA9ICcxMnB4JztcbiAgICBob3N0U3R5bGUubGluZUhlaWdodCA9ICcxLjMnO1xuICAgIGhvc3RTdHlsZS5jb2xvciA9ICcjMTExJztcbiAgICBob3N0U3R5bGUuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgaG9zdFN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgY29uc3Qgc2hhZG93ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAvLyBQYW5lbCBjb250YWluZXJcbiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHBhbmVsU3R5bGUgPSBwYW5lbC5zdHlsZTtcbiAgICBwYW5lbFN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgcGFuZWxTdHlsZS5taW5XaWR0aCA9ICcyNjBweCc7XG4gICAgcGFuZWxTdHlsZS5tYXhXaWR0aCA9ICc0MjBweCc7XG4gICAgcGFuZWxTdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgcGFuZWxTdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICBwYW5lbFN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgyNTUsMjU1LDI1NSwwLjk1KSc7XG4gICAgcGFuZWxTdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgIHBhbmVsU3R5bGUuYm9yZGVyUmFkaXVzID0gJzZweCc7XG4gICAgcGFuZWxTdHlsZS5ib3hTaGFkb3cgPSAnMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xNSknO1xuICAgIHBhbmVsU3R5bGUucGFkZGluZyA9ICc2cHggOHB4IDhweCc7XG4gICAgcGFuZWxTdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDRweCknO1xuICAgIHBhbmVsU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBwYW5lbFN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICBwYW5lbFN0eWxlLnJvd0dhcCA9ICc0cHgnO1xuXG4gICAgLy8gSGVhZGVyXG4gICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaGVhZGVyU3R5bGUgPSBoZWFkZXIuc3R5bGU7XG4gICAgaGVhZGVyU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBoZWFkZXJTdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgaGVhZGVyU3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnc3BhY2UtYmV0d2Vlbic7XG4gICAgaGVhZGVyU3R5bGUuZ2FwID0gJzhweCc7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgdGl0bGUudGV4dENvbnRlbnQgPSAnUGx1bWlsZSBSb3V0ZXInO1xuICAgIHRpdGxlLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICBjb25zdCBoZWFkZXJCdG5zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaGVhZGVyQnRuc1N0eWxlID0gaGVhZGVyQnRucy5zdHlsZTtcbiAgICBoZWFkZXJCdG5zU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBoZWFkZXJCdG5zU3R5bGUuZ2FwID0gJzRweCc7XG4gICAgaGVhZGVyQnRuc1N0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICBjb25zdCB0YWJzV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHRhYnNXcmFwU3R5bGUgPSB0YWJzV3JhcC5zdHlsZTtcbiAgICB0YWJzV3JhcFN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgdGFic1dyYXBTdHlsZS5nYXAgPSAnNHB4JztcbiAgICB0YWJzV3JhcFN0eWxlLm1hcmdpblJpZ2h0ID0gJzZweCc7XG4gICAgY29uc3Qgcm91dGVUYWJCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICByb3V0ZVRhYkJ1dHRvbi50ZXh0Q29udGVudCA9ICdSb3V0ZSc7XG4gICAgY29uc3QgZmlsdGVyc1RhYkJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGZpbHRlcnNUYWJCdXR0b24udGV4dENvbnRlbnQgPSAnRmlsdGVycyc7XG4gICAgY29uc3QgdGFiQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtyb3V0ZVRhYkJ1dHRvbiwgZmlsdGVyc1RhYkJ1dHRvbl07XG4gICAgZm9yIChjb25zdCB0YiBvZiB0YWJCdXR0b25zKSB7XG4gICAgICBjb25zdCBzID0gdGIuc3R5bGU7XG4gICAgICBzLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgIHMuYmFja2dyb3VuZCA9ICcjZjFmMWYxJztcbiAgICAgIHMuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgIHMuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICBzLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgcy5wYWRkaW5nID0gJzJweCA2cHgnO1xuICAgIH1cbiAgICByb3V0ZVRhYkJ1dHRvbi5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgcm91dGVUYWJCdXR0b24uZGF0YXNldC5hY3RpdmUgPSAndHJ1ZSc7XG4gICAgdGFic1dyYXAuYXBwZW5kQ2hpbGQocm91dGVUYWJCdXR0b24pO1xuICAgIHRhYnNXcmFwLmFwcGVuZENoaWxkKGZpbHRlcnNUYWJCdXR0b24pO1xuICAgIGNvbnN0IGNvbGxhcHNlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgY29sbGFwc2VCdG4udGV4dENvbnRlbnQgPSAn4oiSJztcbiAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGNsb3NlQnRuLnRleHRDb250ZW50ID0gJ8OXJztcbiAgICBjb25zdCBoZWFkZXJBY3Rpb25CdXR0b25zOiBIVE1MQnV0dG9uRWxlbWVudFtdID0gW2NvbGxhcHNlQnRuLCBjbG9zZUJ0bl07XG4gICAgZm9yIChjb25zdCBiIG9mIGhlYWRlckFjdGlvbkJ1dHRvbnMpIHtcbiAgICAgIGNvbnN0IHN0ID0gYi5zdHlsZTtcbiAgICAgIHN0LmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgIHN0LmJhY2tncm91bmQgPSAnI2VlZSc7XG4gICAgICBzdC5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgc3QuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICBzdC5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgIHN0LmxpbmVIZWlnaHQgPSAnMSc7XG4gICAgICBzdC5wYWRkaW5nID0gJzJweCA1cHgnO1xuICAgIH1cbiAgICBoZWFkZXIuYXBwZW5kQ2hpbGQodGl0bGUpO1xuICAgIGhlYWRlckJ0bnMuYXBwZW5kQ2hpbGQodGFic1dyYXApO1xuICAgIGhlYWRlckJ0bnMuYXBwZW5kQ2hpbGQoY29sbGFwc2VCdG4pO1xuICAgIGhlYWRlckJ0bnMuYXBwZW5kQ2hpbGQoY2xvc2VCdG4pO1xuICAgIGhlYWRlci5hcHBlbmRDaGlsZChoZWFkZXJCdG5zKTtcblxuICAgIC8vIFJvdXRlIHRhYiBlbGVtZW50c1xuICAgIGNvbnN0IHBhdGhEaXNwbGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgcGF0aERpc3BsYXkuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgIGNvbnN0IHZhcnNQcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICBjb25zdCByYXdRdWVyeVByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgIGNvbnN0IHR5cGVkUXVlcnlQcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICBjb25zdCBwcmVCbG9ja3M6IEhUTUxQcmVFbGVtZW50W10gPSBbdmFyc1ByZSwgcmF3UXVlcnlQcmUsIHR5cGVkUXVlcnlQcmVdO1xuICAgIGZvciAoY29uc3QgcGIgb2YgcHJlQmxvY2tzKSB7XG4gICAgICBjb25zdCBzdHAgPSBwYi5zdHlsZTtcbiAgICAgIHN0cC5tYXJnaW4gPSAnMCc7XG4gICAgICBzdHAucGFkZGluZyA9ICc0cHgnO1xuICAgICAgc3RwLmJhY2tncm91bmQgPSAnI2Y2ZjhmYSc7XG4gICAgICBzdHAuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgIHN0cC5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgIHN0cC5vdmVyZmxvd1ggPSAnYXV0byc7XG4gICAgICBzdHAubWF4SGVpZ2h0ID0gJzE2MHB4JztcbiAgICB9XG4gICAgY29uc3QgdGltZWxpbmVXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgdGltZWxpbmVXcmFwU3R5bGUgPSB0aW1lbGluZVdyYXAuc3R5bGU7XG4gICAgdGltZWxpbmVXcmFwU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICB0aW1lbGluZVdyYXBTdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgdGltZWxpbmVXcmFwU3R5bGUuZ2FwID0gJzJweCc7XG4gICAgdGltZWxpbmVXcmFwU3R5bGUubWFyZ2luVG9wID0gJzRweCc7XG4gICAgY29uc3QgdGltZWxpbmVIZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aW1lbGluZUhlYWRlci50ZXh0Q29udGVudCA9ICdUaW1lbGluZSAocXVlcnkgY2hhbmdlcyknO1xuICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICB0aW1lbGluZUhlYWRlci5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICBjb25zdCB0aW1lbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHRpbWVsaW5lU3R5bGUgPSB0aW1lbGluZS5zdHlsZTtcbiAgICB0aW1lbGluZVN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgdGltZWxpbmVTdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbi1yZXZlcnNlJztcbiAgICB0aW1lbGluZVN0eWxlLm1heEhlaWdodCA9ICcxNDBweCc7XG4gICAgdGltZWxpbmVTdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7XG4gICAgdGltZWxpbmVTdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNlMmUyZTInO1xuICAgIHRpbWVsaW5lU3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgdGltZWxpbmVTdHlsZS5iYWNrZ3JvdW5kID0gJyNmYWZiZmMnO1xuICAgIHRpbWVsaW5lU3R5bGUuZm9udEZhbWlseSA9ICdpbmhlcml0JztcbiAgICB0aW1lbGluZVN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgIHRpbWVsaW5lV3JhcC5hcHBlbmRDaGlsZCh0aW1lbGluZUhlYWRlcik7XG4gICAgdGltZWxpbmVXcmFwLmFwcGVuZENoaWxkKHRpbWVsaW5lKTtcbiAgICBjb25zdCByb3V0ZVRhYkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCByb3V0ZVRhYkNvbnRlbnRTdHlsZSA9IHJvdXRlVGFiQ29udGVudC5zdHlsZTtcbiAgICByb3V0ZVRhYkNvbnRlbnRTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIHJvdXRlVGFiQ29udGVudFN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICByb3V0ZVRhYkNvbnRlbnRTdHlsZS5nYXAgPSAnNHB4JztcbiAgICByb3V0ZVRhYkNvbnRlbnQuYXBwZW5kQ2hpbGQocGF0aERpc3BsYXkpO1xuICAgIHJvdXRlVGFiQ29udGVudC5hcHBlbmRDaGlsZCh2YXJzUHJlKTtcbiAgICByb3V0ZVRhYkNvbnRlbnQuYXBwZW5kQ2hpbGQocmF3UXVlcnlQcmUpO1xuICAgIHJvdXRlVGFiQ29udGVudC5hcHBlbmRDaGlsZCh0eXBlZFF1ZXJ5UHJlKTtcbiAgICByb3V0ZVRhYkNvbnRlbnQuYXBwZW5kQ2hpbGQodGltZWxpbmVXcmFwKTtcblxuICAgIC8vIEZpbHRlcnMgdGFiIHNrZWxldG9uXG4gICAgY29uc3QgZmlsdGVyc1RhYkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBmaWx0ZXJzVGFiQ29udGVudFN0eWxlID0gZmlsdGVyc1RhYkNvbnRlbnQuc3R5bGU7XG4gICAgZmlsdGVyc1RhYkNvbnRlbnRTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGZpbHRlcnNUYWJDb250ZW50U3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgIGZpbHRlcnNUYWJDb250ZW50U3R5bGUuZ2FwID0gJzRweCc7XG4gICAgY29uc3QgZmlsdGVyQWN0aW9uc1dyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBmaWx0ZXJBY3Rpb25zV3JhcFN0eWxlID0gZmlsdGVyQWN0aW9uc1dyYXAuc3R5bGU7XG4gICAgZmlsdGVyQWN0aW9uc1dyYXBTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGZpbHRlckFjdGlvbnNXcmFwU3R5bGUuZmxleFdyYXAgPSAnd3JhcCc7XG4gICAgZmlsdGVyQWN0aW9uc1dyYXBTdHlsZS5nYXAgPSAnNHB4JztcbiAgICBjb25zdCBmaWx0ZXJzQm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGZpbHRlcnNCb2R5U3R5bGUgPSBmaWx0ZXJzQm9keS5zdHlsZTtcbiAgICBmaWx0ZXJzQm9keVN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgZmlsdGVyc0JvZHlTdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgZmlsdGVyc0JvZHlTdHlsZS5nYXAgPSAnNHB4JztcbiAgICBmaWx0ZXJzVGFiQ29udGVudC5hcHBlbmRDaGlsZChmaWx0ZXJBY3Rpb25zV3JhcCk7XG4gICAgZmlsdGVyc1RhYkNvbnRlbnQuYXBwZW5kQ2hpbGQoZmlsdGVyc0JvZHkpO1xuXG4gICAgY29uc3Qgc2hvcnRjdXRIaW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2hvcnRjdXRIaW50LnRleHRDb250ZW50ID0gYFNob3J0Y3V0OiAke3Nob3J0Y3V0fWA7XG4gICAgc2hvcnRjdXRIaW50LnN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICAgIHNob3J0Y3V0SGludC5zdHlsZS5vcGFjaXR5ID0gJzAuNyc7XG5cbiAgICBwYW5lbC5hcHBlbmRDaGlsZChoZWFkZXIpO1xuICAgIHBhbmVsLmFwcGVuZENoaWxkKHJvdXRlVGFiQ29udGVudCk7XG4gICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyc1RhYkNvbnRlbnQpO1xuICAgIHBhbmVsLmFwcGVuZENoaWxkKHNob3J0Y3V0SGludCk7XG4gICAgc2hhZG93LmFwcGVuZENoaWxkKHBhbmVsKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuXG4gICAgLy8gQ29sbGFwc2UgLyBjbG9zZSBsb2dpY1xuICAgIGxldCBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAvKiogVG9nZ2xlIGNvbGxhcHNlZC9leHBhbmRlZCBwYW5lbCBzdGF0ZS4gKi9cbiAgICBmdW5jdGlvbiBvbkNvbGxhcHNlVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgY29sbGFwc2VkID0gIWNvbGxhcHNlZDtcbiAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzI0cHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICcrJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9ICc1MHZoJztcbiAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbGxhcHNlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25Db2xsYXBzZVRvZ2dsZSk7XG4gICAgbGV0IHVuc3Vic2NyaWJlOiB1bmRlZmluZWQgfCAoKCkgPT4gdm9pZCk7XG4gICAgLyoqIENsb3NlIGFuZCB1bm1vdW50IHRoZSBwYW5lbCwgdW5zdWJzY3JpYmluZyBsaXN0ZW5lci4gKi9cbiAgICBmdW5jdGlvbiBvbkNsb3NlKCk6IHZvaWQge1xuICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgIGlmICh0eXBlb2YgdW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2xvc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsb3NlKTtcblxuICAgIC8vIE5hdiBldmVudCBzdG9yZVxuICAgIGNvbnN0IG5hdkV2ZW50czogTmF2RXZlbnRNZXRhUHVibGljW10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBSZWNvcmQgYSBuYXZpZ2F0aW9uIGV2ZW50IGZvciBsYXRlciBhdHRyaWJ1dGlvbiB3aGVuIHJlbmRlcmluZyB0aW1lbGluZSByb3dzLlxuICAgICAqIFN0b3JlcyBvbmx5IGEgYm91bmRlZCByaW5nIChGSUZPIHRyaW1taW5nIGJleW9uZCA2MCBlbnRyaWVzKS5cbiAgICAgKiBAcGFyYW0gbWV0YSBOYXZpZ2F0aW9uIG1ldGEgZXZlbnQgb2JqZWN0LlxuICAgICAqL1xuICAgIC8qKiBSZWNvcmQgYSBuYXYgZXZlbnQgKGJvdW5kZWQgaGlzdG9yeSBsZW5ndGgpLiAqL1xuICAgIGZ1bmN0aW9uIHJlY29yZE5hdkV2ZW50KG1ldGE6IE5hdkV2ZW50TWV0YVB1YmxpYyk6IHZvaWQge1xuICAgICAgbmF2RXZlbnRzLnB1c2gobWV0YSk7XG4gICAgICBpZiAobmF2RXZlbnRzLmxlbmd0aCA+IDYwKSBuYXZFdmVudHMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgc3RhdGUgY2FjaGVcbiAgICBsZXQgbGFzdFF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbGFzdFNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogUmUtcmVuZGVyIHRoZSBwYW5lbCBVSSBmcm9tIGN1cnJlbnQgcm91dGluZyBjb250ZXh0ICYgY2FjaGVkIG5hdmlnYXRpb24gZXZlbnRzLlxuICAgICAqIENvbnRhaW5zIGRlZmVuc2l2ZSB0cnkvY2F0Y2ggYmxvY2tzIHRvIGF2b2lkIGJyZWFraW5nIHRoZSBhcHAgaWYgZGV2dG9vbHMgZmFpbHMuXG4gICAgICovXG4gICAgLyoqIFJlbmRlciBwYW5lbCBjb250ZW50cyBmcm9tIGNvbnRleHQgc3RhdGUuICovXG4gICAgZnVuY3Rpb24gcmVuZGVyKCk6IHZvaWQge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBjb250ZXh0LmdldCgpO1xuICAgICAgICBwYXRoRGlzcGxheS50ZXh0Q29udGVudCA9IGAke2VudHJ5LmxvY2F0aW9uLnBhdGhuYW1lfSR7ZW50cnkubG9jYXRpb24uc2VhcmNofWA7XG4gICAgICAgIHZhcnNQcmUudGV4dENvbnRlbnQgPSBgdmFyczogJHtKU09OLnN0cmluZ2lmeShlbnRyeS5yb3V0ZT8ucGFyYW1zID8/IHt9LCBudWxsLCAyKX1gO1xuICAgICAgICByYXdRdWVyeVByZS50ZXh0Q29udGVudCA9IGByYXc6ICAke0pTT04uc3RyaW5naWZ5KGVudHJ5LnF1ZXJ5LCBudWxsLCAyKX1gO1xuICAgICAgICB0eXBlZFF1ZXJ5UHJlLnRleHRDb250ZW50ID0gYHR5cGVkOiAke0pTT04uc3RyaW5naWZ5KGVudHJ5LnR5cGVkUXVlcnksIG51bGwsIDIpfWA7XG4gICAgICAgIGNvbnN0IHJhd0NoYW5nZWQgPSBlbnRyeS5yYXdTZWFyY2ggIT09IGxhc3RTZWFyY2g7XG4gICAgICAgIGlmIChyYXdDaGFuZ2VkIHx8IHZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UXVlcnkgPSBlbnRyeS5xdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICBjb25zdCBkaWZmID0gZGlmZlF1ZXJpZXMobGFzdFF1ZXJ5LCBjdXJyZW50UXVlcnkpO1xuICAgICAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGNvbnN0IHJvd1N0eWxlID0gcm93LnN0eWxlO1xuICAgICAgICAgIHJvd1N0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgcm93U3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgICAgICAgIHJvd1N0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgI2U5ZTllOSc7XG4gICAgICAgICAgcm93U3R5bGUucGFkZGluZyA9ICczcHggNHB4JztcbiAgICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgY29uc3QgaGVhZFN0eWxlID0gaGVhZC5zdHlsZTtcbiAgICAgICAgICBoZWFkU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICBoZWFkU3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnc3BhY2UtYmV0d2Vlbic7XG4gICAgICAgICAgY29uc3QgdGltZVN0ciA9IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgICAgICAgbGV0IHNlYXJjaERpc3BsYXkgPSAnKGVtcHR5KSc7XG4gICAgICAgICAgaWYgKGVudHJ5LmxvY2F0aW9uLnNlYXJjaCAhPT0gJycpIHtcbiAgICAgICAgICAgIHNlYXJjaERpc3BsYXkgPSBlbnRyeS5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBvcmlnaW4gPSAnc3lzdGVtJztcbiAgICAgICAgICBmb3IgKGxldCBpID0gbmF2RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBldiA9IG5hdkV2ZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChldiAhPSBudWxsICYmIGV2LnNlYXJjaCA9PT0gZW50cnkucmF3U2VhcmNoKSB7XG4gICAgICAgICAgICAgIG9yaWdpbiA9IGAke2V2LmtpbmR9OiR7ZXYubW9kZX1gO1xuICAgICAgICAgICAgICBpZiAoZXYua2luZCA9PT0gJ2JhdGNoLWZsdXNoJykge1xuICAgICAgICAgICAgICAgIG9yaWdpbiA9IGAke29yaWdpbn0oJHtldi5jb3VudH0pYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaGVhZC5pbm5lckhUTUwgPSBbXG4gICAgICAgICAgICBgPHN0cm9uZz4ke3RpbWVTdHJ9PC9zdHJvbmc+YCxcbiAgICAgICAgICAgIGA8Y29kZSBzdHlsZT1cImJhY2tncm91bmQ6I2VlZTtwYWRkaW5nOjFweCAzcHg7Ym9yZGVyLXJhZGl1czozcHg7XCI+JHtzZWFyY2hEaXNwbGF5fTwvY29kZT5gLFxuICAgICAgICAgICAgYDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjEwcHg7b3BhY2l0eTowLjc7XCI+JHtvcmlnaW59PC9zcGFuPmAsXG4gICAgICAgICAgXS5qb2luKCcgJyk7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGNvbnN0IGJvZHlTdHlsZSA9IGJvZHkuc3R5bGU7XG4gICAgICAgICAgYm9keVN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgYm9keVN0eWxlLmZsZXhXcmFwID0gJ3dyYXAnO1xuICAgICAgICAgIGJvZHlTdHlsZS5nYXAgPSAnNHB4JztcbiAgICAgICAgICBpZiAoZGlmZi5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgZGlmZi5hZGRlZCkge1xuICAgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVF1ZXJ5RGlmZlBpbGwoYCske2t9YCwgJ2FkZGVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlmZi5jaGFuZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBkaWZmLmNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChjcmVhdGVRdWVyeURpZmZQaWxsKGB+JHtrfWAsICdjaGFuZ2VkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlmZi5yZW1vdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBkaWZmLnJlbW92ZWQpIHtcbiAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChjcmVhdGVRdWVyeURpZmZQaWxsKGAtJHtrfWAsICdyZW1vdmVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmF3Q2hhbmdlZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkaWZmLmFkZGVkLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICBkaWZmLmNoYW5nZWQubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgIGRpZmYucmVtb3ZlZC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVF1ZXJ5RGlmZlBpbGwoJ25vLWNoYW5nZScsICd1bmNoYW5nZWQnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGNyZWF0ZVF1ZXJ5RGlmZlBpbGwoJ3NhbWUtc2VhcmNoJywgJ3VuY2hhbmdlZCcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWQpO1xuICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChib2R5KTtcbiAgICAgICAgICB0aW1lbGluZS5hcHBlbmRDaGlsZChyb3cpO1xuICAgICAgICAgIGlmICh0aW1lbGluZS5jaGlsZEVsZW1lbnRDb3VudCA+IDUwKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgaWYgKGZpcnN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGltZWxpbmUucmVtb3ZlQ2hpbGQoZmlyc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmF3Q2hhbmdlZCkge1xuICAgICAgICAgICAgbGFzdFF1ZXJ5ID0gY3VycmVudFF1ZXJ5O1xuICAgICAgICAgICAgbGFzdFNlYXJjaCA9IGVudHJ5LnJhd1NlYXJjaDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmlsdGVycyB0YWJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBjb250ZXh0LmN1cnJlbnRNZXJnZWRGaWx0ZXJTY2hlbWEoKTtcbiAgICAgICAgICB3aGlsZSAoZmlsdGVyQWN0aW9uc1dyYXAuZmlyc3RDaGlsZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJBY3Rpb25zV3JhcC5yZW1vdmVDaGlsZChmaWx0ZXJBY3Rpb25zV3JhcC5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGZpbHRlcnNCb2R5LmZpcnN0Q2hpbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgZmlsdGVyc0JvZHkucmVtb3ZlQ2hpbGQoZmlsdGVyc0JvZHkuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtZXJnZWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZW1wdHlNc2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGVtcHR5TXNnLnRleHRDb250ZW50ID0gJ05vIGZpbHRlciBzY2hlbWEgZm9yIGN1cnJlbnQgcm91dGUnO1xuICAgICAgICAgICAgZW1wdHlNc2cuc3R5bGUuZm9udFN0eWxlID0gJ2l0YWxpYyc7XG4gICAgICAgICAgICBmaWx0ZXJzQm9keS5hcHBlbmRDaGlsZChlbXB0eU1zZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYU9iaiA9IG1lcmdlZC5zY2hlbWEgYXMgUmVjb3JkPFxuICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbD86IHN0cmluZztcbiAgICAgICAgICAgICAgICBvcGVyYXRvcnM/OiBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICBraW5kPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID47XG4gICAgICAgICAgICBsZXQgcGFyc2VkRmlsdGVyczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge307XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBwYXJzZWRGaWx0ZXJzID0gcGFyc2VGaWx0ZXJzKFxuICAgICAgICAgICAgICAgIG1lcmdlZCBhcyBhbnksXG4gICAgICAgICAgICAgICAgZW50cnkucXVlcnkgYXMgYW55LFxuICAgICAgICAgICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAvKiBpZ25vcmUgcGFyc2UgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBPYmplY3Qua2V5cyhzY2hlbWFPYmopLnNvcnQoKTtcbiAgICAgICAgICAgIGxldCBhbnlBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWVsZE5hbWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gcGFyc2VkRmlsdGVyc1tmXTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlICE9IG51bGwgJiYgT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhbnlBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW55QWN0aXZlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNsZWFyQWxsQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICAgIGNsZWFyQWxsQnRuLnRleHRDb250ZW50ID0gJ0NsZWFyIEFsbCBGaWx0ZXJzJztcbiAgICAgICAgICAgICAgc3R5bGVNaW5pQnV0dG9uKGNsZWFyQWxsQnRuLCAnI2Q3M2E0OScpO1xuICAgICAgICAgICAgICAvKiogQ2xlYXIgYWxsIGZpbHRlcnMgYWNyb3NzIGV2ZXJ5IGZpZWxkLiAqL1xuICAgICAgICAgICAgICBmdW5jdGlvbiBvbkNsZWFyQWxsRmlsdGVycygpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYmxhbms6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmbmFtZSBvZiBmaWVsZE5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGJsYW5rW2ZuYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29udGV4dC5uYXZpZ2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IGJsYW5rLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJTY2hlbWE6IG1lcmdlZCxcbiAgICAgICAgICAgICAgICAgICAgYmF0Y2g6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjbGVhckFsbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uQ2xlYXJBbGxGaWx0ZXJzKTtcbiAgICAgICAgICAgICAgZmlsdGVyQWN0aW9uc1dyYXAuYXBwZW5kQ2hpbGQoY2xlYXJBbGxCdG4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZE5hbWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRlZkxpa2UgPSBzY2hlbWFPYmpbZmllbGRdO1xuICAgICAgICAgICAgICBjb25zdCBmaWVsZEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBjb25zdCBmYlN0eWxlID0gZmllbGRCb3guc3R5bGU7XG4gICAgICAgICAgICAgIGZiU3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgICAgICAgZmJTdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgICAgICAgICAgZmJTdHlsZS5wYWRkaW5nID0gJzRweCA2cHgnO1xuICAgICAgICAgICAgICBmYlN0eWxlLmJhY2tncm91bmQgPSAnI2Y5ZmFmYic7XG4gICAgICAgICAgICAgIGZiU3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgZmJTdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgICAgICAgIGZiU3R5bGUuZ2FwID0gJzNweCc7XG4gICAgICAgICAgICAgIGNvbnN0IGZpZWxkSGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBjb25zdCBoZWFkU3R5bGUyID0gZmllbGRIZWFkLnN0eWxlO1xuICAgICAgICAgICAgICBoZWFkU3R5bGUyLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIGhlYWRTdHlsZTIuanVzdGlmeUNvbnRlbnQgPSAnc3BhY2UtYmV0d2Vlbic7XG4gICAgICAgICAgICAgIGhlYWRTdHlsZTIuYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgICAgICAgICAgICBjb25zdCBsYWJlbEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3Ryb25nJyk7XG4gICAgICAgICAgICAgIGxldCBsYWJlbFRleHQgPSBmaWVsZDtcbiAgICAgICAgICAgICAgaWYgKGRlZkxpa2U/LmxhYmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsYWJlbFRleHQgPSBTdHJpbmcoZGVmTGlrZS5sYWJlbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFiZWxFbC50ZXh0Q29udGVudCA9IGxhYmVsVGV4dDtcbiAgICAgICAgICAgICAgbGFiZWxFbC5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgICAgICAgY29uc3QgaGVhZEFjdGlvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgaGVhZEFjdGlvbnMuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgaGVhZEFjdGlvbnMuc3R5bGUuZ2FwID0gJzRweCc7XG4gICAgICAgICAgICAgIGNvbnN0IGNsZWFyRmllbGRCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgICAgY2xlYXJGaWVsZEJ0bi50ZXh0Q29udGVudCA9ICdjbGVhcic7XG4gICAgICAgICAgICAgIHN0eWxlTWluaUJ1dHRvbihjbGVhckZpZWxkQnRuLCAnIzZhNzM3ZCcpO1xuICAgICAgICAgICAgICAvKiogQ2xlYXIgb25seSB0aGlzIGZpZWxkJ3MgZmlsdGVycy4gKi9cbiAgICAgICAgICAgICAgZnVuY3Rpb24gb25DbGVhckZpZWxkKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0geyAuLi5wYXJzZWRGaWx0ZXJzIH07XG4gICAgICAgICAgICAgICAgICBuZXh0W2ZpZWxkXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgY29udGV4dC5uYXZpZ2F0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG5leHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclNjaGVtYTogbWVyZ2VkLFxuICAgICAgICAgICAgICAgICAgICBiYXRjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNsZWFyRmllbGRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsZWFyRmllbGQpO1xuICAgICAgICAgICAgICBoZWFkQWN0aW9ucy5hcHBlbmRDaGlsZChjbGVhckZpZWxkQnRuKTtcbiAgICAgICAgICAgICAgZmllbGRIZWFkLmFwcGVuZENoaWxkKGxhYmVsRWwpO1xuICAgICAgICAgICAgICBmaWVsZEhlYWQuYXBwZW5kQ2hpbGQoaGVhZEFjdGlvbnMpO1xuICAgICAgICAgICAgICBmaWVsZEJveC5hcHBlbmRDaGlsZChmaWVsZEhlYWQpO1xuICAgICAgICAgICAgICBjb25zdCBvcHNXcmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGNvbnN0IG9wc1dyYXBTdHlsZSA9IG9wc1dyYXAuc3R5bGU7XG4gICAgICAgICAgICAgIG9wc1dyYXBTdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBvcHNXcmFwU3R5bGUuZmxleFdyYXAgPSAnd3JhcCc7XG4gICAgICAgICAgICAgIG9wc1dyYXBTdHlsZS5nYXAgPSAnNHB4JztcbiAgICAgICAgICAgICAgY29uc3QgcHJlc2VudCA9IHBhcnNlZEZpbHRlcnNbZmllbGRdID8/IHt9O1xuICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0cyA9IGRlZkxpa2U/LmRlZmF1bHRzID8/IHt9O1xuICAgICAgICAgICAgICBsZXQgYWxsb3dlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmTGlrZT8ub3BlcmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGFsbG93ZWQgPSBkZWZMaWtlLm9wZXJhdG9ycy5zbGljZSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlZkxpa2U/LmtpbmQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgYWxsb3dlZCA9IFtcbiAgICAgICAgICAgICAgICAgICdlcScsXG4gICAgICAgICAgICAgICAgICAnbmVxJyxcbiAgICAgICAgICAgICAgICAgICdndCcsXG4gICAgICAgICAgICAgICAgICAnZ3RlJyxcbiAgICAgICAgICAgICAgICAgICdsdCcsXG4gICAgICAgICAgICAgICAgICAnbHRlJyxcbiAgICAgICAgICAgICAgICAgICdpbicsXG4gICAgICAgICAgICAgICAgICAnbmluJyxcbiAgICAgICAgICAgICAgICAgICdiZXR3ZWVuJyxcbiAgICAgICAgICAgICAgICAgICdleGlzdHMnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxsb3dlZCA9IFtcbiAgICAgICAgICAgICAgICAgICdlcScsXG4gICAgICAgICAgICAgICAgICAnbmVxJyxcbiAgICAgICAgICAgICAgICAgICdpbicsXG4gICAgICAgICAgICAgICAgICAnbmluJyxcbiAgICAgICAgICAgICAgICAgICdiZXR3ZWVuJyxcbiAgICAgICAgICAgICAgICAgICdleGlzdHMnLFxuICAgICAgICAgICAgICAgICAgJ2NvbnRhaW5zJyxcbiAgICAgICAgICAgICAgICAgICdzdGFydHMnLFxuICAgICAgICAgICAgICAgICAgJ2VuZHMnLFxuICAgICAgICAgICAgICAgICAgJ3JlZ2V4JyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgYWxsb3dlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhblN0eWxlID0gc3Bhbi5zdHlsZTtcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtZmxleCc7XG4gICAgICAgICAgICAgICAgc3BhblN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUuZ2FwID0gJzJweCc7XG4gICAgICAgICAgICAgICAgc3BhblN0eWxlLnBhZGRpbmcgPSAnMXB4IDVweCc7XG4gICAgICAgICAgICAgICAgc3BhblN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMnB4JztcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZDBkN2RlJztcbiAgICAgICAgICAgICAgICBzcGFuU3R5bGUuZm9udFNpemUgPSAnMTBweCc7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlVmFsID0gcHJlc2VudFtvcF07XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBzcGFuU3R5bGUuYmFja2dyb3VuZCA9ICcjZTZmZmVkJztcbiAgICAgICAgICAgICAgICAgIHNwYW5TdHlsZS5ib3JkZXJDb2xvciA9ICcjMzRkMDU4JztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgIG9wVGV4dC50ZXh0Q29udGVudCA9IG9wO1xuICAgICAgICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChvcFRleHQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2xvc2VCdG5PcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgY2xvc2VCdG5PcC50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgICAgICAgICAgICAgICBzdHlsZVBpbGxDbG9zZShjbG9zZUJ0bk9wKTtcbiAgICAgICAgICAgICAgICAgIC8qKiBSZW1vdmUgdGhpcyBvcGVyYXRvciBmcm9tIHRoZSBmaWVsZCBmaWx0ZXIuICovXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblJlbW92ZU9wZXJhdG9yKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnBhcnNlZEZpbHRlcnMgfSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgID47XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRbZmllbGRdID8/IHt9O1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlGaWVsZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayAhPT0gb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29weUZpZWxkW2tdID0gZXhpc3Rpbmdba107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG5leHRbZmllbGRdID0gY29weUZpZWxkO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmF2aWdhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogbmV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNjaGVtYTogbWVyZ2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2g6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjbG9zZUJ0bk9wLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25SZW1vdmVPcGVyYXRvcik7XG4gICAgICAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGNsb3NlQnRuT3ApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0RlZmF1bHQgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAgICAgICAgICAgICBvcCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBgJHtvcH0gKGRlZmF1bHQpYDtcbiAgICAgICAgICAgICAgICAgICAgc3BhblN0eWxlLmZvbnRTdHlsZSA9ICdpdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnRpdGxlID0gJ0RlZmF1bHQgdmFsdWUgb21pdHRlZCBpbiBVUkwnO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IG9wO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc3BhblN0eWxlLm9wYWNpdHkgPSAnMC41NSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wc1dyYXAuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmllbGRCb3guYXBwZW5kQ2hpbGQob3BzV3JhcCk7XG4gICAgICAgICAgICAgIGZpbHRlcnNCb2R5LmFwcGVuZENoaWxkKGZpZWxkQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8qIGlnbm9yZSBmaWx0ZXJzIHRhYiAqL1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogaWdub3JlIHJlbmRlciAqL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpO1xuICAgIHVuc3Vic2NyaWJlID0gY29udGV4dC5zdWJzY3JpYmUocmVuZGVyKTtcbiAgICAvKipcbiAgICAgKiBTd2l0Y2ggdmlzaWJsZSB0YWIgYmV0d2VlbiBSb3V0ZSBhbmQgRmlsdGVycyB2aWV3cy5cbiAgICAgKiBAcGFyYW0gbmFtZSBUYXJnZXQgdGFiIGlkZW50aWZpZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWN0aXZhdGVUYWIobmFtZTogJ3JvdXRlJyB8ICdmaWx0ZXJzJyk6IHZvaWQge1xuICAgICAgaWYgKG5hbWUgPT09ICdyb3V0ZScpIHtcbiAgICAgICAgcm91dGVUYWJDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGZpbHRlcnNUYWJDb250ZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIHJvdXRlVGFiQnV0dG9uLmRhdGFzZXQuYWN0aXZlID0gJ3RydWUnO1xuICAgICAgICBmaWx0ZXJzVGFiQnV0dG9uLmRhdGFzZXQuYWN0aXZlID0gJ2ZhbHNlJztcbiAgICAgICAgcm91dGVUYWJCdXR0b24uc3R5bGUuZm9udFdlaWdodCA9ICc2MDAnO1xuICAgICAgICBmaWx0ZXJzVGFiQnV0dG9uLnN0eWxlLmZvbnRXZWlnaHQgPSAnbm9ybWFsJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvdXRlVGFiQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBmaWx0ZXJzVGFiQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBmaWx0ZXJzVGFiQnV0dG9uLmRhdGFzZXQuYWN0aXZlID0gJ3RydWUnO1xuICAgICAgICByb3V0ZVRhYkJ1dHRvbi5kYXRhc2V0LmFjdGl2ZSA9ICdmYWxzZSc7XG4gICAgICAgIGZpbHRlcnNUYWJCdXR0b24uc3R5bGUuZm9udFdlaWdodCA9ICc2MDAnO1xuICAgICAgICByb3V0ZVRhYkJ1dHRvbi5zdHlsZS5mb250V2VpZ2h0ID0gJ25vcm1hbCc7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBBY3RpdmF0ZSByb3V0ZSB0YWIuICovXG4gICAgZnVuY3Rpb24gb25Sb3V0ZVRhYkNsaWNrKCk6IHZvaWQge1xuICAgICAgYWN0aXZhdGVUYWIoJ3JvdXRlJyk7XG4gICAgfVxuICAgIC8qKiBBY3RpdmF0ZSBmaWx0ZXJzIHRhYi4gKi9cbiAgICBmdW5jdGlvbiBvbkZpbHRlcnNUYWJDbGljaygpOiB2b2lkIHtcbiAgICAgIGFjdGl2YXRlVGFiKCdmaWx0ZXJzJyk7XG4gICAgfVxuICAgIHJvdXRlVGFiQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25Sb3V0ZVRhYkNsaWNrKTtcbiAgICBmaWx0ZXJzVGFiQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25GaWx0ZXJzVGFiQ2xpY2spO1xuICAgIC8qKiBLZXlkb3duIGhhbmRsZXIgZm9yIHNob3J0Y3V0IHRvZ2dsZS4gKi9cbiAgICBmdW5jdGlvbiBvbktleWRvd24oZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoZXYuYWx0S2V5KSBwYXJ0cy5wdXNoKCdBbHQnKTtcbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSBwYXJ0cy5wdXNoKCdTaGlmdCcpO1xuICAgICAgICBpZiAoZXYuY3RybEtleSkgcGFydHMucHVzaCgnQ3RybCcpO1xuICAgICAgICBsZXQga2V5UGFydCA9IGV2LmtleTtcbiAgICAgICAgaWYgKGV2LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBrZXlQYXJ0ID0gZXYua2V5LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChrZXlQYXJ0KTtcbiAgICAgICAgY29uc3QgY29tYm8gPSBwYXJ0cy5qb2luKCcrJyk7XG4gICAgICAgIGNvbnN0IG5vcm1TaG9ydGN1dCA9IHNob3J0Y3V0LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgICBpZiAoY29tYm8gPT09IG5vcm1TaG9ydGN1dCkge1xuICAgICAgICAgIGlmIChob3N0LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8qIGlnbm9yZSBzaG9ydGN1dCAqL1xuICAgICAgfVxuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5ZG93bik7XG4gICAgcmV0dXJuIHJlY29yZE5hdkV2ZW50O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gc2lsZW50UmVjb3JkZXIoKSB7XG4gICAgICAvKiBpZ25vcmUgZXJyb3JzIG1vdW50aW5nICovXG4gICAgfTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBBUElcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEluaXRpYWxpemUgcm91dGVyIGRldnRvb2xzIGJhc2VkIG9uIHByb3ZpZGVkIG9wdGlvbnMuXG4gKiBPcHRpb25hbGx5IGV4cG9zZXMgY29udGV4dCBnbG9iYWxseSwgbW91bnRzIFVJIHBhbmVsLCBhbmQgcmV0dXJucyBhIG5hdiBldmVudCBoYW5kbGVyLlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIHNob3VsZCBiZSBpbnZva2VkIGJ5IHJvdXRlciBjb2RlIHdoZW5ldmVyIGEgbmF2aWdhdGlvbiBtZXRhIGV2ZW50IG9jY3Vycy5cbiAqIEBwYXJhbSBwYXJhbXMuY29udGV4dCBUaGUgcm91dGluZyBjb250ZXh0IGluc3RhbmNlLlxuICogQHBhcmFtIHBhcmFtcy5vcHRpb25zIERldnRvb2xzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEZ1bmN0aW9uIHJlY2VpdmluZyBhIE5hdkV2ZW50TWV0YVB1YmxpYyB0byBmZWVkIHRoZSB0aW1lbGluZSAobm9vcCBpZiBwYW5lbCBkaXNhYmxlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Um91dGVyRGV2dG9vbHMocGFyYW1zOiB7XG4gIGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+O1xuICBvcHRpb25zOiBJbml0Um91dGVyRGV2dG9vbHNPcHRpb25zO1xufSk6IChtZXRhOiBOYXZFdmVudE1ldGFQdWJsaWMpID0+IHZvaWQge1xuICBjb25zdCB7IGNvbnRleHQsIG9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBnbG9iYWwsIHBhbmVsLCBzaG9ydGN1dCB9ID0gb3B0aW9ucztcblxuICAvLyBHbG9iYWwgd2luZG93IGV4cG9zdXJlXG4gIGlmIChnbG9iYWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUExVTUlMRV9ST1VURVJfXyA9IHtcbiAgICAgICAgICBnZXQ6IGNvbnRleHQuZ2V0LFxuICAgICAgICAgIHN1YnNjcmliZTogY29udGV4dC5zdWJzY3JpYmUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cblxuICAvKiogTm8tb3AgcmVjb3JkZXIgdXNlZCB3aGVuIHBhbmVsIGRpc2FibGVkLiAqL1xuICBmdW5jdGlvbiBub29wTmF2UmVjb3JkZXIoKTogdm9pZCB7XG4gICAgLyogbm9vcCAqL1xuICB9XG4gIGxldCBuYXZSZWNvcmRlcjogKG06IE5hdkV2ZW50TWV0YVB1YmxpYykgPT4gdm9pZCA9IG5vb3BOYXZSZWNvcmRlcjtcbiAgaWYgKHBhbmVsKSB7XG4gICAgbmF2UmVjb3JkZXIgPSBtb3VudERldnRvb2xzUGFuZWwoe1xuICAgICAgY29udGV4dCxcbiAgICAgIHNob3J0Y3V0LFxuICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgIH0pO1xuICB9XG4gIC8qKiBGb3J3YXJkIG5hdmlnYXRpb24gbWV0YSBldmVudCB0byBhY3RpdmUgcmVjb3JkZXIuICovXG4gIGZ1bmN0aW9uIGhhbmRsZU5hdkV2ZW50KG1ldGE6IE5hdkV2ZW50TWV0YVB1YmxpYyk6IHZvaWQge1xuICAgIG5hdlJlY29yZGVyKG1ldGEpO1xuICB9XG4gIHJldHVybiBoYW5kbGVOYXZFdmVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdFJvdXRlckRldnRvb2xzO1xuIl19
|