@datagrok-libraries/utils 4.5.4 → 4.5.5
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/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/src/test.d.ts.map +1 -1
- package/src/test.js +19 -5
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
package/src/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
|
package/src/test.js
CHANGED
|
@@ -53,13 +53,14 @@ export class Test {
|
|
|
53
53
|
this.options = options;
|
|
54
54
|
this.test = () => __awaiter(this, void 0, void 0, function* () {
|
|
55
55
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
var _b;
|
|
56
57
|
let result = '';
|
|
57
58
|
try {
|
|
58
59
|
if (DG.Test.isInDebug)
|
|
59
60
|
debugger;
|
|
60
61
|
let res = yield test();
|
|
61
62
|
try {
|
|
62
|
-
result = res.toString();
|
|
63
|
+
result = (_b = res === null || res === void 0 ? void 0 : res.toString()) !== null && _b !== void 0 ? _b : '';
|
|
63
64
|
}
|
|
64
65
|
catch (e) {
|
|
65
66
|
result = 'Can\'t convert test\'s result to string';
|
|
@@ -407,13 +408,15 @@ export function runTests(options) {
|
|
|
407
408
|
return invokationResult;
|
|
408
409
|
});
|
|
409
410
|
}
|
|
411
|
+
const memoryDelta = 'memoryDelta';
|
|
412
|
+
const widgetsDelta = 'widgetsDelta';
|
|
410
413
|
function invokeTestsInCategory(category, options) {
|
|
411
414
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5;
|
|
412
415
|
return __awaiter(this, void 0, void 0, function* () {
|
|
413
416
|
let t = (_a = category.tests) !== null && _a !== void 0 ? _a : [];
|
|
414
417
|
const res = [];
|
|
415
418
|
let memoryUsageBefore = (_c = (_b = window === null || window === void 0 ? void 0 : window.performance) === null || _b === void 0 ? void 0 : _b.memory) === null || _c === void 0 ? void 0 : _c.usedJSHeapSize;
|
|
416
|
-
const widgetsBefore =
|
|
419
|
+
const widgetsBefore = getWidgetsCountSafe();
|
|
417
420
|
if (category.clear) {
|
|
418
421
|
for (let i = 0; i < t.length; i++) {
|
|
419
422
|
if (t[i].options) {
|
|
@@ -439,7 +442,7 @@ export function runTests(options) {
|
|
|
439
442
|
if (isGBEnable)
|
|
440
443
|
yield window.gc();
|
|
441
444
|
if (testRun)
|
|
442
|
-
res.push(Object.assign(Object.assign({}, testRun), { memoryDelta: ((_t = (_s = window === null || window === void 0 ? void 0 : window.performance) === null || _s === void 0 ? void 0 : _s.memory) === null || _t === void 0 ? void 0 : _t.usedJSHeapSize) - memoryUsageBefore, widgetsDelta:
|
|
445
|
+
res.push(Object.assign(Object.assign({}, testRun), { [memoryDelta]: ((_t = (_s = window === null || window === void 0 ? void 0 : window.performance) === null || _s === void 0 ? void 0 : _s.memory) === null || _t === void 0 ? void 0 : _t.usedJSHeapSize) - memoryUsageBefore, [widgetsDelta]: getWidgetsCountSafe() - widgetsBefore }));
|
|
443
446
|
grok.shell.closeAll();
|
|
444
447
|
DG.Balloon.closeAll();
|
|
445
448
|
}
|
|
@@ -462,12 +465,23 @@ export function runTests(options) {
|
|
|
462
465
|
if (isGBEnable)
|
|
463
466
|
yield window.gc();
|
|
464
467
|
if (testRun)
|
|
465
|
-
res.push(Object.assign(Object.assign({}, testRun), { memoryDelta: ((_5 = (_4 = window === null || window === void 0 ? void 0 : window.performance) === null || _4 === void 0 ? void 0 : _4.memory) === null || _5 === void 0 ? void 0 : _5.usedJSHeapSize) - memoryUsageBefore, widgetsDifference:
|
|
468
|
+
res.push(Object.assign(Object.assign({}, testRun), { memoryDelta: ((_5 = (_4 = window === null || window === void 0 ? void 0 : window.performance) === null || _4 === void 0 ? void 0 : _4.memory) === null || _5 === void 0 ? void 0 : _5.usedJSHeapSize) - memoryUsageBefore, widgetsDifference: getWidgetsCountSafe() - widgetsBefore }));
|
|
466
469
|
}
|
|
467
470
|
}
|
|
468
471
|
return res;
|
|
469
472
|
});
|
|
470
473
|
}
|
|
474
|
+
function getWidgetsCountSafe() {
|
|
475
|
+
var _a;
|
|
476
|
+
let length = -1;
|
|
477
|
+
try {
|
|
478
|
+
length = DG.Widget.getAll().length;
|
|
479
|
+
}
|
|
480
|
+
catch (e) {
|
|
481
|
+
console.warn((_a = e.message) !== null && _a !== void 0 ? _a : e);
|
|
482
|
+
}
|
|
483
|
+
return length;
|
|
484
|
+
}
|
|
471
485
|
function invokeTests(categoriesToInvoke, options) {
|
|
472
486
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
473
487
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -765,4 +779,4 @@ export function testViewer(v, df, options) {
|
|
|
765
779
|
}
|
|
766
780
|
});
|
|
767
781
|
}
|
|
768
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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ckMsTUFBTSxHQUFHLEdBQUksS0FBSyxDQUFDLENBQUMsQ0FBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDL0MsTUFBTSxHQUFHLEdBQWdHLEVBQUUsQ0FBQztvQkFDNUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzs0QkFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUMvQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDOzRCQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQzlELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7NEJBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDbEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQzs0QkFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzRSxDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFTLEVBQUU7d0JBQ3JHLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FB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ayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGVzdERhdGEgfSBmcm9tICcuL2RhdGFmcmFtZS11dGlscyc7XG5pbXBvcnQgVGltZW91dCA9IE5vZGVKUy5UaW1lb3V0O1xuaW1wb3J0IHsgY2hhbmdlT3B0aW9uc1NhdmVMYXlvdXQsIGZpbHRlckFzeW5jLCBsb2FkTGF5b3V0LCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50LCB0ZXN0Vmlld2VySW50ZXJuYWwgfSBmcm9tICcuL3Rlc3Qtdmlld2VyLXV0aWxzJztcblxuY29uc3QgU1RBTkRBUlRfVElNRU9VVCA9IDMwMDAwO1xuY29uc3QgQkVOQ0hNQVJLX1RJTUVPVVQgPSAxMDgwMDAwMDtcblxuY29uc3Qgc3RkTG9nID0gY29uc29sZS5sb2cuYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZEluZm8gPSBjb25zb2xlLmluZm8uYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZFdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IHN0ZEVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuXG5leHBvcnQgY29uc3QgdGVzdHM6IHtcbiAgW2tleTogc3RyaW5nXTogQ2F0ZWdvcnlcbn0gPSB7fTtcblxuY29uc3QgYXV0b1Rlc3RzQ2F0TmFtZSA9ICdBdXRvIFRlc3RzJztcbmNvbnN0IGRlbW9DYXROYW1lID0gJ0RlbW8nO1xuY29uc3QgZGV0ZWN0b3JzQ2F0TmFtZSA9ICdEZXRlY3RvcnMnO1xuY29uc3QgY29yZUNhdE5hbWUgPSAnQ29yZSc7XG5jb25zdCB3YXNSZWdpc3RlcmVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZztcblxuZXhwb3J0IG5hbWVzcGFjZSBhc3N1cmUge1xuICBleHBvcnQgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1dhcm5UaW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtUaW1lb3V0PzogbnVtYmVyO1xuICB1bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0PzogbnVtYmVyO1xuICBza2lwUmVhc29uPzogc3RyaW5nO1xuICBpc0FnZ3JlZ2F0ZWQ/OiBib29sZWFuO1xuICBiZW5jaG1hcms/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeU9wdGlvbnMge1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0cz86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSBTVEFOREFSVF9USU1FT1VUO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50ZXN0ID0gYXN5bmMgKCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKERHLlRlc3QuaXNJbkRlYnVnKVxuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgXG4gICAgICAgICAgbGV0IHJlcyA9IGF3YWl0IHRlc3QoKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhdGNoIChlKSB7IFxuICAgICAgICAgICAgcmVzdWx0ID0gJ0NhblxcJ3QgY29udmVydCB0ZXN0XFwncyByZXN1bHQgdG8gc3RyaW5nJztcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENhblxcJ3QgY29udmVydCB0ZXN0XFwncyByZXN1bHQgdG8gc3RyaW5nIGluIHRoZSAke3RoaXMuY2F0ZWdvcnl9OiR7dGhpcy5uYW1lfSB0ZXN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnkge1xuICB0ZXN0cz86IFRlc3RbXTtcbiAgYmVmb3JlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgYWZ0ZXI/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGJlZm9yZVN0YXR1cz86IHN0cmluZztcbiAgYWZ0ZXJTdGF0dXM/OiBzdHJpbmc7XG4gIGNsZWFyPzogYm9vbGVhbjtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrcz86IGJvb2xlYW47XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHN0cmVzc1Rlc3RzPzogYm9vbGVhbjtcbiAgb3duZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0RXhlY3V0aW9uT3B0aW9ucyB7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICB0ZXN0Pzogc3RyaW5nO1xuICB0ZXN0Q29udGV4dD86IFRlc3RDb250ZXh0O1xuICBleGNsdWRlPzogc3RyaW5nW107XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBzdHJlc3NUZXN0PzogYm9vbGVhbjtcbiAgdGFncz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudEFzeW5jPFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gUHJvbWlzZTx2b2lkPiwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgaGFuZGxlcihhcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkgPSB0cnVlLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXJyb3IpXG4gICAgZXJyb3IgPSBgJHtlcnJvcn0sIGA7XG4gIGVsc2UgZXJyb3IgPSAnJztcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5OYU4gJiYgZXhwZWN0ZWQgPT09IE51bWJlci5OYU4pIHx8IChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciA/PyAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbiAgaWYgKCFhcmVFcXVhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RUYWJsZShhY3R1YWw6IERHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IERHLkRhdGFGcmFtZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICBjb25zdCBhY3R1YWxSb3dDb3VudCA9IGFjdHVhbC5yb3dDb3VudDtcbiAgZXhwZWN0KGFjdHVhbFJvd0NvdW50LCBleHBlY3RlZFJvd0NvdW50LCBgJHtlcnJvciA/PyAnJ30sIHJvdyBjb3VudGApO1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICBjb25zdCBhY3R1YWxDb2x1bW4gPSBhY3R1YWwuY29sdW1ucy5ieU5hbWUoY29sdW1uLm5hbWUpO1xuICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPSBjb2x1bW4udHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZFJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmdldChpKTtcbiAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsQ29sdW1uLmdldChpKTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PSBERy5UWVBFLkZMT0FUKVxuICAgICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgdmFsdWUsIDAuMDAwMSwgZXJyb3IpO1xuICAgICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5EQVRFX1RJTUUpXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICBlbHNlXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZSwgdmFsdWUsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGV4cGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcblxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzRmluaXRlKGFjdHVhbFZhbHVlKSAmJiBOdW1iZXIuaXNGaW5pdGUoZXhwZWN0ZWRWYWx1ZSkpXG4gICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsOiBBcnJheUxpa2U8YW55PiwgZXhwZWN0ZWQ6IEFycmF5TGlrZTxhbnk+KSB7XG4gIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuXG4gIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzXzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IENhdGVnb3J5T3B0aW9ucyk6IHZvaWQge1xuICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGVzdHNfKCk7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldKSB7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5jbGVhciA9IG9wdGlvbnM/LmNsZWFyID8/IHRydWU7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50aW1lb3V0ID0gb3B0aW9ucz8udGltZW91dDtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlbmNobWFya3MgPSBvcHRpb25zPy5iZW5jaG1hcmtzO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uc3RyZXNzVGVzdHMgPSBvcHRpb25zPy5zdHJlc3NUZXN0cztcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLm93bmVyID0gb3B0aW9ucz8ub3duZXI7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5cbmZ1bmN0aW9uIGFkZE5hbWVzcGFjZShzOiBzdHJpbmcsIGY6IERHLkZ1bmMpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKG5ldyBSZWdFeHAoZi5uYW1lLCAnZ2knKSwgZi5ucU5hbWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlXzogREcuUGFja2FnZSwgbW9kdWxlPzogYW55KSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VfLmlkO1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdICE9PSB1bmRlZmluZWQgfHxcbiAgICBPYmplY3Qua2V5cyhtb2R1bGVUZXN0cykuZmluZCgoYykgPT4gYy5zdGFydHNXaXRoKGF1dG9UZXN0c0NhdE5hbWUpIHx8IGMuc3RhcnRzV2l0aChjb3JlQ2F0TmFtZSkpKSB7XG4gICAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhY2thZ2VfLm5hbWUgPT09ICdEZXZUb29scycgfHwgKCEhbW9kdWxlICYmIG1vZHVsZS5fcGFja2FnZS5uYW1lID09PSAnRGV2VG9vbHMnKSkge1xuICAgIGZvciAoY29uc3QgZiBvZiAoPGFueT53aW5kb3cpLmRhcnRUZXN0cykge1xuICAgICAgY29uc3QgYXJyID0gZi5uYW1lLnNwbGl0KC9cXHMqXFx8XFxzKiEvZyk7XG4gICAgICBsZXQgbmFtZSA9IGFyci5wb3AoKSA/PyBmLm5hbWU7XG4gICAgICBsZXQgY2F0ID0gYXJyLmxlbmd0aCA/IGNvcmVDYXROYW1lICsgJzogJyArIGFyci5qb2luKCc6ICcpIDogY29yZUNhdE5hbWU7XG4gICAgICBsZXQgZnVsbE5hbWU6IHN0cmluZ1tdID0gbmFtZS5zcGxpdCgnIHwgJyk7XG4gICAgICBuYW1lID0gZnVsbE5hbWVbZnVsbE5hbWUubGVuZ3RoIC0gMV07XG4gICAgICBmdWxsTmFtZS51bnNoaWZ0KGNhdCk7XG4gICAgICBmdWxsTmFtZS5wb3AoKTtcbiAgICAgIGNhdCA9IGZ1bGxOYW1lLmpvaW4oJzogJyk7XG4gICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG4gICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2gobmV3IFRlc3QoY2F0LCBuYW1lLCBmLnRlc3QsIHsgaXNBZ2dyZWdhdGVkOiBmYWxzZSwgdGltZW91dDogZi5vcHRpb25zPy50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQsIHNraXBSZWFzb246IGYub3B0aW9ucz8uc2tpcFJlYXNvbiwgb3duZXI6IGYub3B0aW9ucz8ub3duZXIgfSkpO1xuICAgIH1cbiAgfVxuICBjb25zdCBtb2R1bGVBdXRvVGVzdHMgPSBbXTtcbiAgY29uc3QgbW9kdWxlRGVtbyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZXRlY3RvcnMgPSBbXTtcbiAgY29uc3QgcGFja0Z1bmN0aW9ucyA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuZmlsdGVyKGBwYWNrYWdlLmlkID0gXCIke3BhY2thZ2VJZH1cImApLmxpc3QoKTtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cCgvc2tpcDpcXHMqKFteLFxcc10rKXx3YWl0OlxccyooXFxkKyl8Y2F0OlxccyooW14sXFxzXSspfHRpbWVvdXQ6XFxzKihcXGQrKS9nKTtcbiAgZm9yIChjb25zdCBmIG9mIHBhY2tGdW5jdGlvbnMpIHtcbiAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgIGNvbnN0IGRlbW8gPSBmLm9wdGlvbnNbJ2RlbW9QYXRoJ107XG4gICAgaWYgKCh0ZXN0cyAmJiBBcnJheS5pc0FycmF5KHRlc3RzKSAmJiB0ZXN0cy5sZW5ndGgpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICh0ZXN0c1tpXSBhcyBzdHJpbmcpLm1hdGNoQWxsKHJlZyk7XG4gICAgICAgIGNvbnN0IG1hcDogeyBza2lwPzogc3RyaW5nLCB3YWl0PzogbnVtYmVyLCBjYXQ/OiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIsIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXIgfSA9IHt9O1xuICAgICAgICBBcnJheS5mcm9tKHJlcykuZm9yRWFjaCgoYXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGFyclswXS5zdGFydHNXaXRoKCdza2lwJykpIG1hcFsnc2tpcCddID0gYXJyWzFdO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCd3YWl0JykpIG1hcFsnd2FpdCddID0gcGFyc2VJbnQoYXJyWzJdKTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgnY2F0JykpIG1hcFsnY2F0J10gPSBhcnJbM107XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3RpbWVvdXQnKSkgbWFwWyd0aW1lb3V0J10gPSBwYXJzZUludChhcnJbNF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGF1dG9UZXN0c0NhdE5hbWUsIHRlc3RzLmxlbmd0aCA9PT0gMSA/IGYubmFtZSA6IGAke2YubmFtZX0gJHtpICsgMX1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ3Jvay5mdW5jdGlvbnMuZXZhbChhZGROYW1lc3BhY2UodGVzdHNbaV0sIGYpKTtcbiAgICAgICAgICBpZiAobWFwLndhaXQpIGF3YWl0IGRlbGF5KG1hcC53YWl0KTtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnYm9vbGVhbicgJiYgIXJlcykgdGhyb3cgYEZhaWxlZDogJHt0ZXN0c1tpXX0sIGV4cGVjdGVkIHRydWUsIGdvdCAke3Jlc31gO1xuICAgICAgICB9LCB7IHNraXBSZWFzb246IG1hcC5za2lwLCB0aW1lb3V0OiBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyBtYXAuYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IG1hcC50aW1lb3V0ID8/IFNUQU5EQVJUX1RJTUVPVVQgfSk7XG4gICAgICAgIGlmIChtYXAuY2F0KSB7XG4gICAgICAgICAgY29uc3QgY2F0OiBzdHJpbmcgPSBhdXRvVGVzdHNDYXROYW1lICsgJzogJyArIG1hcC5jYXQ7XG4gICAgICAgICAgdGVzdC5jYXRlZ29yeSA9IGNhdDtcbiAgICAgICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgbW9kdWxlQXV0b1Rlc3RzLnB1c2godGVzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZW1vKSB7XG4gICAgICBjb25zdCB3YWl0ID0gZi5vcHRpb25zWydkZW1vV2FpdCddID8gcGFyc2VJbnQoZi5vcHRpb25zWydkZW1vV2FpdCddKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZW1vQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGVsYXkoMzAwKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5jbGVhckxhc3RFcnJvcigpO1xuICAgICAgICBhd2FpdCBmLmFwcGx5KCk7XG4gICAgICAgIGF3YWl0IGRlbGF5KHdhaXQgPyB3YWl0IDogMjAwMCk7XG4gICAgICAgIGNvbnN0IHVuaGFuZGxlZCA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgICBpZiAodW5oYW5kbGVkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1bmhhbmRsZWQpO1xuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ2RlbW9Ta2lwJ10gfSk7XG4gICAgICBtb2R1bGVEZW1vLnB1c2godGVzdCk7XG4gICAgfVxuICAgIGlmIChmLmhhc1RhZygnc2VtVHlwZURldGVjdG9yJykpIHtcbiAgICAgIGxldCBkZXRlY3RvcnNUZXN0RGF0YSA9IHRlc3REYXRhO1xuICAgICAgaWYgKGYub3B0aW9uc1sndGVzdERhdGEnXSkge1xuICAgICAgICBkZXRlY3RvcnNUZXN0RGF0YSA9IGF3YWl0IGdyb2suZGF0YS5maWxlcy5vcGVuVGFibGUoYFN5c3RlbTpBcHBEYXRhLyR7cGFja2FnZV8ubnFOYW1lfS8ke2Yub3B0aW9uc1sndGVzdERhdGEnXX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRldGVjdG9yc0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBjb25zb2xlLmxvZyhgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGRldGVjdG9yc1Rlc3REYXRhLmNsb25lKCkuY29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGYuYXBwbHkoW2NvbF0pO1xuICAgICAgICAgIGFyci5wdXNoKHJlcyB8fCBjb2wuc2VtVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzQXJyID0gYXJyLmZpbHRlcigoaSkgPT4gaSk7XG4gICAgICAgIGV4cGVjdChyZXNBcnIubGVuZ3RoLCAxKTtcblxuICAgICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YUNvbHVtbk5hbWUnXSlcbiAgICAgICAgICBleHBlY3QocmVzQXJyWzBdLCBmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKTtcblxuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ3NraXBUZXN0J10gfSk7XG4gICAgICBtb2R1bGVEZXRlY3RvcnMucHVzaCh0ZXN0KTtcbiAgICB9XG4gIH1cbiAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgaWYgKG1vZHVsZUF1dG9UZXN0cy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlQXV0b1Rlc3RzLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGVtby5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURlbW8sIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZXRlY3RvcnMubGVuZ3RoID4gMClcbiAgICBtb2R1bGVUZXN0c1tkZXRlY3RvcnNDYXROYW1lXSA9IHsgdGVzdHM6IG1vZHVsZURldGVjdG9ycywgY2xlYXI6IGZhbHNlIH07XG59XG5cbmZ1bmN0aW9uIHJlZGVmaW5lQ29uc29sZSgpOiBhbnlbXSB7XG4gIGNvbnN0IGxvZ3M6IGFueVtdID0gW107XG4gIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkTG9nKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmluZm8gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRJbmZvKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLndhcm4gPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRXYXJuKC4uLmFyZ3MpO1xuICB9O1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkRXJyb3IoLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiBsb2dzO1xufVxuXG5mdW5jdGlvbiByZXNldENvbnNvbGUoKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nID0gc3RkTG9nO1xuICBjb25zb2xlLmluZm8gPSBzdGRJbmZvO1xuICBjb25zb2xlLndhcm4gPSBzdGRXYXJuO1xuICBjb25zb2xlLmVycm9yID0gc3RkRXJyb3I7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZXN0cyhvcHRpb25zPzogVGVzdEV4ZWN1dGlvbk9wdGlvbnMpIHtcbiAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLS0tJylcbiAgY29uc3QgcGFja2FnZV8gPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpPy5mdW5jPy5wYWNrYWdlO1xuICBjb25zdCBwYWNrYWdlT3duZXIgPSAoKHBhY2thZ2VfPy5wYWNrYWdlT3duZXIgPz8gJycpLm1hdGNoKG5ldyBSZWdFeHAoJ1tePF0qPChbXj5dKik+JykpID8/IFsnJywgJyddKVsxXTtcbiAgYXdhaXQgaW5pdEF1dG9UZXN0cyhwYWNrYWdlXyk7XG4gIGNvbnN0IHJlc3VsdHM6IHtcbiAgICBjYXRlZ29yeT86IHN0cmluZywgbmFtZT86IHN0cmluZywgc3VjY2VzczogYm9vbGVhbixcbiAgICByZXN1bHQ6IHN0cmluZywgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZywgb3duZXI/OiBzdHJpbmdcbiAgfVtdID0gW107XG4gIGNvbnNvbGUubG9nKGBSdW5uaW5nIHRlc3RzYCk7XG4gIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuICBvcHRpb25zID8/PSB7fTtcbiAgb3B0aW9ucyEudGVzdENvbnRleHQgPz89IG5ldyBUZXN0Q29udGV4dCgpO1xuICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gIGNvbnN0IGxvZ3MgPSByZWRlZmluZUNvbnNvbGUoKTtcblxuICBhd2FpdCBpbnZva2VUZXN0cyh0ZXN0cywgb3B0aW9ucyk7XG5cbiAgZm9yIChsZXQgciBvZiByZXN1bHRzKSB7XG4gICAgci5yZXN1bHQgPSByLnJlc3VsdC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgICBpZiAoci5sb2dzICE9IHVuZGVmaW5lZClcbiAgICAgIHIubG9ncyA9IHIubG9ncyEudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXFwnJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlQ2F0ZWdvcnlNZXRob2QobWV0aG9kOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQsIGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHZhciBpbnZva2F0aW9uUmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBpZiAobWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXdhaXQgdGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgbWV0aG9kKCk7XG4gICAgICAgIH0sIDEwMDAwMCwgYGJlZm9yZSAke2NhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgICAgaW52b2thdGlvblJlc3VsdCA9IGF3YWl0IGdldFJlc3VsdCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIGludm9rYXRpb25SZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGludm9rZVRlc3RzSW5DYXRlZ29yeShjYXRlZ29yeTogQ2F0ZWdvcnksIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGxldCB0ID0gY2F0ZWdvcnkudGVzdHMgPz8gW107XG4gICAgY29uc3QgcmVzID0gW107XG4gICAgbGV0IG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICBjb25zdCB3aWRnZXRzQmVmb3JlID0gREcuV2lkZ2V0LmdldEFsbCgpLmxlbmd0aDtcblxuICAgIGlmIChjYXRlZ29yeS5jbGVhcikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgaWYgKHRbaV0ub3B0aW9ucykge1xuICAgICAgICAgIGlmICh0W2ldLm9wdGlvbnM/LmJlbmNobWFyayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoIXRbaV0ub3B0aW9ucylcbiAgICAgICAgICAgICAgdFtpXS5vcHRpb25zID0ge31cbiAgICAgICAgICAgIHRbaV0ub3B0aW9ucyEuYmVuY2htYXJrID0gY2F0ZWdvcnkuYmVuY2htYXJrcyA/PyBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHRlc3Q/Lm9wdGlvbnMpIHtcbiAgICAgICAgICB0ZXN0Lm9wdGlvbnMub3duZXIgPSB0W2ldLm9wdGlvbnM/Lm93bmVyID8/IGNhdGVnb3J5Py5vd25lciA/PyBwYWNrYWdlT3duZXIgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzR0JFbmFibGUgPSAod2luZG93IGFzIGFueSkuZ2MgJiYgdGVzdC5vcHRpb25zPy5za2lwUmVhc29uID09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc29sZS5sb2coYCoqKioqKioqJHtpc0dCRW5hYmxlfWApO1xuICAgICAgICBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgICAgICBsZXQgdGVzdFJ1biA9IGF3YWl0IGV4ZWNUZXN0KHRlc3QsIG9wdGlvbnM/LnRlc3QsIGxvZ3MsIERHLlRlc3QuaXNJbkJlbmNobWFyayA/IHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrVGltZW91dCA/PyBCRU5DSE1BUktfVElNRU9VVCA6IHRbaV0ub3B0aW9ucz8udGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VULCBwYWNrYWdlXy5uYW1lLCBvcHRpb25zLnZlcmJvc2UpO1xuXG4gICAgICAgIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sIG1lbW9yeURlbHRhOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEZWx0YTogREcuV2lkZ2V0LmdldEFsbCgpLmxlbmd0aCAtIHdpZGdldHNCZWZvcmUgfSk7XG5cbiAgICAgICAgZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgICBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgdGVzdCA9IHRbaV07XG4gICAgICAgIGlmIChvcHRpb25zLnRlc3QpXG4gICAgICAgICAgaWYgKG9wdGlvbnMudGVzdC50b0xvd2VyQ2FzZSgpICE9PSB0ZXN0Lm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBpc0dCRW5hYmxlID0gKHdpbmRvdyBhcyBhbnkpLmdjICYmIHRlc3Qub3B0aW9ucz8uc2tpcFJlYXNvbiA9PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0ZXN0Py5vcHRpb25zKSB7XG4gICAgICAgICAgdGVzdC5vcHRpb25zLm93bmVyID0gdFtpXS5vcHRpb25zPy5vd25lciA/PyBjYXRlZ29yeT8ub3duZXIgPz8gcGFja2FnZU93bmVyID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGAqKioqKioqKiR7aXNHQkVuYWJsZX1gKTtcbiAgICAgICAgaWYgKGlzR0JFbmFibGUpXG4gICAgICAgICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICAgICAgbGV0IHRlc3RSdW4gPSBhd2FpdCBleGVjVGVzdCh0ZXN0LCBvcHRpb25zPy50ZXN0LCBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQsIHBhY2thZ2VfLm5hbWUsIG9wdGlvbnMudmVyYm9zZSk7XG5cbiAgICAgICAgaWYgKGlzR0JFbmFibGUpXG4gICAgICAgICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICByZXMucHVzaCh7IC4uLnRlc3RSdW4sIG1lbW9yeURlbHRhOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIHdpZGdldHNEaWZmZXJlbmNlOiBERy5XaWRnZXQuZ2V0QWxsKCkubGVuZ3RoIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHMoY2F0ZWdvcmllc1RvSW52b2tlOiB7IFtrZXk6IHN0cmluZ106IENhdGVnb3J5IH0sIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGVnb3JpZXNUb0ludm9rZSkpIHtcbiAgICAgICAgaWYgKCghIW9wdGlvbnM/LmNhdGVnb3J5ICYmICFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKSB8fFxuICAgICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgY29uc3Qgc2tpcHBlZCA9IHZhbHVlLnRlc3RzPy5ldmVyeSgodCkgPT4gdC5vcHRpb25zPy5za2lwUmVhc29uKTtcbiAgICAgICAgaWYgKCFza2lwcGVkKVxuICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmJlZm9yZSwgb3B0aW9ucy5jYXRlZ29yeSA/PyAnJyk7XG5cbiAgICAgICAgbGV0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlc3NUZXN0KSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PiBlLm9wdGlvbnM/LnN0cmVzc1Rlc3QpO1xuICAgICAgICAgIHQgPSBzaHVmZmxlKHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChvcHRpb25zLnRhZ3M/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgICB0ID0gdC5maWx0ZXIoKGUpID0+XG4gICAgICAgICAgICBlLm9wdGlvbnM/LnRhZ3M/LnNvbWUodGFnID0+IChvcHRpb25zPy50YWdzID8/IFtdKS5pbmNsdWRlcyh0YWcpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzOiBhbnlbXTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cykge1xuICAgICAgICAgIHJlcyA9IEFycmF5LmZyb20odC5tYXAoKHRlc3RFbGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiB0ZXN0RWxlbS5uYW1lLCByZXN1bHQ6ICdiZWZvcmUoKSBmYWlsZWQnLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGFzeW5jICh0ZXN0KSA9PiByZXBvcnRUZXN0KCdwYWNrYWdlJywgdGVzdCkpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgcmVzID0gYXdhaXQgaW52b2tlVGVzdHNJbkNhdGVnb3J5KHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG5cbiAgICAgICAgaWYgKCFza2lwcGVkKVxuICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0gYXdhaXQgaW52b2tlQ2F0ZWdvcnlNZXRob2QodmFsdWUuYWZ0ZXIsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIC8vIENsZWFyIGFmdGVyIGNhdGVnb3J5XG4gICAgICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgZGF0YS5wdXNoKHsgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCBsb2dzOiAnJywgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2FmdGVyJywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICBkYXRhLnB1c2goeyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiAnYmVmb3JlJywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfSk7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXNldENvbnNvbGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQhLmNhdGNoVW5oYW5kbGVkICYmICghREcuVGVzdC5pc0luQmVuY2htYXJrKSkge1xuICAgICAgYXdhaXQgZGVsYXkoMTAwMCk7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICAgIHJlc3VsdDogZXJyb3IgPz8gJycsIHN1Y2Nlc3M6ICFlcnJvciwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiAhZXJyb3IsXG4gICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIgPz8gJydcbiAgICAgIH07XG4gICAgICByZXN1bHRzLnB1c2gocGFyYW1zKTtcbiAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICBhd2FpdCByZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwb3J0VGVzdCh0eXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICBlbHNlIHtcbiAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgbG9ncy5sZW5ndGggPSAwO1xuICBsZXQgcjogeyBkYXRlOiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZywgb3duZXI/OiBzdHJpbmcgfTtcbiAgbGV0IHR5cGU6IHN0cmluZyA9ICdwYWNrYWdlJztcbiAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAodC5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKTtcbiAgbGV0IHNraXAgPSB0Lm9wdGlvbnM/LnNraXBSZWFzb24gfHwgZmlsdGVyO1xuICBsZXQgc2tpcFJlYXNvbiA9IGZpbHRlciA/ICdza2lwcGVkJyA6IHQub3B0aW9ucz8uc2tpcFJlYXNvbjtcbiAgY29uc29sZS5sb2codGVzdC5uYW1lLCBza2lwKTtcblxuICBpZiAoREcuVGVzdC5pc0luQmVuY2htYXJrICYmICF0Lm9wdGlvbnM/LmJlbmNobWFyaykge1xuICAgIHN0ZExvZyhgU0tJUFBFRDogJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZG9lc250IGF2YWlsYWJsZSBpbiBiZW5jaG1hcmsgbW9kZWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXNraXApXG4gICAgc3RkTG9nKGBTdGFydGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9YCk7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3RhcnQpLnRvSVNPU3RyaW5nKCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0geyBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlIH07XG4gICAgZWxzZSB7XG4gICAgICBsZXQgdGltZW91dF8gPSB0ZXN0VGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUO1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZylcbiAgICAgICAgY29uc29sZS5wcm9maWxlKGAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX1gKTtcblxuICAgICAgciA9IHsgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHRpbWVvdXQodC50ZXN0LCB0aW1lb3V0XykgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG4gICAgICAgIGdyb2suc2hlbGwuaW5mbyhgUHJvZmlsaW5nIG9mICR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfSBmaW5pc2hlZCBcXG4gUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBEZXZUb29scyAoRjEyKSAvIFBlcmZvcm1hbmNlIHBhbmVsIGJlZm9yZSB0ZXN0IHN0YXJ0cy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgIHN0ZEVycm9yKHgpO1xuICAgIHIgPSB7IGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogYXdhaXQgZ2V0UmVzdWx0KHgpLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgfVxuICBpZiAodC5vcHRpb25zPy5pc0FnZ3JlZ2F0ZWQgJiYgci5yZXN1bHQuY29uc3RydWN0b3IgPT09IERHLkRhdGFGcmFtZSkge1xuICAgIGNvbnN0IGNvbCA9IHIucmVzdWx0LmNvbCgnc3VjY2VzcycpO1xuICAgIGlmIChjb2wpXG4gICAgICByLnN1Y2Nlc3MgPSBjb2wuc3RhdHMuc3VtID09PSBjb2wubGVuZ3RoO1xuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgY29uc3QgZGYgPSByLnJlc3VsdDtcbiAgICAgIGRmLmNvbHVtbnMucmVtb3ZlKCdzdGFjaycpO1xuICAgICAgZGYucm93cy5yZW1vdmVXaGVyZSgocikgPT4gci5nZXQoJ3N1Y2Nlc3MnKSk7XG4gICAgICByLnJlc3VsdCA9IGRmO1xuICAgIH1cbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvQ3N2KCk7XG4gIH1cbiAgci5sb2dzID0gbG9ncy5qb2luKCdcXG4nKTtcbiAgci5tcyA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgRmluaXNoZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZm9yICR7ci5tc30gbXNgKTtcbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgci5vd25lciA9IHQub3B0aW9ucz8ub3duZXIgPz8gJyc7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICdzdWNjZXNzJzogci5zdWNjZXNzLCAncmVzdWx0Jzogci5yZXN1bHQsICdtcyc6IHIubXMsICdkYXRlJzogci5kYXRlLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdwYWNrYWdlJzogcGFja2FnZU5hbWUsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9ncywgJ293bmVyJzogci5vd25lcixcbiAgICAgICdmbGFraW5nJzogREcuVGVzdC5pc1JlcHJvZHVjaW5nICYmIHIuc3VjY2VzcyxcbiAgICAgICd0aW1lb3V0V2FybmluZyc6IERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAodC5vcHRpb25zPy5iZW5jaG1hcmtXYXJuVGltZW91dCAmJiByLm1zID4gdC5vcHRpb25zPy5iZW5jaG1hcmtXYXJuVGltZW91dClcbiAgICB9O1xuICAgIGlmIChyLnJlc3VsdC5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcbiAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5rZXlzKHIucmVzdWx0KS5yZWR1Y2UoKGFjYywgaykgPT4gKHsgLi4uYWNjLCBbJ3Jlc3VsdC4nICsga106IHIucmVzdWx0W2tdIH0pLCB7fSk7XG4gICAgICBwYXJhbXMgPSB7IC4uLnBhcmFtcywgLi4ucmVzIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXN1bHQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpXG4gICAgICBwYXJhbXMucmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLnJlc3VsdD8udG9Kc29uKCkpIHx8ICcnO1xuXG4gICAgYXdhaXQgcmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheTogYW55W10pOiBhbnlbXSB7XG4gIGNvbnN0IG5ld0FyciA9IGFycmF5LnNsaWNlKCk7XG4gIG5ld0Fyci5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICByZXR1cm4gbmV3QXJyO1xufTtcblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtERy5EYXRhRnJhbWV9IGRmIERhdGFmcmFtZSB0byB1c2UuIFNob3VsZCBoYXZlIGF0IGxlYXN0IDMgcm93c1xuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5kZXRlY3RTZW1hbnRpY1R5cGVzIFNwZWNpZnkgd2hldGhlciB0byBkZXRlY3Qgc2VtYW50aWMgdHlwZXMgb3Igbm90XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLnJlYWRPbmx5IElmIHNldCB0byB0cnVlLCB0aGUgZGF0YWZyYW1lIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgdGVzdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5hcmJpdHJhcnlEZlRlc3QgSWYgc2V0IHRvIGZhbHNlLCB0ZXN0IG9uIGFyYml0cmFyeSBkYXRhZnJhbWVcbiAqIChvbmUgY2F0ZWdvcmljYWwgY29sdW1uKSB3aWxsIG5vdCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBMaXN0IG9mIG9wdGlvbnMgKG9wdGlvbmFsKVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gVGhlIHRlc3QgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGl0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFZpZXdlcih2OiBzdHJpbmcsIGRmOiBERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IERHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IG9wdGlvbnM/LnBhY2thZ2VOYW1lID8/ICcnO1xuICBpZiAob3B0aW9ucz8uZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuXG4gIHRyeSB7XG4gICAgLy8xLiBPcGVuLCBkbyBub3RoaW5nIGFuZCBjbG9zZVxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgIC8vaW4gY2FzZSB2aWV3ZXIgd2l0aCBhc3luYyByZW5kZXJpbmcgLSB3YWl0IGZvciByZW5kZXIgdG8gY29tcGxldGVcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIHJ1biBzZWxlY3Rpb24sIGZpbHRlciwgZXRjLiBhbmQgY2xvc2VcbiAgICBpZiAoIW9wdGlvbnM/LnJlYWRPbmx5KSB7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50KTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIGNoYW5nZSBvcHRpb25zLCBzYXZlIGxheW91dCBhbmQgY2xvc2VcbiAgICBsZXQgcHJvcHNBbmRMYXlvdXQ6IHsgbGF5b3V0OiBhbnksIHNhdmVkUHJvcHM6IGFueSB9IHwgbnVsbCA9IG51bGw7XG4gICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLFxuICAgICAgICBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpXG5cbiAgICAvLzMuIExvYWQgbGF5b3V0XG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgdW5kZWZpbmVkLCBwcm9wc0FuZExheW91dD8ubGF5b3V0LFxuICAgICAgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcixcbiAgICAgICAgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCwgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcblxuICAgIC8vNC4gT3BlbiB2aWV3ZXIgb24gYXJiaXRhcnkgZGF0YXNldFxuICAgIGlmIChvcHRpb25zPy5hcmJpdHJhcnlEZlRlc3QgIT09IGZhbHNlKSB7XG4gICAgICB0di5kYXRhRnJhbWUgPSBjYXRERjtcbiAgICAgIGF3YWl0IGRlbGF5KDUwKTtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzUuIENhbGwgcG9zdHBvbmVkIGZpbHRlcmluZ1xuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jKTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYywgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gY2xvc2VBbGwoKSBpcyBoYW5kbGluZyBieSBjb21tb24gdGVzdCB3b3JrZmxvd1xuICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gIH1cbn1cbiJdfQ==
|
|
782
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FFZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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Q0FBQztZQUNyRixJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXO2dCQUN0QixNQUFNLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FFOUc7Z0JBQVM7WUFDUixpREFBaUQ7WUFDakQseUJBQXlCO1lBQ3pCLHlCQUF5QjtTQUMxQjs7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRlc3REYXRhIH0gZnJvbSAnLi9kYXRhZnJhbWUtdXRpbHMnO1xuaW1wb3J0IFRpbWVvdXQgPSBOb2RlSlMuVGltZW91dDtcbmltcG9ydCB7IGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBmaWx0ZXJBc3luYywgbG9hZExheW91dCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgdGVzdFZpZXdlckludGVybmFsIH0gZnJvbSAnLi90ZXN0LXZpZXdlci11dGlscyc7XG5cbmNvbnN0IFNUQU5EQVJUX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IEJFTkNITUFSS19USU1FT1VUID0gMTA4MDAwMDA7XG5cbmNvbnN0IHN0ZExvZyA9IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRJbmZvID0gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRXYXJuID0gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XG5jb25zdCBzdGRFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcblxuZXhwb3J0IGNvbnN0IHRlc3RzOiB7XG4gIFtrZXk6IHN0cmluZ106IENhdGVnb3J5XG59ID0ge307XG5cbmNvbnN0IGF1dG9UZXN0c0NhdE5hbWUgPSAnQXV0byBUZXN0cyc7XG5jb25zdCBkZW1vQ2F0TmFtZSA9ICdEZW1vJztcbmNvbnN0IGRldGVjdG9yc0NhdE5hbWUgPSAnRGV0ZWN0b3JzJztcbmNvbnN0IGNvcmVDYXROYW1lID0gJ0NvcmUnO1xuY29uc3Qgd2FzUmVnaXN0ZXJlZDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcbmV4cG9ydCBsZXQgY3VycmVudENhdGVnb3J5OiBzdHJpbmc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgYXNzdXJlIHtcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGwodmFsdWU6IGFueSwgbmFtZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtXYXJuVGltZW91dD86IG51bWJlcjtcbiAgYmVuY2htYXJrVGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbiAgaXNBZ2dyZWdhdGVkPzogYm9vbGVhbjtcbiAgYmVuY2htYXJrPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIG93bmVyPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlPcHRpb25zIHtcbiAgY2xlYXI/OiBib29sZWFuO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtzPzogYm9vbGVhbjtcbiAgc3RyZXNzVGVzdHM/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgc3RyZXNzVGVzdD86IGJvb2xlYW47XG4gIGNhdGNoVW5oYW5kbGVkID0gdHJ1ZTtcbiAgcmVwb3J0ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoY2F0Y2hVbmhhbmRsZWQ/OiBib29sZWFuLCByZXBvcnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKGNhdGNoVW5oYW5kbGVkICE9PSB1bmRlZmluZWQpIHRoaXMuY2F0Y2hVbmhhbmRsZWQgPSBjYXRjaFVuaGFuZGxlZDtcbiAgICBpZiAocmVwb3J0ICE9PSB1bmRlZmluZWQpIHRoaXMucmVwb3J0ID0gcmVwb3J0O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gIHRlc3Q6ICgpID0+IFByb21pc2U8YW55PjtcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBvcHRpb25zPzogVGVzdE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgbmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykge1xuICAgIHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIG9wdGlvbnMgPz89IHt9O1xuICAgIG9wdGlvbnMudGltZW91dCA/Pz0gU1RBTkRBUlRfVElNRU9VVDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudGVzdCA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChERy5UZXN0LmlzSW5EZWJ1ZylcbiAgICAgICAgICAgIGRlYnVnZ2VyO1xuICAgICAgICAgIFxuICAgICAgICAgIGxldCByZXMgPSBhd2FpdCB0ZXN0KCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlcz8udG9TdHJpbmcoKSA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGUpIHsgXG4gICAgICAgICAgICByZXN1bHQgPSAnQ2FuXFwndCBjb252ZXJ0IHRlc3RcXCdzIHJlc3VsdCB0byBzdHJpbmcnO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ2FuXFwndCBjb252ZXJ0IHRlc3RcXCdzIHJlc3VsdCB0byBzdHJpbmcgaW4gdGhlICR7dGhpcy5jYXRlZ29yeX06JHt0aGlzLm5hbWV9IHRlc3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYXRlZ29yeSB7XG4gIHRlc3RzPzogVGVzdFtdO1xuICBiZWZvcmU/OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBhZnRlcj86ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgYmVmb3JlU3RhdHVzPzogc3RyaW5nO1xuICBhZnRlclN0YXR1cz86IHN0cmluZztcbiAgY2xlYXI/OiBib29sZWFuO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtzPzogYm9vbGVhbjtcbiAgYmVuY2htYXJrVGltZW91dD86IG51bWJlcjtcbiAgc3RyZXNzVGVzdHM/OiBib29sZWFuO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RFeGVjdXRpb25PcHRpb25zIHtcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIHRlc3Q/OiBzdHJpbmc7XG4gIHRlc3RDb250ZXh0PzogVGVzdENvbnRleHQ7XG4gIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbiAgdmVyYm9zZT86IGJvb2xlYW47XG4gIHN0cmVzc1Rlc3Q/OiBib29sZWFuO1xuICB0YWdzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnQ8VD4oZXZlbnQ6IE9ic2VydmFibGU8VD4sXG4gIGhhbmRsZXI6IChhcmdzOiBUKSA9PiB2b2lkLCB0cmlnZ2VyOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyID0gMCwgcmVhc29uOiBzdHJpbmcgPSBgdGltZW91dGBcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzOiBUKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGFyZ3MpO1xuICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50QXN5bmM8VD4oZXZlbnQ6IE9ic2VydmFibGU8VD4sXG4gIGhhbmRsZXI6IChhcmdzOiBUKSA9PiBQcm9taXNlPHZvaWQ+LCB0cmlnZ2VyOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyID0gMCwgcmVhc29uOiBzdHJpbmcgPSBgdGltZW91dGBcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzOiBUKSA9PiB7XG4gICAgICBoYW5kbGVyKGFyZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyk6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzIS5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuXG4vKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSA9IHRydWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChlcnJvcilcbiAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgZWxzZSBlcnJvciA9ICcnO1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3J9RXhwZWN0ZWQgXCIke2V4cGVjdGVkfVwiLCBnb3QgXCIke2FjdHVhbH1cImApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsOiBudW1iZXIsIGV4cGVjdGVkOiBudW1iZXIsIHRvbGVyYW5jZSA9IDAuMDAxLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoKGFjdHVhbCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmIGV4cGVjdGVkID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHx8XG4gICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpIHx8XG4gICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICByZXR1cm47XG4gIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICBleHBlY3QoYXJlRXF1YWwsIHRydWUsIGAke2Vycm9yID8/ICcnfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbDogREcuRGF0YUZyYW1lLCBleHBlY3RlZDogREcuRGF0YUZyYW1lLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBleHBlY3RlZFJvd0NvdW50ID0gZXhwZWN0ZWQucm93Q291bnQ7XG4gIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICBleHBlY3QoYWN0dWFsUm93Q291bnQsIGV4cGVjdGVkUm93Q291bnQsIGAke2Vycm9yID8/ICcnfSwgcm93IGNvdW50YCk7XG5cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgZXhwZWN0ZWQuY29sdW1ucykge1xuICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgaWYgKGFjdHVhbENvbHVtbiA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gbm90IGZvdW5kYCk7XG4gICAgaWYgKGFjdHVhbENvbHVtbi50eXBlICE9IGNvbHVtbi50eXBlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gdHlwZSBleHBlY3RlZCAke2NvbHVtbi50eXBlfSBnb3QgJHthY3R1YWxDb2x1bW4udHlwZX1gKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgMC4wMDAxLCBlcnJvcik7XG4gICAgICBlbHNlIGlmIChjb2x1bW4udHlwZSA9PSBERy5UWVBFLkRBVEVfVElNRSlcbiAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLmlzU2FtZSh2YWx1ZSksIHRydWUsIGVycm9yKTtcbiAgICAgIGVsc2VcbiAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZXhwZWN0ZWQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuXG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAoJHtleHBlY3RlZFZhbHVlfSkgZm9yIGtleSAnJHtleHBlY3RlZEtleX0nLCBnb3QgKCR7YWN0dWFsVmFsdWV9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWw6IEFycmF5TGlrZTxhbnk+LCBleHBlY3RlZDogQXJyYXlMaWtlPGFueT4pIHtcbiAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG5cbiAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZywgdGVzdHNfOiAoKSA9PiB2b2lkLCBvcHRpb25zPzogQ2F0ZWdvcnlPcHRpb25zKTogdm9pZCB7XG4gIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICB0ZXN0c18oKTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0pIHtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmNsZWFyID0gb3B0aW9ucz8uY2xlYXIgPz8gdHJ1ZTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVuY2htYXJrcyA9IG9wdGlvbnM/LmJlbmNobWFya3M7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5zdHJlc3NUZXN0cyA9IG9wdGlvbnM/LnN0cmVzc1Rlc3RzO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0ub3duZXIgPSBvcHRpb25zPy5vd25lcjtcbiAgfVxufVxuXG4vKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZWZvcmUoYmVmb3JlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuXG4vKiBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyKGFmdGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID0ge307XG4gIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYWZ0ZXIgPSBhZnRlcjtcbn1cblxuZnVuY3Rpb24gYWRkTmFtZXNwYWNlKHM6IHN0cmluZywgZjogREcuRnVuYyk6IHN0cmluZyB7XG4gIHJldHVybiBzLnJlcGxhY2UobmV3IFJlZ0V4cChmLm5hbWUsICdnaScpLCBmLm5xTmFtZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfOiBERy5QYWNrYWdlLCBtb2R1bGU/OiBhbnkpIHtcbiAgY29uc3QgcGFja2FnZUlkID0gcGFja2FnZV8uaWQ7XG4gIGlmICh3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0pIHJldHVybjtcbiAgY29uc3QgbW9kdWxlVGVzdHMgPSBtb2R1bGUgPyBtb2R1bGUudGVzdHMgOiB0ZXN0cztcbiAgaWYgKG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdICE9PSB1bmRlZmluZWQgfHxcbiAgICBtb2R1bGVUZXN0c1tkZW1vQ2F0TmFtZV0gIT09IHVuZGVmaW5lZCB8fFxuICAgIE9iamVjdC5rZXlzKG1vZHVsZVRlc3RzKS5maW5kKChjKSA9PiBjLnN0YXJ0c1dpdGgoYXV0b1Rlc3RzQ2F0TmFtZSkgfHwgYy5zdGFydHNXaXRoKGNvcmVDYXROYW1lKSkpIHtcbiAgICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocGFja2FnZV8ubmFtZSA9PT0gJ0RldlRvb2xzJyB8fCAoISFtb2R1bGUgJiYgbW9kdWxlLl9wYWNrYWdlLm5hbWUgPT09ICdEZXZUb29scycpKSB7XG4gICAgZm9yIChjb25zdCBmIG9mICg8YW55PndpbmRvdykuZGFydFRlc3RzKSB7XG4gICAgICBjb25zdCBhcnIgPSBmLm5hbWUuc3BsaXQoL1xccypcXHxcXHMqIS9nKTtcbiAgICAgIGxldCBuYW1lID0gYXJyLnBvcCgpID8/IGYubmFtZTtcbiAgICAgIGxldCBjYXQgPSBhcnIubGVuZ3RoID8gY29yZUNhdE5hbWUgKyAnOiAnICsgYXJyLmpvaW4oJzogJykgOiBjb3JlQ2F0TmFtZTtcbiAgICAgIGxldCBmdWxsTmFtZTogc3RyaW5nW10gPSBuYW1lLnNwbGl0KCcgfCAnKTtcbiAgICAgIG5hbWUgPSBmdWxsTmFtZVtmdWxsTmFtZS5sZW5ndGggLSAxXTtcbiAgICAgIGZ1bGxOYW1lLnVuc2hpZnQoY2F0KTtcbiAgICAgIGZ1bGxOYW1lLnBvcCgpO1xuICAgICAgY2F0ID0gZnVsbE5hbWUuam9pbignOiAnKTtcbiAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgIG1vZHVsZVRlc3RzW2NhdF0udGVzdHMucHVzaChuZXcgVGVzdChjYXQsIG5hbWUsIGYudGVzdCwgeyBpc0FnZ3JlZ2F0ZWQ6IGZhbHNlLCB0aW1lb3V0OiBmLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCwgc2tpcFJlYXNvbjogZi5vcHRpb25zPy5za2lwUmVhc29uLCBvd25lcjogZi5vcHRpb25zPy5vd25lciB9KSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZW1vID0gW107XG4gIGNvbnN0IG1vZHVsZURldGVjdG9ycyA9IFtdO1xuICBjb25zdCBwYWNrRnVuY3Rpb25zID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC9za2lwOlxccyooW14sXFxzXSspfHdhaXQ6XFxzKihcXGQrKXxjYXQ6XFxzKihbXixcXHNdKyl8dGltZW91dDpcXHMqKFxcZCspL2cpO1xuICBmb3IgKGNvbnN0IGYgb2YgcGFja0Z1bmN0aW9ucykge1xuICAgIGNvbnN0IHRlc3RzID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgY29uc3QgZGVtbyA9IGYub3B0aW9uc1snZGVtb1BhdGgnXTtcbiAgICBpZiAoKHRlc3RzICYmIEFycmF5LmlzQXJyYXkodGVzdHMpICYmIHRlc3RzLmxlbmd0aCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzID0gKHRlc3RzW2ldIGFzIHN0cmluZykubWF0Y2hBbGwocmVnKTtcbiAgICAgICAgY29uc3QgbWFwOiB7IHNraXA/OiBzdHJpbmcsIHdhaXQ/OiBudW1iZXIsIGNhdD86IHN0cmluZywgdGltZW91dD86IG51bWJlciwgYmVuY2htYXJrVGltZW91dD86IG51bWJlciB9ID0ge307XG4gICAgICAgIEFycmF5LmZyb20ocmVzKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgICBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3NraXAnKSkgbWFwWydza2lwJ10gPSBhcnJbMV07XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3dhaXQnKSkgbWFwWyd3YWl0J10gPSBwYXJzZUludChhcnJbMl0pO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCdjYXQnKSkgbWFwWydjYXQnXSA9IGFyclszXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgndGltZW91dCcpKSBtYXBbJ3RpbWVvdXQnXSA9IHBhcnNlSW50KGFycls0XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoYXV0b1Rlc3RzQ2F0TmFtZSwgdGVzdHMubGVuZ3RoID09PSAxID8gZi5uYW1lIDogYCR7Zi5uYW1lfSAke2kgKyAxfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgIGlmIChtYXAud2FpdCkgYXdhaXQgZGVsYXkobWFwLndhaXQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJyAmJiAhcmVzKSB0aHJvdyBgRmFpbGVkOiAke3Rlc3RzW2ldfSwgZXhwZWN0ZWQgdHJ1ZSwgZ290ICR7cmVzfWA7XG4gICAgICAgIH0sIHsgc2tpcFJlYXNvbjogbWFwLnNraXAsIHRpbWVvdXQ6IERHLlRlc3QuaXNJbkJlbmNobWFyayA/IG1hcC5iZW5jaG1hcmtUaW1lb3V0ID8/IEJFTkNITUFSS19USU1FT1VUIDogbWFwLnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCB9KTtcbiAgICAgICAgaWYgKG1hcC5jYXQpIHtcbiAgICAgICAgICBjb25zdCBjYXQ6IHN0cmluZyA9IGF1dG9UZXN0c0NhdE5hbWUgKyAnOiAnICsgbWFwLmNhdDtcbiAgICAgICAgICB0ZXN0LmNhdGVnb3J5ID0gY2F0O1xuICAgICAgICAgIGlmIChtb2R1bGVUZXN0c1tjYXRdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG4gICAgICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBtb2R1bGVBdXRvVGVzdHMucHVzaCh0ZXN0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbW8pIHtcbiAgICAgIGNvbnN0IHdhaXQgPSBmLm9wdGlvbnNbJ2RlbW9XYWl0J10gPyBwYXJzZUludChmLm9wdGlvbnNbJ2RlbW9XYWl0J10pIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KGRlbW9DYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkZWxheSgzMDApO1xuICAgICAgICBncm9rLnNoZWxsLmNsZWFyTGFzdEVycm9yKCk7XG4gICAgICAgIGF3YWl0IGYuYXBwbHkoKTtcbiAgICAgICAgYXdhaXQgZGVsYXkod2FpdCA/IHdhaXQgOiAyMDAwKTtcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkID0gYXdhaXQgZ3Jvay5zaGVsbC5sYXN0RXJyb3I7XG4gICAgICAgIGlmICh1bmhhbmRsZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVuaGFuZGxlZCk7XG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snZGVtb1NraXAnXSB9KTtcbiAgICAgIG1vZHVsZURlbW8ucHVzaCh0ZXN0KTtcbiAgICB9XG4gICAgaWYgKGYuaGFzVGFnKCdzZW1UeXBlRGV0ZWN0b3InKSkge1xuICAgICAgbGV0IGRldGVjdG9yc1Rlc3REYXRhID0gdGVzdERhdGE7XG4gICAgICBpZiAoZi5vcHRpb25zWyd0ZXN0RGF0YSddKSB7XG4gICAgICAgIGRldGVjdG9yc1Rlc3REYXRhID0gYXdhaXQgZ3Jvay5kYXRhLmZpbGVzLm9wZW5UYWJsZShgU3lzdGVtOkFwcERhdGEvJHtwYWNrYWdlXy5ucU5hbWV9LyR7Zi5vcHRpb25zWyd0ZXN0RGF0YSddfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGV0ZWN0b3JzQ2F0TmFtZSwgZi5mcmllbmRseU5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGNvbnNvbGUubG9nKGBTeXN0ZW06QXBwRGF0YS8ke3BhY2thZ2VfLm5xTmFtZX0vJHtmLm9wdGlvbnNbJ3Rlc3REYXRhJ119YCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGV0ZWN0b3JzVGVzdERhdGEuY2xvbmUoKS5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZi5hcHBseShbY29sXSk7XG4gICAgICAgICAgYXJyLnB1c2gocmVzIHx8IGNvbC5zZW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNBcnIgPSBhcnIuZmlsdGVyKChpKSA9PiBpKTtcbiAgICAgICAgZXhwZWN0KHJlc0Fyci5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGlmIChmLm9wdGlvbnNbJ3Rlc3REYXRhQ29sdW1uTmFtZSddKVxuICAgICAgICAgIGV4cGVjdChyZXNBcnJbMF0sIGYub3B0aW9uc1sndGVzdERhdGFDb2x1bW5OYW1lJ10pO1xuXG4gICAgICB9LCB7IHNraXBSZWFzb246IGYub3B0aW9uc1snc2tpcFRlc3QnXSB9KTtcbiAgICAgIG1vZHVsZURldGVjdG9ycy5wdXNoKHRlc3QpO1xuICAgIH1cbiAgfVxuICB3YXNSZWdpc3RlcmVkW3BhY2thZ2VJZF0gPSB0cnVlO1xuICBpZiAobW9kdWxlQXV0b1Rlc3RzLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVBdXRvVGVzdHMsIGNsZWFyOiB0cnVlIH07XG4gIGlmIChtb2R1bGVEZW1vLmxlbmd0aCA+IDApXG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGVtbywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURldGVjdG9ycy5sZW5ndGggPiAwKVxuICAgIG1vZHVsZVRlc3RzW2RldGVjdG9yc0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGV0ZWN0b3JzLCBjbGVhcjogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gcmVkZWZpbmVDb25zb2xlKCk6IGFueVtdIHtcbiAgY29uc3QgbG9nczogYW55W10gPSBbXTtcbiAgY29uc29sZS5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRMb2coLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuaW5mbyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEluZm8oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUud2FybiA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZFdhcm4oLi4uYXJncyk7XG4gIH07XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICAgIGxvZ3MucHVzaCguLi5hcmdzKTtcbiAgICBzdGRFcnJvciguLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGxvZ3M7XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q29uc29sZSgpOiB2b2lkIHtcbiAgY29uc29sZS5sb2cgPSBzdGRMb2c7XG4gIGNvbnNvbGUuaW5mbyA9IHN0ZEluZm87XG4gIGNvbnNvbGUud2FybiA9IHN0ZFdhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSBzdGRFcnJvcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnM/OiBUZXN0RXhlY3V0aW9uT3B0aW9ucykge1xuICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0tLS0nKVxuICBjb25zdCBwYWNrYWdlXyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmM/LnBhY2thZ2U7XG4gIGNvbnN0IHBhY2thZ2VPd25lciA9ICgocGFja2FnZV8/LnBhY2thZ2VPd25lciA/PyAnJykubWF0Y2gobmV3IFJlZ0V4cCgnW148XSo8KFtePl0qKT4nKSkgPz8gWycnLCAnJ10pWzFdO1xuICBhd2FpdCBpbml0QXV0b1Rlc3RzKHBhY2thZ2VfKTtcbiAgY29uc3QgcmVzdWx0czoge1xuICAgIGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLFxuICAgIHJlc3VsdDogc3RyaW5nLCBtczogbnVtYmVyLCBza2lwcGVkOiBib29sZWFuLCBsb2dzPzogc3RyaW5nLCBvd25lcj86IHN0cmluZ1xuICB9W10gPSBbXTtcbiAgY29uc29sZS5sb2coYFJ1bm5pbmcgdGVzdHNgKTtcbiAgY29uc29sZS5sb2cob3B0aW9ucyk7XG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zIS50ZXN0Q29udGV4dCA/Pz0gbmV3IFRlc3RDb250ZXh0KCk7XG4gIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgY29uc3QgbG9ncyA9IHJlZGVmaW5lQ29uc29sZSgpO1xuXG4gIGF3YWl0IGludm9rZVRlc3RzKHRlc3RzLCBvcHRpb25zKTtcblxuICBmb3IgKGxldCByIG9mIHJlc3VsdHMpIHtcbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1xcJycpO1xuICAgIGlmIChyLmxvZ3MgIT0gdW5kZWZpbmVkKVxuICAgICAgci5sb2dzID0gci5sb2dzIS50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcXCcnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcblxuICBhc3luYyBmdW5jdGlvbiBpbnZva2VDYXRlZ29yeU1ldGhvZChtZXRob2Q6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZCwgY2F0ZWdvcnk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgdmFyIGludm9rYXRpb25SZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCB0aW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBtZXRob2QoKTtcbiAgICAgICAgfSwgMTAwMDAwLCBgYmVmb3JlICR7Y2F0ZWdvcnl9OiB0aW1lb3V0IGVycm9yYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoeDogYW55KSB7XG4gICAgICBpbnZva2F0aW9uUmVzdWx0ID0gYXdhaXQgZ2V0UmVzdWx0KHgpO1xuICAgIH1cbiAgICByZXR1cm4gaW52b2thdGlvblJlc3VsdFxuICB9XG4gIGNvbnN0IG1lbW9yeURlbHRhID0gJ21lbW9yeURlbHRhJztcbiAgY29uc3Qgd2lkZ2V0c0RlbHRhID0gJ3dpZGdldHNEZWx0YSc7XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHNJbkNhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSwgb3B0aW9uczogVGVzdEV4ZWN1dGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgbGV0IHQgPSBjYXRlZ29yeS50ZXN0cyA/PyBbXTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBsZXQgbWVtb3J5VXNhZ2VCZWZvcmUgPSAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplO1xuICAgIGNvbnN0IHdpZGdldHNCZWZvcmUgPSBnZXRXaWRnZXRzQ291bnRTYWZlKCk7XG5cbiAgICBpZiAoY2F0ZWdvcnkuY2xlYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGlmICh0W2ldLm9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodFtpXS5vcHRpb25zPy5iZW5jaG1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCF0W2ldLm9wdGlvbnMpXG4gICAgICAgICAgICAgIHRbaV0ub3B0aW9ucyA9IHt9XG4gICAgICAgICAgICB0W2ldLm9wdGlvbnMhLmJlbmNobWFyayA9IGNhdGVnb3J5LmJlbmNobWFya3MgPz8gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB0ZXN0ID0gdFtpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudGVzdClcbiAgICAgICAgICBpZiAob3B0aW9ucy50ZXN0LnRvTG93ZXJDYXNlKCkgIT09IHRlc3QubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICh0ZXN0Py5vcHRpb25zKSB7XG4gICAgICAgICAgdGVzdC5vcHRpb25zLm93bmVyID0gdFtpXS5vcHRpb25zPy5vd25lciA/PyBjYXRlZ29yeT8ub3duZXIgPz8gcGFja2FnZU93bmVyID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpc0dCRW5hYmxlID0gKHdpbmRvdyBhcyBhbnkpLmdjICYmIHRlc3Qub3B0aW9ucz8uc2tpcFJlYXNvbiA9PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGAqKioqKioqKiR7aXNHQkVuYWJsZX1gKTtcbiAgICAgICAgaWYgKGlzR0JFbmFibGUpXG4gICAgICAgICAgYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmdjKCk7XG4gICAgICAgIG1lbW9yeVVzYWdlQmVmb3JlID0gKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZTtcbiAgICAgICAgbGV0IHRlc3RSdW4gPSBhd2FpdCBleGVjVGVzdCh0ZXN0LCBvcHRpb25zPy50ZXN0LCBsb2dzLCBERy5UZXN0LmlzSW5CZW5jaG1hcmsgPyB0W2ldLm9wdGlvbnM/LmJlbmNobWFya1RpbWVvdXQgPz8gQkVOQ0hNQVJLX1RJTUVPVVQgOiB0W2ldLm9wdGlvbnM/LnRpbWVvdXQgPz8gU1RBTkRBUlRfVElNRU9VVCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcblxuICAgICAgICBpZiAoaXNHQkVuYWJsZSlcbiAgICAgICAgICBhd2FpdCAod2luZG93IGFzIGFueSkuZ2MoKTtcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBbbWVtb3J5RGVsdGFdOiAod2luZG93Py5wZXJmb3JtYW5jZSBhcyBhbnkpPy5tZW1vcnk/LnVzZWRKU0hlYXBTaXplIC0gbWVtb3J5VXNhZ2VCZWZvcmUsIFt3aWRnZXRzRGVsdGFdOiBnZXRXaWRnZXRzQ291bnRTYWZlKCkgLSB3aWRnZXRzQmVmb3JlIH0pO1xuXG4gICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHRlc3QgPSB0W2ldO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXN0KVxuICAgICAgICAgIGlmIChvcHRpb25zLnRlc3QudG9Mb3dlckNhc2UoKSAhPT0gdGVzdC5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBsZXQgaXNHQkVuYWJsZSA9ICh3aW5kb3cgYXMgYW55KS5nYyAmJiB0ZXN0Lm9wdGlvbnM/LnNraXBSZWFzb24gPT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGVzdD8ub3B0aW9ucykge1xuICAgICAgICAgIHRlc3Qub3B0aW9ucy5vd25lciA9IHRbaV0ub3B0aW9ucz8ub3duZXIgPz8gY2F0ZWdvcnk/Lm93bmVyID8/IHBhY2thZ2VPd25lciA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgKioqKioqKioke2lzR0JFbmFibGV9YCk7XG4gICAgICAgIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBtZW1vcnlVc2FnZUJlZm9yZSA9ICh3aW5kb3c/LnBlcmZvcm1hbmNlIGFzIGFueSk/Lm1lbW9yeT8udXNlZEpTSGVhcFNpemU7XG4gICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodGVzdCwgb3B0aW9ucz8udGVzdCwgbG9ncywgREcuVGVzdC5pc0luQmVuY2htYXJrID8gdFtpXS5vcHRpb25zPy5iZW5jaG1hcmtUaW1lb3V0ID8/IEJFTkNITUFSS19USU1FT1VUIDogdFtpXS5vcHRpb25zPy50aW1lb3V0LCBwYWNrYWdlXy5uYW1lLCBvcHRpb25zLnZlcmJvc2UpO1xuXG4gICAgICAgIGlmIChpc0dCRW5hYmxlKVxuICAgICAgICAgIGF3YWl0ICh3aW5kb3cgYXMgYW55KS5nYygpO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRlc3RSdW4pXG4gICAgICAgICAgcmVzLnB1c2goeyAuLi50ZXN0UnVuLCBtZW1vcnlEZWx0YTogKHdpbmRvdz8ucGVyZm9ybWFuY2UgYXMgYW55KT8ubWVtb3J5Py51c2VkSlNIZWFwU2l6ZSAtIG1lbW9yeVVzYWdlQmVmb3JlLCB3aWRnZXRzRGlmZmVyZW5jZTogZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIC0gd2lkZ2V0c0JlZm9yZSB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0V2lkZ2V0c0NvdW50U2FmZSgpIHtcbiAgICBsZXQgbGVuZ3RoID0gLTE7XG4gICAgdHJ5IHtcbiAgICAgIGxlbmd0aCA9IERHLldpZGdldC5nZXRBbGwoKS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlID8/IGUpO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdHMoY2F0ZWdvcmllc1RvSW52b2tlOiB7IFtrZXk6IHN0cmluZ106IENhdGVnb3J5IH0sIG9wdGlvbnM6IFRlc3RFeGVjdXRpb25PcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNhdGVnb3JpZXNUb0ludm9rZSkpIHtcbiAgICAgICAgaWYgKCghIW9wdGlvbnM/LmNhdGVnb3J5ICYmICFrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG9wdGlvbnM/LmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkpKSB8fFxuICAgICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgICAgY29uc3Qgc2tpcHBlZCA9IHZhbHVlLnRlc3RzPy5ldmVyeSgodCkgPT4gdC5vcHRpb25zPy5za2lwUmVhc29uKTtcbiAgICAgICAgaWYgKCFza2lwcGVkKVxuICAgICAgICAgIHZhbHVlLmJlZm9yZVN0YXR1cyA9IGF3YWl0IGludm9rZUNhdGVnb3J5TWV0aG9kKHZhbHVlLmJlZm9yZSwgb3B0aW9ucy5jYXRlZ29yeSA/PyAnJyk7XG5cbiAgICAgICAgbGV0IHQgPSB2YWx1ZS50ZXN0cyA/PyBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlc3NUZXN0KSB7XG4gICAgICAgICAgdCA9IHQuZmlsdGVyKChlKSA9PiBlLm9wdGlvbnM/LnN0cmVzc1Rlc3QpO1xuICAgICAgICAgIHQgPSBzaHVmZmxlKHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChvcHRpb25zLnRhZ3M/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgICB0ID0gdC5maWx0ZXIoKGUpID0+XG4gICAgICAgICAgICBlLm9wdGlvbnM/LnRhZ3M/LnNvbWUodGFnID0+IChvcHRpb25zPy50YWdzID8/IFtdKS5pbmNsdWRlcyh0YWcpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzOiBhbnlbXTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cykge1xuICAgICAgICAgIHJlcyA9IEFycmF5LmZyb20odC5tYXAoKHRlc3RFbGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiB0ZXN0RWxlbS5uYW1lLCByZXN1bHQ6ICdiZWZvcmUoKSBmYWlsZWQnLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJlcy5mb3JFYWNoKGFzeW5jICh0ZXN0KSA9PiByZXBvcnRUZXN0KCdwYWNrYWdlJywgdGVzdCkpO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgcmVzID0gYXdhaXQgaW52b2tlVGVzdHNJbkNhdGVnb3J5KHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5maWx0ZXIoKGQpID0+IGQucmVzdWx0ICE9ICdza2lwcGVkJyk7XG5cbiAgICAgICAgaWYgKCFza2lwcGVkKVxuICAgICAgICAgIHZhbHVlLmFmdGVyU3RhdHVzID0gYXdhaXQgaW52b2tlQ2F0ZWdvcnlNZXRob2QodmFsdWUuYWZ0ZXIsIG9wdGlvbnMuY2F0ZWdvcnkgPz8gJycpO1xuXG4gICAgICAgIC8vIENsZWFyIGFmdGVyIGNhdGVnb3J5XG4gICAgICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgICBpZiAodmFsdWUuYWZ0ZXJTdGF0dXMpXG4gICAgICAgICAgZGF0YS5wdXNoKHsgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLCBsb2dzOiAnJywgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2FmdGVyJywgcmVzdWx0OiB2YWx1ZS5hZnRlclN0YXR1cywgc3VjY2VzczogZmFsc2UsIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICBkYXRhLnB1c2goeyBkYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksIGxvZ3M6ICcnLCBjYXRlZ29yeToga2V5LCBuYW1lOiAnYmVmb3JlJywgcmVzdWx0OiB2YWx1ZS5iZWZvcmVTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfSk7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXNldENvbnNvbGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGVzdENvbnRleHQhLmNhdGNoVW5oYW5kbGVkICYmICghREcuVGVzdC5pc0luQmVuY2htYXJrKSkge1xuICAgICAgYXdhaXQgZGVsYXkoMTAwMCk7XG4gICAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBsb2dzOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBjYXRlZ29yeTogJ1VuaGFuZGxlZCBleGNlcHRpb25zJyxcbiAgICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICAgIHJlc3VsdDogZXJyb3IgPz8gJycsIHN1Y2Nlc3M6ICFlcnJvciwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlLFxuICAgICAgICAnZmxha2luZyc6IERHLlRlc3QuaXNSZXByb2R1Y2luZyAmJiAhZXJyb3IsXG4gICAgICAgIG93bmVyOiBwYWNrYWdlT3duZXIgPz8gJydcbiAgICAgIH07XG4gICAgICByZXN1bHRzLnB1c2gocGFyYW1zKTtcbiAgICAgICg8YW55PnBhcmFtcykucGFja2FnZSA9IHBhY2thZ2VfLm5hbWU7XG4gICAgICBhd2FpdCByZXBvcnRUZXN0KCdwYWNrYWdlJywgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVwb3J0VGVzdCh0eXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICBlbHNlIHtcbiAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICB9KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXN1bHQoeDogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAke3gudG9TdHJpbmcoKX1cXG4ke3guc3RhY2sgPyAoYXdhaXQgREcuTG9nZ2VyLnRyYW5zbGF0ZVN0YWNrVHJhY2UoeC5zdGFjaykpIDogJyd9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY1Rlc3QodDogVGVzdCwgcHJlZGljYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxvZ3M6IGFueVtdLFxuICB0ZXN0VGltZW91dD86IG51bWJlciwgcGFja2FnZU5hbWU/OiBzdHJpbmcsIHZlcmJvc2U/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgbG9ncy5sZW5ndGggPSAwO1xuICBsZXQgcjogeyBkYXRlOiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZywgb3duZXI/OiBzdHJpbmcgfTtcbiAgbGV0IHR5cGU6IHN0cmluZyA9ICdwYWNrYWdlJztcbiAgY29uc3QgZmlsdGVyID0gcHJlZGljYXRlICE9IHVuZGVmaW5lZCAmJiAodC5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IHByZWRpY2F0ZS50b0xvd2VyQ2FzZSgpKTtcbiAgbGV0IHNraXAgPSB0Lm9wdGlvbnM/LnNraXBSZWFzb24gfHwgZmlsdGVyO1xuICBsZXQgc2tpcFJlYXNvbiA9IGZpbHRlciA/ICdza2lwcGVkJyA6IHQub3B0aW9ucz8uc2tpcFJlYXNvbjtcbiAgY29uc29sZS5sb2codGVzdC5uYW1lLCBza2lwKTtcblxuICBpZiAoREcuVGVzdC5pc0luQmVuY2htYXJrICYmICF0Lm9wdGlvbnM/LmJlbmNobWFyaykge1xuICAgIHN0ZExvZyhgU0tJUFBFRDogJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZG9lc250IGF2YWlsYWJsZSBpbiBiZW5jaG1hcmsgbW9kZWApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIXNraXApXG4gICAgc3RkTG9nKGBTdGFydGVkICR7dC5jYXRlZ29yeX0gJHt0Lm5hbWV9YCk7XG4gIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3RhcnQpLnRvSVNPU3RyaW5nKCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0geyBkYXRlOiBzdGFydERhdGUsIHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogc2tpcFJlYXNvbiEsIG1zOiAwLCBza2lwcGVkOiB0cnVlIH07XG4gICAgZWxzZSB7XG4gICAgICBsZXQgdGltZW91dF8gPSB0ZXN0VGltZW91dCA/PyBTVEFOREFSVF9USU1FT1VUO1xuXG4gICAgICBpZiAoREcuVGVzdC5pc1Byb2ZpbGluZylcbiAgICAgICAgY29uc29sZS5wcm9maWxlKGAke3QuY2F0ZWdvcnl9OiAke3QubmFtZX1gKTtcblxuICAgICAgciA9IHsgZGF0ZTogc3RhcnREYXRlLCBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHRpbWVvdXQodC50ZXN0LCB0aW1lb3V0XykgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG5cbiAgICAgIGlmIChERy5UZXN0LmlzUHJvZmlsaW5nKSB7XG4gICAgICAgIGNvbnNvbGUucHJvZmlsZUVuZChgJHt0LmNhdGVnb3J5fTogJHt0Lm5hbWV9YCk7XG4gICAgICAgIGdyb2suc2hlbGwuaW5mbyhgUHJvZmlsaW5nIG9mICR7dC5jYXRlZ29yeX06ICR7dC5uYW1lfSBmaW5pc2hlZCBcXG4gUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBoYXZlIG9wZW5lZCBEZXZUb29scyAoRjEyKSAvIFBlcmZvcm1hbmNlIHBhbmVsIGJlZm9yZSB0ZXN0IHN0YXJ0cy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKHg6IGFueSkge1xuICAgIHN0ZEVycm9yKHgpO1xuICAgIHIgPSB7IGRhdGU6IHN0YXJ0RGF0ZSwgc3VjY2VzczogZmFsc2UsIHJlc3VsdDogYXdhaXQgZ2V0UmVzdWx0KHgpLCBtczogMCwgc2tpcHBlZDogZmFsc2UgfTtcbiAgfVxuICBpZiAodC5vcHRpb25zPy5pc0FnZ3JlZ2F0ZWQgJiYgci5yZXN1bHQuY29uc3RydWN0b3IgPT09IERHLkRhdGFGcmFtZSkge1xuICAgIGNvbnN0IGNvbCA9IHIucmVzdWx0LmNvbCgnc3VjY2VzcycpO1xuICAgIGlmIChjb2wpXG4gICAgICByLnN1Y2Nlc3MgPSBjb2wuc3RhdHMuc3VtID09PSBjb2wubGVuZ3RoO1xuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgY29uc3QgZGYgPSByLnJlc3VsdDtcbiAgICAgIGRmLmNvbHVtbnMucmVtb3ZlKCdzdGFjaycpO1xuICAgICAgZGYucm93cy5yZW1vdmVXaGVyZSgocikgPT4gci5nZXQoJ3N1Y2Nlc3MnKSk7XG4gICAgICByLnJlc3VsdCA9IGRmO1xuICAgIH1cbiAgICByLnJlc3VsdCA9IHIucmVzdWx0LnRvQ3N2KCk7XG4gIH1cbiAgci5sb2dzID0gbG9ncy5qb2luKCdcXG4nKTtcbiAgci5tcyA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgaWYgKCFza2lwKVxuICAgIHN0ZExvZyhgRmluaXNoZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX0gZm9yICR7ci5tc30gbXNgKTtcbiAgci5jYXRlZ29yeSA9IHQuY2F0ZWdvcnk7XG4gIHIubmFtZSA9IHQubmFtZTtcbiAgci5vd25lciA9IHQub3B0aW9ucz8ub3duZXIgPz8gJyc7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICdzdWNjZXNzJzogci5zdWNjZXNzLCAncmVzdWx0Jzogci5yZXN1bHQsICdtcyc6IHIubXMsICdkYXRlJzogci5kYXRlLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdwYWNrYWdlJzogcGFja2FnZU5hbWUsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9ncywgJ293bmVyJzogci5vd25lcixcbiAgICAgICdmbGFraW5nJzogREcuVGVzdC5pc1JlcHJvZHVjaW5nICYmIHIuc3VjY2VzcyxcbiAgICAgICd0aW1lb3V0V2FybmluZyc6IERHLlRlc3QuaXNJbkJlbmNobWFyayAmJiAodC5vcHRpb25zPy5iZW5jaG1hcmtXYXJuVGltZW91dCAmJiByLm1zID4gdC5vcHRpb25zPy5iZW5jaG1hcmtXYXJuVGltZW91dClcbiAgICB9O1xuICAgIGlmIChyLnJlc3VsdC5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcbiAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5rZXlzKHIucmVzdWx0KS5yZWR1Y2UoKGFjYywgaykgPT4gKHsgLi4uYWNjLCBbJ3Jlc3VsdC4nICsga106IHIucmVzdWx0W2tdIH0pLCB7fSk7XG4gICAgICBwYXJhbXMgPSB7IC4uLnBhcmFtcywgLi4ucmVzIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXN1bHQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpXG4gICAgICBwYXJhbXMucmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLnJlc3VsdD8udG9Kc29uKCkpIHx8ICcnO1xuXG4gICAgYXdhaXQgcmVwb3J0VGVzdCh0eXBlLCBwYXJhbXMpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZShhcnJheTogYW55W10pOiBhbnlbXSB7XG4gIGNvbnN0IG5ld0FyciA9IGFycmF5LnNsaWNlKCk7XG4gIG5ld0Fyci5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICByZXR1cm4gbmV3QXJyO1xufTtcblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtERy5EYXRhRnJhbWV9IGRmIERhdGFmcmFtZSB0byB1c2UuIFNob3VsZCBoYXZlIGF0IGxlYXN0IDMgcm93c1xuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5kZXRlY3RTZW1hbnRpY1R5cGVzIFNwZWNpZnkgd2hldGhlciB0byBkZXRlY3Qgc2VtYW50aWMgdHlwZXMgb3Igbm90XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLnJlYWRPbmx5IElmIHNldCB0byB0cnVlLCB0aGUgZGF0YWZyYW1lIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgdGVzdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5hcmJpdHJhcnlEZlRlc3QgSWYgc2V0IHRvIGZhbHNlLCB0ZXN0IG9uIGFyYml0cmFyeSBkYXRhZnJhbWVcbiAqIChvbmUgY2F0ZWdvcmljYWwgY29sdW1uKSB3aWxsIG5vdCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBMaXN0IG9mIG9wdGlvbnMgKG9wdGlvbmFsKVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gVGhlIHRlc3QgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGl0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFZpZXdlcih2OiBzdHJpbmcsIGRmOiBERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IERHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlTmFtZSA9IG9wdGlvbnM/LnBhY2thZ2VOYW1lID8/ICcnO1xuICBpZiAob3B0aW9ucz8uZGV0ZWN0U2VtYW50aWNUeXBlcylcbiAgICBhd2FpdCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuXG4gIHRyeSB7XG4gICAgLy8xLiBPcGVuLCBkbyBub3RoaW5nIGFuZCBjbG9zZVxuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgIC8vaW4gY2FzZSB2aWV3ZXIgd2l0aCBhc3luYyByZW5kZXJpbmcgLSB3YWl0IGZvciByZW5kZXIgdG8gY29tcGxldGVcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIHJ1biBzZWxlY3Rpb24sIGZpbHRlciwgZXRjLiBhbmQgY2xvc2VcbiAgICBpZiAoIW9wdGlvbnM/LnJlYWRPbmx5KSB7XG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50KTtcbiAgICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgc2VsZWN0RmlsdGVyQ2hhbmdlQ3VycmVudCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vMi4gT3BlbiB2aWV3ZXIsIGNoYW5nZSBvcHRpb25zLCBzYXZlIGxheW91dCBhbmQgY2xvc2VcbiAgICBsZXQgcHJvcHNBbmRMYXlvdXQ6IHsgbGF5b3V0OiBhbnksIHNhdmVkUHJvcHM6IGFueSB9IHwgbnVsbCA9IG51bGw7XG4gICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCk7XG4gICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgcHJvcHNBbmRMYXlvdXQgPSBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLFxuICAgICAgICBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpXG5cbiAgICAvLzMuIExvYWQgbGF5b3V0XG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3TGF5b3V0QXBwbGllZCwgbG9hZExheW91dCwgdW5kZWZpbmVkLCBwcm9wc0FuZExheW91dD8ubGF5b3V0LFxuICAgICAgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcixcbiAgICAgICAgcHJvcHNBbmRMYXlvdXQ/LmxheW91dCwgeyBzYXZlZFByb3BzOiBwcm9wc0FuZExheW91dD8uc2F2ZWRQcm9wcyB9KTtcblxuICAgIC8vNC4gT3BlbiB2aWV3ZXIgb24gYXJiaXRhcnkgZGF0YXNldFxuICAgIGlmIChvcHRpb25zPy5hcmJpdHJhcnlEZlRlc3QgIT09IGZhbHNlKSB7XG4gICAgICB0di5kYXRhRnJhbWUgPSBjYXRERjtcbiAgICAgIGF3YWl0IGRlbGF5KDUwKTtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCB1bmRlZmluZWQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyKTtcbiAgICB9XG5cbiAgICAvLzUuIENhbGwgcG9zdHBvbmVkIGZpbHRlcmluZ1xuICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jKTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBmaWx0ZXJBc3luYywgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gIH0gZmluYWxseSB7XG4gICAgLy8gY2xvc2VBbGwoKSBpcyBoYW5kbGluZyBieSBjb21tb24gdGVzdCB3b3JrZmxvd1xuICAgIC8vIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAvLyBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gIH1cbn1cbiJdfQ==
|