appium-chromedriver 5.2.6 → 5.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/lib/chromedriver.js +9 -9
- package/build/lib/chromedriver.js.map +1 -1
- package/build/lib/install.js +2 -2
- package/build/lib/install.js.map +1 -1
- package/build/lib/protocol-helpers.js +3 -3
- package/build/lib/protocol-helpers.js.map +1 -1
- package/build/lib/storage-client.js +2 -2
- package/build/lib/storage-client.js.map +1 -1
- package/build/lib/utils.js +4 -23
- package/build/lib/utils.js.map +1 -1
- package/lib/chromedriver.js +2 -2
- package/lib/install.js +1 -1
- package/lib/protocol-helpers.js +1 -1
- package/lib/storage-client.js +1 -1
- package/lib/utils.js +2 -22
- package/package.json +3 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = exports.Chromedriver = void 0;
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
var _events = _interopRequireDefault(require("events"));
|
|
10
|
-
var
|
|
10
|
+
var _baseDriver = require("@appium/base-driver");
|
|
11
11
|
var _child_process = _interopRequireDefault(require("child_process"));
|
|
12
|
-
var _support = require("appium/support");
|
|
12
|
+
var _support = require("@appium/support");
|
|
13
13
|
var _asyncbox = require("asyncbox");
|
|
14
14
|
var _teen_process = require("teen_process");
|
|
15
15
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
@@ -62,7 +62,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
62
62
|
this.bundleId = bundleId;
|
|
63
63
|
this.executableVerified = false;
|
|
64
64
|
this.state = Chromedriver.STATE_STOPPED;
|
|
65
|
-
this.jwproxy = new
|
|
65
|
+
this.jwproxy = new _baseDriver.JWProxy({
|
|
66
66
|
server: this.proxyHost,
|
|
67
67
|
port: this.proxyPort,
|
|
68
68
|
log: this._log
|
|
@@ -75,7 +75,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
75
75
|
}) : null;
|
|
76
76
|
this.details = details;
|
|
77
77
|
this.capabilities = {};
|
|
78
|
-
this.desiredProtocol =
|
|
78
|
+
this.desiredProtocol = _baseDriver.PROTOCOLS.MJSONWP;
|
|
79
79
|
}
|
|
80
80
|
get log() {
|
|
81
81
|
return this._log;
|
|
@@ -370,15 +370,15 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
370
370
|
syncProtocol(cdVersion = null) {
|
|
371
371
|
const coercedVersion = _semver.default.coerce(cdVersion);
|
|
372
372
|
if (!coercedVersion || coercedVersion.major < MIN_CD_VERSION_WITH_W3C_SUPPORT) {
|
|
373
|
-
this.log.debug(`Chromedriver v. ${cdVersion} does not fully support ${
|
|
373
|
+
this.log.debug(`Chromedriver v. ${cdVersion} does not fully support ${_baseDriver.PROTOCOLS.W3C} protocol. ` + `Defaulting to ${_baseDriver.PROTOCOLS.MJSONWP}`);
|
|
374
374
|
return;
|
|
375
375
|
}
|
|
376
376
|
const chromeOptions = (0, _protocolHelpers.getCapValue)(this.capabilities, 'chromeOptions', {});
|
|
377
377
|
if (chromeOptions.w3c === false) {
|
|
378
|
-
this.log.info(`Chromedriver v. ${cdVersion} supports ${
|
|
378
|
+
this.log.info(`Chromedriver v. ${cdVersion} supports ${_baseDriver.PROTOCOLS.W3C} protocol, ` + `but ${_baseDriver.PROTOCOLS.MJSONWP} one has been explicitly requested`);
|
|
379
379
|
return;
|
|
380
380
|
}
|
|
381
|
-
this.desiredProtocol =
|
|
381
|
+
this.desiredProtocol = _baseDriver.PROTOCOLS.W3C;
|
|
382
382
|
this.capabilities = (0, _protocolHelpers.toW3cCapNames)(this.capabilities);
|
|
383
383
|
}
|
|
384
384
|
async start(caps, emitStartingState = true) {
|
|
@@ -505,7 +505,7 @@ class Chromedriver extends _events.default.EventEmitter {
|
|
|
505
505
|
return await this.jwproxy.command('/status', 'GET');
|
|
506
506
|
}
|
|
507
507
|
async startSession() {
|
|
508
|
-
const sessionCaps = this.desiredProtocol ===
|
|
508
|
+
const sessionCaps = this.desiredProtocol === _baseDriver.PROTOCOLS.W3C ? {
|
|
509
509
|
capabilities: {
|
|
510
510
|
alwaysMatch: this.capabilities
|
|
511
511
|
}
|
|
@@ -600,4 +600,4 @@ Chromedriver.STATE_STOPPING = 'stopping';
|
|
|
600
600
|
Chromedriver.STATE_RESTARTING = 'restarting';
|
|
601
601
|
var _default = Chromedriver;
|
|
602
602
|
exports.default = _default;
|
|
603
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiIsIkRFRkFVTFRfSE9TVCIsIk1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQiLCJERUZBVUxUX1BPUlQiLCJDSFJPTUVfQlVORExFX0lEIiwiV0VCVklFV19TSEVMTF9CVU5ETEVfSUQiLCJXRUJWSUVXX0JVTkRMRV9JRFMiLCJWRVJTSU9OX1BBVFRFUk4iLCJDRF9WRVJTSU9OX1RJTUVPVVQiLCJDaHJvbWVkcml2ZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJob3N0IiwicG9ydCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIiwiZXhlY3V0YWJsZURpciIsImdldENocm9tZWRyaXZlckRpciIsImJ1bmRsZUlkIiwibWFwcGluZ1BhdGgiLCJjbWRBcmdzIiwiYWRiIiwidmVyYm9zZSIsImxvZ1BhdGgiLCJkaXNhYmxlQnVpbGRDaGVjayIsImRldGFpbHMiLCJpc0F1dG9kb3dubG9hZEVuYWJsZWQiLCJfbG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJhc3luY21hcCIsImxvZ0Vycm9yIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXJyTXNnIiwicGF0aCIsImJhc2VuYW1lIiwiZXhlYyIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwibWluQ2hyb21lVmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJmaWx0ZXIiLCJjZCIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmVWZXJzaW9ucyIsImlzRW1wdHkiLCJnZXRDaHJvbWVWZXJzaW9uIiwiQnJvd3NlciIsInZlcnNpb25NYXRjaCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJ1cGRhdGVEcml2ZXJzTWFwcGluZyIsIm5ld01hcHBpbmciLCJzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiZSIsIk9iamVjdCIsImFzc2lnbiIsImdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwiZ2V0Q2FwVmFsdWUiLCJ3M2MiLCJ0b1czY0NhcE5hbWVzIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwicmV0cnlJbnRlcnZhbCIsImdldFN0YXR1cyIsImNvbW1hbmQiLCJzZXNzaW9uQ2FwcyIsImFsd2F5c01hdGNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInByZWZpeCIsImVtaXRTdGF0ZXMiLCJydW5TYWZlU3RlcCIsImYiLCJFVkVOVF9DSEFOR0VEIiwic2VuZENvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwicHJveHlSZXEiLCJyZXEiLCJyZXMiLCJwcm94eVJlcVJlcyIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsIkIiLCJwcm9taXNpZnkiLCJjcCIsInVkaWRJbmRleCIsImRlZmF1bHRBcmdzIiwiZmluZEluZGV4IiwiaXRlbSIsInVkaWQiLCJjb25uIiwiZ2V0Rm9yd2FyZExpc3QiLCJwYXJhbXMiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsInJlcGxhY2UiLCJoYXNXb3JraW5nV2VidmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaHJvbWVkcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgSldQcm94eSwgUFJPVE9DT0xTIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtcbiAgZ2V0Q2hyb21lVmVyc2lvbiwgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsXG4gIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIENEX0NETiwgZ2VuZXJhdGVMb2dQcmVmaXhcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IGZyb20gJy4vc3RvcmFnZS1jbGllbnQnO1xuaW1wb3J0IHsgdG9XM2NDYXBOYW1lcywgZ2V0Q2FwVmFsdWUgfSBmcm9tICcuL3Byb3RvY29sLWhlbHBlcnMnO1xuXG5jb25zdCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiA9IDczO1xuY29uc3QgREVGQVVMVF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUID0gNzU7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA5NTE1O1xuY29uc3QgQ0hST01FX0JVTkRMRV9JRCA9ICdjb20uYW5kcm9pZC5jaHJvbWUnO1xuY29uc3QgV0VCVklFV19TSEVMTF9CVU5ETEVfSUQgPSAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnO1xuY29uc3QgV0VCVklFV19CVU5ETEVfSURTID0gW1xuICAnY29tLmdvb2dsZS5hbmRyb2lkLndlYnZpZXcnLFxuICAnY29tLmFuZHJvaWQud2VidmlldycsXG5dO1xuY29uc3QgVkVSU0lPTl9QQVRURVJOID0gLyhbXFxkLl0rKS87XG5cbmNvbnN0IENEX1ZFUlNJT05fVElNRU9VVCA9IDUwMDA7XG5cbmNsYXNzIENocm9tZWRyaXZlciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGhvc3QgPSBERUZBVUxUX0hPU1QsXG4gICAgICBwb3J0ID0gREVGQVVMVF9QT1JULFxuICAgICAgdXNlU3lzdGVtRXhlY3V0YWJsZSA9IGZhbHNlLFxuICAgICAgZXhlY3V0YWJsZSxcbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIGJ1bmRsZUlkLFxuICAgICAgbWFwcGluZ1BhdGgsXG4gICAgICBjbWRBcmdzLFxuICAgICAgYWRiLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIGxvZ1BhdGgsXG4gICAgICBkaXNhYmxlQnVpbGRDaGVjayxcbiAgICAgIGRldGFpbHMsXG4gICAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQgPSBmYWxzZSxcbiAgICB9ID0gYXJncztcbiAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKGdlbmVyYXRlTG9nUHJlZml4KHRoaXMpKTtcblxuICAgIHRoaXMucHJveHlIb3N0ID0gaG9zdDtcbiAgICB0aGlzLnByb3h5UG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy5jbWRBcmdzID0gY21kQXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMudXNlU3lzdGVtRXhlY3V0YWJsZSA9IHVzZVN5c3RlbUV4ZWN1dGFibGU7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBleGVjdXRhYmxlO1xuICAgIHRoaXMuZXhlY3V0YWJsZURpciA9IGV4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5tYXBwaW5nUGF0aCA9IG1hcHBpbmdQYXRoO1xuICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICB0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUgPSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRDtcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMucHJveHlIb3N0LFxuICAgICAgcG9ydDogdGhpcy5wcm94eVBvcnQsXG4gICAgICBsb2c6IHRoaXMuX2xvZyxcbiAgICB9KTtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlO1xuICAgIHRoaXMubG9nUGF0aCA9IGxvZ1BhdGg7XG4gICAgdGhpcy5kaXNhYmxlQnVpbGRDaGVjayA9ICEhZGlzYWJsZUJ1aWxkQ2hlY2s7XG4gICAgdGhpcy5zdG9yYWdlQ2xpZW50ID0gaXNBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHsgY2hyb21lZHJpdmVyRGlyOiB0aGlzLmV4ZWN1dGFibGVEaXIgfSlcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0ge307XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGdldCBsb2cgKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICBhc3luYyBnZXREcml2ZXJzTWFwcGluZyAoKSB7XG4gICAgbGV0IG1hcHBpbmcgPSBfLmNsb25lRGVlcChDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcpO1xuICAgIGlmICh0aGlzLm1hcHBpbmdQYXRoKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byB1c2UgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5tYXBwaW5nUGF0aCkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgTm8gZmlsZSBmb3VuZCBhdCAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWFwcGluZyA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUodGhpcy5tYXBwaW5nUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHBhcnNpbmcgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKCdEZWZhdWx0aW5nIHRvIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdVc2luZyB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGZvciBtaW5pbXVtIGNocm9tZSB2ZXJzaW9uIGFyZSBzZW12ZXIgY29tcGxpYW50XG4gICAgZm9yIChjb25zdCBbY2RWZXJzaW9uLCBjaHJvbWVWZXJzaW9uXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICBtYXBwaW5nW2NkVmVyc2lvbl0gPSBjb2VyY2VkVmVyc2lvbi52ZXJzaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7Y2hyb21lVmVyc2lvbn0nIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBTa2lwcGluZyBpdGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZWRyaXZlcnMgKG1hcHBpbmcpIHtcbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB2ZXJzaW9ucyBhdmFpbGFibGVcbiAgICBjb25zdCBleGVjdXRhYmxlcyA9IGF3YWl0IGZzLmdsb2IoJyonLCB7XG4gICAgICBjd2Q6IHRoaXMuZXhlY3V0YWJsZURpcixcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBub2RpcjogdHJ1ZSxcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgZXhlY3V0YWJsZXMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICBgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICBjb25zdCBjZHMgPSAoYXdhaXQgYXN5bmNtYXAoZXhlY3V0YWJsZXMsIGFzeW5jIChleGVjdXRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBsb2dFcnJvciA9ICh7bWVzc2FnZSwgc3Rkb3V0ID0gbnVsbCwgc3RkZXJyID0gbnVsbH0pID0+IHtcbiAgICAgICAgbGV0IGVyck1zZyA9IGBDYW5ub3QgcmV0cmlldmUgdmVyc2lvbiBudW1iZXIgZnJvbSAnJHtwYXRoLmJhc2VuYW1lKGV4ZWN1dGFibGUpfScgQ2hyb21lZHJpdmVyIGJpbmFyeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCByZXR1cm5zIGEgdmFsaWQgdmVyc2lvbiBzdHJpbmcgaW4gcmVzcG9uc2UgdG8gJy0tdmVyc2lvbicgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAke21lc3NhZ2V9YDtcbiAgICAgICAgaWYgKHN0ZG91dCkge1xuICAgICAgICAgIGVyck1zZyArPSBgXFxuU3Rkb3V0OiAke3N0ZG91dH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZGVycjogJHtzdGRlcnJ9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZy53YXJuKGVyck1zZyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgbGV0IHN0ZG91dDtcbiAgICAgIGxldCBzdGRlcnI7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IGV4ZWMoZXhlY3V0YWJsZSwgWyctLXZlcnNpb24nXSwge1xuICAgICAgICAgIHRpbWVvdXQ6IENEX1ZFUlNJT05fVElNRU9VVCxcbiAgICAgICAgfSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghKGVyci5tZXNzYWdlIHx8ICcnKS5pbmNsdWRlcygndGltZWQgb3V0JykgJiYgIShlcnIuc3Rkb3V0IHx8ICcnKS5pbmNsdWRlcygnU3RhcnRpbmcgQ2hyb21lRHJpdmVyJykpIHtcbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoaXMgaGFzIHRpbWVkIG91dCwgaXQgaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgQ2hyb21lZHJpdmVyLFxuICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHRoZXJlIHdpbGwgYWxzbyBiZSB0aGUgdmVyc2lvbiBzdHJpbmcgaW4gdGhlIG91dHB1dFxuICAgICAgICBzdGRvdXQgPSBlcnIuc3Rkb3V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaCA9IC9DaHJvbWVEcml2ZXJcXHMrXFwoP3Y/KFtcXGQuXSspXFwpPy9pLmV4ZWMoc3Rkb3V0KTsgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci96cGo1d0EvMVxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe21lc3NhZ2U6ICdDYW5ub3QgcGFyc2UgdGhlIHZlcnNpb24gc3RyaW5nJywgc3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICAgIH1cbiAgICAgIGxldCB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICBsZXQgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UodmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgLy8gYmVmb3JlIDIwMTktMDMtMDYgdmVyc2lvbnMgd2VyZSBvZiB0aGUgZm9ybSBtYWpvci5taW5vclxuICAgICAgICBpZiAoY29lcmNlZFZlcnNpb24ubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIHZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn0uJHtjb2VyY2VkVmVyc2lvbi5taW5vcn1gO1xuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvbiAmJiBjb2VyY2VkVmVyc2lvbi5tYWpvciA+PSBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIC8vIEFzc3VtZSB0aGUgbWFqb3IgQ2hyb21lIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ham9yIHZlcnNpb25cbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhlY3V0YWJsZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgbWluQ2hyb21lVmVyc2lvbixcbiAgICAgIH07XG4gICAgfSkpXG4gICAgICAuZmlsdGVyKChjZCkgPT4gISFjZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBjb21wYXJlVmVyc2lvbnMoYi52ZXJzaW9uLCBhLnZlcnNpb24pKTtcbiAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYE5vIENocm9tZWRyaXZlcnMgd2VyZSBmb3VuZCBpbiAnJHt0aGlzLmV4ZWN1dGFibGVEaXJ9J2ApO1xuICAgICAgcmV0dXJuIGNkcztcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGVzIHdlcmUgZm91bmQ6YCk7XG4gICAgZm9yIChjb25zdCBjZCBvZiBjZHMpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAgICAgJyR7Y2QuZXhlY3V0YWJsZX0nICh2ZXJzaW9uICcke2NkLnZlcnNpb259JywgbWluaW11bSBDaHJvbWUgdmVyc2lvbiAnJHtjZC5taW5DaHJvbWVWZXJzaW9uID8gY2QubWluQ2hyb21lVmVyc2lvbiA6ICdVbmtub3duJ30nKWApO1xuICAgIH1cbiAgICByZXR1cm4gY2RzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hyb21lVmVyc2lvbiAoKSB7XG4gICAgLy8gVHJ5IHRvIHJldHJpZXZlIHRoZSB2ZXJzaW9uIGZyb20gYGRldGFpbHNgIHByb3BlcnR5IGlmIGl0IGlzIHNldFxuICAgIC8vIFRoZSBgaW5mb2AgaXRlbSBtdXN0IGNvbnRhaW4gdGhlIG91dHB1dCBvZiAvanNvbi92ZXJzaW9uIENEUCBjb21tYW5kXG4gICAgLy8gd2hlcmUgYEJyb3dzZXJgIGZpZWxkIGxvb2tzIGxpa2UgYENocm9tZS83Mi4wLjM2MDEuMGBgXG4gICAgaWYgKHRoaXMuZGV0YWlscz8uaW5mbykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEJyb3dzZXIgdmVyc2lvbiBpbiB0aGUgc3VwcGxpZWQgZGV0YWlsczogJHt0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IFZFUlNJT05fUEFUVEVSTi5leGVjKHRoaXMuZGV0YWlscz8uaW5mbz8uQnJvd3Nlcik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb25NYXRjaFsxXSk7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvZXJjZWRWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjaHJvbWVWZXJzaW9uO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyLCBzaW1wbHkgdHJ5IHRvIGZpbmQgdGhlIHVuZGVybHlpbmcgd2Vidmlld1xuICAgIGlmICh0aGlzLmJ1bmRsZUlkID09PSBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCkge1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgcmV0dXJuIHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIG9uIEFuZHJvaWQgNy05IHdlYnZpZXdzIGFyZSBiYWNrZWQgYnkgdGhlIG1haW4gQ2hyb21lLCBub3QgdGhlIHN5c3RlbSB3ZWJ2aWV3XG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gICAgICBpZiAoYXBpTGV2ZWwgPj0gMjQgJiYgYXBpTGV2ZWwgPD0gMjggJiZcbiAgICAgICAgICBbV0VCVklFV19TSEVMTF9CVU5ETEVfSUQsIC4uLldFQlZJRVdfQlVORExFX0lEU10uaW5jbHVkZXModGhpcy5idW5kbGVJZCkpIHtcbiAgICAgICAgdGhpcy5idW5kbGVJZCA9IENIUk9NRV9CVU5ETEVfSUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJ5IG91dCB3ZWJ2aWV3cyB3aGVuIG5vIGJ1bmRsZSBpZCBpcyBzZW50IGluXG4gICAgaWYgKCF0aGlzLmJ1bmRsZUlkKSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBnZW5lcmljIENocm9tZSBidW5kbGVcbiAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuXG4gICAgICAvLyB3ZSBoYXZlIGEgd2VidmlldyBvZiBzb21lIHNvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBidW5kbGUgdmVyc2lvblxuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNocm9tZSB2ZXJzaW9uLCBpdCBtdXN0IG5vdCBiZSBhIHdlYnZpZXdcbiAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCB0aGlzLmJ1bmRsZUlkKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgaXQgaXMgc2VtdmVyLCBzbyBsYXRlciBjaGVja3Mgd29uJ3QgZmFpbFxuICAgIHJldHVybiBjaHJvbWVWZXJzaW9uID8gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKSA6IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEcml2ZXJzTWFwcGluZyAobmV3TWFwcGluZykge1xuICAgIGxldCBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gdHJ1ZTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5tYXBwaW5nUGF0aCwgSlNPTi5zdHJpbmdpZnkobmV3TWFwcGluZywgbnVsbCwgMiksICd1dGY4Jyk7XG4gICAgICAgIHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN0b3JlIHRoZSB1cGRhdGVkIGNocm9tZWRyaXZlcnMgbWFwcGluZyBpbnRvICcke3RoaXMubWFwcGluZ1BhdGh9Jy4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IHJlZHVjZSB0aGUgcGVyZm9ybWFuY2Ugb2YgZnVydGhlciBleGVjdXRpb25zLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORywgbmV3TWFwcGluZyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlciAoKSB7XG4gICAgaWYgKCF0aGlzLmFkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gYXdhaXQgdGhpcy5nZXREcml2ZXJzTWFwcGluZygpO1xuICAgIGlmICghXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIG1vc3QgcmVjZW50IGtub3duIENocm9tZSB2ZXJzaW9uOiAke18udmFsdWVzKG1hcHBpbmcpWzBdfWApO1xuICAgIH1cblxuICAgIGxldCBkaWRTdG9yYWdlU3luYyA9IGZhbHNlO1xuICAgIGNvbnN0IHN5bmNDaHJvbWVkcml2ZXJzID0gYXN5bmMgKGNocm9tZVZlcnNpb24pID0+IHtcbiAgICAgIGRpZFN0b3JhZ2VTeW5jID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJldHJpZXZlZE1hcHBpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQucmV0cmlldmVNYXBwaW5nKCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnR290IGNocm9tZWRyaXZlcnMgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlOiAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocmV0cmlldmVkTWFwcGluZywgbnVsbCwgMikpO1xuICAgICAgY29uc3QgZHJpdmVyS2V5cyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5zeW5jRHJpdmVycyh7XG4gICAgICAgIG1pbkJyb3dzZXJWZXJzaW9uOiBjaHJvbWVWZXJzaW9uLm1ham9yLFxuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcktleXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nID0gZHJpdmVyS2V5cy5yZWR1Y2UoKGFjYywgeCkgPT4ge1xuICAgICAgICBjb25zdCB7dmVyc2lvbiwgbWluQnJvd3NlclZlcnNpb259ID0gcmV0cmlldmVkTWFwcGluZ1t4XTtcbiAgICAgICAgYWNjW3ZlcnNpb25dID0gbWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKG1hcHBpbmcsIHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcobWFwcGluZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgY2RzID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVkcml2ZXJzKG1hcHBpbmcpO1xuXG4gICAgICBjb25zdCBtaXNzaW5nVmVyc2lvbnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qge3ZlcnNpb24sIG1pbkNocm9tZVZlcnNpb259IG9mIGNkcykge1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gfHwgbWFwcGluZ1t2ZXJzaW9uXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZXJjZWRWZXIgPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgICBpZiAoIWNvZXJjZWRWZXIgfHwgY29lcmNlZFZlci5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBtaXNzaW5nVmVyc2lvbnNbdmVyc2lvbl0gPSBtaW5DaHJvbWVWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ1ZlcnNpb25zKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdDaHJvbWVkcml2ZXInLCBfLnNpemUobWlzc2luZ1ZlcnNpb25zKSwgdHJ1ZSl9LCBgICtcbiAgICAgICAgICBgd2hpY2ggJHtfLnNpemUobWlzc2luZ1ZlcnNpb25zKSA9PT0gMSA/ICdpcycgOiAnYXJlJ30gbWlzc2luZyBpbiB0aGUgbGlzdCBvZiBrbm93biB2ZXJzaW9uczogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcoT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBtaXNzaW5nVmVyc2lvbnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IGlzIHNldCB0byAndHJ1ZSdgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENocm9tZSBidWlsZCBjaGVjayBkaXNhYmxlZC4gVXNpbmcgbW9zdCByZWNlbnQgQ2hyb21lZHJpdmVyIHZlcnNpb24gKCR7dmVyc2lvbn0sIGF0ICcke2V4ZWN1dGFibGV9JylgKTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgSWYgdGhpcyBpcyB3cm9uZywgc2V0ICdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSB0byAnZmFsc2UnYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaHJvbWVWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVWZXJzaW9uKCk7XG4gICAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgLy8gdW5hYmxlIHRvIGdldCB0aGUgY2hyb21lIHZlcnNpb25cbiAgICAgICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgdGhlIGN1cnJlbnQgQ2hyb21lIHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBkaXNjb3ZlciBDaHJvbWUgdmVyc2lvbi4gVXNpbmcgQ2hyb21lZHJpdmVyICR7dmVyc2lvbn0gYXQgJyR7ZXhlY3V0YWJsZX0nYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIENocm9tZSBidW5kbGUgJyR7dGhpcy5idW5kbGVJZH0nIHZlcnNpb24gJyR7Y2hyb21lVmVyc2lvbn0nYCk7XG5cbiAgICAgIGNvbnN0IG1hdGNoaW5nRHJpdmVycyA9IGNkcy5maWx0ZXIoKHttaW5DaHJvbWVWZXJzaW9ufSkgPT4ge1xuICAgICAgICBjb25zdCBtaW5DaHJvbWVWZXJzaW9uUyA9IG1pbkNocm9tZVZlcnNpb24gJiYgc2VtdmVyLmNvZXJjZShtaW5DaHJvbWVWZXJzaW9uKTtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uUykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaHJvbWVWZXJzaW9uLm1ham9yID4gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT05cbiAgICAgICAgICA/IG1pbkNocm9tZVZlcnNpb25TLm1ham9yID09PSBjaHJvbWVWZXJzaW9uLm1ham9yXG4gICAgICAgICAgOiBzZW12ZXIuZ3RlKGNocm9tZVZlcnNpb24sIG1pbkNocm9tZVZlcnNpb25TKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShtYXRjaGluZ0RyaXZlcnMpKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JhZ2VDbGllbnQgJiYgIWRpZFN0b3JhZ2VTeW5jKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBzeW5jQ2hyb21lZHJpdmVycyhjaHJvbWVWZXJzaW9uKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3Qgc3luY2hyb25pemUgbG9jYWwgY2hyb21lZHJpdmVycyB3aXRoIHRoZSByZW1vdGUgc3RvcmFnZSBhdCAke0NEX0NETn06IGAgK1xuICAgICAgICAgICAgICBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF1dG9kb3dubG9hZFN1Z2dlc3Rpb24gPVxuICAgICAgICAgICdZb3UgY291bGQgYWxzbyB0cnkgdG8gZW5hYmxlIGF1dG9tYXRlZCBjaHJvbWVkcml2ZXJzIGRvd25sb2FkIGFzICcgK1xuICAgICAgICAgICdhIHBvc3NpYmxlIHdvcmthcm91bmQuJztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy5gICtcbiAgICAgICAgICAodGhpcy5zdG9yYWdlQ2xpZW50ID8gJycgOiBgICR7YXV0b2Rvd25sb2FkU3VnZ2VzdGlvbn1gKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJpblBhdGggPSBtYXRjaGluZ0RyaXZlcnNbMF0uZXhlY3V0YWJsZTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgbWF0Y2hpbmdEcml2ZXJzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgY2FwYWJsZSBvZiBhdXRvbWF0aW5nIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuXFxuQ2hvb3NpbmcgdGhlIG1vc3QgcmVjZW50LCAnJHtiaW5QYXRofScuYCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnSWYgYSBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVpcmVkLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBjaHJvbWVkcml2ZXJFeGVjdXRhYmxlYCcgK1xuICAgICAgICAnZGVzaXJlZCBjYXBhYmlsaXR5LicpO1xuICAgICAgcmV0dXJuIGJpblBhdGg7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgYXN5bmMgaW5pdENocm9tZWRyaXZlclBhdGggKCkge1xuICAgIGlmICh0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCkgcmV0dXJuOyAvL2VzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIC8vIHRoZSBleGVjdXRhYmxlIG1pZ2h0IGJlIHNldCAoaWYgcGFzc2VkIGluKVxuICAgIC8vIG9yIHdlIG1pZ2h0IHdhbnQgdG8gdXNlIHRoZSBiYXNpYyBvbmUgaW5zdGFsbGVkIHdpdGggdGhpcyBkcml2ZXJcbiAgICAvLyBvciB3ZSB3YW50IHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgb25lXG4gICAgaWYgKCF0aGlzLmNocm9tZWRyaXZlcikge1xuICAgICAgdGhpcy5jaHJvbWVkcml2ZXIgPSB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGVcbiAgICAgICAgPyBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHJ5aW5nIHRvIHVzZSBhIGNocm9tZWRyaXZlciBiaW5hcnkgYXQgdGhlIHBhdGggYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jaHJvbWVkcml2ZXJ9LCBidXQgaXQgZG9lc24ndCBleGlzdCFgKTtcbiAgICB9XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSB0cnVlO1xuICAgIHRoaXMubG9nLmluZm8oYFNldCBjaHJvbWVkcml2ZXIgYmluYXJ5IGFzOiAke3RoaXMuY2hyb21lZHJpdmVyfWApO1xuICB9XG5cbiAgc3luY1Byb3RvY29sIChjZFZlcnNpb24gPSBudWxsKSB7XG4gICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGNkVmVyc2lvbik7XG4gICAgaWYgKCFjb2VyY2VkVmVyc2lvbiB8fCBjb2VyY2VkVmVyc2lvbi5tYWpvciA8IE1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdi4gJHtjZFZlcnNpb259IGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbC4gYCArXG4gICAgICAgIGBEZWZhdWx0aW5nIHRvICR7UFJPVE9DT0xTLk1KU09OV1B9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNocm9tZU9wdGlvbnMgPSBnZXRDYXBWYWx1ZSh0aGlzLmNhcGFiaWxpdGllcywgJ2Nocm9tZU9wdGlvbnMnLCB7fSk7XG4gICAgaWYgKGNocm9tZU9wdGlvbnMudzNjID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBzdXBwb3J0cyAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLCBgICtcbiAgICAgICAgYGJ1dCAke1BST1RPQ09MUy5NSlNPTldQfSBvbmUgaGFzIGJlZW4gZXhwbGljaXRseSByZXF1ZXN0ZWRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICAgIC8vIGdpdmVuIGNhcHMgbWlnaHQgbm90IGJlIHByb3Blcmx5IHByZWZpeGVkXG4gICAgLy8gc28gd2UgdHJ5IHRvIGZpeCB0aGVtIGluIG9yZGVyIHRvIHByb3Blcmx5IGluaXRcbiAgICAvLyB0aGUgbmV3IFczQyBzZXNzaW9uXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0b1czY0NhcE5hbWVzKHRoaXMuY2FwYWJpbGl0aWVzKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChjYXBzLCBlbWl0U3RhcnRpbmdTdGF0ZSA9IHRydWUpIHtcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGNhcHMpO1xuXG4gICAgLy8gc2V0IHRoZSBsb2dnaW5nIHByZWZlcmVuY2VzIHRvIEFMTCB0aGUgY29uc29sZSBsb2dzXG4gICAgdGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzID0gXy5jbG9uZURlZXAoZ2V0Q2FwVmFsdWUoY2FwcywgJ2xvZ2dpbmdQcmVmcycsIHt9KSk7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlcikpIHtcbiAgICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcy5icm93c2VyID0gJ0FMTCc7XG4gICAgfVxuXG4gICAgaWYgKGVtaXRTdGFydGluZ1N0YXRlKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJncyA9IFtgLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9YF07XG4gICAgaWYgKHRoaXMuYWRiICYmIHRoaXMuYWRiLmFkYlBvcnQpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1hZGItcG9ydD0ke3RoaXMuYWRiLmFkYlBvcnR9YCk7XG4gICAgfVxuICAgIGlmIChfLmlzQXJyYXkodGhpcy5jbWRBcmdzKSkge1xuICAgICAgYXJncy5wdXNoKC4uLnRoaXMuY21kQXJncyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvZ1BhdGgpIHtcbiAgICAgIGFyZ3MucHVzaChgLS1sb2ctcGF0aD0ke3RoaXMubG9nUGF0aH1gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1kaXNhYmxlLWJ1aWxkLWNoZWNrJyk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLS12ZXJib3NlJyk7XG4gICAgLy8gd2hhdCBhcmUgdGhlIHByb2Nlc3Mgc3Rkb3V0L3N0ZGVyciBjb25kaXRpb25zIHdoZXJlaW4gd2Uga25vdyB0aGF0XG4gICAgLy8gdGhlIHByb2Nlc3MgaGFzIHN0YXJ0ZWQgdG8gb3VyIHNhdGlzZmFjdGlvbj9cbiAgICBjb25zdCBzdGFydERldGVjdG9yID0gKHN0ZG91dCkgPT4gc3Rkb3V0LnN0YXJ0c1dpdGgoJ1N0YXJ0aW5nICcpO1xuXG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgbGV0IHdlYnZpZXdWZXJzaW9uO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRDaHJvbWVkcml2ZXJQYXRoKCk7XG4gICAgICBhd2FpdCB0aGlzLmtpbGxBbGwoKTtcblxuICAgICAgLy8gc2V0IHVwIG91ciBzdWJwcm9jZXNzIG9iamVjdFxuICAgICAgdGhpcy5wcm9jID0gbmV3IFN1YlByb2Nlc3ModGhpcy5jaHJvbWVkcml2ZXIsIGFyZ3MpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuXG4gICAgICAvLyBoYW5kbGUgbG9nIG91dHB1dFxuICAgICAgdGhpcy5wcm9jLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgLy8gaWYgdGhlIGNkIG91dHB1dCBpcyBub3QgcHJpbnRlZCwgZmluZCB0aGUgY2hyb21lIHZlcnNpb24gYW5kIHByaW50XG4gICAgICAgIC8vIHdpbGwgZ2V0IGEgcmVzcG9uc2UgbGlrZVxuICAgICAgICAvLyAgIERldlRvb2xzIHJlc3BvbnNlOiB7XG4gICAgICAgIC8vICAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2FtcGxlYXBwXCIsXG4gICAgICAgIC8vICAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzU1LjAuMjg4My45MVwiLFxuICAgICAgICAvLyAgICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuMlwiLFxuICAgICAgICAvLyAgICAgIFwiVXNlci1BZ2VudFwiOiBcIi4uLlwiLFxuICAgICAgICAvLyAgICAgIFwiV2ViS2l0LVZlcnNpb25cIjogXCI1MzcuMzZcIlxuICAgICAgICAvLyAgIH1cbiAgICAgICAgY29uc3Qgb3V0ID0gc3Rkb3V0ICsgc3RkZXJyO1xuICAgICAgICBsZXQgbWF0Y2ggPSAvXCJCcm93c2VyXCI6IFwiKC4qKVwiLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHdlYnZpZXdWZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFdlYnZpZXcgdmVyc2lvbjogJyR7d2Vidmlld1ZlcnNpb259J2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxzbyBwcmludCBjaHJvbWVkcml2ZXIgdmVyc2lvbiB0byBsb2dzXG4gICAgICAgIC8vIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlXG4gICAgICAgIC8vICBTdGFydGluZyBDaHJvbWVEcml2ZXIgMi4zMy41MDYxMDYgKDhhMDZjMzljNDU4MmZiZmJhYjY5NjZkYmIxYzM4YTkxNzNiZmIxYTIpIG9uIHBvcnQgOTUxNVxuICAgICAgICBtYXRjaCA9IC9TdGFydGluZyBDaHJvbWVEcml2ZXIgKFsuXFxkXSspLy5leGVjKG91dCk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBDaHJvbWVkcml2ZXIgdmVyc2lvbjogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgICAgIHRoaXMuc3luY1Byb3RvY29sKG1hdGNoWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdpdmUgdGhlIG91dHB1dCBpZiBpdCBpcyByZXF1ZXN0ZWRcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZG91dCB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5sZW5ndGgpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgW1NURE9VVF0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRlcnIgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoYFtTVERFUlJdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBoYW5kbGUgb3V0LW9mLWJvdW5kIGV4aXQgYnkgc2ltcGx5IGVtaXR0aW5nIGEgc3RvcHBlZCBzdGF0ZVxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpIHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBgQ2hyb21lZHJpdmVyIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gO1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yKG1zZyk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgU3Bhd25pbmcgY2hyb21lZHJpdmVyIHdpdGg6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICAvLyBzdGFydCBzdWJwcm9jIGFuZCB3YWl0IGZvciBzdGFydERldGVjdG9yXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JPbmxpbmUoKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTZXNzaW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB0aGlzLmVtaXQoQ2hyb21lZHJpdmVyLkVWRU5UX0VSUk9SLCBlKTtcbiAgICAgIC8vIGp1c3QgYmVjYXVzZSB3ZSBoYWQgYW4gZXJyb3IgZG9lc24ndCBtZWFuIHRoZSBjaHJvbWVkcml2ZXIgcHJvY2Vzc1xuICAgICAgLy8gZmluaXNoZWQ7IHdlIHNob3VsZCBjbGVhbiB1cCBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChwcm9jZXNzSXNBbGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgLy8gb2Z0ZW4gdGhlIHVzZXIncyBDaHJvbWUgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB2ZXJzaW9uIG9mIENocm9tZWRyaXZlclxuICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcygnQ2hyb21lIHZlcnNpb24gbXVzdCBiZScpKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gJ1VuYWJsZSB0byBhdXRvbWF0ZSBDaHJvbWUgdmVyc2lvbiBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIENocm9tZWRyaXZlci5cXG4nO1xuICAgICAgICBpZiAod2Vidmlld1ZlcnNpb24pIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWUgdmVyc2lvbiBvbiB0aGUgZGV2aWNlOiAke3dlYnZpZXdWZXJzaW9ufVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciA9IC9DaHJvbWUgdmVyc2lvbiBtdXN0IGJlICguKykvLmV4ZWMoZS5tZXNzYWdlKT8uWzFdIHx8ICcnO1xuICAgICAgICBpZiAodmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcikge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYENocm9tZWRyaXZlciBzdXBwb3J0cyBDaHJvbWUgdmVyc2lvbihzKTogJHt2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSArPSAnQ2hlY2sgdGhlIGRyaXZlciB0dXRvcmlhbCBmb3IgdHJvdWJsZXNob290aW5nLlxcbic7XG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UgKz0gZS5tZXNzYWdlO1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBzZXNzaW9uSWQgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FID8gdGhpcy5qd3Byb3h5LnNlc3Npb25JZCA6IG51bGw7XG4gIH1cblxuICBhc3luYyByZXN0YXJ0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdSZXN0YXJ0aW5nIGNocm9tZWRyaXZlcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCByZXN0YXJ0IHdoZW4gd2UncmUgbm90IG9ubGluZVwiKTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyk7XG4gICAgYXdhaXQgdGhpcy5zdG9wKGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KHRoaXMuY2FwYWJpbGl0aWVzLCBmYWxzZSk7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yT25saW5lICgpIHtcbiAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IENEIGhhc24ndCBjcmFzaGVkXG4gICAgbGV0IGNocm9tZWRyaXZlclN0b3BwZWQgPSBmYWxzZTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKDIwLCAyMDAsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICAvLyB3ZSBhcmUgZWl0aGVyIHN0b3BwZWQgb3Igc3RvcHBpbmcsIHNvIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgIGNocm9tZWRyaXZlclN0b3BwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH0pO1xuICAgIGlmIChjaHJvbWVkcml2ZXJTdG9wcGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nocm9tZURyaXZlciBjcmFzaGVkIGR1cmluZyBzdGFydHVwLicpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXNzaW9uICgpIHtcbiAgICBjb25zdCBzZXNzaW9uQ2FwcyA9IHRoaXMuZGVzaXJlZFByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDXG4gICAgICA/IHtjYXBhYmlsaXRpZXM6IHthbHdheXNNYXRjaDogdGhpcy5jYXBhYmlsaXRpZXN9fVxuICAgICAgOiB7ZGVzaXJlZENhcGFiaWxpdGllczogdGhpcy5jYXBhYmlsaXRpZXN9O1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nICR7dGhpcy5kZXNpcmVkUHJvdG9jb2x9IENocm9tZWRyaXZlciBzZXNzaW9uIHdpdGggY2FwYWJpbGl0aWVzOiBgICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHNlc3Npb25DYXBzLCBudWxsLCAyKSk7XG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCBzZXNzaW9uQ2Fwcyk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcywgdGhpcy5qd3Byb3h5LnNlc3Npb25JZCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKGVtaXRTdGF0ZXMgPSB0cnVlKSB7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HKTtcbiAgICB9XG4gICAgY29uc3QgcnVuU2FmZVN0ZXAgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGYoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihlLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGF3YWl0IHJ1blNhZmVTdGVwKCgpID0+IHRoaXMuandwcm94eS5jb21tYW5kKCcnLCAnREVMRVRFJykpO1xuICAgIGF3YWl0IHJ1blNhZmVTdGVwKCgpID0+IHRoaXMucHJvYy5zdG9wKCdTSUdURVJNJywgMjAwMDApKTtcbiAgICB0aGlzLmxvZy5wcmVmaXggPSBnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKTtcbiAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RhdGUgKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDaGFuZ2VkIHN0YXRlIHRvICcke3N0YXRlfSdgKTtcbiAgICB0aGlzLmVtaXQoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIHtzdGF0ZX0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZENvbW1hbmQgKHVybCwgbWV0aG9kLCBib2R5KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5UmVxIChyZXEsIHJlcykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMocmVxLCByZXMpO1xuICB9XG5cbiAgYXN5bmMga2lsbEFsbCAoKSB7XG4gICAgbGV0IGNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKVxuICAgICAgPyBgd21pYyBwcm9jZXNzIHdoZXJlIFwiY29tbWFuZGxpbmUgbGlrZSAnJWNocm9tZWRyaXZlci5leGUlLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9JSdcIiBkZWxldGVgXG4gICAgICA6IGBwa2lsbCAtMTUgLWYgXCIke3RoaXMuY2hyb21lZHJpdmVyfS4qLS1wb3J0PSR7dGhpcy5wcm94eVBvcnR9XCJgO1xuICAgIHRoaXMubG9nLmRlYnVnKGBLaWxsaW5nIGFueSBvbGQgY2hyb21lZHJpdmVycywgcnVubmluZzogJHtjbWR9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChCLnByb21pc2lmeShjcC5leGVjKSkoY21kKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCB1cCBvbGQgY2hyb21lZHJpdmVycycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybignTm8gb2xkIGNocm9tZWRyaXZlcnMgc2VlbSB0byBleGlzdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgdWRpZEluZGV4ID0gdGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJncy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09ICctcycpO1xuICAgICAgY29uc3QgdWRpZCA9IHVkaWRJbmRleCA+IC0xID8gdGhpcy5hZGIuZXhlY3V0YWJsZS5kZWZhdWx0QXJnc1t1ZGlkSW5kZXggKyAxXSA6IG51bGw7XG5cbiAgICAgIGlmICh1ZGlkKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB0aGlzIGRldmljZSdzIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnM6ICR7dWRpZH1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyBhbnkgb2xkIGFkYiBmb3J3YXJkZWQgcG9ydCBzb2NrZXQgY29ubmVjdGlvbnNgKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChsZXQgY29ubiBvZiBhd2FpdCB0aGlzLmFkYi5nZXRGb3J3YXJkTGlzdCgpKSB7XG4gICAgICAgICAgLy8gY2hyb21lZHJpdmVyIHdpbGwgYXNrIEFEQiB0byBmb3J3YXJkIGEgcG9ydCBsaWtlIFwiZGV2aWNlSWQgdGNwOnBvcnQgbG9jYWxhYnN0cmFjdDp3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV9wb3J0XCJcbiAgICAgICAgICBpZiAoIShjb25uLmluY2x1ZGVzKCd3ZWJ2aWV3X2RldnRvb2xzJykgJiYgKCF1ZGlkIHx8IGNvbm4uaW5jbHVkZXModWRpZCkpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IGNvbm4uc3BsaXQoL1xccysvKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHBhcmFtc1sxXS5yZXBsYWNlKC9bXFxEXSovLCAnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBjbGVhbiBmb3J3YXJkZWQgcG9ydHMuIEVycm9yOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhc1dvcmtpbmdXZWJ2aWV3ICgpIHtcbiAgICAvLyBzb21ldGltZXMgY2hyb21lZHJpdmVyIHN0b3BzIGF1dG9tYXRpbmcgd2Vidmlld3MuIHRoaXMgbWV0aG9kIHJ1bnMgYVxuICAgIC8vIHNpbXBsZSBjb21tYW5kIHRvIGRldGVybWluZSBvdXIgc3RhdGUsIGFuZCByZXNwb25kcyBhY2NvcmRpbmdseVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3VybCcsICdHRVQnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuQ2hyb21lZHJpdmVyLkVWRU5UX0VSUk9SID0gJ2Nocm9tZWRyaXZlcl9lcnJvcic7XG5DaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCA9ICdzdGF0ZUNoYW5nZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcgPSAnc3RhcnRpbmcnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA9ICdvbmxpbmUnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HID0gJ3Jlc3RhcnRpbmcnO1xuXG5leHBvcnQgeyBDaHJvbWVkcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IENocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLG1DQUFtQyxHQUFHLEVBQUU7QUFDOUMsTUFBTUMsWUFBWSxHQUFHLFdBQVc7QUFDaEMsTUFBTUMsK0JBQStCLEdBQUcsRUFBRTtBQUMxQyxNQUFNQyxZQUFZLEdBQUcsSUFBSTtBQUN6QixNQUFNQyxnQkFBZ0IsR0FBRyxvQkFBb0I7QUFDN0MsTUFBTUMsdUJBQXVCLEdBQUcsNEJBQTRCO0FBQzVELE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCLDRCQUE0QixFQUM1QixxQkFBcUIsQ0FDdEI7QUFDRCxNQUFNQyxlQUFlLEdBQUcsVUFBVTtBQUVsQyxNQUFNQyxrQkFBa0IsR0FBRyxJQUFJO0FBRS9CLE1BQU1DLFlBQVksU0FBU0MsZUFBTSxDQUFDQyxZQUFZLENBQUM7RUFDN0NDLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3RCLEtBQUssRUFBRTtJQUVQLE1BQU07TUFDSkMsSUFBSSxHQUFHYixZQUFZO01BQ25CYyxJQUFJLEdBQUdaLFlBQVk7TUFDbkJhLG1CQUFtQixHQUFHLEtB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
|
|
603
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiIsIkRFRkFVTFRfSE9TVCIsIk1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQiLCJERUZBVUxUX1BPUlQiLCJDSFJPTUVfQlVORExFX0lEIiwiV0VCVklFV19TSEVMTF9CVU5ETEVfSUQiLCJXRUJWSUVXX0JVTkRMRV9JRFMiLCJWRVJTSU9OX1BBVFRFUk4iLCJDRF9WRVJTSU9OX1RJTUVPVVQiLCJDaHJvbWVkcml2ZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJob3N0IiwicG9ydCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIiwiZXhlY3V0YWJsZURpciIsImdldENocm9tZWRyaXZlckRpciIsImJ1bmRsZUlkIiwibWFwcGluZ1BhdGgiLCJjbWRBcmdzIiwiYWRiIiwidmVyYm9zZSIsImxvZ1BhdGgiLCJkaXNhYmxlQnVpbGRDaGVjayIsImRldGFpbHMiLCJpc0F1dG9kb3dubG9hZEVuYWJsZWQiLCJfbG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJhc3luY21hcCIsImxvZ0Vycm9yIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXJyTXNnIiwicGF0aCIsImJhc2VuYW1lIiwiZXhlYyIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwibWluQ2hyb21lVmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJmaWx0ZXIiLCJjZCIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmVWZXJzaW9ucyIsImlzRW1wdHkiLCJnZXRDaHJvbWVWZXJzaW9uIiwiQnJvd3NlciIsInZlcnNpb25NYXRjaCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJ1cGRhdGVEcml2ZXJzTWFwcGluZyIsIm5ld01hcHBpbmciLCJzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiZSIsIk9iamVjdCIsImFzc2lnbiIsImdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwiZ2V0Q2FwVmFsdWUiLCJ3M2MiLCJ0b1czY0NhcE5hbWVzIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwicmV0cnlJbnRlcnZhbCIsImdldFN0YXR1cyIsImNvbW1hbmQiLCJzZXNzaW9uQ2FwcyIsImFsd2F5c01hdGNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInByZWZpeCIsImVtaXRTdGF0ZXMiLCJydW5TYWZlU3RlcCIsImYiLCJFVkVOVF9DSEFOR0VEIiwic2VuZENvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwicHJveHlSZXEiLCJyZXEiLCJyZXMiLCJwcm94eVJlcVJlcyIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsIkIiLCJwcm9taXNpZnkiLCJjcCIsInVkaWRJbmRleCIsImRlZmF1bHRBcmdzIiwiZmluZEluZGV4IiwiaXRlbSIsInVkaWQiLCJjb25uIiwiZ2V0Rm9yd2FyZExpc3QiLCJwYXJhbXMiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsInJlcGxhY2UiLCJoYXNXb3JraW5nV2VidmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaHJvbWVkcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgSldQcm94eSwgUFJPVE9DT0xTIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIGdldENocm9tZVZlcnNpb24sIGdldENocm9tZWRyaXZlckRpciwgQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HLFxuICBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoLCBDRF9DRE4sIGdlbmVyYXRlTG9nUHJlZml4XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25zIH0gZnJvbSAnY29tcGFyZS12ZXJzaW9ucyc7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL3N0b3JhZ2UtY2xpZW50JztcbmltcG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH0gZnJvbSAnLi9wcm90b2NvbC1oZWxwZXJzJztcblxuY29uc3QgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04gPSA3MztcbmNvbnN0IERFRkFVTFRfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCA9IDc1O1xuY29uc3QgREVGQVVMVF9QT1JUID0gOTUxNTtcbmNvbnN0IENIUk9NRV9CVU5ETEVfSUQgPSAnY29tLmFuZHJvaWQuY2hyb21lJztcbmNvbnN0IFdFQlZJRVdfU0hFTExfQlVORExFX0lEID0gJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJztcbmNvbnN0IFdFQlZJRVdfQlVORExFX0lEUyA9IFtcbiAgJ2NvbS5nb29nbGUuYW5kcm9pZC53ZWJ2aWV3JyxcbiAgJ2NvbS5hbmRyb2lkLndlYnZpZXcnLFxuXTtcbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC8oW1xcZC5dKykvO1xuXG5jb25zdCBDRF9WRVJTSU9OX1RJTUVPVVQgPSA1MDAwO1xuXG5jbGFzcyBDaHJvbWVkcml2ZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICAgIHVzZVN5c3RlbUV4ZWN1dGFibGUgPSBmYWxzZSxcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBleGVjdXRhYmxlRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICBidW5kbGVJZCxcbiAgICAgIG1hcHBpbmdQYXRoLFxuICAgICAgY21kQXJncyxcbiAgICAgIGFkYixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBsb2dQYXRoLFxuICAgICAgZGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgICBkZXRhaWxzLFxuICAgICAgaXNBdXRvZG93bmxvYWRFbmFibGVkID0gZmFsc2UsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5fbG9nID0gbG9nZ2VyLmdldExvZ2dlcihnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICB0aGlzLnByb3h5SG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wcm94eVBvcnQgPSBwb3J0O1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuY21kQXJncyA9IGNtZEFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGUgPSB1c2VTeXN0ZW1FeGVjdXRhYmxlO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gZXhlY3V0YWJsZTtcbiAgICB0aGlzLmV4ZWN1dGFibGVEaXIgPSBleGVjdXRhYmxlRGlyO1xuICAgIHRoaXMubWFwcGluZ1BhdGggPSBtYXBwaW5nUGF0aDtcbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlID0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQ7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnByb3h5SG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucHJveHlQb3J0LFxuICAgICAgbG9nOiB0aGlzLl9sb2csXG4gICAgfSk7XG4gICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICB0aGlzLmxvZ1BhdGggPSBsb2dQYXRoO1xuICAgIHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2sgPSAhIWRpc2FibGVCdWlsZENoZWNrO1xuICAgIHRoaXMuc3RvcmFnZUNsaWVudCA9IGlzQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyBuZXcgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCh7IGNocm9tZWRyaXZlckRpcjogdGhpcy5leGVjdXRhYmxlRGlyIH0pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHt9O1xuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgYXN5bmMgZ2V0RHJpdmVyc01hcHBpbmcgKCkge1xuICAgIGxldCBtYXBwaW5nID0gXy5jbG9uZURlZXAoQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HKTtcbiAgICBpZiAodGhpcy5tYXBwaW5nUGF0aCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gdXNlIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYE5vIGZpbGUgZm91bmQgYXQgJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1hcHBpbmcgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMubWFwcGluZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBwYXJzaW5nIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmb3IgbWluaW11bSBjaHJvbWUgdmVyc2lvbiBhcmUgc2VtdmVyIGNvbXBsaWFudFxuICAgIGZvciAoY29uc3QgW2NkVmVyc2lvbiwgY2hyb21lVmVyc2lvbl0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgbWFwcGluZ1tjZFZlcnNpb25dID0gY29lcmNlZFZlcnNpb24udmVyc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCcke2Nocm9tZVZlcnNpb259JyBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gU2tpcHBpbmcgaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmc7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVkcml2ZXJzIChtYXBwaW5nKSB7XG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdmVyc2lvbnMgYXZhaWxhYmxlXG4gICAgY29uc3QgZXhlY3V0YWJsZXMgPSBhd2FpdCBmcy5nbG9iKCcqJywge1xuICAgICAgY3dkOiB0aGlzLmV4ZWN1dGFibGVEaXIsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgbm9kaXI6IHRydWUsXG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIGV4ZWN1dGFibGVzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgY29uc3QgY2RzID0gKGF3YWl0IGFzeW5jbWFwKGV4ZWN1dGFibGVzLCBhc3luYyAoZXhlY3V0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbG9nRXJyb3IgPSAoe21lc3NhZ2UsIHN0ZG91dCA9IG51bGwsIHN0ZGVyciA9IG51bGx9KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBgQ2Fubm90IHJldHJpZXZlIHZlcnNpb24gbnVtYmVyIGZyb20gJyR7cGF0aC5iYXNlbmFtZShleGVjdXRhYmxlKX0nIENocm9tZWRyaXZlciBiaW5hcnkuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHZlcnNpb24gc3RyaW5nIGluIHJlc3BvbnNlIHRvICctLXZlcnNpb24nIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gJHttZXNzYWdlfWA7XG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZG91dDogJHtzdGRvdXR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRlcnI6ICR7c3RkZXJyfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybihlcnJNc2cpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICBsZXQgc3RkZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKGV4ZWN1dGFibGUsIFsnLS12ZXJzaW9uJ10sIHtcbiAgICAgICAgICB0aW1lb3V0OiBDRF9WRVJTSU9OX1RJTUVPVVQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIShlcnIubWVzc2FnZSB8fCAnJykuaW5jbHVkZXMoJ3RpbWVkIG91dCcpICYmICEoZXJyLnN0ZG91dCB8fCAnJykuaW5jbHVkZXMoJ1N0YXJ0aW5nIENocm9tZURyaXZlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIGhhcyB0aW1lZCBvdXQsIGl0IGhhcyBhY3R1YWxseSBzdGFydGVkIENocm9tZWRyaXZlcixcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGVyZSB3aWxsIGFsc28gYmUgdGhlIHZlcnNpb24gc3RyaW5nIGluIHRoZSBvdXRwdXRcbiAgICAgICAgc3Rkb3V0ID0gZXJyLnN0ZG91dDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0Y2ggPSAvQ2hyb21lRHJpdmVyXFxzK1xcKD92PyhbXFxkLl0rKVxcKT8vaS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvenBqNXdBLzFcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHttZXNzYWdlOiAnQ2Fubm90IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZycsIHN0ZG91dCwgc3RkZXJyfSk7XG4gICAgICB9XG4gICAgICBsZXQgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgbGV0IG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIC8vIGJlZm9yZSAyMDE5LTAzLTA2IHZlcnNpb25zIHdlcmUgb2YgdGhlIGZvcm0gbWFqb3IubWlub3JcbiAgICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICB2ZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9LiR7Y29lcmNlZFZlcnNpb24ubWlub3J9YDtcbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gJiYgY29lcmNlZFZlcnNpb24ubWFqb3IgPj0gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdGhlIG1ham9yIENocm9tZSB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBtYWpvciB2ZXJzaW9uXG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4ZWN1dGFibGUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIG1pbkNocm9tZVZlcnNpb24sXG4gICAgICB9O1xuICAgIH0pKVxuICAgICAgLmZpbHRlcigoY2QpID0+ICEhY2QpXG4gICAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIudmVyc2lvbiwgYS52ZXJzaW9uKSk7XG4gICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBDaHJvbWVkcml2ZXJzIHdlcmUgZm91bmQgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICAgIHJldHVybiBjZHM7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBleGVjdXRhYmxlcyB3ZXJlIGZvdW5kOmApO1xuICAgIGZvciAoY29uc3QgY2Qgb2YgY2RzKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgICcke2NkLmV4ZWN1dGFibGV9JyAodmVyc2lvbiAnJHtjZC52ZXJzaW9ufScsIG1pbmltdW0gQ2hyb21lIHZlcnNpb24gJyR7Y2QubWluQ2hyb21lVmVyc2lvbiA/IGNkLm1pbkNocm9tZVZlcnNpb24gOiAnVW5rbm93bid9JylgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNkcztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZVZlcnNpb24gKCkge1xuICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgdmVyc2lvbiBmcm9tIGBkZXRhaWxzYCBwcm9wZXJ0eSBpZiBpdCBpcyBzZXRcbiAgICAvLyBUaGUgYGluZm9gIGl0ZW0gbXVzdCBjb250YWluIHRoZSBvdXRwdXQgb2YgL2pzb24vdmVyc2lvbiBDRFAgY29tbWFuZFxuICAgIC8vIHdoZXJlIGBCcm93c2VyYCBmaWVsZCBsb29rcyBsaWtlIGBDaHJvbWUvNzIuMC4zNjAxLjBgYFxuICAgIGlmICh0aGlzLmRldGFpbHM/LmluZm8pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBCcm93c2VyIHZlcnNpb24gaW4gdGhlIHN1cHBsaWVkIGRldGFpbHM6ICR7dGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBWRVJTSU9OX1BBVFRFUk4uZXhlYyh0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXIpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uTWF0Y2hbMV0pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VkVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2hyb21lVmVyc2lvbjtcblxuICAgIC8vIGluIGNhc2Ugb2YgV2ViVmlldyBCcm93c2VyIFRlc3Rlciwgc2ltcGx5IHRyeSB0byBmaW5kIHRoZSB1bmRlcmx5aW5nIHdlYnZpZXdcbiAgICBpZiAodGhpcy5idW5kbGVJZCA9PT0gV0VCVklFV19TSEVMTF9CVU5ETEVfSUQpIHtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIHJldHVybiBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbiBBbmRyb2lkIDctOSB3ZWJ2aWV3cyBhcmUgYmFja2VkIGJ5IHRoZSBtYWluIENocm9tZSwgbm90IHRoZSBzeXN0ZW0gd2Vidmlld1xuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgICAgaWYgKGFwaUxldmVsID49IDI0ICYmIGFwaUxldmVsIDw9IDI4ICYmXG4gICAgICAgICAgW1dFQlZJRVdfU0hFTExfQlVORExFX0lELCAuLi5XRUJWSUVXX0JVTkRMRV9JRFNdLmluY2x1ZGVzKHRoaXMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyeSBvdXQgd2Vidmlld3Mgd2hlbiBubyBidW5kbGUgaWQgaXMgc2VudCBpblxuICAgIGlmICghdGhpcy5idW5kbGVJZCkge1xuICAgICAgLy8gZGVmYXVsdCB0byB0aGUgZ2VuZXJpYyBDaHJvbWUgYnVuZGxlXG4gICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcblxuICAgICAgLy8gd2UgaGF2ZSBhIHdlYnZpZXcgb2Ygc29tZSBzb3J0LCBzbyB0cnkgdG8gZmluZCB0aGUgYnVuZGxlIHZlcnNpb25cbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZG8gbm90IGhhdmUgYSBjaHJvbWUgdmVyc2lvbiwgaXQgbXVzdCBub3QgYmUgYSB3ZWJ2aWV3XG4gICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgdGhpcy5idW5kbGVJZCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIGl0IGlzIHNlbXZlciwgc28gbGF0ZXIgY2hlY2tzIHdvbid0IGZhaWxcbiAgICByZXR1cm4gY2hyb21lVmVyc2lvbiA/IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbikgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJpdmVyc01hcHBpbmcgKG5ld01hcHBpbmcpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IHRydWU7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWFwcGluZ1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld01hcHBpbmcsIG51bGwsIDIpLCAndXRmOCcpO1xuICAgICAgICBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzdG9yZSB0aGUgdXBkYXRlZCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgaW50byAnJHt0aGlzLm1hcHBpbmdQYXRofScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgZXhlY3V0aW9ucy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIG5ld01hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIgKCkge1xuICAgIGlmICghdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyc01hcHBpbmcoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBtb3N0IHJlY2VudCBrbm93biBDaHJvbWUgdmVyc2lvbjogJHtfLnZhbHVlcyhtYXBwaW5nKVswXX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZGlkU3RvcmFnZVN5bmMgPSBmYWxzZTtcbiAgICBjb25zdCBzeW5jQ2hyb21lZHJpdmVycyA9IGFzeW5jIChjaHJvbWVWZXJzaW9uKSA9PiB7XG4gICAgICBkaWRTdG9yYWdlU3luYyA9IHRydWU7XG4gICAgICBjb25zdCByZXRyaWV2ZWRNYXBwaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnJldHJpZXZlTWFwcGluZygpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0dvdCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZTogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJldHJpZXZlZE1hcHBpbmcsIG51bGwsIDIpKTtcbiAgICAgIGNvbnN0IGRyaXZlcktleXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQuc3luY0RyaXZlcnMoe1xuICAgICAgICBtaW5Ccm93c2VyVmVyc2lvbjogY2hyb21lVmVyc2lvbi5tYWpvcixcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJLZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyA9IGRyaXZlcktleXMucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIG1pbkJyb3dzZXJWZXJzaW9ufSA9IHJldHJpZXZlZE1hcHBpbmdbeF07XG4gICAgICAgIGFjY1t2ZXJzaW9uXSA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGNkcyA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lZHJpdmVycyhtYXBwaW5nKTtcblxuICAgICAgY29uc3QgbWlzc2luZ1ZlcnNpb25zID0ge307XG4gICAgICBmb3IgKGNvbnN0IHt2ZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9ufSBvZiBjZHMpIHtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uIHx8IG1hcHBpbmdbdmVyc2lvbl0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VkVmVyID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCFjb2VyY2VkVmVyIHx8IGNvZXJjZWRWZXIubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlzc2luZ1ZlcnNpb25zW3ZlcnNpb25dID0gbWluQ2hyb21lVmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdWZXJzaW9ucykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnQ2hyb21lZHJpdmVyJywgXy5zaXplKG1pc3NpbmdWZXJzaW9ucyksIHRydWUpfSwgYCArXG4gICAgICAgICAgYHdoaWNoICR7Xy5zaXplKG1pc3NpbmdWZXJzaW9ucykgPT09IDEgPyAnaXMnIDogJ2FyZSd9IG1pc3NpbmcgaW4gdGhlIGxpc3Qgb2Yga25vd24gdmVyc2lvbnM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKE9iamVjdC5hc3NpZ24obWFwcGluZywgbWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYCdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSBpcyBzZXQgdG8gJ3RydWUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnVpbGQgY2hlY2sgZGlzYWJsZWQuIFVzaW5nIG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uICgke3ZlcnNpb259LCBhdCAnJHtleGVjdXRhYmxlfScpYCk7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYElmIHRoaXMgaXMgd3JvbmcsIHNldCAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgdG8gJ2ZhbHNlJ2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgIC8vIHVuYWJsZSB0byBnZXQgdGhlIGNocm9tZSB2ZXJzaW9uXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYHRoZSBjdXJyZW50IENocm9tZSB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZGlzY292ZXIgQ2hyb21lIHZlcnNpb24uIFVzaW5nIENocm9tZWRyaXZlciAke3ZlcnNpb259IGF0ICcke2V4ZWN1dGFibGV9J2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBDaHJvbWUgYnVuZGxlICcke3RoaXMuYnVuZGxlSWR9JyB2ZXJzaW9uICcke2Nocm9tZVZlcnNpb259J2ApO1xuXG4gICAgICBjb25zdCBtYXRjaGluZ0RyaXZlcnMgPSBjZHMuZmlsdGVyKCh7bWluQ2hyb21lVmVyc2lvbn0pID0+IHtcbiAgICAgICAgY29uc3QgbWluQ2hyb21lVmVyc2lvblMgPSBtaW5DaHJvbWVWZXJzaW9uICYmIHNlbXZlci5jb2VyY2UobWluQ2hyb21lVmVyc2lvbik7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvblMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hyb21lVmVyc2lvbi5tYWpvciA+IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OXG4gICAgICAgICAgPyBtaW5DaHJvbWVWZXJzaW9uUy5tYWpvciA9PT0gY2hyb21lVmVyc2lvbi5tYWpvclxuICAgICAgICAgIDogc2VtdmVyLmd0ZShjaHJvbWVWZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9uUyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkobWF0Y2hpbmdEcml2ZXJzKSkge1xuICAgICAgICBpZiAodGhpcy5zdG9yYWdlQ2xpZW50ICYmICFkaWRTdG9yYWdlU3luYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgc3luY0Nocm9tZWRyaXZlcnMoY2hyb21lVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN5bmNocm9uaXplIGxvY2FsIGNocm9tZWRyaXZlcnMgd2l0aCB0aGUgcmVtb3RlIHN0b3JhZ2UgYXQgJHtDRF9DRE59OiBgICtcbiAgICAgICAgICAgICAgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvZG93bmxvYWRTdWdnZXN0aW9uID1cbiAgICAgICAgICAnWW91IGNvdWxkIGFsc28gdHJ5IHRvIGVuYWJsZSBhdXRvbWF0ZWQgY2hyb21lZHJpdmVycyBkb3dubG9hZCBhcyAnICtcbiAgICAgICAgICAnYSBwb3NzaWJsZSB3b3JrYXJvdW5kLic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuYCArXG4gICAgICAgICAgKHRoaXMuc3RvcmFnZUNsaWVudCA/ICcnIDogYCAke2F1dG9kb3dubG9hZFN1Z2dlc3Rpb259YCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5QYXRoID0gbWF0Y2hpbmdEcml2ZXJzWzBdLmV4ZWN1dGFibGU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIG1hdGNoaW5nRHJpdmVycy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgICAgYGNhcGFibGUgb2YgYXV0b21hdGluZyBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLlxcbkNob29zaW5nIHRoZSBtb3N0IHJlY2VudCwgJyR7YmluUGF0aH0nLmApO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0lmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1aXJlZCwgc3BlY2lmeSBpdCB3aXRoIHRoZSBgY2hyb21lZHJpdmVyRXhlY3V0YWJsZWAnICtcbiAgICAgICAgJ2Rlc2lyZWQgY2FwYWJpbGl0eS4nKTtcbiAgICAgIHJldHVybiBiaW5QYXRoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICB9IHdoaWxlICh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDaHJvbWVkcml2ZXJQYXRoICgpIHtcbiAgICBpZiAodGhpcy5leGVjdXRhYmxlVmVyaWZpZWQpIHJldHVybjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyB0aGUgZXhlY3V0YWJsZSBtaWdodCBiZSBzZXQgKGlmIHBhc3NlZCBpbilcbiAgICAvLyBvciB3ZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYmFzaWMgb25lIGluc3RhbGxlZCB3aXRoIHRoaXMgZHJpdmVyXG4gICAgLy8gb3Igd2Ugd2FudCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZVxuICAgIGlmICghdGhpcy5jaHJvbWVkcml2ZXIpIHtcbiAgICAgIHRoaXMuY2hyb21lZHJpdmVyID0gdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlXG4gICAgICAgID8gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpXG4gICAgICAgIDogYXdhaXQgdGhpcy5nZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgYSBjaHJvbWVkcml2ZXIgYmluYXJ5IGF0IHRoZSBwYXRoIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2hyb21lZHJpdmVyfSwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QhYCk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXQgY2hyb21lZHJpdmVyIGJpbmFyeSBhczogJHt0aGlzLmNocm9tZWRyaXZlcn1gKTtcbiAgfVxuXG4gIHN5bmNQcm90b2NvbCAoY2RWZXJzaW9uID0gbnVsbCkge1xuICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjZFZlcnNpb24pO1xuICAgIGlmICghY29lcmNlZFZlcnNpb24gfHwgY29lcmNlZFZlcnNpb24ubWFqb3IgPCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0ICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAke1BST1RPQ09MUy5NSlNPTldQfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaHJvbWVPcHRpb25zID0gZ2V0Q2FwVmFsdWUodGhpcy5jYXBhYmlsaXRpZXMsICdjaHJvbWVPcHRpb25zJywge30pO1xuICAgIGlmIChjaHJvbWVPcHRpb25zLnczYyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gc3VwcG9ydHMgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbCwgYCArXG4gICAgICAgIGBidXQgJHtQUk9UT0NPTFMuTUpTT05XUH0gb25lIGhhcyBiZWVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgICAvLyBnaXZlbiBjYXBzIG1pZ2h0IG5vdCBiZSBwcm9wZXJseSBwcmVmaXhlZFxuICAgIC8vIHNvIHdlIHRyeSB0byBmaXggdGhlbSBpbiBvcmRlciB0byBwcm9wZXJseSBpbml0XG4gICAgLy8gdGhlIG5ldyBXM0Mgc2Vzc2lvblxuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdG9XM2NDYXBOYW1lcyh0aGlzLmNhcGFiaWxpdGllcyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2FwcywgZW1pdFN0YXJ0aW5nU3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChjYXBzKTtcblxuICAgIC8vIHNldCB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlcyB0byBBTEwgdGhlIGNvbnNvbGUgbG9nc1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcyA9IF8uY2xvbmVEZWVwKGdldENhcFZhbHVlKGNhcHMsICdsb2dnaW5nUHJlZnMnLCB7fSkpO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIpKSB7XG4gICAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlciA9ICdBTEwnO1xuICAgIH1cblxuICAgIGlmIChlbWl0U3RhcnRpbmdTdGF0ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbYC0tcG9ydD0ke3RoaXMucHJveHlQb3J0fWBdO1xuICAgIGlmICh0aGlzLmFkYiAmJiB0aGlzLmFkYi5hZGJQb3J0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tYWRiLXBvcnQ9JHt0aGlzLmFkYi5hZGJQb3J0fWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuY21kQXJncykpIHtcbiAgICAgIGFyZ3MucHVzaCguLi50aGlzLmNtZEFyZ3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLXBhdGg9JHt0aGlzLmxvZ1BhdGh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzYWJsZS1idWlsZC1jaGVjaycpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdmVyYm9zZScpO1xuICAgIC8vIHdoYXQgYXJlIHRoZSBwcm9jZXNzIHN0ZG91dC9zdGRlcnIgY29uZGl0aW9ucyB3aGVyZWluIHdlIGtub3cgdGhhdFxuICAgIC8vIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHRvIG91ciBzYXRpc2ZhY3Rpb24/XG4gICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzdGRvdXQpID0+IHN0ZG91dC5zdGFydHNXaXRoKCdTdGFydGluZyAnKTtcblxuICAgIGxldCBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgIGxldCB3ZWJ2aWV3VmVyc2lvbjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0Q2hyb21lZHJpdmVyUGF0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5raWxsQWxsKCk7XG5cbiAgICAgIC8vIHNldCB1cCBvdXIgc3VicHJvY2VzcyBvYmplY3RcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuY2hyb21lZHJpdmVyLCBhcmdzKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcblxuICAgICAgLy8gaGFuZGxlIGxvZyBvdXRwdXRcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBjZCBvdXRwdXQgaXMgbm90IHByaW50ZWQsIGZpbmQgdGhlIGNocm9tZSB2ZXJzaW9uIGFuZCBwcmludFxuICAgICAgICAvLyB3aWxsIGdldCBhIHJlc3BvbnNlIGxpa2VcbiAgICAgICAgLy8gICBEZXZUb29scyByZXNwb25zZToge1xuICAgICAgICAvLyAgICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNhbXBsZWFwcFwiLFxuICAgICAgICAvLyAgICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS81NS4wLjI4ODMuOTFcIixcbiAgICAgICAgLy8gICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjJcIixcbiAgICAgICAgLy8gICAgICBcIlVzZXItQWdlbnRcIjogXCIuLi5cIixcbiAgICAgICAgLy8gICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2XCJcbiAgICAgICAgLy8gICB9XG4gICAgICAgIGNvbnN0IG91dCA9IHN0ZG91dCArIHN0ZGVycjtcbiAgICAgICAgbGV0IG1hdGNoID0gL1wiQnJvd3NlclwiOiBcIiguKilcIi8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB3ZWJ2aWV3VmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBXZWJ2aWV3IHZlcnNpb246ICcke3dlYnZpZXdWZXJzaW9ufSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsc28gcHJpbnQgY2hyb21lZHJpdmVyIHZlcnNpb24gdG8gbG9nc1xuICAgICAgICAvLyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZVxuICAgICAgICAvLyAgU3RhcnRpbmcgQ2hyb21lRHJpdmVyIDIuMzMuNTA2MTA2ICg4YTA2YzM5YzQ1ODJmYmZiYWI2OTY2ZGJiMWMzOGE5MTczYmZiMWEyKSBvbiBwb3J0IDk1MTVcbiAgICAgICAgbWF0Y2ggPSAvU3RhcnRpbmcgQ2hyb21lRHJpdmVyIChbLlxcZF0rKS8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHZlcnNpb246ICcke21hdGNoWzFdfSdgKTtcbiAgICAgICAgICB0aGlzLnN5bmNQcm90b2NvbChtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnaXZlIHRoZSBvdXRwdXQgaWYgaXQgaXMgcmVxdWVzdGVkXG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRvdXQgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3RkZXJyIHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGBbU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gYENocm9tZWRyaXZlciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihtc2cpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFNwYXduaW5nIGNocm9tZWRyaXZlciB3aXRoOiAke3RoaXMuY2hyb21lZHJpdmVyfSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgLy8gc3RhcnQgc3VicHJvYyBhbmQgd2FpdCBmb3Igc3RhcnREZXRlY3RvclxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yT25saW5lKCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICAvLyBqdXN0IGJlY2F1c2Ugd2UgaGFkIGFuIGVycm9yIGRvZXNuJ3QgbWVhbiB0aGUgY2hyb21lZHJpdmVyIHByb2Nlc3NcbiAgICAgIC8vIGZpbmlzaGVkOyB3ZSBzaG91bGQgY2xlYW4gdXAgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgIC8vIG9mdGVuIHRoZSB1c2VyJ3MgQ2hyb21lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXJcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUnKSkge1xuICAgICAgICBtZXNzYWdlICs9ICdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24gYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXIuXFxuJztcbiAgICAgICAgaWYgKHdlYnZpZXdWZXJzaW9uKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lIHZlcnNpb24gb24gdGhlIGRldmljZTogJHt3ZWJ2aWV3VmVyc2lvbn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIgPSAvQ2hyb21lIHZlcnNpb24gbXVzdCBiZSAoLispLy5leGVjKGUubWVzc2FnZSk/LlsxXSB8fCAnJztcbiAgICAgICAgaWYgKHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWVkcml2ZXIgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24ocyk6ICR7dmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gJ0NoZWNrIHRoZSBkcml2ZXIgdHV0b3JpYWwgZm9yIHRyb3VibGVzaG9vdGluZy5cXG4nO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlICs9IGUubWVzc2FnZTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbklkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA/IHRoaXMuandwcm94eS5zZXNzaW9uSWQgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcmVzdGFydCAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnUmVzdGFydGluZyBjaHJvbWVkcml2ZXInKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVzdGFydCB3aGVuIHdlJ3JlIG5vdCBvbmxpbmVcIik7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpO1xuICAgIGF3YWl0IHRoaXMuc3RvcChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0aGlzLmNhcGFiaWxpdGllcywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvck9ubGluZSAoKSB7XG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDRCBoYXNuJ3QgY3Jhc2hlZFxuICAgIGxldCBjaHJvbWVkcml2ZXJTdG9wcGVkID0gZmFsc2U7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgyMCwgMjAwLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgLy8gd2UgYXJlIGVpdGhlciBzdG9wcGVkIG9yIHN0b3BwaW5nLCBzbyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICBjaHJvbWVkcml2ZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9KTtcbiAgICBpZiAoY2hyb21lZHJpdmVyU3RvcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHJvbWVEcml2ZXIgY3Jhc2hlZCBkdXJpbmcgc3RhcnR1cC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkNhcHMgPSB0aGlzLmRlc2lyZWRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQ1xuICAgICAgPyB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IHRoaXMuY2FwYWJpbGl0aWVzfX1cbiAgICAgIDoge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHRoaXMuY2FwYWJpbGl0aWVzfTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAke3RoaXMuZGVzaXJlZFByb3RvY29sfSBDaHJvbWVkcml2ZXIgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllczogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uQ2FwcywgbnVsbCwgMikpO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywgc2Vzc2lvbkNhcHMpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMsIHRoaXMuandwcm94eS5zZXNzaW9uSWQpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSk7XG4gIH1cblxuICBhc3luYyBzdG9wIChlbWl0U3RhdGVzID0gdHJ1ZSkge1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1blNhZmVTdGVwID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLmp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpKTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLnByb2Muc3RvcCgnU0lHVEVSTScsIDIwMDAwKSk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcyk7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hhbmdlZCBzdGF0ZSB0byAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcSAocmVxLCByZXMpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxBbGwgKCkge1xuICAgIGxldCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICAgID8gYHdtaWMgcHJvY2VzcyB3aGVyZSBcImNvbW1hbmRsaW5lIGxpa2UgJyVjaHJvbWVkcml2ZXIuZXhlJS0tcG9ydD0ke3RoaXMucHJveHlQb3J0fSUnXCIgZGVsZXRlYFxuICAgICAgOiBgcGtpbGwgLTE1IC1mIFwiJHt0aGlzLmNocm9tZWRyaXZlcn0uKi0tcG9ydD0ke3RoaXMucHJveHlQb3J0fVwiYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb2xkIGNocm9tZWRyaXZlcnMsIHJ1bm5pbmc6ICR7Y21kfWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAoQi5wcm9taXNpZnkoY3AuZXhlYykpKGNtZCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgb2xkIGNocm9tZWRyaXZlcnMnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ05vIG9sZCBjaHJvbWVkcml2ZXJzIHNlZW0gdG8gZXhpc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IHVkaWRJbmRleCA9IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnLXMnKTtcbiAgICAgIGNvbnN0IHVkaWQgPSB1ZGlkSW5kZXggPiAtMSA/IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NbdWRpZEluZGV4ICsgMV0gOiBudWxsO1xuXG4gICAgICBpZiAodWRpZCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdGhpcyBkZXZpY2UncyBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zOiAke3VkaWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgYW55IG9sZCBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zYCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGNvbm4gb2YgYXdhaXQgdGhpcy5hZGIuZ2V0Rm9yd2FyZExpc3QoKSkge1xuICAgICAgICAgIC8vIGNocm9tZWRyaXZlciB3aWxsIGFzayBBREIgdG8gZm9yd2FyZCBhIHBvcnQgbGlrZSBcImRldmljZUlkIHRjcDpwb3J0IGxvY2FsYWJzdHJhY3Q6d2Vidmlld19kZXZ0b29sc19yZW1vdGVfcG9ydFwiXG4gICAgICAgICAgaWYgKCEoY29ubi5pbmNsdWRlcygnd2Vidmlld19kZXZ0b29scycpICYmICghdWRpZCB8fCBjb25uLmluY2x1ZGVzKHVkaWQpKSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBwYXJhbXMgPSBjb25uLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZChwYXJhbXNbMV0ucmVwbGFjZSgvW1xcRF0qLywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xlYW4gZm9yd2FyZGVkIHBvcnRzLiBFcnJvcjogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNXb3JraW5nV2VidmlldyAoKSB7XG4gICAgLy8gc29tZXRpbWVzIGNocm9tZWRyaXZlciBzdG9wcyBhdXRvbWF0aW5nIHdlYnZpZXdzLiB0aGlzIG1ldGhvZCBydW5zIGFcbiAgICAvLyBzaW1wbGUgY29tbWFuZCB0byBkZXRlcm1pbmUgb3VyIHN0YXRlLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy91cmwnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbkNocm9tZWRyaXZlci5FVkVOVF9FUlJPUiA9ICdjaHJvbWVkcml2ZXJfZXJyb3InO1xuQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyA9ICdyZXN0YXJ0aW5nJztcblxuZXhwb3J0IHsgQ2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxtQ0FBbUMsR0FBRyxFQUFFO0FBQzlDLE1BQU1DLFlBQVksR0FBRyxXQUFXO0FBQ2hDLE1BQU1DLCtCQUErQixHQUFHLEVBQUU7QUFDMUMsTUFBTUMsWUFBWSxHQUFHLElBQUk7QUFDekIsTUFBTUMsZ0JBQWdCLEdBQUcsb0JBQW9CO0FBQzdDLE1BQU1DLHVCQUF1QixHQUFHLDRCQUE0QjtBQUM1RCxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6Qiw0QkFBNEIsRUFDNUIscUJBQXFCLENBQ3RCO0FBQ0QsTUFBTUMsZUFBZSxHQUFHLFVBQVU7QUFFbEMsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSTtBQUUvQixNQUFNQyxZQUFZLFNBQVNDLGVBQU0sQ0FBQ0MsWUFBWSxDQUFDO0VBQzdDQyxXQUFXLENBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN0QixLQUFLLEVBQUU7SUFFUCxNQUFNO01BQ0pDLElBQUksR0FBR2IsWUFBWTtNQUNuQmMsSUFBSSxHQUFHWixZQUFZO01BQ25CYSxtQkFBbUIs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
|