appium-remote-debugger 5.3.0 → 5.7.0
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/build/lib/helpers.js +28 -2
- package/build/lib/remote-debugger-message-handler.js +21 -23
- package/build/lib/remote-debugger-real-device.js +2 -1
- package/build/lib/remote-debugger.js +54 -32
- package/build/lib/remote-messages.js +16 -2
- package/build/lib/rpc-client-real-device.js +5 -1
- package/build/lib/rpc-client-simulator.js +5 -1
- package/build/lib/rpc-client.js +36 -10
- package/lib/helpers.js +29 -1
- package/lib/remote-debugger-message-handler.js +22 -24
- package/lib/remote-debugger-real-device.js +1 -0
- package/lib/remote-debugger.js +75 -39
- package/lib/remote-messages.js +14 -1
- package/lib/rpc-client-real-device.js +3 -0
- package/lib/rpc-client-simulator.js +4 -0
- package/lib/rpc-client.js +30 -7
- package/package.json +1 -1
|
@@ -31,6 +31,8 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
|
31
31
|
|
|
32
32
|
var _path = _interopRequireDefault(require("path"));
|
|
33
33
|
|
|
34
|
+
var _uuidJs = _interopRequireDefault(require("uuid-js"));
|
|
35
|
+
|
|
34
36
|
let VERSION;
|
|
35
37
|
|
|
36
38
|
try {
|
|
@@ -46,7 +48,6 @@ const BLANK_PAGE_URL = 'about:blank';
|
|
|
46
48
|
const RPC_RESPONSE_TIMEOUT_MS = 5000;
|
|
47
49
|
exports.RPC_RESPONSE_TIMEOUT_MS = RPC_RESPONSE_TIMEOUT_MS;
|
|
48
50
|
const PAGE_READY_TIMEOUT = 5000;
|
|
49
|
-
const RESPONSE_LOG_LENGTH = 100;
|
|
50
51
|
const GARBAGE_COLLECT_TIMEOUT = 5000;
|
|
51
52
|
|
|
52
53
|
class RemoteDebugger extends _events.default.EventEmitter {
|
|
@@ -129,6 +130,7 @@ class RemoteDebugger extends _events.default.EventEmitter {
|
|
|
129
130
|
async connect() {
|
|
130
131
|
this.setup();
|
|
131
132
|
this.rpcClient = new _rpcClientSimulator.default({
|
|
133
|
+
bundleId: this.bundleId,
|
|
132
134
|
platformVersion: this.platformVersion,
|
|
133
135
|
isSafari: this.isSafari,
|
|
134
136
|
host: this.host,
|
|
@@ -326,7 +328,7 @@ class RemoteDebugger extends _events.default.EventEmitter {
|
|
|
326
328
|
}
|
|
327
329
|
|
|
328
330
|
async searchForApp(currentUrl, maxTries, ignoreAboutBlankUrl) {
|
|
329
|
-
const bundleIds = this.includeSafari ? [this.bundleId, SAFARI_BUNDLE_ID] : [this.bundleId];
|
|
331
|
+
const bundleIds = this.includeSafari && !this.isSafari ? [this.bundleId, SAFARI_BUNDLE_ID] : [this.bundleId];
|
|
330
332
|
|
|
331
333
|
try {
|
|
332
334
|
return await (0, _asyncbox.retryInterval)(maxTries, SELECT_APP_RETRY_SLEEP_MS, async retryCount => {
|
|
@@ -418,16 +420,56 @@ class RemoteDebugger extends _events.default.EventEmitter {
|
|
|
418
420
|
const value = await this.execute(script, true);
|
|
419
421
|
|
|
420
422
|
_logger.default.debug(`Received result for atom '${atom}' execution: ${_lodash.default.truncate((0, _helpers.simpleStringify)(value), {
|
|
421
|
-
length: RESPONSE_LOG_LENGTH
|
|
423
|
+
length: _helpers.RESPONSE_LOG_LENGTH
|
|
422
424
|
})}`);
|
|
423
425
|
|
|
424
426
|
return value;
|
|
425
427
|
}
|
|
426
428
|
|
|
427
|
-
async executeAtomAsync(atom, args, frames
|
|
428
|
-
|
|
429
|
-
let script =
|
|
430
|
-
await this.
|
|
429
|
+
async executeAtomAsync(atom, args, frames) {
|
|
430
|
+
const promiseName = `appiumAsyncExecutePromise${_uuidJs.default.create().toString().replace(/-/g, '')}`;
|
|
431
|
+
let script = `var res, rej;` + `window.${promiseName} = new Promise(function (resolve, reject) {` + ` res = resolve;` + ` rej = reject;` + `});` + `window.${promiseName}.resolve = res;` + `window.${promiseName}.reject = rej;` + `window.${promiseName};`;
|
|
432
|
+
const obj = await this.rpcClient.send('sendJSCommand', {
|
|
433
|
+
command: script,
|
|
434
|
+
appIdKey: this.appIdKey,
|
|
435
|
+
pageIdKey: this.pageIdKey,
|
|
436
|
+
returnByValue: false
|
|
437
|
+
});
|
|
438
|
+
const promiseObjectId = obj.result.objectId;
|
|
439
|
+
const asyncCallBack = `function (res) {` + ` window.${promiseName}.resolve(res);` + ` window.${promiseName}Value = res;` + `}`;
|
|
440
|
+
await this.execute((await (0, _helpers.getScriptForAtom)(atom, args, frames, asyncCallBack)));
|
|
441
|
+
let res;
|
|
442
|
+
const subcommandTimeout = 1000;
|
|
443
|
+
|
|
444
|
+
try {
|
|
445
|
+
res = await this.rpcClient.send('awaitPromise', {
|
|
446
|
+
promiseObjectId,
|
|
447
|
+
appIdKey: this.appIdKey,
|
|
448
|
+
pageIdKey: this.pageIdKey
|
|
449
|
+
});
|
|
450
|
+
} catch (err) {
|
|
451
|
+
if (!err.message.includes(`'Runtime.awaitPromise' was not found`)) {
|
|
452
|
+
throw err;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
const retryWait = 100;
|
|
456
|
+
const timeout = args.length >= 3 ? args[2] : RPC_RESPONSE_TIMEOUT_MS;
|
|
457
|
+
const retries = parseInt(timeout / retryWait, 10);
|
|
458
|
+
const startTime = process.hrtime();
|
|
459
|
+
res = await (0, _asyncbox.retryInterval)(retries, retryWait, async () => {
|
|
460
|
+
if (await this.executeAtom('execute_script', [`return window.hasOwnProperty('${promiseName}Value');`, [null, null], subcommandTimeout], frames)) {
|
|
461
|
+
return await this.executeAtom('execute_script', [`return window.${promiseName}Value;`, [null, null], subcommandTimeout], frames);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
throw new _appiumBaseDriver.errors.TimeoutError(`Timed out waiting for asynchronous script ` + `result after ${(0, _helpers.getElapsedTime)(startTime)} ms'));`);
|
|
465
|
+
});
|
|
466
|
+
} finally {
|
|
467
|
+
try {
|
|
468
|
+
await this.executeAtom('execute_script', [`delete window.${promiseName};`, [null, null], subcommandTimeout], frames);
|
|
469
|
+
} catch (ign) {}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return (0, _helpers.convertResult)(res);
|
|
431
473
|
}
|
|
432
474
|
|
|
433
475
|
frameDetached() {
|
|
@@ -673,16 +715,16 @@ class RemoteDebugger extends _events.default.EventEmitter {
|
|
|
673
715
|
await this.garbageCollect();
|
|
674
716
|
}
|
|
675
717
|
|
|
676
|
-
_logger.default.debug(`Sending javascript command ${_lodash.default.truncate(command, {
|
|
718
|
+
_logger.default.debug(`Sending javascript command: '${_lodash.default.truncate(command, {
|
|
677
719
|
length: 50
|
|
678
|
-
})}`);
|
|
720
|
+
})}'`);
|
|
679
721
|
|
|
680
722
|
let res = await this.rpcClient.send('sendJSCommand', {
|
|
681
723
|
command,
|
|
682
724
|
appIdKey: this.appIdKey,
|
|
683
725
|
pageIdKey: this.pageIdKey
|
|
684
726
|
});
|
|
685
|
-
return
|
|
727
|
+
return (0, _helpers.convertResult)(res);
|
|
686
728
|
}
|
|
687
729
|
|
|
688
730
|
async callFunction(objId, fn, args) {
|
|
@@ -705,27 +747,7 @@ class RemoteDebugger extends _events.default.EventEmitter {
|
|
|
705
747
|
appIdKey: this.appIdKey,
|
|
706
748
|
pageIdKey: this.pageIdKey
|
|
707
749
|
});
|
|
708
|
-
return
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
convertResult(res) {
|
|
712
|
-
if (_lodash.default.isUndefined(res)) {
|
|
713
|
-
throw new Error(`Did not get OK result from remote debugger. Result was: ${_lodash.default.truncate((0, _helpers.simpleStringify)(res), {
|
|
714
|
-
length: RESPONSE_LOG_LENGTH
|
|
715
|
-
})}`);
|
|
716
|
-
} else if (_lodash.default.isString(res)) {
|
|
717
|
-
try {
|
|
718
|
-
res = JSON.parse(res);
|
|
719
|
-
} catch (err) {}
|
|
720
|
-
} else if (!_lodash.default.isObject(res)) {
|
|
721
|
-
throw new Error(`Result has unexpected type: (${typeof res}).`);
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
if (res.status && res.status !== 0) {
|
|
725
|
-
throw (0, _appiumBaseDriver.errorFromCode)(res.status, res.value.message || res.value);
|
|
726
|
-
}
|
|
727
|
-
|
|
728
|
-
return res.hasOwnProperty('value') ? res.value : res;
|
|
750
|
+
return (0, _helpers.convertResult)(res);
|
|
729
751
|
}
|
|
730
752
|
|
|
731
753
|
allowNavigationWithoutReload(allow = true) {
|
|
@@ -795,4 +817,4 @@ for (const [name, handler] of _lodash.default.toPairs(_messageHandlers.default))
|
|
|
795
817
|
}require('source-map-support').install();
|
|
796
818
|
|
|
797
819
|
|
|
798
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZW1vdGUtZGVidWdnZXIuanMiXSwibmFtZXMiOlsiVkVSU0lPTiIsInJlcXVpcmUiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInZlcnNpb24iLCJpZ24iLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiUkVNT1RFX0RFQlVHR0VSX1BPUlQiLCJTQUZBUklfQlVORExFX0lEIiwiQkxBTktfUEFHRV9VUkwiLCJSUENfUkVTUE9OU0VfVElNRU9VVF9NUyIsIlBBR0VfUkVBRFlfVElNRU9VVCIsIlJFU1BPTlNFX0xPR19MRU5HVEgiLCJHQVJCQUdFX0NPTExFQ1RfVElNRU9VVCIsIlJlbW90ZURlYnVnZ2VyIiwiZXZlbnRzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwibG9nIiwiaW5mbyIsImJ1bmRsZUlkIiwicGxhdGZvcm1WZXJzaW9uIiwiaXNTYWZhcmkiLCJpbmNsdWRlU2FmYXJpIiwidXNlTmV3U2FmYXJpIiwicGFnZUxvYWRNcyIsImhvc3QiLCJwb3J0Iiwic29ja2V0UGF0aCIsInBhZ2VSZWFkeVRpbWVvdXQiLCJyZW1vdGVEZWJ1Z1Byb3h5IiwiZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUiLCJsb2dGdWxsUmVzcG9uc2UiLCJkZWJ1ZyIsInNraXBwZWRBcHBzIiwic2V0dXAiLCJhcHBEaWN0IiwiYXBwSWRLZXkiLCJwYWdlSWRLZXkiLCJwYWdlTG9hZGluZyIsIl9uYXZpZ2F0aW5nVG9QYWdlIiwic3BlY2lhbENicyIsIl8iLCJub29wIiwib25QYWdlQ2hhbmdlIiwiYmluZCIsIm9uQXBwQ29ubmVjdCIsIm9uQXBwRGlzY29ubmVjdCIsIm9uQXBwVXBkYXRlIiwicGFnZUxvYWQiLCJmcmFtZURldGFjaGVkIiwidGFyZ2V0Q3JlYXRlZCIsIm9uVGFyZ2V0Q3JlYXRlZCIsInRhcmdldERlc3Ryb3llZCIsIm9uVGFyZ2V0RGVzdHJveWVkIiwicnBjQ2xpZW50IiwidGVhcmRvd24iLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJFVkVOVF9QQUdFX0NIQU5HRSIsIkVWRU5UX0RJU0NPTk5FQ1QiLCJjb25uZWN0IiwiUnBjQ2xpZW50U2ltdWxhdG9yIiwic3BlY2lhbE1lc3NhZ2VIYW5kbGVycyIsIm1lc3NhZ2VQcm94eSIsImFwcEluZm8iLCJzZXRDb25uZWN0aW9uS2V5IiwiZXJyIiwiZGlzY29ubmVjdCIsImVtaXQiLCJpc0Nvbm5lY3RlZCIsIkIiLCJyZWplY3QiLCJjb25uZWN0Q2IiLCJhcHBzIiwiaXNVbmRlZmluZWQiLCJrZXlzIiwibGVuZ3RoIiwibmV3RGljdCIsImRpY3QiLCJ2YWx1ZXMiLCJpZCIsImVudHJ5IiwiaW5jbHVkZXMiLCJuYW1lIiwiZGVmYXVsdHMiLCJzZXRTcGVjaWFsTWVzc2FnZUhhbmRsZXIiLCJzaW1OYW1lS2V5Iiwic2ltQnVpbGRLZXkiLCJzaW1QbGF0Zm9ybVZlcnNpb24iLCJzZW5kIiwidXBkYXRlQXBwc1dpdGhEaWN0IiwicGFnZUFycmF5IiwibG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5IiwiZ2V0VmFsdWVTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJpc0FycmF5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFwcCIsInRvUGFpcnMiLCJBcnJheSIsInBhZ2UiLCJwcmVmaXgiLCJrIiwidiIsInZhbHVlU3RyaW5nIiwic2VsZWN0QXBwIiwiY3VycmVudFVybCIsIm1heFRyaWVzIiwiaWdub3JlQWJvdXRCbGFua1VybCIsInNob3VsZENoZWNrRm9yVGFyZ2V0Iiwic3RhcnRUaW1lIiwicHJvY2VzcyIsImhydGltZSIsImlzRW1wdHkiLCJwYWdlRGljdCIsInNlYXJjaEZvckFwcCIsImVycm9yQW5kVGhyb3ciLCJmdWxsUGFnZUFycmF5IiwicmVwbGFjZSIsInVybCIsImNsb25lIiwicHVzaCIsImJ1bmRsZUlkcyIsInJldHJ5Q291bnQiLCJwb3NzaWJsZUFwcElkcyIsImpvaW4iLCJhdHRlbXB0ZWRBcHBJZEtleSIsInJlc3VsdCIsInNlYXJjaFBhZ2UiLCJtZXNzYWdlIiwiRXJyb3IiLCJhcHBzRGljdCIsInByb21pc2UiLCJzZWxlY3RQYWdlIiwic2tpcFJlYWR5Q2hlY2siLCJjaGVja1BhZ2VJc1JlYWR5IiwicGFnZVVubG9hZCIsImV4ZWN1dGVBdG9tIiwiYXRvbSIsImFyZ3MiLCJmcmFtZXMiLCJzY3JpcHQiLCJleGVjdXRlIiwidHJ1bmNhdGUiLCJleGVjdXRlQXRvbUFzeW5jIiwicmVzcG9uc2VVcmwiLCJhc3luY0NhbGxCYWNrIiwiRVZFTlRfRlJBTUVTX0RFVEFDSEVEIiwic3RhcnRQYWdlTG9hZE1zIiwicGFnZUxvYWRWZXJpZnlIb29rIiwidGltZW91dE1zIiwic3RhcnQiLCJEYXRlIiwibm93IiwidmVyaWZ5IiwicGFnZUxvYWREZWxheSIsInV0aWwiLCJjYW5jZWxsYWJsZURlbGF5IiwiQ2FuY2VsbGF0aW9uRXJyb3IiLCJyZWFkeSIsImNhbmNlbFBhZ2VMb2FkIiwiY2FuY2VsIiwid2FpdEZvckRvbSIsImVycm9ycyIsInJlYWR5Q21kIiwicmVhZHlTdGF0ZSIsInRpbWVvdXQiLCJUaW1lb3V0RXJyb3IiLCJsYXVuY2hTYWZhcmkiLCJuYXZUb1VybCIsImRlbGF5Iiwid2FpdEZvckZyYW1lTmF2aWdhdGVkIiwic3RhcnRNcyIsIm5hdkV2ZW50TGlzdGVuZXIiLCJuYXZpZ2F0aW9uRGVsYXkiLCJzdGFydFRpbWVsaW5lIiwiZm4iLCJzZXRUaW1lbGluZUV2ZW50SGFuZGxlciIsInN0b3BUaW1lbGluZSIsInN0YXJ0Q29uc29sZSIsInNldENvbnNvbGVMb2dFdmVudEhhbmRsZXIiLCJzdG9wQ29uc29sZSIsInN0YXJ0TmV0d29yayIsInNldE5ldHdvcmtMb2dFdmVudEhhbmRsZXIiLCJzdG9wTmV0d29yayIsImNvbW1hbmQiLCJvdmVycmlkZSIsImdhcmJhZ2VDb2xsZWN0IiwicmVzIiwiY29udmVydFJlc3VsdCIsImNhbGxGdW5jdGlvbiIsIm9iaklkIiwiaXNTdHJpbmciLCJwYXJzZSIsImlzT2JqZWN0Iiwic3RhdHVzIiwiaGFzT3duUHJvcGVydHkiLCJhbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkIiwiYWxsb3ciLCJnZXRDb29raWVzIiwidXJscyIsImRlbGV0ZUNvb2tpZSIsImNvb2tpZU5hbWUiLCJ0aGVuIiwiZ2NTdWNjZXNzIiwiY2F0Y2giLCJnY0Vycm9yIiwiaGFuZGxlciIsIm1lc3NhZ2VIYW5kbGVycyIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxJQUFJQSxPQUFKOztBQUNBLElBQUk7QUFDRkEsRUFBQUEsT0FBTyxHQUFHQyxPQUFPLENBQUNDLGNBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxjQUFwQyxDQUFELENBQVAsQ0FBNkRDLE9BQXZFO0FBQ0QsQ0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWSxDQUFFOztBQUVoQixNQUFNQyxrQkFBa0IsR0FBRyxFQUEzQjtBQUNBLE1BQU1DLHlCQUF5QixHQUFHLEdBQWxDO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBN0I7O0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsd0JBQXpCO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLGFBQXZCO0FBR0EsTUFBTUMsdUJBQXVCLEdBQUcsSUFBaEM7O0FBRUEsTUFBTUMsa0JBQWtCLEdBQUcsSUFBM0I7QUFFQSxNQUFNQyxtQkFBbUIsR0FBRyxHQUE1QjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHLElBQWhDOztBQUVBLE1BQU1DLGNBQU4sU0FBNkJDLGdCQUFPQyxZQUFwQyxDQUFpRDtBQVUvQ0MsRUFBQUEsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQ3RCOztBQUVBLFFBQUlwQixPQUFKLEVBQWE7QUFDWHFCLHNCQUFJQyxJQUFKLENBQVUsMkJBQTBCdEIsT0FBUSxFQUE1QztBQUNEOztBQUVELFVBQU07QUFD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SixDQUFXLDhCQUE2QmlDLEdBQUcsQ0FBQ2tFLE9BQVEsRUFBcEQ7QUFDRDtBQUNGLEtBWkssQ0FBTjtBQWFEOztBQTdyQjhDOzs7QUFpc0JqRHZILGNBQWMsQ0FBQzZDLGlCQUFmLEdBQW1DLDZCQUFuQztBQUNBN0MsY0FBYyxDQUFDeUkscUJBQWYsR0FBdUMsaUNBQXZDO0FBQ0F6SSxjQUFjLENBQUM4QyxnQkFBZixHQUFrQyw0QkFBbEM7O0FBR0EsS0FBSyxNQUFNLENBQUN3QixJQUFELEVBQU8rSCxPQUFQLENBQVgsSUFBOEJ4SyxnQkFBRTJELE9BQUYsQ0FBVThHLHdCQUFWLENBQTlCLEVBQTBEO0FBQ3hEdE0sRUFBQUEsY0FBYyxDQUFDdU0sU0FBZixDQUF5QmpJLElBQXpCLElBQWlDK0gsT0FBakM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZXJyb3JGcm9tQ29kZSB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgUnBjQ2xpZW50U2ltdWxhdG9yIGZyb20gJy4vcnBjLWNsaWVudC1zaW11bGF0b3InO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGVycyBmcm9tICcuL21lc3NhZ2UtaGFuZGxlcnMnO1xuaW1wb3J0IHsgYXBwSW5mb0Zyb21EaWN0LCBwYWdlQXJyYXlGcm9tRGljdCwgZ2V0RGVidWdnZXJBcHBLZXksXG4gICAgICAgICBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cywgY2hlY2tQYXJhbXMsIGdldFNjcmlwdEZvckF0b20sXG4gICAgICAgICBzaW1wbGVTdHJpbmdpZnksIGRlZmVycmVkUHJvbWlzZSwgZ2V0RWxhcHNlZFRpbWUgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cblxubGV0IFZFUlNJT047XG50cnkge1xuICBWRVJTSU9OID0gcmVxdWlyZShwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAncGFja2FnZS5qc29uJykpLnZlcnNpb247XG59IGNhdGNoIChpZ24pIHt9XG5cbmNvbnN0IFNFTEVDVF9BUFBfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUyA9IDUwMDtcbmNvbnN0IFJFTU9URV9ERUJVR0dFUl9QT1JUID0gMjc3NTM7XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgQkxBTktfUEFHRV9VUkwgPSAnYWJvdXQ6YmxhbmsnO1xuXG4vKiBIb3cgbWFueSBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3Igd2Via2l0IHRvIHJldHVybiBhIHJlc3BvbnNlIGJlZm9yZSB0aW1pbmcgb3V0ICovXG5jb25zdCBSUENfUkVTUE9OU0VfVElNRU9VVF9NUyA9IDUwMDA7XG5cbmNvbnN0IFBBR0VfUkVBRFlfVElNRU9VVCA9IDUwMDA7XG5cbmNvbnN0IFJFU1BPTlNFX0xPR19MRU5HVEggPSAxMDA7XG5cbmNvbnN0IEdBUkJBR0VfQ09MTEVDVF9USU1FT1VUID0gNTAwMDtcblxuY2xhc3MgUmVtb3RlRGVidWdnZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgLypcbiAgICogVGhlIGNvbnN0cnVjdG9yIHRha2VzIGFuIG9wdHMgaGFzaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAtIGJ1bmRsZUlkIC0gaWQgb2YgdGhlIGFwcCBiZWluZyBjb25uZWN0ZWQgdG9cbiAgICogICAtIHBsYXRmb3JtVmVyc2lvbiAtIHZlcnNpb24gb2YgaU9TXG4gICAqICAgLSB1c2VOZXdTYWZhcmkgLSBmb3Igd2ViIGluc3BlY3Rvciwgd2hldGhlciB0aGlzIGlzIGEgbmV3IFNhZmFyaSBpbnN0YW5jZVxuICAgKiAgIC0gcGFnZUxvYWRNcyAtIHRoZSB0aW1lLCBpbiBtcywgdGhhdCBzaG91bGQgYmUgd2FpdGVkIGZvciBwYWdlIGxvYWRpbmdcbiAgICogICAtIGhvc3QgLSB0aGUgcmVtb3RlIGRlYnVnZ2VyJ3MgaG9zdCBhZGRyZXNzXG4gICAqICAgLSBwb3J0IC0gdGhlIHJlbW90ZSBkZWJ1Z2dlciBwb3J0IHRocm91Z2ggd2hpY2ggdG8gY29tbXVuaWNhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKFZFUlNJT04pIHtcbiAgICAgIGxvZy5pbmZvKGBSZW1vdGUgRGVidWdnZXIgdmVyc2lvbiAke1ZFUlNJT059YCk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYnVuZGxlSWQsXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBpc1NhZmFyaSA9IHRydWUsXG4gICAgICBpbmNsdWRlU2FmYXJpID0gZmFsc2UsXG4gICAgICB1c2VOZXdTYWZhcmkgPSBmYWxzZSxcbiAgICAgIHBhZ2VMb2FkTXMsXG4gICAgICBob3N0LFxuICAgICAgcG9ydCA9IFJFTU9URV9ERUJVR0dFUl9QT1JULFxuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIHBhZ2VSZWFkeVRpbWVvdXQgPSBQQUdFX1JFQURZX1RJTUVPVVQsXG4gICAgICByZW1vdGVEZWJ1Z1Byb3h5LFxuICAgICAgZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUgPSBmYWxzZSxcbiAgICAgIGxvZ0Z1bGxSZXNwb25zZSA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuaXNTYWZhcmkgPSBpc1NhZmFyaTtcbiAgICB0aGlzLmluY2x1ZGVTYWZhcmkgPSBpbmNsdWRlU2FmYXJpO1xuICAgIHRoaXMudXNlTmV3U2FmYXJpID0gdXNlTmV3U2FmYXJpO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IHBhZ2VMb2FkTXM7XG4gICAgbG9nLmRlYnVnKGB1c2VOZXdTYWZhcmkgLS0+ICR7dGhpcy51c2VOZXdTYWZhcml9YCk7XG5cbiAgICB0aGlzLmdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlID0gZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGU7XG5cbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgIHRoaXMucG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5zb2NrZXRQYXRoID0gc29ja2V0UGF0aDtcbiAgICB0aGlzLnJlbW90ZURlYnVnUHJveHkgPSByZW1vdGVEZWJ1Z1Byb3h5O1xuICAgIHRoaXMucGFnZVJlYWR5VGltZW91dCA9IHBhZ2VSZWFkeVRpbWVvdXQ7XG5cbiAgICB0aGlzLmxvZ0Z1bGxSZXNwb25zZSA9IGxvZ0Z1bGxSZXNwb25zZTtcblxuICAgIHRoaXMuc2tpcHBlZEFwcHMgPSBbXTtcbiAgfVxuXG4gIHNldHVwICgpIHtcbiAgICAvLyBhcHAgaGFuZGxpbmcgY29uZmlndXJhdGlvblxuICAgIHRoaXMuYXBwRGljdCA9IHt9O1xuICAgIHRoaXMuYXBwSWRLZXkgPSBudWxsO1xuICAgIHRoaXMucGFnZUlkS2V5ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fbmF2aWdhdGluZ1RvUGFnZSA9IGZhbHNlO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBzcGVjaWFsIGNhbGxiYWNrcyBmb3IgaGFuZGxpbmcgcmQgZXZlbnRzXG4gICAgdGhpcy5zcGVjaWFsQ2JzID0ge1xuICAgICAgJ19ycGNfcmVwb3J0SWRlbnRpZmllcjonOiBfLm5vb3AsXG4gICAgICAnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonOiB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0Oic6IF8ubm9vcCxcbiAgICAgICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOic6IHRoaXMub25BcHBDb25uZWN0LmJpbmQodGhpcyksXG4gICAgICAnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonOiB0aGlzLm9uQXBwRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxuICAgICAgJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOic6IHRoaXMub25BcHBVcGRhdGUuYmluZCh0aGlzKSxcbiAgICAgICdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JzogXy5ub29wLFxuICAgICAgcGFnZUxvYWQ6IHRoaXMucGFnZUxvYWQuYmluZCh0aGlzKSxcbiAgICAgIGZyYW1lRGV0YWNoZWQ6IHRoaXMuZnJhbWVEZXRhY2hlZC5iaW5kKHRoaXMpLFxuICAgICAgdGFyZ2V0Q3JlYXRlZDogdGhpcy5vblRhcmdldENyZWF0ZWQuYmluZCh0aGlzKSxcbiAgICAgIHRhcmdldERlc3Ryb3llZDogdGhpcy5vblRhcmdldERlc3Ryb3llZC5iaW5kKHRoaXMpLFxuICAgIH07XG5cbiAgICB0aGlzLnJwY0NsaWVudCA9IG51bGw7XG4gIH1cblxuICB0ZWFyZG93biAoKSB7XG4gICAgbG9nLmRlYnVnKCdDbGVhbmluZyB1cCBsaXN0ZW5lcnMnKTtcblxuICAgIHRoaXMuYXBwRGljdCA9IHt9O1xuICAgIHRoaXMuYXBwSWRLZXkgPSBudWxsO1xuICAgIHRoaXMucGFnZUlkS2V5ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnNwZWNpYWxDYnMgPSB7fTtcblxuICAgIHRoaXMucnBjQ2xpZW50ID0gbnVsbDtcblxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFJlbW90ZURlYnVnZ2VyLkVWRU5UX1BBR0VfQ0hBTkdFKTtcbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhSZW1vdGVEZWJ1Z2dlci5FVkVOVF9ESVNDT05ORUNUKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QgKCkge1xuICAgIHRoaXMuc2V0dXAoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIHJwYyBjbGllbnRcbiAgICB0aGlzLnJwY0NsaWVudCA9IG5ldyBScGNDbGllbnRTaW11bGF0b3Ioe1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIGlzU2FmYXJpOiB0aGlzLmlzU2FmYXJpLFxuICAgICAgaG9zdDogdGhpcy5ob3N0LFxuICAgICAgcG9ydDogdGhpcy5wb3J0LFxuICAgICAgc29ja2V0UGF0aDogdGhpcy5zb2NrZXRQYXRoLFxuICAgICAgc3BlY2lhbE1lc3NhZ2VIYW5kbGVyczogdGhpcy5zcGVjaWFsQ2JzLFxuICAgICAgbWVzc2FnZVByb3h5OiB0aGlzLnJlbW90ZURlYnVnUHJveHksXG4gICAgICBsb2dGdWxsUmVzcG9uc2U6IHRoaXMubG9nRnVsbFJlc3BvbnNlLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LmNvbm5lY3QoKTtcblxuICAgIC8vIGdldCB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXBwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwcEluZm8gPSBhd2FpdCB0aGlzLnNldENvbm5lY3Rpb25LZXkoKTtcbiAgICAgIGxvZy5kZWJ1ZygnQ29ubmVjdGVkIHRvIGFwcGxpY2F0aW9uJyk7XG4gICAgICByZXR1cm4gYXBwSW5mbztcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzY29ubmVjdCAoKSB7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZW1pdChSZW1vdGVEZWJ1Z2dlci5FVkVOVF9ESVNDT05ORUNULCB0cnVlKTtcbiAgICB0aGlzLnRlYXJkb3duKCk7XG4gIH1cblxuICBpc0Nvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucnBjQ2xpZW50ICYmIHRoaXMucnBjQ2xpZW50LmlzQ29ubmVjdGVkKCkpO1xuICB9XG5cbiAgYXN5bmMgc2V0Q29ubmVjdGlvbktleSAoKSB7XG4gICAgLy8gb25seSByZXNvbHZlIHdoZW4gdGhlIGNvbm5lY3Rpb24gcmVzcG9uc2UgaXMgcmVjZWl2ZWRcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gbG9jYWwgY2FsbGJhY2ssIGNhbGxlZCB3aGVuIHRoZSByZW1vdGUgZGVidWdnZXIgaGFzIGVzdGFibGlzaGVkXG4gICAgICAvLyBhIGNvbm5lY3Rpb24gdG8gdGhlIGFwcCB1bmRlciB0ZXN0XG4gICAgICAvLyBgYXBwYCB3aWxsIGJlIGFuIGFycmF5IG9mIGRpY3Rpb25hcmllcyBvZiBhcHAgaW5mb3JtYXRpb25cbiAgICAgIGxldCBjb25uZWN0Q2IgPSAoYXBwcykgPT4ge1xuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChhcHBzKSB8fCBfLmtleXMoYXBwcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdSZWNlaXZlZCBubyBhcHBzIGZyb20gcmVtb3RlIGRlYnVnZ2VyLiBVbmFibGUgdG8gY29ubmVjdC4nKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmFwcERpY3QpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdEaWN0ID0ge307XG5cbiAgICAgICAgLy8gdHJhbnNsYXRlIHRoZSByZWNlaXZlZCBpbmZvcm1hdGlvbiBpbnRvIGFuIGVhc2llci10by1tYW5hZ2VcbiAgICAgICAgLy8gaGFzaCB3aXRoIGFwcCBpZCBhcyBrZXksIGFuZCBhcHAgaW5mbyBhcyB2YWx1ZVxuICAgICAgICBmb3IgKGNvbnN0IGRpY3Qgb2YgXy52YWx1ZXMoYXBwcykpIHtcbiAgICAgICAgICBjb25zdCBbaWQsIGVudHJ5XSA9IGFwcEluZm9Gcm9tRGljdChkaWN0KTtcbiAgICAgICAgICBpZiAodGhpcy5za2lwcGVkQXBwcy5pbmNsdWRlcyhlbnRyeS5uYW1lKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0RpY3RbaWRdID0gZW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBvYmplY3QncyBsaXN0IG9mIGFwcHMsIGFuZCByZXR1cm4gaXQgdGhyb3VnaCB0aGUgcHJvbWlzZVxuICAgICAgICBfLmRlZmF1bHRzKHRoaXMuYXBwRGljdCwgbmV3RGljdCk7XG4gICAgICAgIHJlc29sdmUobmV3RGljdCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5ycGNDbGllbnQuc2V0U3BlY2lhbE1lc3NhZ2VIYW5kbGVyKCdfcnBjX3JlcG9ydENvbm5lY3RlZEFwcGxpY2F0aW9uTGlzdDonLCByZWplY3QsIGNvbm5lY3RDYik7XG5cbiAgICAgIGxvZy5kZWJ1ZygnU2VuZGluZyBjb25uZWN0aW9uIGtleSByZXF1ZXN0Jyk7XG4gICAgICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgW3NpbU5hbWVLZXksIHNpbUJ1aWxkS2V5LCBzaW1QbGF0Zm9ybVZlcnNpb25dID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc2V0Q29ubmVjdGlvbktleScpO1xuICAgICAgICBsb2cuZGVidWcoYFNpbSBuYW1lOiAke3NpbU5hbWVLZXl9YCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgU2ltIGJ1aWxkOiAke3NpbUJ1aWxkS2V5fWApO1xuICAgICAgICBsb2cuZGVidWcoYFNpbSBwbGF0Zm9ybSB2ZXJzaW9uOiAke3NpbVBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgIH0pKCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVBcHBzV2l0aERpY3QgKGRpY3QpIHtcbiAgICAvLyBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cnkgaW50byBhIG5pY2UgZm9ybSwgYW5kIGFkZCBpdCB0byB0aGVcbiAgICAvLyBhcHBsaWNhdGlvbiBkaWN0aW9uYXJ5XG4gICAgdGhpcy5hcHBEaWN0ID0gdGhpcy5hcHBEaWN0IHx8IHt9O1xuICAgIGxldCBbaWQsIGVudHJ5XSA9IGFwcEluZm9Gcm9tRGljdChkaWN0KTtcbiAgICBpZiAodGhpcy5hcHBEaWN0W2lkXSkge1xuICAgICAgLy8gcHJlc2VydmUgdGhlIHBhZ2UgZGljdGlvbmFyeSBmb3IgdGhpcyBlbnRyeVxuICAgICAgZW50cnkucGFnZUFycmF5ID0gdGhpcy5hcHBEaWN0W2lkXS5wYWdlQXJyYXk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGljdFtpZF0gPSBlbnRyeTtcblxuICAgIC8vIGFkZCBhIHByb21pc2UgdG8gZ2V0IHRoZSBwYWdlIGRpY3Rpb25hcnlcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChlbnRyeS5wYWdlQXJyYXkpKSB7XG4gICAgICBlbnRyeS5wYWdlQXJyYXkgPSBkZWZlcnJlZFByb21pc2UoKTtcbiAgICB9XG5cbiAgICAvLyB0cnkgdG8gZ2V0IHRoZSBhcHAgaWQgZnJvbSBvdXIgY29ubmVjdGVkIGFwcHNcbiAgICBpZiAoIXRoaXMuYXBwSWRLZXkpIHtcbiAgICAgIHRoaXMuYXBwSWRLZXkgPSBnZXREZWJ1Z2dlckFwcEtleSh0aGlzLmJ1bmRsZUlkLCB0aGlzLnBsYXRmb3JtVmVyc2lvbiwgdGhpcy5hcHBEaWN0KTtcbiAgICB9XG4gIH1cblxuICBsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkgKGFwcHMpIHtcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZVN0cmluZyAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb25dJztcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdwYWdlQXJyYXknICYmICFfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBgJ1dhaXRpbmcgZm9yIGRhdGEnYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZygnQ3VycmVudCBhcHBsaWNhdGlvbnMgYXZhaWxhYmxlOicpO1xuICAgIGZvciAoY29uc3QgW2FwcCwgaW5mb10gb2YgXy50b1BhaXJzKGFwcHMpKSB7XG4gICAgICBsb2cuZGVidWcoYCAgICBBcHBsaWNhdGlvbjogJyR7YXBwfSdgKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhpbmZvKSkge1xuICAgICAgICBpZiAoa2V5ID09PSAncGFnZUFycmF5JyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgJHtrZXl9OmApO1xuICAgICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IHByZWZpeCA9ICctICc7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBfLnRvUGFpcnMocGFnZSkpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGAgICAgICAgICAgJHtwcmVmaXh9JHtrfTogJHtKU09OLnN0cmluZ2lmeSh2KX1gKTtcbiAgICAgICAgICAgICAgcHJlZml4ID0gJyAgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVTdHJpbmcgPSBnZXRWYWx1ZVN0cmluZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgJHtrZXl9OiAke3ZhbHVlU3RyaW5nfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0QXBwIChjdXJyZW50VXJsID0gbnVsbCwgbWF4VHJpZXMgPSBTRUxFQ1RfQVBQX1JFVFJJRVMsIGlnbm9yZUFib3V0QmxhbmtVcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHNob3VsZENoZWNrRm9yVGFyZ2V0ID0gdGhpcy5ycGNDbGllbnQuc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gICAgdGhpcy5ycGNDbGllbnQuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgIGxvZy5kZWJ1ZygnU2VsZWN0aW5nIGFwcGxpY2F0aW9uJyk7XG4gICAgICBpZiAoIXRoaXMuYXBwRGljdCB8fCBfLmlzRW1wdHkodGhpcy5hcHBEaWN0KSkge1xuICAgICAgICBsb2cuZGVidWcoJ05vIGFwcGxpY2F0aW9ucyBjdXJyZW50bHkgY29ubmVjdGVkLicpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwSWRLZXksIHBhZ2VEaWN0IH0gPSBhd2FpdCB0aGlzLnNlYXJjaEZvckFwcChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCk7XG5cbiAgICAgIC8vIGlmLCBhZnRlciBhbGwgdGhpcywgd2UgaGF2ZSBubyBkaWN0aW9uYXJ5LCB3ZSBoYXZlIGZhaWxlZFxuICAgICAgaWYgKCFhcHBJZEtleSB8fCAhcGFnZURpY3QpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hcHBJZEtleSAhPT0gYXBwSWRLZXkpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhbHRlcmVkIGFwcCBpZCwgdXBkYXRpbmcgZnJvbSAnJHt0aGlzLmFwcElkS2V5fScgdG8gJyR7YXBwSWRLZXl9J2ApO1xuICAgICAgICB0aGlzLmFwcElkS2V5ID0gYXBwSWRLZXk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nQXBwbGljYXRpb25EaWN0aW9uYXJ5KHRoaXMuYXBwRGljdCk7XG5cbiAgICAgIC8vIHRyYW5zbGF0ZSB0aGUgZGljdGlvbmFyeSBpbnRvIGEgdXNlZnVsIGZvcm0sIGFuZCByZXR1cm4gdG8gc2VuZGVyXG4gICAgICBjb25zdCBwYWdlQXJyYXkgPSBfLmlzRW1wdHkodGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXkpXG4gICAgICAgID8gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpXG4gICAgICAgIDogdGhpcy5hcHBEaWN0W2FwcElkS2V5XS5wYWdlQXJyYXk7XG4gICAgICBsb2cuZGVidWcoYEZpbmFsbHkgc2VsZWN0aW5nIGFwcCAke3RoaXMuYXBwSWRLZXl9OiAke3NpbXBsZVN0cmluZ2lmeShwYWdlQXJyYXkpfWApO1xuXG4gICAgICBsZXQgZnVsbFBhZ2VBcnJheSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBbYXBwLCBpbmZvXSBvZiBfLnRvUGFpcnModGhpcy5hcHBEaWN0KSkge1xuICAgICAgICBpZiAoIV8uaXNBcnJheShpbmZvLnBhZ2VBcnJheSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IGFwcC5yZXBsYWNlKCdQSUQ6JywgJycpO1xuICAgICAgICBmb3IgKGNvbnN0IHBhZ2Ugb2YgaW5mby5wYWdlQXJyYXkpIHtcbiAgICAgICAgICBpZiAocGFnZS51cmwgJiYgKCFpZ25vcmVBYm91dEJsYW5rVXJsIHx8IHBhZ2UudXJsICE9PSBCTEFOS19QQUdFX1VSTCkpIHtcbiAgICAgICAgICAgIGxldCBwYWdlRGljdCA9IF8uY2xvbmUocGFnZSk7XG4gICAgICAgICAgICBwYWdlRGljdC5pZCA9IGAke2lkfS4ke3BhZ2VEaWN0LmlkfWA7XG4gICAgICAgICAgICBmdWxsUGFnZUFycmF5LnB1c2gocGFnZURpY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBhcHAgYWZ0ZXIgJHtnZXRFbGFwc2VkVGltZShzdGFydFRpbWUpfW1zYCk7XG4gICAgICByZXR1cm4gZnVsbFBhZ2VBcnJheTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5ycGNDbGllbnQuc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSBzaG91bGRDaGVja0ZvclRhcmdldDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hGb3JBcHAgKGN1cnJlbnRVcmwsIG1heFRyaWVzLCBpZ25vcmVBYm91dEJsYW5rVXJsKSB7XG4gICAgY29uc3QgYnVuZGxlSWRzID0gdGhpcy5pbmNsdWRlU2FmYXJpXG4gICAgICA/IFt0aGlzLmJ1bmRsZUlkLCBTQUZBUklfQlVORExFX0lEXVxuICAgICAgOiBbdGhpcy5idW5kbGVJZF07XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXRyeUludGVydmFsKG1heFRyaWVzLCBTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TLCBhc3luYyAocmV0cnlDb3VudCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSh0aGlzLmFwcERpY3QpO1xuICAgICAgICBjb25zdCBwb3NzaWJsZUFwcElkcyA9IGdldFBvc3NpYmxlRGVidWdnZXJBcHBLZXlzKGJ1bmRsZUlkcywgdGhpcy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMuYXBwRGljdCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVHJ5aW5nIG91dCB0aGUgcG9zc2libGUgYXBwIGlkczogJHtwb3NzaWJsZUFwcElkcy5qb2luKCcsICcpfWApO1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGVtcHRlZEFwcElkS2V5IG9mIHBvc3NpYmxlQXBwSWRzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGFwcCAke2F0dGVtcHRlZEFwcElkS2V5fSAodHJ5ICMke3JldHJ5Q291bnQgKyAxfSBvZiAke21heFRyaWVzfSlgKTtcbiAgICAgICAgICAgIGNvbnN0IFthcHBJZEtleSwgcGFnZURpY3RdID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0QXBwKGF0dGVtcHRlZEFwcElkS2V5LCB0aGlzLm9uQXBwQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIGluIGlPUyA4LjIgdGhlIGNvbm5lY3QgbG9naWMgaGFwcGVucywgYnV0IHdpdGggYW4gZW1wdHkgZGljdGlvbmFyeVxuICAgICAgICAgICAgLy8gd2hpY2ggbGVhZHMgdG8gdGhlIHJlbW90ZSBkZWJ1Z2dlciBnZXR0aW5nIGRpc2Nvbm5lY3RlZCwgYW5kIGludG8gYSBsb29wXG4gICAgICAgICAgICBpZiAoXy5pc0VtcHR5KHBhZ2VEaWN0KSkge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoJ0VtcHR5IHBhZ2UgZGljdGlvbmFyeSByZWNlaXZlZC4gVHJ5aW5nIGFnYWluLicpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2F2ZSB0aGUgcGFnZSBhcnJheSBmb3IgdGhpcyBhcHBcbiAgICAgICAgICAgIHRoaXMuYXBwRGljdFthcHBJZEtleV0ucGFnZUFycmF5ID0gcGFnZUFycmF5RnJvbURpY3QocGFnZURpY3QpO1xuXG4gICAgICAgICAgICAvLyBpZiB3ZSBhcmUgbG9va2luZyBmb3IgYSBwYXJ0aWN1bGFyIHVybCwgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IHBhZ2UuIElnbm9yZSBlbXB0eSBvciB1bmRlZmluZWQgdXJscy4gSWdub3JlIGFib3V0OmJsYW5rIGlmIHJlcXVlc3RlZC5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2VhcmNoUGFnZSh0aGlzLmFwcERpY3QsIGN1cnJlbnRVcmwsIGlnbm9yZUFib3V0QmxhbmtVcmwpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudFVybCkge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGFwcCwgYnV0IGV4cGVjdGVkIHVybCAoJyR7Y3VycmVudFVybH0nKSB3YXMgbm90IGZvdW5kLiBUcnlpbmcgYWdhaW4uYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIGFwcCwgYnV0IG5vIG1hdGNoIHdhcyBmb3VuZC4gVHJ5aW5nIGFnYWluLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBFcnJvciBjaGVja2luZyBhcHBsaWNhdGlvbjogJyR7ZXJyLm1lc3NhZ2V9Jy4gUmV0cnlpbmcgY29ubmVjdGlvbmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGZpbmQgYW4gYXBwIHRvIHNlbGVjdCcpO1xuICAgICAgfSwgMCk7XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXIgJHttYXhUcmllc30gdHJpZXMuYCk7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoUGFnZSAoYXBwc0RpY3QsIGN1cnJlbnRVcmwgPSBudWxsLCBpZ25vcmVBYm91dEJsYW5rVXJsID0gZmFsc2UpIHtcbiAgICBmb3IgKGNvbnN0IGFwcERpY3Qgb2YgXy52YWx1ZXMoYXBwc0RpY3QpKSB7XG4gICAgICBpZiAoIWFwcERpY3QgfHwgIWFwcERpY3QucGFnZUFycmF5IHx8IGFwcERpY3QucGFnZUFycmF5LnByb21pc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZGljdCBvZiBhcHBEaWN0LnBhZ2VBcnJheSkge1xuICAgICAgICBpZiAoKCFpZ25vcmVBYm91dEJsYW5rVXJsIHx8IGRpY3QudXJsICE9PSBCTEFOS19QQUdFX1VSTCkgJiZcbiAgICAgICAgICAgICghY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gY3VycmVudFVybCB8fCBkaWN0LnVybCA9PT0gYCR7Y3VycmVudFVybH0vYCkpIHtcbiAgICAgICAgICByZXR1cm4geyBhcHBJZEtleTogYXBwRGljdC5pZCwgcGFnZURpY3Q6IGRpY3QgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFBhZ2UgKGFwcElkS2V5LCBwYWdlSWRLZXksIHNraXBSZWFkeUNoZWNrID0gZmFsc2UpIHtcbiAgICB0aGlzLmFwcElkS2V5ID0gYFBJRDoke2FwcElkS2V5fWA7XG4gICAgdGhpcy5wYWdlSWRLZXkgPSBwYWdlSWRLZXk7XG5cbiAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBwYWdlICcke3BhZ2VJZEtleX0nIG9uIGFwcCAnJHt0aGlzLmFwcElkS2V5fScgYW5kIGZvcndhcmRpbmcgc29ja2V0IHNldHVwYCk7XG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuXG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VsZWN0UGFnZSh0aGlzLmFwcElkS2V5LCBwYWdlSWRLZXkpO1xuXG4gICAgLy8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gZ29cbiAgICBpZiAoIXNraXBSZWFkeUNoZWNrICYmICFhd2FpdCB0aGlzLmNoZWNrUGFnZUlzUmVhZHkoKSkge1xuICAgICAgYXdhaXQgdGhpcy5wYWdlVW5sb2FkKCk7XG4gICAgfVxuXG4gICAgbG9nLmRlYnVnKGBTZWxlY3RlZCBwYWdlIGFmdGVyICR7Z2V0RWxhcHNlZFRpbWUoc3RhcnRUaW1lKX1tc2ApO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUF0b20gKGF0b20sIGFyZ3MsIGZyYW1lcykge1xuICAgIGlmICghdGhpcy5ycGNDbGllbnQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdGUgZGVidWdnZXIgaXMgbm90IGNvbm5lY3RlZCcpO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGF0b20gJyR7YXRvbX0nYCk7XG4gICAgY29uc3Qgc2NyaXB0ID0gYXdhaXQgZ2V0U2NyaXB0Rm9yQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMpO1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5leGVjdXRlKHNjcmlwdCwgdHJ1ZSk7XG4gICAgbG9nLmRlYnVnKGBSZWNlaXZlZCByZXN1bHQgZm9yIGF0b20gJyR7YXRvbX0nIGV4ZWN1dGlvbjogJHtfLnRydW5jYXRlKHNpbXBsZVN0cmluZ2lmeSh2YWx1ZSksIHtsZW5ndGg6IFJFU1BPTlNFX0xPR19MRU5HVEh9KX1gKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQXRvbUFzeW5jIChhdG9tLCBhcmdzLCBmcmFtZXMsIHJlc3BvbnNlVXJsKSB7XG4gICAgbGV0IGFzeW5jQ2FsbEJhY2sgPSBgZnVuY3Rpb24gKHJlcykgeyB4bWxIdHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYHhtbEh0dHAub3BlbignUE9TVCcsICcke3Jlc3BvbnNlVXJsfScsIHRydWUpO2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYHhtbEh0dHAuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywnYXBwbGljYXRpb24vanNvbicpOyBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGB4bWxIdHRwLnNlbmQocmVzKTsgfWA7XG4gICAgbGV0IHNjcmlwdCA9IGF3YWl0IGdldFNjcmlwdEZvckF0b20oYXRvbSwgYXJncywgZnJhbWVzLCBhc3luY0NhbGxCYWNrKTtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoc2NyaXB0KTtcbiAgfVxuXG4gIGZyYW1lRGV0YWNoZWQgKCkge1xuICAgIHRoaXMuZW1pdChSZW1vdGVEZWJ1Z2dlci5FVkVOVF9GUkFNRVNfREVUQUNIRUQpO1xuICB9XG5cbiAgYXN5bmMgcGFnZUxvYWQgKHN0YXJ0UGFnZUxvYWRNcywgcGFnZUxvYWRWZXJpZnlIb29rKSB7XG4gICAgbGV0IHRpbWVvdXRNcyA9IDUwMDtcbiAgICBsZXQgc3RhcnQgPSBzdGFydFBhZ2VMb2FkTXMgfHwgRGF0ZS5ub3coKTtcbiAgICBsb2cuZGVidWcoJ1BhZ2UgbG9hZGVkLCB2ZXJpZnlpbmcgd2hldGhlciByZWFkeScpO1xuXG4gICAgY29uc3QgdmVyaWZ5ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5wYWdlTG9hZERlbGF5ID0gdXRpbC5jYW5jZWxsYWJsZURlbGF5KHRpbWVvdXRNcyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnBhZ2VMb2FkRGVsYXk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEIuQ2FuY2VsbGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgcHJvbWlzZSBoYXMgYmVlbiBjYW5jZWxsZWRcbiAgICAgICAgICAvLyB3ZSB3YW50IHRvIHNraXAgY2hlY2tpbmcgdGhlIHJlYWRpbmVzc1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3ZSBjYW4gZ2V0IHRoaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgdHJ5aW5nIHRvIGZpbmQgYSBuZXcgYXBwXG4gICAgICBpZiAoIXRoaXMuYXBwSWRLZXkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdOb3QgY29ubmVjdGVkIHRvIGFuIGFwcGxpY2F0aW9uLiBJZ25vcmluZyBwYWdlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHBhZ2VMb2FkVmVyaWZ5SG9vaykpIHtcbiAgICAgICAgYXdhaXQgcGFnZUxvYWRWZXJpZnlIb29rKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgdGhpcy5jaGVja1BhZ2VJc1JlYWR5KCk7XG5cbiAgICAgIC8vIGlmIHdlIGFyZSByZWFkeSwgb3Igd2UndmUgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGlzXG4gICAgICBpZiAocmVhZHkgfHwgKHRoaXMucGFnZUxvYWRNcyA+IDAgJiYgKHN0YXJ0ICsgdGhpcy5wYWdlTG9hZE1zKSA8IERhdGUubm93KCkpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnUGFnZSBpcyByZWFkeScpO1xuICAgICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ1BhZ2Ugd2FzIG5vdCByZWFkeSwgcmV0cnlpbmcnKTtcbiAgICAgICAgYXdhaXQgdmVyaWZ5KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCB2ZXJpZnkoKTtcbiAgfVxuXG4gIGNhbmNlbFBhZ2VMb2FkICgpIHtcbiAgICBsb2cuZGVidWcoJ1VucmVnaXN0ZXJpbmcgZnJvbSBwYWdlIHJlYWRpbmVzcyBub3RpZmljYXRpb25zJyk7XG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBhZ2VMb2FkRGVsYXkpIHtcbiAgICAgIHRoaXMucGFnZUxvYWREZWxheS5jYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwYWdlVW5sb2FkICgpIHtcbiAgICBsb2cuZGVidWcoJ1BhZ2UgdW5sb2FkaW5nJyk7XG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yRG9tKCk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yRG9tIChzdGFydFBhZ2VMb2FkTXMsIHBhZ2VMb2FkVmVyaWZ5SG9vaykge1xuICAgIGxvZy5kZWJ1ZygnV2FpdGluZyBmb3IgZG9tLi4uJyk7XG4gICAgYXdhaXQgdGhpcy5wYWdlTG9hZChzdGFydFBhZ2VMb2FkTXMsIHBhZ2VMb2FkVmVyaWZ5SG9vayk7XG4gIH1cblxuICBhc3luYyBjaGVja1BhZ2VJc1JlYWR5ICgpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXl9KTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgbG9nLmRlYnVnKCdDaGVja2luZyBkb2N1bWVudCByZWFkeVN0YXRlJyk7XG4gICAgY29uc3QgcmVhZHlDbWQgPSAnKGZ1bmN0aW9uICgpeyByZXR1cm4gZG9jdW1lbnQucmVhZHlTdGF0ZTsgfSkoKSc7XG4gICAgbGV0IHJlYWR5U3RhdGUgPSAnbG9hZGluZyc7XG4gICAgdHJ5IHtcbiAgICAgIHJlYWR5U3RhdGUgPSBhd2FpdCBCLnJlc29sdmUodGhpcy5leGVjdXRlKHJlYWR5Q21kLCB0cnVlKSkudGltZW91dCh0aGlzLnBhZ2VSZWFkeVRpbWVvdXQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQi5UaW1lb3V0RXJyb3IpKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgUGFnZSByZWFkaW5lc3MgY2hlY2sgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5wYWdlUmVhZHlUaW1lb3V0fW1zYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgRG9jdW1lbnQgcmVhZHlTdGF0ZSBpcyAnJHtyZWFkeVN0YXRlfSdgKTtcblxuICAgIHJldHVybiByZWFkeVN0YXRlID09PSAnY29tcGxldGUnO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2FmYXJpICgpIHtcbiAgICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdsYXVuY2hBcHBsaWNhdGlvbicsIHtcbiAgICAgIGJ1bmRsZUlkOiBTQUZBUklfQlVORExFX0lEXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuYXZUb1VybCAodXJsLCBwYWdlTG9hZFZlcmlmeUhvb2spIHtcbiAgICBjb25zdCBlcnJvcnMgPSBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXl9KTtcbiAgICBpZiAoZXJyb3JzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9uYXZpZ2F0aW5nVG9QYWdlID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYE5hdmlnYXRpbmcgdG8gbmV3IFVSTDogJyR7dXJsfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3NldFVybCcsIHtcbiAgICAgICAgdXJsLFxuICAgICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMudXNlTmV3U2FmYXJpKSB7XG4gICAgICAgIC8vIGEgc21hbGwgcGF1c2UgZm9yIHRoZSBicm93c2VyIHRvIGNhdGNoIHVwXG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckZyYW1lTmF2aWdhdGVkKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckRvbShEYXRlLm5vdygpLCBwYWdlTG9hZFZlcmlmeUhvb2spO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW5nVG9QYWdlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd2FpdEZvckZyYW1lTmF2aWdhdGVkICgpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbG9nLmRlYnVnKCdXYWl0aW5nIGZvciBmcmFtZSBuYXZpZ2F0ZWQgbWVzc2FnZS4uLicpO1xuICAgICAgbGV0IHN0YXJ0TXMgPSBEYXRlLm5vdygpO1xuXG4gICAgICAvLyBhZGQgYSBoYW5kbGVyIGZvciB0aGUgYFBhZ2UuZnJhbWVOYXZpZ2F0ZWRgIG1lc3NhZ2VcbiAgICAgIC8vIGZyb20gdGhlIHJlbW90ZSBkZWJ1Z2dlclxuICAgICAgY29uc3QgbmF2RXZlbnRMaXN0ZW5lciA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoYEZyYW1lIG5hdmlnYXRlZCBpbiAkeygoRGF0ZS5ub3coKSAtIHN0YXJ0TXMpIC8gMTAwMCl9IHNlYyBmcm9tIHNvdXJjZTogJHt2YWx1ZX1gKTtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbkRlbGF5KSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGVsYXkuY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5ycGNDbGllbnQuc2V0U3BlY2lhbE1lc3NhZ2VIYW5kbGVyKCdQYWdlLmZyYW1lTmF2aWdhdGVkJywgcmVqZWN0LCBuYXZFdmVudExpc3RlbmVyKTtcblxuICAgICAgLy8gdGltZW91dCwgaW4gY2FzZSByZW1vdGUgZGVidWdnZXIgZG9lc24ndCByZXNwb25kLFxuICAgICAgLy8gb3IgdGFrZXMgYSBsb25nIHRpbWVcbiAgICAgIGlmICghdGhpcy51c2VOZXdTYWZhcmkgfHwgdGhpcy5wYWdlTG9hZE1zID49IDApIHtcbiAgICAgICAgLy8gdXNlIHBhZ2VMb2FkTXMsIG9yIGEgc21hbGwgYW1vdW50IG9mIHRpbWVcbiAgICAgICAgbGV0IHRpbWVvdXQgPSB0aGlzLnVzZU5ld1NhZmFyaSA/IHRoaXMucGFnZUxvYWRNcyA6IDUwMDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGVsYXkgPSB1dGlsLmNhbmNlbGxhYmxlRGVsYXkodGltZW91dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uRGVsYXk7XG4gICAgICAgICAgbmF2RXZlbnRMaXN0ZW5lcigndGltZW91dCcpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvOiB3ZSBvbmx5IGdldCBoZXJlIGlmIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgICAvLyBhbHJlYWR5IG5vdGlmaWVkIG9mIGZyYW1lIG5hdmlnYXRpb24sIGFuZCB0aGUgZGVsYXlcbiAgICAgICAgICAvLyB3YXMgY2FuY2VsbGVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGltZWxpbmUgKGZuKSB7XG4gICAgbG9nLmRlYnVnKCdTdGFydGluZyB0byByZWNvcmQgdGhlIHRpbWVsaW5lJyk7XG4gICAgdGhpcy5ycGNDbGllbnQuc2V0VGltZWxpbmVFdmVudEhhbmRsZXIoZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdGFydFRpbWVsaW5lJywge1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RvcFRpbWVsaW5lICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIHRvIHJlY29yZCB0aGUgdGltZWxpbmUnKTtcbiAgICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdG9wVGltZWxpbmUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydENvbnNvbGUgKGZuKSB7XG4gICAgbG9nLmRlYnVnKCdTdGFydGluZyB0byBsaXN0ZW4gZm9yIEphdmFTY3JpcHQgY29uc29sZScpO1xuICAgIHRoaXMucnBjQ2xpZW50LnNldENvbnNvbGVMb2dFdmVudEhhbmRsZXIoZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdGFydENvbnNvbGUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wQ29uc29sZSAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyB0byBsaXN0ZW4gZm9yIEphdmFTY3JpcHQgY29uc29sZScpO1xuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3N0b3BDb25zb2xlJywge1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnROZXR3b3JrIChmbikge1xuICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgdG8gbGlzdGVuIGZvciBuZXR3b3JrIGV2ZW50cycpO1xuICAgIHRoaXMucnBjQ2xpZW50LnNldE5ldHdvcmtMb2dFdmVudEhhbmRsZXIoZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdGFydE5ldHdvcmsnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wTmV0d29yayAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyB0byBsaXN0ZW4gZm9yIG5ldHdvcmsgZXZlbnRzJyk7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc3RvcE5ldHdvcmsnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlIChjb21tYW5kLCBvdmVycmlkZSkge1xuICAgIC8vIGlmIHRoZSBwYWdlIGlzIG5vdCBsb2FkZWQgeWV0LCB3YWl0IGZvciBpdFxuICAgIGlmICh0aGlzLnBhZ2VMb2FkaW5nICYmICFvdmVycmlkZSkge1xuICAgICAgbG9nLmRlYnVnKCdUcnlpbmcgdG8gZXhlY3V0ZSBidXQgcGFnZSBpcyBub3QgbG9hZGVkLicpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yRG9tKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gY2hlY2tQYXJhbXMoe2FwcElkS2V5OiB0aGlzLmFwcElkS2V5LCBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5fSk7XG4gICAgaWYgKGVycm9ycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3QoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbmRpbmcgamF2YXNjcmlwdCBjb21tYW5kICR7Xy50cnVuY2F0ZShjb21tYW5kLCB7bGVuZ3RoOiA1MH0pfWApO1xuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzZW5kSlNDb21tYW5kJywge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRSZXN1bHQocmVzKTtcbiAgfVxuXG4gIGFzeW5jIGNhbGxGdW5jdGlvbiAob2JqSWQsIGZuLCBhcmdzKSB7XG4gICAgbGV0IGVycm9ycyA9IGNoZWNrUGFyYW1zKHthcHBJZEtleTogdGhpcy5hcHBJZEtleSwgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleX0pO1xuICAgIGlmIChlcnJvcnMpIHRocm93IG5ldyBFcnJvcihlcnJvcnMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICBpZiAodGhpcy5nYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5nYXJiYWdlQ29sbGVjdCgpO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZygnQ2FsbGluZyBqYXZhc2NyaXB0IGZ1bmN0aW9uJyk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnY2FsbEpTRnVuY3Rpb24nLCB7XG4gICAgICBvYmpJZCxcbiAgICAgIGZuLFxuICAgICAgYXJncyxcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmNvbnZlcnRSZXN1bHQocmVzKTtcbiAgfVxuXG4gIGNvbnZlcnRSZXN1bHQgKHJlcykge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBnZXQgT0sgcmVzdWx0IGZyb20gcmVtb3RlIGRlYnVnZ2VyLiBSZXN1bHQgd2FzOiAke18udHJ1bmNhdGUoc2ltcGxlU3RyaW5naWZ5KHJlcyksIHtsZW5ndGg6IFJFU1BPTlNFX0xPR19MRU5HVEh9KX1gKTtcbiAgICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcocmVzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIHdlIG1pZ2h0IGdldCBhIHNlcmlhbGl6ZWQgb2JqZWN0LCBidXQgd2UgbWlnaHQgbm90XG4gICAgICAgIC8vIGlmIHdlIGdldCBoZXJlLCBpdCBpcyBqdXN0IGEgdmFsdWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFfLmlzT2JqZWN0KHJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVzdWx0IGhhcyB1bmV4cGVjdGVkIHR5cGU6ICgke3R5cGVvZiByZXN9KS5gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzLnN0YXR1cyAmJiByZXMuc3RhdHVzICE9PSAwKSB7XG4gICAgICAvLyB3ZSBnb3Qgc29tZSBmb3JtIG9mIGVycm9yLlxuICAgICAgdGhyb3cgZXJyb3JGcm9tQ29kZShyZXMuc3RhdHVzLCByZXMudmFsdWUubWVzc2FnZSB8fCByZXMudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIHdpdGggZWl0aGVyIGhhdmUgYW4gb2JqZWN0IHdpdGggYSBgdmFsdWVgIHByb3BlcnR5IChldmVuIGlmIGBudWxsYCksXG4gICAgLy8gb3IgYSBwbGFpbiBvYmplY3RcbiAgICByZXR1cm4gcmVzLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gcmVzLnZhbHVlIDogcmVzO1xuICB9XG5cbiAgYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCAoYWxsb3cgPSB0cnVlKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnJwY0NsaWVudC5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkKSkge1xuICAgICAgdGhpcy5ycGNDbGllbnQuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZChhbGxvdyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29va2llcyAodXJscykge1xuICAgIGxvZy5kZWJ1ZygnR2V0dGluZyBuZXR3b3JrIGNvb2tpZXMnKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnZ2V0Q29va2llcycsIHtcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIHVybHMsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb29raWUgKGNvb2tpZU5hbWUsIHVybCkge1xuICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9JyBvbiAnJHt1cmx9J2ApO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdkZWxldGVDb29raWUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgICBjb29raWVOYW1lLFxuICAgICAgdXJsLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2FyYmFnZUNvbGxlY3QgKHRpbWVvdXRNcyA9IEdBUkJBR0VfQ09MTEVDVF9USU1FT1VUKSB7XG4gICAgbG9nLmRlYnVnKGBHYXJiYWdlIGNvbGxlY3Rpbmcgd2l0aCAke3RpbWVvdXRNc31tcyB0aW1lb3V0YCk7XG4gICAgY29uc3QgZXJyb3JzID0gY2hlY2tQYXJhbXMoe1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pO1xuICAgIGlmIChlcnJvcnMpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIGNvbGxlY3QgZ2FyYmFnZSBhdCB0aGlzIHRpbWVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBCLnJlc29sdmUodGhpcy5ycGNDbGllbnQuc2VuZCgnZ2FyYmFnZUNvbGxlY3QnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSkpLnRpbWVvdXQodGltZW91dE1zKVxuICAgIC50aGVuKGZ1bmN0aW9uIGdjU3VjY2VzcyAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgbG9nLmRlYnVnKGBHYXJiYWdlIGNvbGxlY3Rpb24gc3VjY2Vzc2Z1bGApO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIGdjRXJyb3IgKGVycikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgR2FyYmFnZSBjb2xsZWN0aW9uIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRNc31tc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gY29sbGVjdCBnYXJiYWdlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8vIGV2ZW50IGVtaXR0ZWQgcHVibGljYWxseVxuUmVtb3RlRGVidWdnZXIuRVZFTlRfUEFHRV9DSEFOR0UgPSAncmVtb3RlX2RlYnVnZ2VyX3BhZ2VfY2hhbmdlJztcblJlbW90ZURlYnVnZ2VyLkVWRU5UX0ZSQU1FU19ERVRBQ0hFRCA9ICdyZW1vdGVfZGVidWdnZXJfZnJhbWVzX2RldGFjaGVkJztcblJlbW90ZURlYnVnZ2VyLkVWRU5UX0RJU0NPTk5FQ1QgPSAncmVtb3RlX2RlYnVnZ2VyX2Rpc2Nvbm5lY3QnO1xuXG4vLyBhZGQgZ2VuZXJpYyBjYWxsYmFja3NcbmZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIF8udG9QYWlycyhtZXNzYWdlSGFuZGxlcnMpKSB7XG4gIFJlbW90ZURlYnVnZ2VyLnByb3RvdHlwZVtuYW1lXSA9IGhhbmRsZXI7XG59XG5cbmV4cG9ydCB7XG4gIFJlbW90ZURlYnVnZ2VyLCBSRU1PVEVfREVCVUdHRVJfUE9SVCwgUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVMsXG59O1xuIl0sImZpbGUiOiJsaWIvcmVtb3RlLWRlYnVnZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
820
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZW1vdGUtZGVidWdnZXIuanMiXSwibmFtZXMiOlsiVkVSU0lPTiIsInJlcXVpcmUiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInZlcnNpb24iLCJpZ24iLCJTRUxFQ1RfQVBQX1JFVFJJRVMiLCJTRUxFQ1RfQVBQX1JFVFJZX1NMRUVQX01TIiwiUkVNT1RFX0RFQlVHR0VSX1BPUlQiLCJTQUZBUklfQlVORExFX0lEIiwiQkxBTktfUEFHRV9VUkwiLCJSUENfUkVTUE9OU0VfVElNRU9VVF9NUyIsIlBBR0VfUkVBRFlfVElNRU9VVCIsIkdBUkJBR0VfQ09MTEVDVF9USU1FT1VUIiwiUmVtb3RlRGVidWdnZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJsb2ciLCJpbmZvIiwiYnVuZGxlSWQiLCJwbGF0Zm9ybVZlcnNpb24iLCJpc1NhZmFyaSIsImluY2x1ZGVTYWZhcmkiLCJ1c2VOZXdTYWZhcmkiLCJwYWdlTG9hZE1zIiwiaG9zdCIsInBvcnQiLCJzb2NrZXRQYXRoIiwicGFnZVJlYWR5VGltZW91dCIsInJlbW90ZURlYnVnUHJveHkiLCJnYXJiYWdlQ29sbGVjdE9uRXhlY3V0ZSIsImxvZ0Z1bGxSZXNwb25zZSIsImRlYnVnIiwic2tpcHBlZEFwcHMiLCJzZXR1cCIsImFwcERpY3QiLCJhcHBJZEtleSIsInBhZ2VJZEtleSIsInBhZ2VMb2FkaW5nIiwiX25hdmlnYXRpbmdUb1BhZ2UiLCJzcGVjaWFsQ2JzIiwiXyIsIm5vb3AiLCJvblBhZ2VDaGFuZ2UiLCJiaW5kIiwib25BcHBDb25uZWN0Iiwib25BcHBEaXNjb25uZWN0Iiwib25BcHBVcGRhdGUiLCJwYWdlTG9hZCIsImZyYW1lRGV0YWNoZWQiLCJ0YXJnZXRDcmVhdGVkIiwib25UYXJnZXRDcmVhdGVkIiwidGFyZ2V0RGVzdHJveWVkIiwib25UYXJnZXREZXN0cm95ZWQiLCJycGNDbGllbnQiLCJ0ZWFyZG93biIsInJlbW92ZUFsbExpc3RlbmVycyIsIkVWRU5UX1BBR0VfQ0hBTkdFIiwiRVZFTlRfRElTQ09OTkVDVCIsImNvbm5lY3QiLCJScGNDbGllbnRTaW11bGF0b3IiLCJzcGVjaWFsTWVzc2FnZUhhbmRsZXJzIiwibWVzc2FnZVByb3h5IiwiYXBwSW5mbyIsInNldENvbm5lY3Rpb25LZXkiLCJlcnIiLCJkaXNjb25uZWN0IiwiZW1pdCIsImlzQ29ubmVjdGVkIiwiQiIsInJlamVjdCIsImNvbm5lY3RDYiIsImFwcHMiLCJpc1VuZGVmaW5lZCIsImtleXMiLCJsZW5ndGgiLCJuZXdEaWN0IiwiZGljdCIsInZhbHVlcyIsImlkIiwiZW50cnkiLCJpbmNsdWRlcyIsIm5hbWUiLCJkZWZhdWx0cyIsInNldFNwZWNpYWxNZXNzYWdlSGFuZGxlciIsInNpbU5hbWVLZXkiLCJzaW1CdWlsZEtleSIsInNpbVBsYXRmb3JtVmVyc2lvbiIsInNlbmQiLCJ1cGRhdGVBcHBzV2l0aERpY3QiLCJwYWdlQXJyYXkiLCJsb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkiLCJnZXRWYWx1ZVN0cmluZyIsImtleSIsInZhbHVlIiwiaXNGdW5jdGlvbiIsImlzQXJyYXkiLCJKU09OIiwic3RyaW5naWZ5IiwiYXBwIiwidG9QYWlycyIsIkFycmF5IiwicGFnZSIsInByZWZpeCIsImsiLCJ2IiwidmFsdWVTdHJpbmciLCJzZWxlY3RBcHAiLCJjdXJyZW50VXJsIiwibWF4VHJpZXMiLCJpZ25vcmVBYm91dEJsYW5rVXJsIiwic2hvdWxkQ2hlY2tGb3JUYXJnZXQiLCJzdGFydFRpbWUiLCJwcm9jZXNzIiwiaHJ0aW1lIiwiaXNFbXB0eSIsInBhZ2VEaWN0Iiwic2VhcmNoRm9yQXBwIiwiZXJyb3JBbmRUaHJvdyIsImZ1bGxQYWdlQXJyYXkiLCJyZXBsYWNlIiwidXJsIiwiY2xvbmUiLCJwdXNoIiwiYnVuZGxlSWRzIiwicmV0cnlDb3VudCIsInBvc3NpYmxlQXBwSWRzIiwiam9pbiIsImF0dGVtcHRlZEFwcElkS2V5IiwicmVzdWx0Iiwic2VhcmNoUGFnZSIsIm1lc3NhZ2UiLCJFcnJvciIsImFwcHNEaWN0IiwicHJvbWlzZSIsInNlbGVjdFBhZ2UiLCJza2lwUmVhZHlDaGVjayIsImNoZWNrUGFnZUlzUmVhZHkiLCJwYWdlVW5sb2FkIiwiZXhlY3V0ZUF0b20iLCJhdG9tIiwiYXJncyIsImZyYW1lcyIsInNjcmlwdCIsImV4ZWN1dGUiLCJ0cnVuY2F0ZSIsIlJFU1BPTlNFX0xPR19MRU5HVEgiLCJleGVjdXRlQXRvbUFzeW5jIiwicHJvbWlzZU5hbWUiLCJVVUlEIiwiY3JlYXRlIiwidG9TdHJpbmciLCJvYmoiLCJjb21tYW5kIiwicmV0dXJuQnlWYWx1ZSIsInByb21pc2VPYmplY3RJZCIsIm9iamVjdElkIiwiYXN5bmNDYWxsQmFjayIsInJlcyIsInN1YmNvbW1hbmRUaW1lb3V0IiwicmV0cnlXYWl0IiwidGltZW91dCIsInJldHJpZXMiLCJwYXJzZUludCIsImVycm9ycyIsIlRpbWVvdXRFcnJvciIsIkVWRU5UX0ZSQU1FU19ERVRBQ0hFRCIsInN0YXJ0UGFnZUxvYWRNcyIsInBhZ2VMb2FkVmVyaWZ5SG9vayIsInRpbWVvdXRNcyIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsInZlcmlmeSIsInBhZ2VMb2FkRGVsYXkiLCJ1dGlsIiwiY2FuY2VsbGFibGVEZWxheSIsIkNhbmNlbGxhdGlvbkVycm9yIiwicmVhZHkiLCJjYW5jZWxQYWdlTG9hZCIsImNhbmNlbCIsIndhaXRGb3JEb20iLCJyZWFkeUNtZCIsInJlYWR5U3RhdGUiLCJsYXVuY2hTYWZhcmkiLCJuYXZUb1VybCIsImRlbGF5Iiwid2FpdEZvckZyYW1lTmF2aWdhdGVkIiwic3RhcnRNcyIsIm5hdkV2ZW50TGlzdGVuZXIiLCJuYXZpZ2F0aW9uRGVsYXkiLCJzdGFydFRpbWVsaW5lIiwiZm4iLCJzZXRUaW1lbGluZUV2ZW50SGFuZGxlciIsInN0b3BUaW1lbGluZSIsInN0YXJ0Q29uc29sZSIsInNldENvbnNvbGVMb2dFdmVudEhhbmRsZXIiLCJzdG9wQ29uc29sZSIsInN0YXJ0TmV0d29yayIsInNldE5ldHdvcmtMb2dFdmVudEhhbmRsZXIiLCJzdG9wTmV0d29yayIsIm92ZXJyaWRlIiwiZ2FyYmFnZUNvbGxlY3QiLCJjYWxsRnVuY3Rpb24iLCJvYmpJZCIsImFsbG93TmF2aWdhdGlvbldpdGhvdXRSZWxvYWQiLCJhbGxvdyIsImdldENvb2tpZXMiLCJ1cmxzIiwiZGVsZXRlQ29va2llIiwiY29va2llTmFtZSIsInRoZW4iLCJnY1N1Y2Nlc3MiLCJjYXRjaCIsImdjRXJyb3IiLCJoYW5kbGVyIiwibWVzc2FnZUhhbmRsZXJzIiwicHJvdG90eXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLE9BQUo7O0FBQ0EsSUFBSTtBQUNGQSxFQUFBQSxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0MsY0FBS0MsT0FBTCxDQUFhQyxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLEVBQW9DLGNBQXBDLENBQUQsQ0FBUCxDQUE2REMsT0FBdkU7QUFDRCxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZLENBQUU7O0FBRWhCLE1BQU1DLGtCQUFrQixHQUFHLEVBQTNCO0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcsR0FBbEM7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUE3Qjs7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyx3QkFBekI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsYUFBdkI7QUFHQSxNQUFNQyx1QkFBdUIsR0FBRyxJQUFoQzs7QUFFQSxNQUFNQyxrQkFBa0IsR0FBRyxJQUEzQjtBQUVBLE1BQU1DLHVCQUF1QixHQUFHLElBQWhDOztBQUVBLE1BQU1DLGNBQU4sU0FBNkJDLGdCQUFPQyxZQUFwQyxDQUFpRDtBQVUvQ0MsRUFBQUEsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0FBQ3RCOztBQUVBLFFBQUluQixPQUFKLEVBQWE7QUFDWG9CLHNCQUFJQyxJQUFKLENBQVUsMkJB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RCxLQU5LLEVBTUhxTCxLQU5HLENBTUcsU0FBU0MsT0FBVCxDQUFrQnJKLEdBQWxCLEVBQXVCO0FBQzlCLFVBQUlBLEdBQUcsWUFBWUksa0JBQUVnRyxZQUFyQixFQUFtQztBQUNqQ3BKLHdCQUFJZSxLQUFKLENBQVcsc0NBQXFDeUksU0FBVSxJQUExRDtBQUNELE9BRkQsTUFFTztBQUNMeEosd0JBQUllLEtBQUosQ0FBVyw4QkFBNkJpQyxHQUFHLENBQUNrRSxPQUFRLEVBQXBEO0FBQ0Q7QUFDRixLQVpLLENBQU47QUFhRDs7QUFqdUI4Qzs7O0FBcXVCakR2SCxjQUFjLENBQUM2QyxpQkFBZixHQUFtQyw2QkFBbkM7QUFDQTdDLGNBQWMsQ0FBQzBKLHFCQUFmLEdBQXVDLGlDQUF2QztBQUNBMUosY0FBYyxDQUFDOEMsZ0JBQWYsR0FBa0MsNEJBQWxDOztBQUdBLEtBQUssTUFBTSxDQUFDd0IsSUFBRCxFQUFPcUksT0FBUCxDQUFYLElBQThCOUssZ0JBQUUyRCxPQUFGLENBQVVvSCx3QkFBVixDQUE5QixFQUEwRDtBQUN4RDVNLEVBQUFBLGNBQWMsQ0FBQzZNLFNBQWYsQ0FBeUJ2SSxJQUF6QixJQUFpQ3FJLE9BQWpDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgUnBjQ2xpZW50U2ltdWxhdG9yIGZyb20gJy4vcnBjLWNsaWVudC1zaW11bGF0b3InO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGVycyBmcm9tICcuL21lc3NhZ2UtaGFuZGxlcnMnO1xuaW1wb3J0IHsgYXBwSW5mb0Zyb21EaWN0LCBwYWdlQXJyYXlGcm9tRGljdCwgZ2V0RGVidWdnZXJBcHBLZXksXG4gICAgICAgICBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cywgY2hlY2tQYXJhbXMsIGdldFNjcmlwdEZvckF0b20sXG4gICAgICAgICBzaW1wbGVTdHJpbmdpZnksIGRlZmVycmVkUHJvbWlzZSwgZ2V0RWxhcHNlZFRpbWUsIGNvbnZlcnRSZXN1bHQsXG4gICAgICAgICBSRVNQT05TRV9MT0dfTEVOR1RIIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFVVSUQgZnJvbSAndXVpZC1qcyc7XG5cblxubGV0IFZFUlNJT047XG50cnkge1xuICBWRVJTSU9OID0gcmVxdWlyZShwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAncGFja2FnZS5qc29uJykpLnZlcnNpb247XG59IGNhdGNoIChpZ24pIHt9XG5cbmNvbnN0IFNFTEVDVF9BUFBfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUyA9IDUwMDtcbmNvbnN0IFJFTU9URV9ERUJVR0dFUl9QT1JUID0gMjc3NTM7XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgQkxBTktfUEFHRV9VUkwgPSAnYWJvdXQ6YmxhbmsnO1xuXG4vKiBIb3cgbWFueSBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3Igd2Via2l0IHRvIHJldHVybiBhIHJlc3BvbnNlIGJlZm9yZSB0aW1pbmcgb3V0ICovXG5jb25zdCBSUENfUkVTUE9OU0VfVElNRU9VVF9NUyA9IDUwMDA7XG5cbmNvbnN0IFBBR0VfUkVBRFlfVElNRU9VVCA9IDUwMDA7XG5cbmNvbnN0IEdBUkJBR0VfQ09MTEVDVF9USU1FT1VUID0gNTAwMDtcblxuY2xhc3MgUmVtb3RlRGVidWdnZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgLypcbiAgICogVGhlIGNvbnN0cnVjdG9yIHRha2VzIGFuIG9wdHMgaGFzaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAtIGJ1bmRsZUlkIC0gaWQgb2YgdGhlIGFwcCBiZWluZyBjb25uZWN0ZWQgdG9cbiAgICogICAtIHBsYXRmb3JtVmVyc2lvbiAtIHZlcnNpb24gb2YgaU9TXG4gICAqICAgLSB1c2VOZXdTYWZhcmkgLSBmb3Igd2ViIGluc3BlY3Rvciwgd2hldGhlciB0aGlzIGlzIGEgbmV3IFNhZmFyaSBpbnN0YW5jZVxuICAgKiAgIC0gcGFnZUxvYWRNcyAtIHRoZSB0aW1lLCBpbiBtcywgdGhhdCBzaG91bGQgYmUgd2FpdGVkIGZvciBwYWdlIGxvYWRpbmdcbiAgICogICAtIGhvc3QgLSB0aGUgcmVtb3RlIGRlYnVnZ2VyJ3MgaG9zdCBhZGRyZXNzXG4gICAqICAgLSBwb3J0IC0gdGhlIHJlbW90ZSBkZWJ1Z2dlciBwb3J0IHRocm91Z2ggd2hpY2ggdG8gY29tbXVuaWNhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKFZFUlNJT04pIHtcbiAgICAgIGxvZy5pbmZvKGBSZW1vdGUgRGVidWdnZXIgdmVyc2lvbiAke1ZFUlNJT059YCk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgYnVuZGxlSWQsXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBpc1NhZmFyaSA9IHRydWUsXG4gICAgICBpbmNsdWRlU2FmYXJpID0gZmFsc2UsXG4gICAgICB1c2VOZXdTYWZhcmkgPSBmYWxzZSxcbiAgICAgIHBhZ2VMb2FkTXMsXG4gICAgICBob3N0LFxuICAgICAgcG9ydCA9IFJFTU9URV9ERUJVR0dFUl9QT1JULFxuICAgICAgc29ja2V0UGF0aCxcbiAgICAgIHBhZ2VSZWFkeVRpbWVvdXQgPSBQQUdFX1JFQURZX1RJTUVPVVQsXG4gICAgICByZW1vdGVEZWJ1Z1Byb3h5LFxuICAgICAgZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUgPSBmYWxzZSxcbiAgICAgIGxvZ0Z1bGxSZXNwb25zZSA9IGZhbHNlLFxuICAgIH0gPSBvcHRzO1xuXG4gICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuaXNTYWZhcmkgPSBpc1NhZmFyaTtcbiAgICB0aGlzLmluY2x1ZGVTYWZhcmkgPSBpbmNsdWRlU2FmYXJpO1xuICAgIHRoaXMudXNlTmV3U2FmYXJpID0gdXNlTmV3U2FmYXJpO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IHBhZ2VMb2FkTXM7XG4gICAgbG9nLmRlYnVnKGB1c2VOZXdTYWZhcmkgLS0+ICR7dGhpcy51c2VOZXdTYWZhcml9YCk7XG5cbiAgICB0aGlzLmdhcmJhZ2VDb2xsZWN0T25FeGVjdXRlID0gZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGU7XG5cbiAgICB0aGlzLmhvc3QgPSBob3N0O1xuICAgIHRoaXMucG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5zb2NrZXRQYXRoID0gc29ja2V0UGF0aDtcbiAgICB0aGlzLnJlbW90ZURlYnVnUHJveHkgPSByZW1vdGVEZWJ1Z1Byb3h5O1xuICAgIHRoaXMucGFnZVJlYWR5VGltZW91dCA9IHBhZ2VSZWFkeVRpbWVvdXQ7XG5cbiAgICB0aGlzLmxvZ0Z1bGxSZXNwb25zZSA9IGxvZ0Z1bGxSZXNwb25zZTtcblxuICAgIHRoaXMuc2tpcHBlZEFwcHMgPSBbXTtcbiAgfVxuXG4gIHNldHVwICgpIHtcbiAgICAvLyBhcHAgaGFuZGxpbmcgY29uZmlndXJhdGlvblxuICAgIHRoaXMuYXBwRGljdCA9IHt9O1xuICAgIHRoaXMuYXBwSWRLZXkgPSBudWxsO1xuICAgIHRoaXMucGFnZUlkS2V5ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fbmF2aWdhdGluZ1RvUGFnZSA9IGZhbHNlO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBzcGVjaWFsIGNhbGxiYWNrcyBmb3IgaGFuZGxpbmcgcmQgZXZlbnRzXG4gICAgdGhpcy5zcGVjaWFsQ2JzID0ge1xuICAgICAgJ19ycGNfcmVwb3J0SWRlbnRpZmllcjonOiBfLm5vb3AsXG4gICAgICAnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonOiB0aGlzLm9uUGFnZUNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0Oic6IF8ubm9vcCxcbiAgICAgICdfcnBjX2FwcGxpY2F0aW9uQ29ubmVjdGVkOic6IHRoaXMub25BcHBDb25uZWN0LmJpbmQodGhpcyksXG4gICAgICAnX3JwY19hcHBsaWNhdGlvbkRpc2Nvbm5lY3RlZDonOiB0aGlzLm9uQXBwRGlzY29ubmVjdC5iaW5kKHRoaXMpLFxuICAgICAgJ19ycGNfYXBwbGljYXRpb25VcGRhdGVkOic6IHRoaXMub25BcHBVcGRhdGUuYmluZCh0aGlzKSxcbiAgICAgICdfcnBjX3JlcG9ydENvbm5lY3RlZERyaXZlckxpc3Q6JzogXy5ub29wLFxuICAgICAgcGFnZUxvYWQ6IHRoaXMucGFnZUxvYWQuYmluZCh0aGlzKSxcbiAgICAgIGZyYW1lRGV0YWNoZWQ6IHRoaXMuZnJhbWVEZXRhY2hlZC5iaW5kKHRoaXMpLFxuICAgICAgdGFyZ2V0Q3JlYXRlZDogdGhpcy5vblRhcmdldENyZWF0ZWQuYmluZCh0aGlzKSxcbiAgICAgIHRhcmdldERlc3Ryb3llZDogdGhpcy5vblRhcmdldERlc3Ryb3llZC5iaW5kKHRoaXMpLFxuICAgIH07XG5cbiAgICB0aGlzLnJwY0NsaWVudCA9IG51bGw7XG4gIH1cblxuICB0ZWFyZG93biAoKSB7XG4gICAgbG9nLmRlYnVnKCdDbGVhbmluZyB1cCBsaXN0ZW5lcnMnKTtcblxuICAgIHRoaXMuYXBwRGljdCA9IHt9O1xuICAgIHRoaXMuYXBwSWRLZXkgPSBudWxsO1xuICAgIHRoaXMucGFnZUlkS2V5ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnNwZWNpYWxDYnMgPSB7fTtcblxuICAgIHRoaXMucnBjQ2xpZW50ID0gbnVsbDtcblxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFJlbW90ZURlYnVnZ2VyLkVWRU5UX1BBR0VfQ0hBTkdFKTtcbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhSZW1vdGVEZWJ1Z2dlci5FVkVOVF9ESVNDT05ORUNUKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QgKCkge1xuICAgIHRoaXMuc2V0dXAoKTtcblxuICAgIC8vIGluaXRpYWxpemUgdGhlIHJwYyBjbGllbnRcbiAgICB0aGlzLnJwY0NsaWVudCA9IG5ldyBScGNDbGllbnRTaW11bGF0b3Ioe1xuICAgICAgYnVuZGxlSWQ6IHRoaXMuYnVuZGxlSWQsXG4gICAgICBwbGF0Zm9ybVZlcnNpb246IHRoaXMucGxhdGZvcm1WZXJzaW9uLFxuICAgICAgaXNTYWZhcmk6IHRoaXMuaXNTYWZhcmksXG4gICAgICBob3N0OiB0aGlzLmhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnBvcnQsXG4gICAgICBzb2NrZXRQYXRoOiB0aGlzLnNvY2tldFBhdGgsXG4gICAgICBzcGVjaWFsTWVzc2FnZUhhbmRsZXJzOiB0aGlzLnNwZWNpYWxDYnMsXG4gICAgICBtZXNzYWdlUHJveHk6IHRoaXMucmVtb3RlRGVidWdQcm94eSxcbiAgICAgIGxvZ0Z1bGxSZXNwb25zZTogdGhpcy5sb2dGdWxsUmVzcG9uc2UsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuY29ubmVjdCgpO1xuXG4gICAgLy8gZ2V0IHRoZSBjb25uZWN0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhcHBcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwSW5mbyA9IGF3YWl0IHRoaXMuc2V0Q29ubmVjdGlvbktleSgpO1xuICAgICAgbG9nLmRlYnVnKCdDb25uZWN0ZWQgdG8gYXBwbGljYXRpb24nKTtcbiAgICAgIHJldHVybiBhcHBJbmZvO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNjb25uZWN0ICgpIHtcbiAgICBhd2FpdCB0aGlzLnJwY0NsaWVudC5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5lbWl0KFJlbW90ZURlYnVnZ2VyLkVWRU5UX0RJU0NPTk5FQ1QsIHRydWUpO1xuICAgIHRoaXMudGVhcmRvd24oKTtcbiAgfVxuXG4gIGlzQ29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gISEodGhpcy5ycGNDbGllbnQgJiYgdGhpcy5ycGNDbGllbnQuaXNDb25uZWN0ZWQoKSk7XG4gIH1cblxuICBhc3luYyBzZXRDb25uZWN0aW9uS2V5ICgpIHtcbiAgICAvLyBvbmx5IHJlc29sdmUgd2hlbiB0aGUgY29ubmVjdGlvbiByZXNwb25zZSBpcyByZWNlaXZlZFxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBsb2NhbCBjYWxsYmFjaywgY2FsbGVkIHdoZW4gdGhlIHJlbW90ZSBkZWJ1Z2dlciBoYXMgZXN0YWJsaXNoZWRcbiAgICAgIC8vIGEgY29ubmVjdGlvbiB0byB0aGUgYXBwIHVuZGVyIHRlc3RcbiAgICAgIC8vIGBhcHBgIHdpbGwgYmUgYW4gYXJyYXkgb2YgZGljdGlvbmFyaWVzIG9mIGFwcCBpbmZvcm1hdGlvblxuICAgICAgbGV0IGNvbm5lY3RDYiA9IChhcHBzKSA9PiB7XG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGFwcHMpIHx8IF8ua2V5cyhhcHBzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIG5vIGFwcHMgZnJvbSByZW1vdGUgZGVidWdnZXIuIFVuYWJsZSB0byBjb25uZWN0LicpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuYXBwRGljdCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RpY3QgPSB7fTtcblxuICAgICAgICAvLyB0cmFuc2xhdGUgdGhlIHJlY2VpdmVkIGluZm9ybWF0aW9uIGludG8gYW4gZWFzaWVyLXRvLW1hbmFnZVxuICAgICAgICAvLyBoYXNoIHdpdGggYXBwIGlkIGFzIGtleSwgYW5kIGFwcCBpbmZvIGFzIHZhbHVlXG4gICAgICAgIGZvciAoY29uc3QgZGljdCBvZiBfLnZhbHVlcyhhcHBzKSkge1xuICAgICAgICAgIGNvbnN0IFtpZCwgZW50cnldID0gYXBwSW5mb0Zyb21EaWN0KGRpY3QpO1xuICAgICAgICAgIGlmICh0aGlzLnNraXBwZWRBcHBzLmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3RGljdFtpZF0gPSBlbnRyeTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1cGRhdGUgdGhlIG9iamVjdCdzIGxpc3Qgb2YgYXBwcywgYW5kIHJldHVybiBpdCB0aHJvdWdoIHRoZSBwcm9taXNlXG4gICAgICAgIF8uZGVmYXVsdHModGhpcy5hcHBEaWN0LCBuZXdEaWN0KTtcbiAgICAgICAgcmVzb2x2ZShuZXdEaWN0KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnJwY0NsaWVudC5zZXRTcGVjaWFsTWVzc2FnZUhhbmRsZXIoJ19ycGNfcmVwb3J0Q29ubmVjdGVkQXBwbGljYXRpb25MaXN0OicsIHJlamVjdCwgY29ubmVjdENiKTtcblxuICAgICAgbG9nLmRlYnVnKCdTZW5kaW5nIGNvbm5lY3Rpb24ga2V5IHJlcXVlc3QnKTtcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBbc2ltTmFtZUtleSwgc2ltQnVpbGRLZXksIHNpbVBsYXRmb3JtVmVyc2lvbl0gPSBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzZXRDb25uZWN0aW9uS2V5Jyk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgU2ltIG5hbWU6ICR7c2ltTmFtZUtleX1gKTtcbiAgICAgICAgbG9nLmRlYnVnKGBTaW0gYnVpbGQ6ICR7c2ltQnVpbGRLZXl9YCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgU2ltIHBsYXRmb3JtIHZlcnNpb246ICR7c2ltUGxhdGZvcm1WZXJzaW9ufWApO1xuICAgICAgfSkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUFwcHNXaXRoRGljdCAoZGljdCkge1xuICAgIC8vIGdldCB0aGUgZGljdGlvbmFyeSBlbnRyeSBpbnRvIGEgbmljZSBmb3JtLCBhbmQgYWRkIGl0IHRvIHRoZVxuICAgIC8vIGFwcGxpY2F0aW9uIGRpY3Rpb25hcnlcbiAgICB0aGlzLmFwcERpY3QgPSB0aGlzLmFwcERpY3QgfHwge307XG4gICAgbGV0IFtpZCwgZW50cnldID0gYXBwSW5mb0Zyb21EaWN0KGRpY3QpO1xuICAgIGlmICh0aGlzLmFwcERpY3RbaWRdKSB7XG4gICAgICAvLyBwcmVzZXJ2ZSB0aGUgcGFnZSBkaWN0aW9uYXJ5IGZvciB0aGlzIGVudHJ5XG4gICAgICBlbnRyeS5wYWdlQXJyYXkgPSB0aGlzLmFwcERpY3RbaWRdLnBhZ2VBcnJheTtcbiAgICB9XG4gICAgdGhpcy5hcHBEaWN0W2lkXSA9IGVudHJ5O1xuXG4gICAgLy8gYWRkIGEgcHJvbWlzZSB0byBnZXQgdGhlIHBhZ2UgZGljdGlvbmFyeVxuICAgIGlmIChfLmlzVW5kZWZpbmVkKGVudHJ5LnBhZ2VBcnJheSkpIHtcbiAgICAgIGVudHJ5LnBhZ2VBcnJheSA9IGRlZmVycmVkUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIC8vIHRyeSB0byBnZXQgdGhlIGFwcCBpZCBmcm9tIG91ciBjb25uZWN0ZWQgYXBwc1xuICAgIGlmICghdGhpcy5hcHBJZEtleSkge1xuICAgICAgdGhpcy5hcHBJZEtleSA9IGdldERlYnVnZ2VyQXBwS2V5KHRoaXMuYnVuZGxlSWQsIHRoaXMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLmFwcERpY3QpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ0FwcGxpY2F0aW9uRGljdGlvbmFyeSAoYXBwcykge1xuICAgIGZ1bmN0aW9uIGdldFZhbHVlU3RyaW5nIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJ1tGdW5jdGlvbl0nO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3BhZ2VBcnJheScgJiYgIV8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGAnV2FpdGluZyBmb3IgZGF0YSdgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKCdDdXJyZW50IGFwcGxpY2F0aW9ucyBhdmFpbGFibGU6Jyk7XG4gICAgZm9yIChjb25zdCBbYXBwLCBpbmZvXSBvZiBfLnRvUGFpcnMoYXBwcykpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgICAgIEFwcGxpY2F0aW9uOiAnJHthcHB9J2ApO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGluZm8pKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdwYWdlQXJyYXknICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBwYWdlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgcHJlZml4ID0gJy0gJztcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIF8udG9QYWlycyhwYWdlKSkge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYCAgICAgICAgICAke3ByZWZpeH0ke2t9OiAke0pTT04uc3RyaW5naWZ5KHYpfWApO1xuICAgICAgICAgICAgICBwcmVmaXggPSAnICAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IGdldFZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGxvZy5kZWJ1ZyhgICAgICAgICAke2tleX06ICR7dmFsdWVTdHJpbmd9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWxlY3RBcHAgKGN1cnJlbnRVcmwgPSBudWxsLCBtYXhUcmllcyA9IFNFTEVDVF9BUFBfUkVUUklFUywgaWdub3JlQWJvdXRCbGFua1VybCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc2hvdWxkQ2hlY2tGb3JUYXJnZXQgPSB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldDtcbiAgICB0aGlzLnJwY0NsaWVudC5zaG91bGRDaGVja0ZvclRhcmdldCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgbG9nLmRlYnVnKCdTZWxlY3RpbmcgYXBwbGljYXRpb24nKTtcbiAgICAgIGlmICghdGhpcy5hcHBEaWN0IHx8IF8uaXNFbXB0eSh0aGlzLmFwcERpY3QpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm8gYXBwbGljYXRpb25zIGN1cnJlbnRseSBjb25uZWN0ZWQuJyk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHBJZEtleSwgcGFnZURpY3QgfSA9IGF3YWl0IHRoaXMuc2VhcmNoRm9yQXBwKGN1cnJlbnRVcmwsIG1heFRyaWVzLCBpZ25vcmVBYm91dEJsYW5rVXJsKTtcblxuICAgICAgLy8gaWYsIGFmdGVyIGFsbCB0aGlzLCB3ZSBoYXZlIG5vIGRpY3Rpb25hcnksIHdlIGhhdmUgZmFpbGVkXG4gICAgICBpZiAoIWFwcElkS2V5IHx8ICFwYWdlRGljdCkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGNvbm5lY3QgdG8gYSB2YWxpZCBhcHAgYWZ0ZXIgJHttYXhUcmllc30gdHJpZXMuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmFwcElkS2V5ICE9PSBhcHBJZEtleSkge1xuICAgICAgICBsb2cuZGVidWcoYFJlY2VpdmVkIGFsdGVyZWQgYXBwIGlkLCB1cGRhdGluZyBmcm9tICcke3RoaXMuYXBwSWRLZXl9JyB0byAnJHthcHBJZEtleX0nYCk7XG4gICAgICAgIHRoaXMuYXBwSWRLZXkgPSBhcHBJZEtleTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkodGhpcy5hcHBEaWN0KTtcblxuICAgICAgLy8gdHJhbnNsYXRlIHRoZSBkaWN0aW9uYXJ5IGludG8gYSB1c2VmdWwgZm9ybSwgYW5kIHJldHVybiB0byBzZW5kZXJcbiAgICAgIGNvbnN0IHBhZ2VBcnJheSA9IF8uaXNFbXB0eSh0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheSlcbiAgICAgICAgPyBwYWdlQXJyYXlGcm9tRGljdChwYWdlRGljdClcbiAgICAgICAgOiB0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheTtcbiAgICAgIGxvZy5kZWJ1ZyhgRmluYWxseSBzZWxlY3RpbmcgYXBwICR7dGhpcy5hcHBJZEtleX06ICR7c2ltcGxlU3RyaW5naWZ5KHBhZ2VBcnJheSl9YCk7XG5cbiAgICAgIGxldCBmdWxsUGFnZUFycmF5ID0gW107XG4gICAgICBmb3IgKGNvbnN0IFthcHAsIGluZm9dIG9mIF8udG9QYWlycyh0aGlzLmFwcERpY3QpKSB7XG4gICAgICAgIGlmICghXy5pc0FycmF5KGluZm8ucGFnZUFycmF5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gYXBwLnJlcGxhY2UoJ1BJRDonLCAnJyk7XG4gICAgICAgIGZvciAoY29uc3QgcGFnZSBvZiBpbmZvLnBhZ2VBcnJheSkge1xuICAgICAgICAgIGlmIChwYWdlLnVybCAmJiAoIWlnbm9yZUFib3V0QmxhbmtVcmwgfHwgcGFnZS51cmwgIT09IEJMQU5LX1BBR0VfVVJMKSkge1xuICAgICAgICAgICAgbGV0IHBhZ2VEaWN0ID0gXy5jbG9uZShwYWdlKTtcbiAgICAgICAgICAgIHBhZ2VEaWN0LmlkID0gYCR7aWR9LiR7cGFnZURpY3QuaWR9YDtcbiAgICAgICAgICAgIGZ1bGxQYWdlQXJyYXkucHVzaChwYWdlRGljdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgYXBwIGFmdGVyICR7Z2V0RWxhcHNlZFRpbWUoc3RhcnRUaW1lKX1tc2ApO1xuICAgICAgcmV0dXJuIGZ1bGxQYWdlQXJyYXk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucnBjQ2xpZW50LnNob3VsZENoZWNrRm9yVGFyZ2V0ID0gc2hvdWxkQ2hlY2tGb3JUYXJnZXQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoRm9yQXBwIChjdXJyZW50VXJsLCBtYXhUcmllcywgaWdub3JlQWJvdXRCbGFua1VybCkge1xuICAgIGNvbnN0IGJ1bmRsZUlkcyA9IHRoaXMuaW5jbHVkZVNhZmFyaSAmJiAhdGhpcy5pc1NhZmFyaVxuICAgICAgPyBbdGhpcy5idW5kbGVJZCwgU0FGQVJJX0JVTkRMRV9JRF1cbiAgICAgIDogW3RoaXMuYnVuZGxlSWRdO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbChtYXhUcmllcywgU0VMRUNUX0FQUF9SRVRSWV9TTEVFUF9NUywgYXN5bmMgKHJldHJ5Q291bnQpID0+IHtcbiAgICAgICAgdGhpcy5sb2dBcHBsaWNhdGlvbkRpY3Rpb25hcnkodGhpcy5hcHBEaWN0KTtcbiAgICAgICAgY29uc3QgcG9zc2libGVBcHBJZHMgPSBnZXRQb3NzaWJsZURlYnVnZ2VyQXBwS2V5cyhidW5kbGVJZHMsIHRoaXMucGxhdGZvcm1WZXJzaW9uLCB0aGlzLmFwcERpY3QpO1xuICAgICAgICBsb2cuZGVidWcoYFRyeWluZyBvdXQgdGhlIHBvc3NpYmxlIGFwcCBpZHM6ICR7cG9zc2libGVBcHBJZHMuam9pbignLCAnKX1gKTtcbiAgICAgICAgZm9yIChjb25zdCBhdHRlbXB0ZWRBcHBJZEtleSBvZiBwb3NzaWJsZUFwcElkcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBhcHAgJHthdHRlbXB0ZWRBcHBJZEtleX0gKHRyeSAjJHtyZXRyeUNvdW50ICsgMX0gb2YgJHttYXhUcmllc30pYCk7XG4gICAgICAgICAgICBjb25zdCBbYXBwSWRLZXksIHBhZ2VEaWN0XSA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbGVjdEFwcChhdHRlbXB0ZWRBcHBJZEtleSwgdGhpcy5vbkFwcENvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpbiBpT1MgOC4yIHRoZSBjb25uZWN0IGxvZ2ljIGhhcHBlbnMsIGJ1dCB3aXRoIGFuIGVtcHR5IGRpY3Rpb25hcnlcbiAgICAgICAgICAgIC8vIHdoaWNoIGxlYWRzIHRvIHRoZSByZW1vdGUgZGVidWdnZXIgZ2V0dGluZyBkaXNjb25uZWN0ZWQsIGFuZCBpbnRvIGEgbG9vcFxuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eShwYWdlRGljdCkpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKCdFbXB0eSBwYWdlIGRpY3Rpb25hcnkgcmVjZWl2ZWQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNhdmUgdGhlIHBhZ2UgYXJyYXkgZm9yIHRoaXMgYXBwXG4gICAgICAgICAgICB0aGlzLmFwcERpY3RbYXBwSWRLZXldLnBhZ2VBcnJheSA9IHBhZ2VBcnJheUZyb21EaWN0KHBhZ2VEaWN0KTtcblxuICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGxvb2tpbmcgZm9yIGEgcGFydGljdWxhciB1cmwsIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBwYWdlLiBJZ25vcmUgZW1wdHkgb3IgdW5kZWZpbmVkIHVybHMuIElnbm9yZSBhYm91dDpibGFuayBpZiByZXF1ZXN0ZWQuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNlYXJjaFBhZ2UodGhpcy5hcHBEaWN0LCBjdXJyZW50VXJsLCBpZ25vcmVBYm91dEJsYW5rVXJsKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRVcmwpIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGBSZWNlaXZlZCBhcHAsIGJ1dCBleHBlY3RlZCB1cmwgKCcke2N1cnJlbnRVcmx9Jykgd2FzIG5vdCBmb3VuZC4gVHJ5aW5nIGFnYWluLmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKCdSZWNlaXZlZCBhcHAsIGJ1dCBubyBtYXRjaCB3YXMgZm91bmQuIFRyeWluZyBhZ2Fpbi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgY2hlY2tpbmcgYXBwbGljYXRpb246ICcke2Vyci5tZXNzYWdlfScuIFJldHJ5aW5nIGNvbm5lY3Rpb25gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmaW5kIGFuIGFwcCB0byBzZWxlY3QnKTtcbiAgICAgIH0sIDApO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBjb25uZWN0IHRvIGEgdmFsaWQgYXBwIGFmdGVyICR7bWF4VHJpZXN9IHRyaWVzLmApO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaFBhZ2UgKGFwcHNEaWN0LCBjdXJyZW50VXJsID0gbnVsbCwgaWdub3JlQWJvdXRCbGFua1VybCA9IGZhbHNlKSB7XG4gICAgZm9yIChjb25zdCBhcHBEaWN0IG9mIF8udmFsdWVzKGFwcHNEaWN0KSkge1xuICAgICAgaWYgKCFhcHBEaWN0IHx8ICFhcHBEaWN0LnBhZ2VBcnJheSB8fCBhcHBEaWN0LnBhZ2VBcnJheS5wcm9taXNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRpY3Qgb2YgYXBwRGljdC5wYWdlQXJyYXkpIHtcbiAgICAgICAgaWYgKCghaWdub3JlQWJvdXRCbGFua1VybCB8fCBkaWN0LnVybCAhPT0gQkxBTktfUEFHRV9VUkwpICYmXG4gICAgICAgICAgICAoIWN1cnJlbnRVcmwgfHwgZGljdC51cmwgPT09IGN1cnJlbnRVcmwgfHwgZGljdC51cmwgPT09IGAke2N1cnJlbnRVcmx9L2ApKSB7XG4gICAgICAgICAgcmV0dXJuIHsgYXBwSWRLZXk6IGFwcERpY3QuaWQsIHBhZ2VEaWN0OiBkaWN0IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBzZWxlY3RQYWdlIChhcHBJZEtleSwgcGFnZUlkS2V5LCBza2lwUmVhZHlDaGVjayA9IGZhbHNlKSB7XG4gICAgdGhpcy5hcHBJZEtleSA9IGBQSUQ6JHthcHBJZEtleX1gO1xuICAgIHRoaXMucGFnZUlkS2V5ID0gcGFnZUlkS2V5O1xuXG4gICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgcGFnZSAnJHtwYWdlSWRLZXl9JyBvbiBhcHAgJyR7dGhpcy5hcHBJZEtleX0nIGFuZCBmb3J3YXJkaW5nIHNvY2tldCBzZXR1cGApO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcblxuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbGVjdFBhZ2UodGhpcy5hcHBJZEtleSwgcGFnZUlkS2V5KTtcblxuICAgIC8vIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHJlYWR5IHRvIGdvXG4gICAgaWYgKCFza2lwUmVhZHlDaGVjayAmJiAhYXdhaXQgdGhpcy5jaGVja1BhZ2VJc1JlYWR5KCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucGFnZVVubG9hZCgpO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgU2VsZWN0ZWQgcGFnZSBhZnRlciAke2dldEVsYXBzZWRUaW1lKHN0YXJ0VGltZSl9bXNgKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBdG9tIChhdG9tLCBhcmdzLCBmcmFtZXMpIHtcbiAgICBpZiAoIXRoaXMucnBjQ2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVtb3RlIGRlYnVnZ2VyIGlzIG5vdCBjb25uZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyBhdG9tICcke2F0b219J2ApO1xuICAgIGNvbnN0IHNjcmlwdCA9IGF3YWl0IGdldFNjcmlwdEZvckF0b20oYXRvbSwgYXJncywgZnJhbWVzKTtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZShzY3JpcHQsIHRydWUpO1xuICAgIGxvZy5kZWJ1ZyhgUmVjZWl2ZWQgcmVzdWx0IGZvciBhdG9tICcke2F0b219JyBleGVjdXRpb246ICR7Xy50cnVuY2F0ZShzaW1wbGVTdHJpbmdpZnkodmFsdWUpLCB7bGVuZ3RoOiBSRVNQT05TRV9MT0dfTEVOR1RIfSl9YCk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUF0b21Bc3luYyAoYXRvbSwgYXJncywgZnJhbWVzKSB7XG4gICAgLy8gZmlyc3QgY3JlYXRlIGEgUHJvbWlzZSBvbiB0aGUgcGFnZSwgc2F2aW5nIHRoZSByZXNvbHZlL3JlamVjdCBmdW5jdGlvbnNcbiAgICAvLyBhcyBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcHJvbWlzZU5hbWUgPSBgYXBwaXVtQXN5bmNFeGVjdXRlUHJvbWlzZSR7VVVJRC5jcmVhdGUoKS50b1N0cmluZygpLnJlcGxhY2UoLy0vZywgJycpfWA7XG4gICAgbGV0IHNjcmlwdCA9IGB2YXIgcmVzLCByZWo7YCArXG4gICAgICAgICAgICAgICAgIGB3aW5kb3cuJHtwcm9taXNlTmFtZX0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7YCArXG4gICAgICAgICAgICAgICAgIGAgIHJlcyA9IHJlc29sdmU7YCArXG4gICAgICAgICAgICAgICAgIGAgIHJlaiA9IHJlamVjdDtgICtcbiAgICAgICAgICAgICAgICAgYH0pO2AgK1xuICAgICAgICAgICAgICAgICBgd2luZG93LiR7cHJvbWlzZU5hbWV9LnJlc29sdmUgPSByZXM7YCArXG4gICAgICAgICAgICAgICAgIGB3aW5kb3cuJHtwcm9taXNlTmFtZX0ucmVqZWN0ID0gcmVqO2AgK1xuICAgICAgICAgICAgICAgICBgd2luZG93LiR7cHJvbWlzZU5hbWV9O2A7XG4gICAgY29uc3Qgb2JqID0gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc2VuZEpTQ29tbWFuZCcsIHtcbiAgICAgIGNvbW1hbmQ6IHNjcmlwdCxcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIHJldHVybkJ5VmFsdWU6IGZhbHNlLFxuICAgIH0pO1xuICAgIGNvbnN0IHByb21pc2VPYmplY3RJZCA9IG9iai5yZXN1bHQub2JqZWN0SWQ7XG5cbiAgICAvLyBleGVjdXRlIHRoZSBhdG9tLCBjYWxsaW5nIGJhY2sgdG8gdGhlIHJlc29sdmUgZnVuY3Rpb25cbiAgICBjb25zdCBhc3luY0NhbGxCYWNrID0gYGZ1bmN0aW9uIChyZXMpIHtgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgd2luZG93LiR7cHJvbWlzZU5hbWV9LnJlc29sdmUocmVzKTtgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgd2luZG93LiR7cHJvbWlzZU5hbWV9VmFsdWUgPSByZXM7YCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9YDtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoYXdhaXQgZ2V0U2NyaXB0Rm9yQXRvbShhdG9tLCBhcmdzLCBmcmFtZXMsIGFzeW5jQ2FsbEJhY2spKTtcblxuICAgIC8vIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIGJlIHJlc29sdmVkXG4gICAgbGV0IHJlcztcbiAgICBjb25zdCBzdWJjb21tYW5kVGltZW91dCA9IDEwMDA7IC8vIHRpbWVvdXQgb24gaW5kaXZpZHVhbCBjb21tYW5kc1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdhd2FpdFByb21pc2UnLCB7XG4gICAgICAgIHByb21pc2VPYmplY3RJZCxcbiAgICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoYCdSdW50aW1lLmF3YWl0UHJvbWlzZScgd2FzIG5vdCBmb3VuZGApKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgLy8gYXdhaXRQcm9taXNlIGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlLCBzbyBzaW11bGF0ZSBpdCB3aXRoIHBvbGxcbiAgICAgIGNvbnN0IHJldHJ5V2FpdCA9IDEwMDtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSAoYXJncy5sZW5ndGggPj0gMykgPyBhcmdzWzJdIDogUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVM7XG4gICAgICBjb25zdCByZXRyaWVzID0gcGFyc2VJbnQodGltZW91dCAvIHJldHJ5V2FpdCwgMTApO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgIHJlcyA9IGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgcmV0cnlXYWl0LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIHRoZSBhdG9tIF93aWxsXyByZXR1cm4sIGVpdGhlciBiZWNhdXNlIGl0IGZpbmlzaGVkIG9yIGFuIGVycm9yXG4gICAgICAgIC8vIGluY2x1ZGluZyBhIHRpbWVvdXQgZXJyb3JcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW2ByZXR1cm4gd2luZG93Lmhhc093blByb3BlcnR5KCcke3Byb21pc2VOYW1lfVZhbHVlJyk7YCwgW251bGwsIG51bGxdLCBzdWJjb21tYW5kVGltZW91dF0sIGZyYW1lcykpIHtcbiAgICAgICAgICAvLyB3ZSBvbmx5IHB1dCB0aGUgcHJvcGVydHkgb24gYHdpbmRvd2Agd2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLFxuICAgICAgICAgIC8vIHNvIGlmIGl0IGlzIHRoZXJlLCBldmVyeXRoaW5nIGlzIGRvbmVcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbYHJldHVybiB3aW5kb3cuJHtwcm9taXNlTmFtZX1WYWx1ZTtgLCBbbnVsbCwgbnVsbF0sIHN1YmNvbW1hbmRUaW1lb3V0XSwgZnJhbWVzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aHJvdyBhIFRpbWVvdXRFcnJvciwgb3IgZWxzZSBpdCBuZWVkcyB0byBiZSBjYXVnaHQgYW5kIHJlLXRocm93blxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlRpbWVvdXRFcnJvcihgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGFzeW5jaHJvbm91cyBzY3JpcHQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGByZXN1bHQgYWZ0ZXIgJHtnZXRFbGFwc2VkVGltZShzdGFydFRpbWUpfSBtcycpKTtgKTtcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyB0cnkgdG8gZ2V0IHJpZCBvZiB0aGUgcHJvbWlzZVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBdG9tKCdleGVjdXRlX3NjcmlwdCcsIFtgZGVsZXRlIHdpbmRvdy4ke3Byb21pc2VOYW1lfTtgLCBbbnVsbCwgbnVsbF0sIHN1YmNvbW1hbmRUaW1lb3V0XSwgZnJhbWVzKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRSZXN1bHQocmVzKTtcbiAgfVxuXG4gIGZyYW1lRGV0YWNoZWQgKCkge1xuICAgIHRoaXMuZW1pdChSZW1vdGVEZWJ1Z2dlci5FVkVOVF9GUkFNRVNfREVUQUNIRUQpO1xuICB9XG5cbiAgYXN5bmMgcGFnZUxvYWQgKHN0YXJ0UGFnZUxvYWRNcywgcGFnZUxvYWRWZXJpZnlIb29rKSB7XG4gICAgbGV0IHRpbWVvdXRNcyA9IDUwMDtcbiAgICBsZXQgc3RhcnQgPSBzdGFydFBhZ2VMb2FkTXMgfHwgRGF0ZS5ub3coKTtcbiAgICBsb2cuZGVidWcoJ1BhZ2UgbG9hZGVkLCB2ZXJpZnlpbmcgd2hldGhlciByZWFkeScpO1xuXG4gICAgY29uc3QgdmVyaWZ5ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5wYWdlTG9hZERlbGF5ID0gdXRpbC5jYW5jZWxsYWJsZURlbGF5KHRpbWVvdXRNcyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnBhZ2VMb2FkRGVsYXk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEIuQ2FuY2VsbGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgcHJvbWlzZSBoYXMgYmVlbiBjYW5jZWxsZWRcbiAgICAgICAgICAvLyB3ZSB3YW50IHRvIHNraXAgY2hlY2tpbmcgdGhlIHJlYWRpbmVzc1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3ZSBjYW4gZ2V0IHRoaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgdHJ5aW5nIHRvIGZpbmQgYSBuZXcgYXBwXG4gICAgICBpZiAoIXRoaXMuYXBwSWRLZXkpIHtcbiAgICAgICAgbG9nLmRlYnVnKCdOb3QgY29ubmVjdGVkIHRvIGFuIGFwcGxpY2F0aW9uLiBJZ25vcmluZyBwYWdlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHBhZ2VMb2FkVmVyaWZ5SG9vaykpIHtcbiAgICAgICAgYXdhaXQgcGFnZUxvYWRWZXJpZnlIb29rKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgdGhpcy5jaGVja1BhZ2VJc1JlYWR5KCk7XG5cbiAgICAgIC8vIGlmIHdlIGFyZSByZWFkeSwgb3Igd2UndmUgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGlzXG4gICAgICBpZiAocmVhZHkgfHwgKHRoaXMucGFnZUxvYWRNcyA+IDAgJiYgKHN0YXJ0ICsgdGhpcy5wYWdlTG9hZE1zKSA8IERhdGUubm93KCkpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnUGFnZSBpcyByZWFkeScpO1xuICAgICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ1BhZ2Ugd2FzIG5vdCByZWFkeSwgcmV0cnlpbmcnKTtcbiAgICAgICAgYXdhaXQgdmVyaWZ5KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCB2ZXJpZnkoKTtcbiAgfVxuXG4gIGNhbmNlbFBhZ2VMb2FkICgpIHtcbiAgICBsb2cuZGVidWcoJ1VucmVnaXN0ZXJpbmcgZnJvbSBwYWdlIHJlYWRpbmVzcyBub3RpZmljYXRpb25zJyk7XG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBhZ2VMb2FkRGVsYXkpIHtcbiAgICAgIHRoaXMucGFnZUxvYWREZWxheS5jYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBwYWdlVW5sb2FkICgpIHtcbiAgICBsb2cuZGVidWcoJ1BhZ2UgdW5sb2FkaW5nJyk7XG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yRG9tKCk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yRG9tIChzdGFydFBhZ2VMb2FkTXMsIHBhZ2VMb2FkVmVyaWZ5SG9vaykge1xuICAgIGxvZy5kZWJ1ZygnV2FpdGluZyBmb3IgZG9tLi4uJyk7XG4gICAgYXdhaXQgdGhpcy5wYWdlTG9hZChzdGFydFBhZ2VMb2FkTXMsIHBhZ2VMb2FkVmVyaWZ5SG9vayk7XG4gIH1cblxuICBhc3luYyBjaGVja1BhZ2VJc1JlYWR5ICgpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXl9KTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgbG9nLmRlYnVnKCdDaGVja2luZyBkb2N1bWVudCByZWFkeVN0YXRlJyk7XG4gICAgY29uc3QgcmVhZHlDbWQgPSAnKGZ1bmN0aW9uICgpeyByZXR1cm4gZG9jdW1lbnQucmVhZHlTdGF0ZTsgfSkoKSc7XG4gICAgbGV0IHJlYWR5U3RhdGUgPSAnbG9hZGluZyc7XG4gICAgdHJ5IHtcbiAgICAgIHJlYWR5U3RhdGUgPSBhd2FpdCBCLnJlc29sdmUodGhpcy5leGVjdXRlKHJlYWR5Q21kLCB0cnVlKSkudGltZW91dCh0aGlzLnBhZ2VSZWFkeVRpbWVvdXQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgQi5UaW1lb3V0RXJyb3IpKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgUGFnZSByZWFkaW5lc3MgY2hlY2sgdGltZWQgb3V0IGFmdGVyICR7dGhpcy5wYWdlUmVhZHlUaW1lb3V0fW1zYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgRG9jdW1lbnQgcmVhZHlTdGF0ZSBpcyAnJHtyZWFkeVN0YXRlfSdgKTtcblxuICAgIHJldHVybiByZWFkeVN0YXRlID09PSAnY29tcGxldGUnO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2FmYXJpICgpIHtcbiAgICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdsYXVuY2hBcHBsaWNhdGlvbicsIHtcbiAgICAgIGJ1bmRsZUlkOiBTQUZBUklfQlVORExFX0lEXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuYXZUb1VybCAodXJsLCBwYWdlTG9hZFZlcmlmeUhvb2spIHtcbiAgICBjb25zdCBlcnJvcnMgPSBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXl9KTtcbiAgICBpZiAoZXJyb3JzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9uYXZpZ2F0aW5nVG9QYWdlID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYE5hdmlnYXRpbmcgdG8gbmV3IFVSTDogJyR7dXJsfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3NldFVybCcsIHtcbiAgICAgICAgdXJsLFxuICAgICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMudXNlTmV3U2FmYXJpKSB7XG4gICAgICAgIC8vIGEgc21hbGwgcGF1c2UgZm9yIHRoZSBicm93c2VyIHRvIGNhdGNoIHVwXG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckZyYW1lTmF2aWdhdGVkKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvckRvbShEYXRlLm5vdygpLCBwYWdlTG9hZFZlcmlmeUhvb2spO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW5nVG9QYWdlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd2FpdEZvckZyYW1lTmF2aWdhdGVkICgpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbG9nLmRlYnVnKCdXYWl0aW5nIGZvciBmcmFtZSBuYXZpZ2F0ZWQgbWVzc2FnZS4uLicpO1xuICAgICAgbGV0IHN0YXJ0TXMgPSBEYXRlLm5vdygpO1xuXG4gICAgICAvLyBhZGQgYSBoYW5kbGVyIGZvciB0aGUgYFBhZ2UuZnJhbWVOYXZpZ2F0ZWRgIG1lc3NhZ2VcbiAgICAgIC8vIGZyb20gdGhlIHJlbW90ZSBkZWJ1Z2dlclxuICAgICAgY29uc3QgbmF2RXZlbnRMaXN0ZW5lciA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBsb2cuZGVidWcoYEZyYW1lIG5hdmlnYXRlZCBpbiAkeygoRGF0ZS5ub3coKSAtIHN0YXJ0TXMpIC8gMTAwMCl9IHNlYyBmcm9tIHNvdXJjZTogJHt2YWx1ZX1gKTtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbkRlbGF5KSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGVsYXkuY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5ycGNDbGllbnQuc2V0U3BlY2lhbE1lc3NhZ2VIYW5kbGVyKCdQYWdlLmZyYW1lTmF2aWdhdGVkJywgcmVqZWN0LCBuYXZFdmVudExpc3RlbmVyKTtcblxuICAgICAgLy8gdGltZW91dCwgaW4gY2FzZSByZW1vdGUgZGVidWdnZXIgZG9lc24ndCByZXNwb25kLFxuICAgICAgLy8gb3IgdGFrZXMgYSBsb25nIHRpbWVcbiAgICAgIGlmICghdGhpcy51c2VOZXdTYWZhcmkgfHwgdGhpcy5wYWdlTG9hZE1zID49IDApIHtcbiAgICAgICAgLy8gdXNlIHBhZ2VMb2FkTXMsIG9yIGEgc21hbGwgYW1vdW50IG9mIHRpbWVcbiAgICAgICAgbGV0IHRpbWVvdXQgPSB0aGlzLnVzZU5ld1NhZmFyaSA/IHRoaXMucGFnZUxvYWRNcyA6IDUwMDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGVsYXkgPSB1dGlsLmNhbmNlbGxhYmxlRGVsYXkodGltZW91dCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uRGVsYXk7XG4gICAgICAgICAgbmF2RXZlbnRMaXN0ZW5lcigndGltZW91dCcpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvOiB3ZSBvbmx5IGdldCBoZXJlIGlmIHRoZSByZW1vdGUgZGVidWdnZXJcbiAgICAgICAgICAvLyBhbHJlYWR5IG5vdGlmaWVkIG9mIGZyYW1lIG5hdmlnYXRpb24sIGFuZCB0aGUgZGVsYXlcbiAgICAgICAgICAvLyB3YXMgY2FuY2VsbGVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGltZWxpbmUgKGZuKSB7XG4gICAgbG9nLmRlYnVnKCdTdGFydGluZyB0byByZWNvcmQgdGhlIHRpbWVsaW5lJyk7XG4gICAgdGhpcy5ycGNDbGllbnQuc2V0VGltZWxpbmVFdmVudEhhbmRsZXIoZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdGFydFRpbWVsaW5lJywge1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RvcFRpbWVsaW5lICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIHRvIHJlY29yZCB0aGUgdGltZWxpbmUnKTtcbiAgICBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdG9wVGltZWxpbmUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydENvbnNvbGUgKGZuKSB7XG4gICAgbG9nLmRlYnVnKCdTdGFydGluZyB0byBsaXN0ZW4gZm9yIEphdmFTY3JpcHQgY29uc29sZScpO1xuICAgIHRoaXMucnBjQ2xpZW50LnNldENvbnNvbGVMb2dFdmVudEhhbmRsZXIoZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdGFydENvbnNvbGUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wQ29uc29sZSAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyB0byBsaXN0ZW4gZm9yIEphdmFTY3JpcHQgY29uc29sZScpO1xuICAgIGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ3N0b3BDb25zb2xlJywge1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnROZXR3b3JrIChmbikge1xuICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgdG8gbGlzdGVuIGZvciBuZXR3b3JrIGV2ZW50cycpO1xuICAgIHRoaXMucnBjQ2xpZW50LnNldE5ldHdvcmtMb2dFdmVudEhhbmRsZXIoZm4pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzdGFydE5ldHdvcmsnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdG9wTmV0d29yayAoKSB7XG4gICAgbG9nLmRlYnVnKCdTdG9wcGluZyB0byBsaXN0ZW4gZm9yIG5ldHdvcmsgZXZlbnRzJyk7XG4gICAgYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnc3RvcE5ldHdvcmsnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlIChjb21tYW5kLCBvdmVycmlkZSkge1xuICAgIC8vIGlmIHRoZSBwYWdlIGlzIG5vdCBsb2FkZWQgeWV0LCB3YWl0IGZvciBpdFxuICAgIGlmICh0aGlzLnBhZ2VMb2FkaW5nICYmICFvdmVycmlkZSkge1xuICAgICAgbG9nLmRlYnVnKCdUcnlpbmcgdG8gZXhlY3V0ZSBidXQgcGFnZSBpcyBub3QgbG9hZGVkLicpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yRG9tKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gY2hlY2tQYXJhbXMoe2FwcElkS2V5OiB0aGlzLmFwcElkS2V5LCBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5fSk7XG4gICAgaWYgKGVycm9ycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3QoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFNlbmRpbmcgamF2YXNjcmlwdCBjb21tYW5kOiAnJHtfLnRydW5jYXRlKGNvbW1hbmQsIHtsZW5ndGg6IDUwfSl9J2ApO1xuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdzZW5kSlNDb21tYW5kJywge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjb252ZXJ0UmVzdWx0KHJlcyk7XG4gIH1cblxuICBhc3luYyBjYWxsRnVuY3Rpb24gKG9iaklkLCBmbiwgYXJncykge1xuICAgIGxldCBlcnJvcnMgPSBjaGVja1BhcmFtcyh7YXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXl9KTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgaWYgKHRoaXMuZ2FyYmFnZUNvbGxlY3RPbkV4ZWN1dGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2FyYmFnZUNvbGxlY3QoKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoJ0NhbGxpbmcgamF2YXNjcmlwdCBmdW5jdGlvbicpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucnBjQ2xpZW50LnNlbmQoJ2NhbGxKU0Z1bmN0aW9uJywge1xuICAgICAgb2JqSWQsXG4gICAgICBmbixcbiAgICAgIGFyZ3MsXG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydFJlc3VsdChyZXMpO1xuICB9XG5cbiAgYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZCAoYWxsb3cgPSB0cnVlKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbih0aGlzLnJwY0NsaWVudC5hbGxvd05hdmlnYXRpb25XaXRob3V0UmVsb2FkKSkge1xuICAgICAgdGhpcy5ycGNDbGllbnQuYWxsb3dOYXZpZ2F0aW9uV2l0aG91dFJlbG9hZChhbGxvdyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29va2llcyAodXJscykge1xuICAgIGxvZy5kZWJ1ZygnR2V0dGluZyBuZXR3b3JrIGNvb2tpZXMnKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ycGNDbGllbnQuc2VuZCgnZ2V0Q29va2llcycsIHtcbiAgICAgIGFwcElkS2V5OiB0aGlzLmFwcElkS2V5LFxuICAgICAgcGFnZUlkS2V5OiB0aGlzLnBhZ2VJZEtleSxcbiAgICAgIHVybHMsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb29raWUgKGNvb2tpZU5hbWUsIHVybCkge1xuICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgY29va2llICcke2Nvb2tpZU5hbWV9JyBvbiAnJHt1cmx9J2ApO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnJwY0NsaWVudC5zZW5kKCdkZWxldGVDb29raWUnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgICBjb29raWVOYW1lLFxuICAgICAgdXJsLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2FyYmFnZUNvbGxlY3QgKHRpbWVvdXRNcyA9IEdBUkJBR0VfQ09MTEVDVF9USU1FT1VUKSB7XG4gICAgbG9nLmRlYnVnKGBHYXJiYWdlIGNvbGxlY3Rpbmcgd2l0aCAke3RpbWVvdXRNc31tcyB0aW1lb3V0YCk7XG4gICAgY29uc3QgZXJyb3JzID0gY2hlY2tQYXJhbXMoe1xuICAgICAgYXBwSWRLZXk6IHRoaXMuYXBwSWRLZXksXG4gICAgICBwYWdlSWRLZXk6IHRoaXMucGFnZUlkS2V5LFxuICAgIH0pO1xuICAgIGlmIChlcnJvcnMpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVW5hYmxlIHRvIGNvbGxlY3QgZ2FyYmFnZSBhdCB0aGlzIHRpbWVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBCLnJlc29sdmUodGhpcy5ycGNDbGllbnQuc2VuZCgnZ2FyYmFnZUNvbGxlY3QnLCB7XG4gICAgICBhcHBJZEtleTogdGhpcy5hcHBJZEtleSxcbiAgICAgIHBhZ2VJZEtleTogdGhpcy5wYWdlSWRLZXksXG4gICAgfSkpLnRpbWVvdXQodGltZW91dE1zKVxuICAgIC50aGVuKGZ1bmN0aW9uIGdjU3VjY2VzcyAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tdGhlblxuICAgICAgbG9nLmRlYnVnKGBHYXJiYWdlIGNvbGxlY3Rpb24gc3VjY2Vzc2Z1bGApO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIGdjRXJyb3IgKGVycikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEIuVGltZW91dEVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgR2FyYmFnZSBjb2xsZWN0aW9uIHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRNc31tc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gY29sbGVjdCBnYXJiYWdlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8vIGV2ZW50IGVtaXR0ZWQgcHVibGljYWxseVxuUmVtb3RlRGVidWdnZXIuRVZFTlRfUEFHRV9DSEFOR0UgPSAncmVtb3RlX2RlYnVnZ2VyX3BhZ2VfY2hhbmdlJztcblJlbW90ZURlYnVnZ2VyLkVWRU5UX0ZSQU1FU19ERVRBQ0hFRCA9ICdyZW1vdGVfZGVidWdnZXJfZnJhbWVzX2RldGFjaGVkJztcblJlbW90ZURlYnVnZ2VyLkVWRU5UX0RJU0NPTk5FQ1QgPSAncmVtb3RlX2RlYnVnZ2VyX2Rpc2Nvbm5lY3QnO1xuXG4vLyBhZGQgZ2VuZXJpYyBjYWxsYmFja3NcbmZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIF8udG9QYWlycyhtZXNzYWdlSGFuZGxlcnMpKSB7XG4gIFJlbW90ZURlYnVnZ2VyLnByb3RvdHlwZVtuYW1lXSA9IGhhbmRsZXI7XG59XG5cbmV4cG9ydCB7XG4gIFJlbW90ZURlYnVnZ2VyLCBSRU1PVEVfREVCVUdHRVJfUE9SVCwgUlBDX1JFU1BPTlNFX1RJTUVPVVRfTVMsXG59O1xuIl0sImZpbGUiOiJsaWIvcmVtb3RlLWRlYnVnZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -90,7 +90,7 @@ class RemoteMessages {
|
|
|
90
90
|
const method = 'Runtime.evaluate';
|
|
91
91
|
const params = {
|
|
92
92
|
expression: opts.command,
|
|
93
|
-
returnByValue: true
|
|
93
|
+
returnByValue: _lodash.default.isBoolean(opts.returnByValue) ? opts.returnByValue : true
|
|
94
94
|
};
|
|
95
95
|
return this.getFullCommand(connId, senderId, appIdKey, pageIdKey, method, params);
|
|
96
96
|
}
|
|
@@ -179,6 +179,17 @@ class RemoteMessages {
|
|
|
179
179
|
return this.getFullCommand(connId, senderId, appIdKey, pageIdKey, method, params);
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
+
awaitPromise(connId, senderId, appIdKey, pageIdKey, opts) {
|
|
183
|
+
const method = 'Runtime.awaitPromise';
|
|
184
|
+
const params = {
|
|
185
|
+
promiseObjectId: opts.promiseObjectId,
|
|
186
|
+
returnByValue: true,
|
|
187
|
+
generatePreview: true,
|
|
188
|
+
saveResult: true
|
|
189
|
+
};
|
|
190
|
+
return this.getFullCommand(connId, senderId, appIdKey, pageIdKey, method, params);
|
|
191
|
+
}
|
|
192
|
+
|
|
182
193
|
command(method, params, appIdKey, connId, senderId, pageIdKey) {
|
|
183
194
|
let plist = {
|
|
184
195
|
__argument: {
|
|
@@ -269,6 +280,9 @@ class RemoteMessages {
|
|
|
269
280
|
case 'garbageCollect':
|
|
270
281
|
return this.garbageCollect(connId, senderId, appIdKey, pageIdKey);
|
|
271
282
|
|
|
283
|
+
case 'awaitPromise':
|
|
284
|
+
return this.awaitPromise(connId, senderId, appIdKey, pageIdKey, opts);
|
|
285
|
+
|
|
272
286
|
default:
|
|
273
287
|
throw new Error(`Unknown command: ${command}`);
|
|
274
288
|
}
|
|
@@ -281,4 +295,4 @@ var _default = RemoteMessages;
|
|
|
281
295
|
exports.default = _default;require('source-map-support').install();
|
|
282
296
|
|
|
283
297
|
|
|
284
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZW1vdGUtbWVzc2FnZXMuanMiXSwibmFtZXMiOlsiUmVtb3RlTWVzc2FnZXMiLCJjb25zdHJ1Y3RvciIsImlzVGFyZ2V0QmFzZWQiLCJzZXRDb21tdW5pY2F0aW9uUHJvdG9jb2wiLCJzZXRDb25uZWN0aW9uS2V5IiwiY29ubklkIiwiX19hcmd1bWVudCIsIldJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5IiwiX19zZWxlY3RvciIsImNvbm5lY3RUb0FwcCIsImFwcElkS2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5Iiwic2V0U2VuZGVyS2V5Iiwic2VuZGVySWQiLCJwYWdlSWRLZXkiLCJXSVJTZW5kZXJLZXkiLCJXSVJQYWdlSWRlbnRpZmllcktleSIsIldJUkF1dG9tYXRpY2FsbHlQYXVzZSIsImluZGljYXRlV2ViVmlldyIsIm9wdHMiLCJlbmFibGVkIiwiV0lSSW5kaWNhdGVFbmFibGVkS2V5IiwiXyIsImlzVW5kZWZpbmVkIiwibGF1bmNoQXBwbGljYXRpb24iLCJidW5kbGVJZCIsIldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSIsImdldEZ1bGxDb21tYW5kIiwibWV0aG9kIiwicGFyYW1zIiwicmVhbE1ldGhvZCIsInJlYWxQYXJhbXMiLCJtZXNzYWdlIiwiY29tbWFuZCIsInNlbmRKU0NvbW1hbmQiLCJleHByZXNzaW9uIiwicmV0dXJuQnlWYWx1ZSIsImNhbGxKU0Z1bmN0aW9uIiwib2JqZWN0SWQiLCJvYmpJZCIsImZ1bmN0aW9uRGVjbGFyYXRpb24iLCJmbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJzZXRVcmwiLCJ1cmwiLCJlbmFibGVQYWdlIiwic3RhcnRUaW1lbGluZSIsInN0b3BUaW1lbGluZSIsInN0YXJ0Q29uc29sZSIsInN0b3BDb25zb2xlIiwic3RhcnROZXR3b3JrIiwic3RvcE5ldHdvcmsiLCJnZXRDb29raWVzIiwidXJscyIsImRlbGV0ZUNvb2tpZSIsImNvb2tpZU5hbWUiLCJnYXJiYWdlQ29sbGVjdCIsInBsaXN0IiwiV0lSU29ja2V0RGF0YUtleSIsIm9iamVjdEdyb3VwIiwiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIiwiZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlIiwiZXh0ZW5kIiwiZ2V0UmVtb3RlQ29tbWFuZCIsIkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLGNBQU4sQ0FBcUI7QUFDbkJDLEVBQUFBLFdBQVcsQ0FBRUMsYUFBYSxHQUFHLEtBQWxCLEVBQXlCO0FBQ2xDLFNBQUtBLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0Q7O0FBRURDLEVBQUFBLHdCQUF3QixDQUFFRCxhQUFGLEVBQWlCO0FBQ3ZDLFNBQUtBLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0Q7O0FBTURFLEVBQUFBLGdCQUFnQixDQUFFQyxNQUFGLEVBQVU7QUFDeEIsV0FBTztBQUNMQyxNQUFBQSxVQUFVLEVBQUU7QUFDVkMsUUFBQUEsMEJBQTBCLEVBQUVGO0FBRGxCLE9BRFA7QUFJTEcsTUFBQUEsVUFBVSxFQUFFO0FBSlAsS0FBUDtBQU1EOztBQUVEQyxFQUFBQSxZQUFZLENBQUVKLE1BQUYsRUFBVUssUUFBVixFQUFvQjtBQUM5QixXQUFPO0FBQ0xKLE1BQUFBLFVBQVUsRUFBRTtBQUNWQyxRQUFBQSwwQkFBMEIsRUFBRUYsTUFEbEI7QUFFVk0sUUFBQUEsMkJBQTJCLEVBQUVEO0FBRm5CLE9BRFA7QUFLTEYsTUFBQUEsVUFBVSxFQUFFO0FBTFAsS0FBUDtBQU9EOztBQUVESSxFQUFBQSxZQUFZLENBQUVQLE1BQUYsRUFBVVEsUUFBVixFQUFvQkgsUUFBcEIsRUFBOEJJLFNBQTlCLEVBQXlDO0FBQ25ELFdBQU87QUFDTFIsTUFBQUEsVUFBVSxFQUFFO0FBQ1ZLLFFBQUFBLDJCQUEyQixFQUFFRCxRQURuQjtBQUVWSCxRQUFBQSwwQkFBMEIsRUFBRUYsTUFGbEI7QUFHVlUsUUFBQUEsWUFBWSxFQUFFRixRQUhKO0FBSVZHLFFBQUFBLG9CQUFvQixFQUFFRixTQUpa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c0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jbGFzcyBSZW1vdGVNZXNzYWdlcyB7XG4gIGNvbnN0cnVjdG9yIChpc1RhcmdldEJhc2VkID0gZmFsc2UpIHtcbiAgICB0aGlzLmlzVGFyZ2V0QmFzZWQgPSBpc1RhcmdldEJhc2VkO1xuICB9XG5cbiAgc2V0Q29tbXVuaWNhdGlvblByb3RvY29sIChpc1RhcmdldEJhc2VkKSB7XG4gICAgdGhpcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIC8qXG4gICAqIENvbm5lY3Rpb24gZnVuY3Rpb25zXG4gICAqL1xuXG4gIHNldENvbm5lY3Rpb25LZXkgKGNvbm5JZCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2FyZ3VtZW50OiB7XG4gICAgICAgIFdJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5OiBjb25uSWRcbiAgICAgIH0sXG4gICAgICBfX3NlbGVjdG9yOiAnX3JwY19yZXBvcnRJZGVudGlmaWVyOidcbiAgICB9O1xuICB9XG5cbiAgY29ubmVjdFRvQXBwIChjb25uSWQsIGFwcElkS2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXJndW1lbnQ6IHtcbiAgICAgICAgV0lSQ29ubmVjdGlvbklkZW50aWZpZXJLZXk6IGNvbm5JZCxcbiAgICAgICAgV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5OiBhcHBJZEtleVxuICAgICAgfSxcbiAgICAgIF9fc2VsZWN0b3I6ICdfcnBjX2ZvcndhcmRHZXRMaXN0aW5nOidcbiAgICB9O1xuICB9XG5cbiAgc2V0U2VuZGVyS2V5IChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXJndW1lbnQ6IHtcbiAgICAgICAgV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5OiBhcHBJZEtleSxcbiAgICAgICAgV0lSQ29ubmVjdGlvbklkZW50aWZpZXJLZXk6IGNvbm5JZCxcbiAgICAgICAgV0lSU2VuZGVyS2V5OiBzZW5kZXJJZCxcbiAgICAgICAgV0lSUGFnZUlkZW50aWZpZXJLZXk6IHBhZ2VJZEtleSxcbiAgICAgICAgV0lSQXV0b21hdGljYWxseVBhdXNlOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIF9fc2VsZWN0b3I6ICdfcnBjX2ZvcndhcmRTb2NrZXRTZXR1cDonXG4gICAgfTtcbiAgfVxuXG4gIGluZGljYXRlV2ViVmlldyAoY29ubklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzKSB7XG4gICAgY29uc3Qge2VuYWJsZWR9ID0gb3B0cztcbiAgICByZXR1cm4ge1xuICAgICAgX19hcmd1bWVudDoge1xuICAgICAgICBXSVJBcHBsaWNhdGlvbklkZW50aWZpZXJLZXk6IGFwcElkS2V5LFxuICAgICAgICBXSVJJbmRpY2F0ZUVuYWJsZWRLZXk6IF8uaXNVbmRlZmluZWQoZW5hYmxlZCkgPyB0cnVlIDogZW5hYmxlZCxcbiAgICAgICAgV0lSQ29ubmVjdGlvbklkZW50aWZpZXJLZXk6IGNvbm5JZCxcbiAgICAgICAgV0lSUGFnZUlkZW50aWZpZXJLZXk6IHBhZ2VJZEtleVxuICAgICAgfSxcbiAgICAgIF9fc2VsZWN0b3I6ICdfcnBjX2ZvcndhcmRJbmRpY2F0ZVdlYlZpZXc6J1xuICAgIH07XG4gIH1cblxuICBsYXVuY2hBcHBsaWNhdGlvbiAoYnVuZGxlSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hcmd1bWVudDoge1xuICAgICAgICBXSVJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXk6IGJ1bmRsZUlkXG4gICAgICB9LFxuICAgICAgX19zZWxlY3RvcjogJ19ycGNfcmVxdWVzdEFwcGxpY2F0aW9uTGF1bmNoOidcbiAgICB9O1xuICB9XG5cbiAgLypcbiAgICogQWN0aW9uIGZ1bmN0aW9uc1xuICAgKi9cblxuICBnZXRGdWxsQ29tbWFuZCAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpIHtcbiAgICBjb25zdCBbcmVhbE1ldGhvZCwgcmVhbFBhcmFtc10gPSB0aGlzLmlzVGFyZ2V0QmFzZWRcbiAgICAgID8gWydUYXJnZXQuc2VuZE1lc3NhZ2VUb1RhcmdldCcsIHttZXNzYWdlOiB7bWV0aG9kLCBwYXJhbXN9fV1cbiAgICAgIDogW21ldGhvZCwgcGFyYW1zXTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKHJlYWxNZXRob2QsIHJlYWxQYXJhbXMsIGFwcElkS2V5LCBjb25uSWQsIHNlbmRlcklkLCBwYWdlSWRLZXkpO1xuICB9XG5cbiAgc2VuZEpTQ29tbWFuZCAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ1J1bnRpbWUuZXZhbHVhdGUnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGV4cHJlc3Npb246IG9wdHMuY29tbWFuZCxcbiAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBjYWxsSlNGdW5jdGlvbiAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ1J1bnRpbWUuY2FsbEZ1bmN0aW9uT24nO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG9iamVjdElkOiBvcHRzLm9iaklkLFxuICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbjogb3B0cy5mbixcbiAgICAgIGFyZ3VtZW50czogb3B0cy5hcmdzLFxuICAgICAgcmV0dXJuQnlWYWx1ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgc2V0VXJsIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBtZXRob2QgPSAnUGFnZS5uYXZpZ2F0ZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgdXJsOiBvcHRzLnVybCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIGVuYWJsZVBhZ2UgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBtZXRob2QgPSAnUGFnZS5lbmFibGUnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIHN0YXJ0VGltZWxpbmUgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBtZXRob2QgPSAnVGltZWxpbmUuc3RhcnQnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIHN0b3BUaW1lbGluZSAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdUaW1lbGluZS5zdG9wJztcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBzdGFydENvbnNvbGUgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBtZXRob2QgPSAnQ29uc29sZS5lbmFibGUnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIHN0b3BDb25zb2xlIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ0NvbnNvbGUuZGlzYWJsZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgc3RhcnROZXR3b3JrIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ05ldHdvcmsuZW5hYmxlJztcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBzdG9wTmV0d29yayAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdOZXR3b3JrLmRpc2FibGUnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIGdldENvb2tpZXMgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdQYWdlLmdldENvb2tpZXMnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHVybHM6IG9wdHMudXJsLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgZGVsZXRlQ29va2llIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBtZXRob2QgPSAnUGFnZS5kZWxldGVDb29raWUnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGNvb2tpZU5hbWU6IG9wdHMuY29va2llTmFtZSxcbiAgICAgIHVybDogb3B0cy51cmwsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBnYXJiYWdlQ29sbGVjdCAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdIZWFwLmdjJztcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuXG4gIC8qXG4gICAqIEludGVybmFsIGZ1bmN0aW9uc1xuICAgKi9cblxuICBjb21tYW5kIChtZXRob2QsIHBhcmFtcywgYXBwSWRLZXksIGNvbm5JZCwgc2VuZGVySWQsIHBhZ2VJZEtleSkge1xuICAgIGxldCBwbGlzdCA9IHtcbiAgICAgIF9fYXJndW1lbnQ6IHtcbiAgICAgICAgV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5OiBhcHBJZEtleSxcbiAgICAgICAgV0lSU29ja2V0RGF0YUtleToge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIG9iamVjdEdyb3VwOiAnY29uc29sZScsXG4gICAgICAgICAgICBpbmNsdWRlQ29tbWFuZExpbmVBUEk6IHRydWUsXG4gICAgICAgICAgICBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBXSVJDb25uZWN0aW9uSWRlbnRpZmllcktleTogY29ubklkLFxuICAgICAgICBXSVJTZW5kZXJLZXk6IHNlbmRlcklkLFxuICAgICAgICBXSVJQYWdlSWRlbnRpZmllcktleTogcGFnZUlkS2V5LFxuICAgICAgICBXSVJBdXRvbWF0aWNhbGx5UGF1c2U6IHRydWUsXG4gICAgICB9LFxuICAgICAgX19zZWxlY3RvcjogJ19ycGNfZm9yd2FyZFNvY2tldERhdGE6J1xuICAgIH07XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgcGxpc3QuX19hcmd1bWVudC5XSVJTb2NrZXREYXRhS2V5LnBhcmFtcyA9XG4gICAgICAgIF8uZXh0ZW5kKHBsaXN0Ll9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleS5wYXJhbXMsIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBwbGlzdDtcbiAgfVxuXG4gIGdldFJlbW90ZUNvbW1hbmQgKGNvbW1hbmQsIG9wdHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb25uSWQsXG4gICAgICBhcHBJZEtleSxcbiAgICAgIHNlbmRlcklkLFxuICAgICAgcGFnZUlkS2V5LFxuICAgIH0gPSBvcHRzO1xuXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XG4gICAgICBjYXNlICdzZXRDb25uZWN0aW9uS2V5JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q29ubmVjdGlvbktleShjb25uSWQpO1xuICAgICAgY2FzZSAnbGF1bmNoQXBwbGljYXRpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5sYXVuY2hBcHBsaWNhdGlvbihvcHRzLmJ1bmRsZUlkKTtcbiAgICAgIGNhc2UgJ2Nvbm5lY3RUb0FwcCc6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0FwcChjb25uSWQsIGFwcElkS2V5KTtcbiAgICAgIGNhc2UgJ3NldFNlbmRlcktleSc6XG4gICAgICAgIHJldHVybiB0aGlzLnNldFNlbmRlcktleShjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgIGNhc2UgJ2luZGljYXRlV2ViVmlldyc6XG4gICAgICAgIHJldHVybiB0aGlzLmluZGljYXRlV2ViVmlldyhjb25uSWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMpO1xuICAgICAgY2FzZSAnc2VuZEpTQ29tbWFuZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNlbmRKU0NvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cyk7XG4gICAgICBjYXNlICdjYWxsSlNGdW5jdGlvbic6XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxKU0Z1bmN0aW9uKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMpO1xuICAgICAgY2FzZSAnc2V0VXJsJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VXJsKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMpO1xuICAgICAgY2FzZSAnZW5hYmxlUGFnZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZVBhZ2UoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdzdGFydFRpbWVsaW5lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lbGluZShjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgIGNhc2UgJ3N0b3BUaW1lbGluZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3BUaW1lbGluZShjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgIGNhc2UgJ3N0YXJ0Q29uc29sZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Q29uc29sZShjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgIGNhc2UgJ3N0b3BDb25zb2xlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcENvbnNvbGUoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdzdGFydE5ldHdvcmsnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydE5ldHdvcmsoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdzdG9wTmV0d29yayc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3BOZXR3b3JrKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgY2FzZSAnZ2V0Q29va2llcyc6XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvb2tpZXMoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cyk7XG4gICAgICBjYXNlICdkZWxldGVDb29raWUnOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVDb29raWUoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cyk7XG4gICAgICBjYXNlICdnYXJiYWdlQ29sbGVjdCc6XG4gICAgICAgIHJldHVybiB0aGlzLmdhcmJhZ2VDb2xsZWN0KGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgUmVtb3RlTWVzc2FnZXMgfTtcbmV4cG9ydCBkZWZhdWx0IFJlbW90ZU1lc3NhZ2VzO1xuIl0sImZpbGUiOiJsaWIvcmVtb3RlLW1lc3NhZ2VzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
298
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZW1vdGUtbWVzc2FnZXMuanMiXSwibmFtZXMiOlsiUmVtb3RlTWVzc2FnZXMiLCJjb25zdHJ1Y3RvciIsImlzVGFyZ2V0QmFzZWQiLCJzZXRDb21tdW5pY2F0aW9uUHJvdG9jb2wiLCJzZXRDb25uZWN0aW9uS2V5IiwiY29ubklkIiwiX19hcmd1bWVudCIsIldJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5IiwiX19zZWxlY3RvciIsImNvbm5lY3RUb0FwcCIsImFwcElkS2V5IiwiV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5Iiwic2V0U2VuZGVyS2V5Iiwic2VuZGVySWQiLCJwYWdlSWRLZXkiLCJXSVJTZW5kZXJLZXkiLCJXSVJQYWdlSWRlbnRpZmllcktleSIsIldJUkF1dG9tYXRpY2FsbHlQYXVzZSIsImluZGljYXRlV2ViVmlldyIsIm9wdHMiLCJlbmFibGVkIiwiV0lSSW5kaWNhdGVFbmFibGVkS2V5IiwiXyIsImlzVW5kZWZpbmVkIiwibGF1bmNoQXBwbGljYXRpb24iLCJidW5kbGVJZCIsIldJUkFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcktleSIsImdldEZ1bGxDb21tYW5kIiwibWV0aG9kIiwicGFyYW1zIiwicmVhbE1ldGhvZCIsInJlYWxQYXJhbXMiLCJtZXNzYWdlIiwiY29tbWFuZCIsInNlbmRKU0NvbW1hbmQiLCJleHByZXNzaW9uIiwicmV0dXJuQnlWYWx1ZSIsImlzQm9vbGVhbiIsImNhbGxKU0Z1bmN0aW9uIiwib2JqZWN0SWQiLCJvYmpJZCIsImZ1bmN0aW9uRGVjbGFyYXRpb24iLCJmbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJzZXRVcmwiLCJ1cmwiLCJlbmFibGVQYWdlIiwic3RhcnRUaW1lbGluZSIsInN0b3BUaW1lbGluZSIsInN0YXJ0Q29uc29sZSIsInN0b3BDb25zb2xlIiwic3RhcnROZXR3b3JrIiwic3RvcE5ldHdvcmsiLCJnZXRDb29raWVzIiwidXJscyIsImRlbGV0ZUNvb2tpZSIsImNvb2tpZU5hbWUiLCJnYXJiYWdlQ29sbGVjdCIsImF3YWl0UHJvbWlzZSIsInByb21pc2VPYmplY3RJZCIsImdlbmVyYXRlUHJldmlldyIsInNhdmVSZXN1bHQiLCJwbGlzdCIsIldJUlNvY2tldERhdGFLZXkiLCJvYmplY3RHcm91cCIsImluY2x1ZGVDb21tYW5kTGluZUFQSSIsImRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSIsImV4dGVuZCIsImdldFJlbW90ZUNvbW1hbmQiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFHQSxNQUFNQSxjQUFOLENBQXFCO0FBQ25CQyxFQUFBQSxXQUFXLENBQUVDLGFBQWEsR0FBRyxLQUFsQixFQUF5QjtBQUNsQyxTQUFLQSxhQUFMLEdBQXFCQSxhQUFyQjtBQUNEOztBQUVEQyxFQUFBQSx3QkFBd0IsQ0FBRUQsYUFBRixFQUFpQjtBQUN2QyxTQUFLQSxhQUFMLEdBQXFCQSxhQUFyQjtBQUNEOztBQU1ERSxFQUFBQSxnQkFBZ0IsQ0FBRUMsTUFBRixFQUFVO0FBQ3hCLFdBQU87QUFDTEMsTUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLFFBQUFBLDBCQUEwQixFQUFFRjtBQURsQixPQURQO0FBSUxHLE1BQUFBLFVBQVUsRUFBRTtBQUpQLEtBQVA7QUFNRDs7QUFFREMsRUFBQUEsWUFBWSxDQUFFSixNQUFGLEVBQVVLLFFBQVYsRUFBb0I7QUFDOUIsV0FBTztBQUNMSixNQUFBQSxVQUFVLEVBQUU7QUFDVkMsUUFBQUEsMEJBQTBCLEVBQUVGLE1BRGxCO0FBRVZNLFFBQUFBLDJCQUEyQixFQUFFRDtBQUZuQixPQURQO0FBS0xGLE1BQUFBLFVBQVUsRUFBRTtBQUxQLEtBQVA7QUFPRDs7QUFFREksRUFBQUEsWUFBWSxDQUFFUCxNQUFGLEVBQVVRLFFBQVYsRUFBb0JILFFBQXBCLEVBQThCSSxTQUE5QixFQUF5QztBQUNuRCxXQUFPO0FBQ0xSLE1BQUFBLFVBQVUsRUFBRTtBQUNWSyxRQUFBQSwyQkFBMkIsRUFBRUQsUUFEbkI7QUFFVkgsUUFBQUEs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QThDSSxTQUE5QyxDQUFQOztBQUNGLFdBQUssYUFBTDtBQUNFLGVBQU8sS0FBS3VDLFdBQUwsQ0FBaUJoRCxNQUFqQixFQUF5QlEsUUFBekIsRUFBbUNILFFBQW5DLEVBQTZDSSxTQUE3QyxDQUFQOztBQUNGLFdBQUssWUFBTDtBQUNFLGVBQU8sS0FBS3dDLFVBQUwsQ0FBZ0JqRCxNQUFoQixFQUF3QlEsUUFBeEIsRUFBa0NILFFBQWxDLEVBQTRDSSxTQUE1QyxFQUF1REssSUFBdkQsQ0FBUDs7QUFDRixXQUFLLGNBQUw7QUFDRSxlQUFPLEtBQUtxQyxZQUFMLENBQWtCbkQsTUFBbEIsRUFBMEJRLFFBQTFCLEVBQW9DSCxRQUFwQyxFQUE4Q0ksU0FBOUMsRUFBeURLLElBQXpELENBQVA7O0FBQ0YsV0FBSyxnQkFBTDtBQUNFLGVBQU8sS0FBS3VDLGNBQUwsQ0FBb0JyRCxNQUFwQixFQUE0QlEsUUFBNUIsRUFBc0NILFFBQXRDLEVBQWdESSxTQUFoRCxDQUFQOztBQUNGLFdBQUssY0FBTDtBQUNFLGVBQU8sS0FBSzZDLFlBQUwsQ0FBa0J0RCxNQUFsQixFQUEwQlEsUUFBMUIsRUFBb0NILFFBQXBDLEVBQThDSSxTQUE5QyxFQUF5REssSUFBekQsQ0FBUDs7QUFDRjtBQUNFLGNBQU0sSUFBSW1ELEtBQUosQ0FBVyxvQkFBbUJyQyxPQUFRLEVBQXRDLENBQU47QUF4Q0o7QUEwQ0Q7O0FBeFFrQjs7O2VBNFFOakMsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuY2xhc3MgUmVtb3RlTWVzc2FnZXMge1xuICBjb25zdHJ1Y3RvciAoaXNUYXJnZXRCYXNlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5pc1RhcmdldEJhc2VkID0gaXNUYXJnZXRCYXNlZDtcbiAgfVxuXG4gIHNldENvbW11bmljYXRpb25Qcm90b2NvbCAoaXNUYXJnZXRCYXNlZCkge1xuICAgIHRoaXMuaXNUYXJnZXRCYXNlZCA9IGlzVGFyZ2V0QmFzZWQ7XG4gIH1cblxuICAvKlxuICAgKiBDb25uZWN0aW9uIGZ1bmN0aW9uc1xuICAgKi9cblxuICBzZXRDb25uZWN0aW9uS2V5IChjb25uSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hcmd1bWVudDoge1xuICAgICAgICBXSVJDb25uZWN0aW9uSWRlbnRpZmllcktleTogY29ubklkXG4gICAgICB9LFxuICAgICAgX19zZWxlY3RvcjogJ19ycGNfcmVwb3J0SWRlbnRpZmllcjonXG4gICAgfTtcbiAgfVxuXG4gIGNvbm5lY3RUb0FwcCAoY29ubklkLCBhcHBJZEtleSkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2FyZ3VtZW50OiB7XG4gICAgICAgIFdJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5OiBjb25uSWQsXG4gICAgICAgIFdJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTogYXBwSWRLZXlcbiAgICAgIH0sXG4gICAgICBfX3NlbGVjdG9yOiAnX3JwY19mb3J3YXJkR2V0TGlzdGluZzonXG4gICAgfTtcbiAgfVxuXG4gIHNldFNlbmRlcktleSAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2FyZ3VtZW50OiB7XG4gICAgICAgIFdJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTogYXBwSWRLZXksXG4gICAgICAgIFdJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5OiBjb25uSWQsXG4gICAgICAgIFdJUlNlbmRlcktleTogc2VuZGVySWQsXG4gICAgICAgIFdJUlBhZ2VJZGVudGlmaWVyS2V5OiBwYWdlSWRLZXksXG4gICAgICAgIFdJUkF1dG9tYXRpY2FsbHlQYXVzZTogZmFsc2VcbiAgICAgIH0sXG4gICAgICBfX3NlbGVjdG9yOiAnX3JwY19mb3J3YXJkU29ja2V0U2V0dXA6J1xuICAgIH07XG4gIH1cblxuICBpbmRpY2F0ZVdlYlZpZXcgKGNvbm5JZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cykge1xuICAgIGNvbnN0IHtlbmFibGVkfSA9IG9wdHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXJndW1lbnQ6IHtcbiAgICAgICAgV0lSQXBwbGljYXRpb25JZGVudGlmaWVyS2V5OiBhcHBJZEtleSxcbiAgICAgICAgV0lSSW5kaWNhdGVFbmFibGVkS2V5OiBfLmlzVW5kZWZpbmVkKGVuYWJsZWQpID8gdHJ1ZSA6IGVuYWJsZWQsXG4gICAgICAgIFdJUkNvbm5lY3Rpb25JZGVudGlmaWVyS2V5OiBjb25uSWQsXG4gICAgICAgIFdJUlBhZ2VJZGVudGlmaWVyS2V5OiBwYWdlSWRLZXlcbiAgICAgIH0sXG4gICAgICBfX3NlbGVjdG9yOiAnX3JwY19mb3J3YXJkSW5kaWNhdGVXZWJWaWV3OidcbiAgICB9O1xuICB9XG5cbiAgbGF1bmNoQXBwbGljYXRpb24gKGJ1bmRsZUlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXJndW1lbnQ6IHtcbiAgICAgICAgV0lSQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5OiBidW5kbGVJZFxuICAgICAgfSxcbiAgICAgIF9fc2VsZWN0b3I6ICdfcnBjX3JlcXVlc3RBcHBsaWNhdGlvbkxhdW5jaDonXG4gICAgfTtcbiAgfVxuXG4gIC8qXG4gICAqIEFjdGlvbiBmdW5jdGlvbnNcbiAgICovXG5cbiAgZ2V0RnVsbENvbW1hbmQgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKSB7XG4gICAgY29uc3QgW3JlYWxNZXRob2QsIHJlYWxQYXJhbXNdID0gdGhpcy5pc1RhcmdldEJhc2VkXG4gICAgICA/IFsnVGFyZ2V0LnNlbmRNZXNzYWdlVG9UYXJnZXQnLCB7bWVzc2FnZToge21ldGhvZCwgcGFyYW1zfX1dXG4gICAgICA6IFttZXRob2QsIHBhcmFtc107XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZChyZWFsTWV0aG9kLCByZWFsUGFyYW1zLCBhcHBJZEtleSwgY29ubklkLCBzZW5kZXJJZCwgcGFnZUlkS2V5KTtcbiAgfVxuXG4gIHNlbmRKU0NvbW1hbmQgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdSdW50aW1lLmV2YWx1YXRlJztcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBleHByZXNzaW9uOiBvcHRzLmNvbW1hbmQsXG4gICAgICByZXR1cm5CeVZhbHVlOiBfLmlzQm9vbGVhbihvcHRzLnJldHVybkJ5VmFsdWUpID8gb3B0cy5yZXR1cm5CeVZhbHVlIDogdHJ1ZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIGNhbGxKU0Z1bmN0aW9uIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBtZXRob2QgPSAnUnVudGltZS5jYWxsRnVuY3Rpb25Pbic7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgb2JqZWN0SWQ6IG9wdHMub2JqSWQsXG4gICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uOiBvcHRzLmZuLFxuICAgICAgYXJndW1lbnRzOiBvcHRzLmFyZ3MsXG4gICAgICByZXR1cm5CeVZhbHVlOiB0cnVlLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBzZXRVcmwgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdQYWdlLm5hdmlnYXRlJztcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICB1cmw6IG9wdHMudXJsLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgZW5hYmxlUGFnZSAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdQYWdlLmVuYWJsZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgc3RhcnRUaW1lbGluZSAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdUaW1lbGluZS5zdGFydCc7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgc3RvcFRpbWVsaW5lIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ1RpbWVsaW5lLnN0b3AnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIHN0YXJ0Q29uc29sZSAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdDb25zb2xlLmVuYWJsZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgc3RvcENvbnNvbGUgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBtZXRob2QgPSAnQ29uc29sZS5kaXNhYmxlJztcbiAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBzdGFydE5ldHdvcmsgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpIHtcbiAgICBjb25zdCBtZXRob2QgPSAnTmV0d29yay5lbmFibGUnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIHN0b3BOZXR3b3JrIChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ05ldHdvcmsuZGlzYWJsZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0Q29va2llcyAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ1BhZ2UuZ2V0Q29va2llcyc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgdXJsczogb3B0cy51cmwsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRGdWxsQ29tbWFuZChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBtZXRob2QsIHBhcmFtcyk7XG4gIH1cblxuICBkZWxldGVDb29raWUgKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdQYWdlLmRlbGV0ZUNvb2tpZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgY29va2llTmFtZTogb3B0cy5jb29raWVOYW1lLFxuICAgICAgdXJsOiBvcHRzLnVybCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIGdhcmJhZ2VDb2xsZWN0IChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KSB7XG4gICAgY29uc3QgbWV0aG9kID0gJ0hlYXAuZ2MnO1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIHJldHVybiB0aGlzLmdldEZ1bGxDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG1ldGhvZCwgcGFyYW1zKTtcbiAgfVxuXG4gIGF3YWl0UHJvbWlzZSAoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgb3B0cykge1xuICAgIGNvbnN0IG1ldGhvZCA9ICdSdW50aW1lLmF3YWl0UHJvbWlzZSc7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgcHJvbWlzZU9iamVjdElkOiBvcHRzLnByb21pc2VPYmplY3RJZCxcbiAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsXG4gICAgICBnZW5lcmF0ZVByZXZpZXc6IHRydWUsXG4gICAgICBzYXZlUmVzdWx0OiB0cnVlLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0RnVsbENvbW1hbmQoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSwgbWV0aG9kLCBwYXJhbXMpO1xuICB9XG5cblxuICAvKlxuICAgKiBJbnRlcm5hbCBmdW5jdGlvbnNcbiAgICovXG5cbiAgY29tbWFuZCAobWV0aG9kLCBwYXJhbXMsIGFwcElkS2V5LCBjb25uSWQsIHNlbmRlcklkLCBwYWdlSWRLZXkpIHtcbiAgICBsZXQgcGxpc3QgPSB7XG4gICAgICBfX2FyZ3VtZW50OiB7XG4gICAgICAgIFdJUkFwcGxpY2F0aW9uSWRlbnRpZmllcktleTogYXBwSWRLZXksXG4gICAgICAgIFdJUlNvY2tldERhdGFLZXk6IHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBvYmplY3RHcm91cDogJ2NvbnNvbGUnLFxuICAgICAgICAgICAgaW5jbHVkZUNvbW1hbmRMaW5lQVBJOiB0cnVlLFxuICAgICAgICAgICAgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgV0lSQ29ubmVjdGlvbklkZW50aWZpZXJLZXk6IGNvbm5JZCxcbiAgICAgICAgV0lSU2VuZGVyS2V5OiBzZW5kZXJJZCxcbiAgICAgICAgV0lSUGFnZUlkZW50aWZpZXJLZXk6IHBhZ2VJZEtleSxcbiAgICAgICAgV0lSQXV0b21hdGljYWxseVBhdXNlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIF9fc2VsZWN0b3I6ICdfcnBjX2ZvcndhcmRTb2NrZXREYXRhOidcbiAgICB9O1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIHBsaXN0Ll9fYXJndW1lbnQuV0lSU29ja2V0RGF0YUtleS5wYXJhbXMgPVxuICAgICAgICBfLmV4dGVuZChwbGlzdC5fX2FyZ3VtZW50LldJUlNvY2tldERhdGFLZXkucGFyYW1zLCBwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gcGxpc3Q7XG4gIH1cblxuICBnZXRSZW1vdGVDb21tYW5kIChjb21tYW5kLCBvcHRzKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29ubklkLFxuICAgICAgYXBwSWRLZXksXG4gICAgICBzZW5kZXJJZCxcbiAgICAgIHBhZ2VJZEtleSxcbiAgICB9ID0gb3B0cztcblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAnc2V0Q29ubmVjdGlvbktleSc6XG4gICAgICAgIHJldHVybiB0aGlzLnNldENvbm5lY3Rpb25LZXkoY29ubklkKTtcbiAgICAgIGNhc2UgJ2xhdW5jaEFwcGxpY2F0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubGF1bmNoQXBwbGljYXRpb24ob3B0cy5idW5kbGVJZCk7XG4gICAgICBjYXNlICdjb25uZWN0VG9BcHAnOlxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9BcHAoY29ubklkLCBhcHBJZEtleSk7XG4gICAgICBjYXNlICdzZXRTZW5kZXJLZXknOlxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTZW5kZXJLZXkoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdpbmRpY2F0ZVdlYlZpZXcnOlxuICAgICAgICByZXR1cm4gdGhpcy5pbmRpY2F0ZVdlYlZpZXcoY29ubklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzKTtcbiAgICAgIGNhc2UgJ3NlbmRKU0NvbW1hbmQnOlxuICAgICAgICByZXR1cm4gdGhpcy5zZW5kSlNDb21tYW5kKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMpO1xuICAgICAgY2FzZSAnY2FsbEpTRnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsSlNGdW5jdGlvbihjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzKTtcbiAgICAgIGNhc2UgJ3NldFVybCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNldFVybChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzKTtcbiAgICAgIGNhc2UgJ2VuYWJsZVBhZ2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVQYWdlKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgY2FzZSAnc3RhcnRUaW1lbGluZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0VGltZWxpbmUoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdzdG9wVGltZWxpbmUnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdG9wVGltZWxpbmUoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdzdGFydENvbnNvbGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydENvbnNvbGUoY29ubklkLCBzZW5kZXJJZCwgYXBwSWRLZXksIHBhZ2VJZEtleSk7XG4gICAgICBjYXNlICdzdG9wQ29uc29sZSc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3BDb25zb2xlKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgY2FzZSAnc3RhcnROZXR3b3JrJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnROZXR3b3JrKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXkpO1xuICAgICAgY2FzZSAnc3RvcE5ldHdvcmsnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdG9wTmV0d29yayhjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgIGNhc2UgJ2dldENvb2tpZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb29raWVzKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMpO1xuICAgICAgY2FzZSAnZGVsZXRlQ29va2llJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ29va2llKGNvbm5JZCwgc2VuZGVySWQsIGFwcElkS2V5LCBwYWdlSWRLZXksIG9wdHMpO1xuICAgICAgY2FzZSAnZ2FyYmFnZUNvbGxlY3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5nYXJiYWdlQ29sbGVjdChjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5KTtcbiAgICAgIGNhc2UgJ2F3YWl0UHJvbWlzZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmF3YWl0UHJvbWlzZShjb25uSWQsIHNlbmRlcklkLCBhcHBJZEtleSwgcGFnZUlkS2V5LCBvcHRzKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFJlbW90ZU1lc3NhZ2VzIH07XG5leHBvcnQgZGVmYXVsdCBSZW1vdGVNZXNzYWdlcztcbiJdLCJmaWxlIjoibGliL3JlbW90ZS1tZXNzYWdlcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|