appium-xcuitest-driver 4.3.4 → 4.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -448,8 +448,7 @@ Installs the given application to the device under test. Make sure the app is bu
448
448
  Name | Type | Required | Description | Example
449
449
  --- | --- | --- | --- | ---
450
450
  app | string | yes | See the description of the `appium:app` capability | /path/to/my.app
451
- timeoutMs | number | no | The maximum time to wait until app install is finished in milliseconds.
452
- If not provided then the value of `appium:appPushTimeout` capability is used. If the capability is not provided then equals to 240000ms | 500000
451
+ timeoutMs | number | no | The maximum time to wait until app install is finished in milliseconds on real devices. If not provided then the value of `appium:appPushTimeout` capability is used. If the capability is not provided then equals to 240000ms | 500000
453
452
  strategy | string | no | One of possible app installation strategies on real devices. This argument is ignored on simulators. If not provided then the value of `appium:appInstallStrategy` is used. If the latter is also not provided then `serial` is used. See the description of `appium:appInstallStrategy` capability for more details on available values. | parallel
454
453
 
455
454
  ### mobile: isAppInstalled
@@ -257,6 +257,10 @@ class XCUITestDriver extends _baseDriver.BaseDriver {
257
257
  return this.isRealDevice() ? 'http://appium.io' : `http://${this.opts.address.includes(':') ? `[${this.opts.address}]` : this.opts.address}:${this.opts.port}/welcome`;
258
258
  }
259
259
 
260
+ doesSafariSupportUrlArgument() {
261
+ return _support.util.compareVersions(this.opts.platformVersion, '<', '12.2');
262
+ }
263
+
260
264
  async start() {
261
265
  this.opts.noReset = !!this.opts.noReset;
262
266
  this.opts.fullReset = !!this.opts.fullReset;
@@ -311,7 +315,7 @@ class XCUITestDriver extends _baseDriver.BaseDriver {
311
315
  this.opts.bundleId = SAFARI_BUNDLE_ID;
312
316
  this._currentUrl = this.opts.safariInitialUrl || this.getDefaultUrl();
313
317
 
314
- if (_support.util.compareVersions(this.opts.platformVersion, '<', '12.2')) {
318
+ if (this.doesSafariSupportUrlArgument()) {
315
319
  this.opts.processArguments.args = ['-u', this._currentUrl];
316
320
  }
317
321
  } else if (this.opts.app || this.opts.bundleId) {
@@ -456,18 +460,22 @@ class XCUITestDriver extends _baseDriver.BaseDriver {
456
460
  await this.setInitialOrientation(this.opts.orientation);
457
461
  this.logEvent('orientationSet');
458
462
 
459
- if (this.isSafari() && !this.isRealDevice() && _support.util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {
460
- await this.opts.device.openUrl(this._currentUrl);
461
- }
463
+ if (this.isSafari()) {
464
+ if (!this.doesSafariSupportUrlArgument() && !this.isRealDevice()) {
465
+ this.log.info(`About to set the initial URL to '${this._currentUrl}' on Simulator. ` + `Use 'safariInitialUrl' capability in order to customize it`);
466
+ await this.opts.device.openUrl(this._currentUrl);
467
+ }
462
468
 
463
- if (this.isSafari() || this.opts.autoWebview) {
464
- this.log.debug('Waiting for initial webview');
465
- await this.navToInitialWebview();
466
- this.logEvent('initialWebviewNavigated');
467
- }
469
+ if (this.opts.autoWebview) {
470
+ this.log.debug('Waiting for initial webview');
471
+ await this.navToInitialWebview();
472
+ this.logEvent('initialWebviewNavigated');
473
+ }
468
474
 
469
- if (this.isSafari() && this.isRealDevice() && _support.util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {
470
- await this.setUrl(this._currentUrl);
475
+ if (!this.doesSafariSupportUrlArgument() && this.isRealDevice()) {
476
+ this.log.info(`About to set the initial URL to '${this._currentUrl}' on the device. ` + `Use 'safariInitialUrl' capability in order to customize it`);
477
+ await this.setUrl(this._currentUrl);
478
+ }
471
479
  }
472
480
  }
473
481
 
@@ -1289,4 +1297,4 @@ var _default = XCUITestDriver;
1289
1297
  exports.default = _default;require('source-map-support').install();
1290
1298
 
1291
1299
 
1292
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsImdldERlZmF1bHRVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwiaW5jbHVkZXMiLCJwb3J0Iiwibm9SZXNldCIsImZ1bGxSZXNldCIsImlvc1Nka1ZlcnNpb24iLCJyZWFsRGV2aWNlIiwiZGV0ZXJtaW5lRGV2aWNlIiwic2ltdWxhdG9yRGV2aWNlc1NldFBhdGgiLCJkZXZpY2VzU2V0UGF0aCIsInBsYXRmb3JtVmVyc2lvbiIsImdldFBsYXRmb3JtVmVyc2lvbiIsIm5vcm1hbGl6ZWRWZXJzaW9uIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsIkVycm9yIiwiaXNFbXB0eSIsIndlYkRyaXZlckFnZW50VXJsIiwibG9nRXZlbnQiLCJ0b0xvd2VyIiwiYXBwIiwidW5kZWZpbmVkIiwicHJvY2Vzc0FyZ3VtZW50cyIsImJ1bmRsZUlkIiwic2FmYXJpSW5pdGlhbFVybCIsImNvbmZpZ3VyZUFwcCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJzdGFydExvZ0NhcHR1cmUiLCJza2lwTG9nQ2FwdHVyZSIsInJlc3VsdCIsImlzTG9nQ2FwdHVyZVN0YXJ0ZWQiLCJpc1NpbXVsYXRvciIsInNodXRkb3duT3RoZXJTaW11bGF0b3JzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJpc1NhZmFyaSIsInNhZmFyaUdsb2JhbFByZWZlcmVuY2VzIiwidXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3MiLCJsb2NhbENvbmZpZyIsInNpbSIsImN1c3RvbVNTTENlcnQiLCJjZXJ0SGVhZCIsInRydW5jYXRlIiwibGVuZ3RoIiwic3RhcnRTaW0iLCJsYXVuY2hXaXRoSURCIiwiaWRiIiwiSURCIiwiY29ubmVjdCIsIm1lc3NhZ2UiLCJQeWlkZXZpY2UiLCJpbnN0YWxsUHJvZmlsZSIsInBheWxvYWQiLCJpbnN0YWxsQVVUIiwiaXNBcHBJbnN0YWxsZWQiLCJlcnJvckFuZFRocm93IiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uc01hcHBpbmciLCJ0b1BhaXJzIiwicGFyc2UiLCJzZXRQZXJtaXNzaW9ucyIsIndhcm4iLCJjYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQiLCJlbmFibGVDYWxlbmRhckFjY2VzcyIsImRpc2FibGVDYWxlbmRhckFjY2VzcyIsInN0YXJ0V2RhIiwic2V0UmVkdWNlTW90aW9uIiwic2V0SW5pdGlhbE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iLCJvcGVuVXJsIiwiYXV0b1dlYnZpZXciLCJuYXZUb0luaXRpYWxXZWJ2aWV3Iiwic2V0VXJsIiwiaGFzVmFsdWUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJ1c2VQb3J0Rm9yd2FyZGluZyIsIndkYUJhc2VVcmwiLCJERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSIsInJlcXVlc3RDb25uZWN0aW9uIiwidXJsIiwiZGV2aWNlUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJuYW1lIiwidXNlWGN0ZXN0cnVuRmlsZSIsImlzU291cmNlRnJlc2giLCJkZXJpdmVkRGF0YVBhdGgiLCJwYXRoIiwibm9ybWFsaXplIiwiaXNCdXN5IiwiYm9vdHN0cmFwUGF0aCIsImFjcXVpcmUiLCJ1c2VOZXdXREEiLCJxdWl0QW5kVW5pbnN0YWxsIiwic2V0dXBDYWNoaW5nIiwibXNnIiwicmVzdWx0QnVuZGxlUGF0aCIsInN0YXJ0dXBSZXRyaWVzIiwid2RhU3RhcnR1cFJldHJpZXMiLCJzdGFydHVwUmV0cnlJbnRlcnZhbCIsIndkYVN0YXJ0dXBSZXRyeUludGVydmFsIiwicmV0cnlDb3VudCIsInJldHJpZXMiLCJtYWpvciIsImxhdW5jaCIsImVyciIsImVycm9yTXNnIiwib3JpZ2luYWxTdGFja3RyYWNlIiwic3RhcnRXZGFTZXNzaW9uIiwic3RhY2siLCJjbGVhclN5c3RlbUZpbGVzIiwiZnVsbHlTdGFydGVkIiwic2VydmVyIiwicmVjb3JkZXIiLCJjb21wYWN0IiwiX3JlY2VudFNjcmVlblJlY29yZGVyIiwiX2F1ZGlvUmVjb3JkZXIiLCJfdHJhZmZpY0NhcHR1cmUiLCJpbnRlcnJ1cHQiLCJjbGVhbnVwIiwiX3BlcmZSZWNvcmRlcnMiLCJCIiwiYWxsIiwibWFwIiwieCIsInN0b3AiLCJzdG9wUmVtb3RlIiwicmVzZXRPblNlc3Npb25TdGFydE9ubHkiLCJlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd24iLCJjcmVhdGVTaW0iLCJkZWxldGUiLCJzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UiLCJyZXNldExvY2F0aW9uU2VydmljZSIsIm1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlIiwiaWdub3JlIiwic3lzbG9nIiwic3RvcENhcHR1cmUiLCJqd3Byb3h5IiwicXVpdCIsInJlbGVhc2VDb25uZWN0aW9uIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJyZWNlaXZlQXN5bmNSZXNwb25zZSIsImFwcElzUGFja2FnZU9yQnVuZGxlIiwidGVzdCIsImhlbHBlcnMiLCJkZXZpY2VOYW1lIiwic2V0dXBWZXJzaW9uQ2FwcyIsInRvTG93ZXJDYXNlIiwiZGV2aWNlUGxhdGZvcm0iLCJkZXZpY2VzIiwiam9pbiIsImlnbiIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwicnVuT3B0cyIsInNjYWxlRmFjdG9yIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJwYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwiaXNIZWFkbGVzcyIsInRyYWNlUG9pbnRlciIsInNpbXVsYXRvclRyYWNlUG9pbnRlciIsImRldmljZVByZWZlcmVuY2VzIiwiU2ltdWxhdG9yV2luZG93Q2VudGVyIiwiaXNJbnRlZ2VyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzdGFydHVwVGltZW91dCIsImlzU3RyaW5nIiwidG9VcHBlckNhc2UiLCJTaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiIsIlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUiLCJydW4iLCJwbGF0Zm9ybU5hbWUiLCJpc1R2T1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJQTEFURk9STV9OQU1FX0lPUyIsImxhdW5jaEFwcCIsIkFQUF9MQVVOQ0hfVElNRU9VVCIsInNpbWN0bCIsImNoZWNrU3RhdHVzIiwicmVzcG9uc2UiLCJjdXJyZW50QXBwIiwiYnVuZGxlSUQiLCJwYXJzZUludCIsImlzQXJyYXkiLCJlbnYiLCJpc1BsYWluT2JqZWN0IiwibGFuZ3VhZ2UiLCJwdXNoIiwibG9jYWxlIiwiaXNOaWwiLCJzaG91bGRUZXJtaW5hdGVBcHAiLCJmb3JjZUFwcExhdW5jaCIsIndkYUNhcHMiLCJhdXRvTGF1bmNoIiwiYXJndW1lbnRzIiwiZW52aXJvbm1lbnQiLCJldmVudGxvb3BJZGxlRGVsYXlTZWMiLCJ3ZGFFdmVudGxvb3BJZGxlRGVsYXkiLCJzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZSIsIndhaXRGb3JRdWllc2NlbmNlIiwic2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uIiwic2ltcGxlSXNWaXNpYmxlQ2hlY2siLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciIsIndhaXRGb3JJZGxlVGltZW91dCIsImVsZW1lbnRSZXNwb25zZUZpZWxkcyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSIsImZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImRlZmF1bHRBbGVydEFjdGlvbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImlzV2VidmlldyIsImNhblByb3h5IiwiaXNXZWJDb250ZXh0IiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FB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QUFPTCxNQUFNLENBQUNhLE1BQVAsQ0FBYztBQUFDQyxNQUFBQSxJQUFJLEVBQUUsS0FBSzNELElBQUwsQ0FBVTJEO0FBQWpCLEtBQWQsRUFBc0M4USxhQUF0QyxFQUNMLEtBQUszRCxPQUFMLENBQWFvQixZQURSLEVBQ3NCLEtBQUswQyxVQUFMLElBQW1CLEVBRHpDLENBQVA7QUFFRDs7QUFFVSxRQUFMUyxLQUFLLEdBQUk7QUFDYixRQUFJLEtBQUtyVixJQUFMLENBQVU0RSxPQUFkLEVBQXVCO0FBRXJCLFVBQUk1RSxJQUFJLEdBQUdZLGdCQUFFMFUsU0FBRixDQUFZLEtBQUt0VixJQUFqQixDQUFYOztBQUNBQSxNQUFBQSxJQUFJLENBQUM0RSxPQUFMLEdBQWUsS0FBZjtBQUNBNUUsTUFBQUEsSUFBSSxDQUFDNkUsU0FBTCxHQUFpQixLQUFqQjtBQUNBLFlBQU0wUSxlQUFlLEdBQUcsS0FBS0MseUJBQTdCOztBQUNBLFdBQUtBLHlCQUFMLEdBQWlDLE1BQU0sQ0FBRSxDQUF6Qzs7QUFDQSxVQUFJO0FBQ0YsY0FBTSxLQUFLclAsUUFBTCxDQUFjbkcsSUFBZCxDQUFOO0FBQ0QsT0FGRCxTQUVVO0FBQ1IsYUFBS3dWLHlCQUFMLEdBQWlDRCxlQUFqQztBQUNEO0FBQ0Y7O0FBQ0QsVUFBTSxNQUFNRixLQUFOLEVBQU47QUFDRDs7QUE5cUNxQzs7O0FBaXJDeEN4UyxNQUFNLENBQUNhLE1BQVAsQ0FBYzdELGNBQWMsQ0FBQzRWLFNBQTdCLEVBQXdDQyxjQUF4QztlQUVlN1YsYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCBtanBlZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2ltLCBnZXRFeGlzdGluZ1NpbSwgcnVuU2ltdWxhdG9yUmVzZXQsIGluc3RhbGxUb1NpbXVsYXRvcixcbiAgc2h1dGRvd25PdGhlclNpbXVsYXRvcnMsIHNodXRkb3duU2ltdWxhdG9yLCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlc1xufSBmcm9tICcuL3NpbXVsYXRvci1tYW5hZ2VtZW50JztcbmltcG9ydCB7IGdldFNpbXVsYXRvciB9IGZyb20gJ2FwcGl1bS1pb3Mtc2ltdWxhdG9yJztcbmltcG9ydCB7XG4gIGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGksIGluc3RhbGxDZXJ0aWZpY2F0ZSwgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5LFxuICBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSxcbn0gZnJvbSAnLi9jZXJ0LXV0aWxzJztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdmVyaWZ5QXBwbGljYXRpb25QbGF0Zm9ybSwgZXh0cmFjdEJ1bmRsZUlkIH0gZnJvbSAnLi9hcHAtdXRpbHMnO1xuaW1wb3J0IHsgZGVzaXJlZENhcENvbnN0cmFpbnRzLCBQTEFURk9STV9OQU1FX0lPUywgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgZGV0ZWN0VWRpZCwgZ2V0QW5kQ2hlY2tYY29kZVZlcnNpb24sIGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbixcbiAgY2hlY2tBcHBQcmVzZW50LCBnZXREcml2ZXJJbmZvLFxuICBjbGVhclN5c3RlbUZpbGVzLCB0cmFuc2xhdGVEZXZpY2VOYW1lLCBub3JtYWxpemVDb21tYW5kVGltZW91dHMsXG4gIERFRkFVTFRfVElNRU9VVF9LRVksIG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAsXG4gIHByaW50VXNlciwgcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzLFxuICBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24sIGlzTG9jYWxIb3N0XG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgcnVuUmVhbERldmljZVJlc2V0LCBpbnN0YWxsVG9SZWFsRGV2aWNlLFxuICBnZXRSZWFsRGV2aWNlT2JqXG59IGZyb20gJy4vcmVhbC1kZXZpY2UtbWFuYWdlbWVudCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgSURCIGZyb20gJ2FwcGl1bS1pZGInO1xuaW1wb3J0IERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZIGZyb20gJy4vZGV2aWNlLWNvbm5lY3Rpb25zLWZhY3RvcnknO1xuaW1wb3J0IFB5aWRldmljZSBmcm9tICcuL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcblxuXG5jb25zdCBTSFVURE9XTl9PVEhFUl9GRUFUX05BTUUgPSAnc2h1dGRvd25fb3RoZXJfc2ltcyc7XG5jb25zdCBDVVNUT01JWkVfUkVTVUxUX0JVTkRQRV9QQVRIID0gJ2N1c3RvbWl6ZV9yZXN1bHRfYnVuZGxlX3BhdGgnO1xuXG5jb25zdCBkZWZhdWx0U2VydmVyQ2FwcyA9IHtcbiAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgYnJvd3Nlck5hbWU6ICcnLFxuICBwbGF0Zm9ybTogJ01BQycsXG4gIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogZmFsc2UsXG59O1xuY29uc3QgU0FGQVJJX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUubW9iaWxlc2FmYXJpJztcbmNvbnN0IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTID0gMjtcbmNvbnN0IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgPSAxO1xuY29uc3QgV0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS14Y3VpdGVzdC1kcml2ZXIvYmxvYi9tYXN0ZXIvZG9jcy9yZWFsLWRldmljZS1jb25maWcubWQnO1xuY29uc3QgV0RBX1NUQVJUVVBfUkVUUllfSU5URVJWQUwgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfU0VUVElOR1MgPSB7XG4gIG5hdGl2ZVdlYlRhcDogZmFsc2UsXG4gIG5hdGl2ZVdlYlRhcFN0cmljdDogZmFsc2UsXG4gIHVzZUpTT05Tb3VyY2U6IGZhbHNlLFxuICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0cnVlLFxuICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiAndHlwZSxsYWJlbCcsXG4gIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9XZWJEcml2ZXJBZ2VudC9ibG9iL21hc3Rlci9XZWJEcml2ZXJBZ2VudExpYi9VdGlsaXRpZXMvRkJDb25maWd1cmF0aW9uLm0gZm9yIGZvbGxvd2luZyBzZXR0aW5ncycgdmFsdWVzXG4gIG1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk6IDI1LFxuICBtanBlZ1NlcnZlckZyYW1lcmF0ZTogMTAsXG4gIHNjcmVlbnNob3RRdWFsaXR5OiAxLFxuICBtanBlZ1NjYWxpbmdGYWN0b3I6IDEwMCxcbiAgLy8gc2V0IGByZWR1Y2VNb3Rpb25gIHRvIGBudWxsYCBzbyB0aGF0IGl0IHdpbGwgYmUgdmVyaWZpZWQgYnV0IHN0aWxsIHNldCBlaXRoZXIgdHJ1ZS9mYWxzZVxuICByZWR1Y2VNb3Rpb246IG51bGwsXG59O1xuLy8gVGhpcyBsb2NrIGFzc3VyZXMsIHRoYXQgZWFjaCBkcml2ZXIgc2Vzc2lvbiBkb2VzIG5vdFxuLy8gYWZmZWN0IHNoYXJlZCByZXNvdXJjZXMgb2YgdGhlIG90aGVyIHBhcmFsbGVsIHNlc3Npb25zXG5jb25zdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUgPSA1MDA7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5jb25zdCBOT19QUk9YWV9OQVRJVkVfTElTVCA9IFtcbiAgWydERUxFVEUnLCAvd2luZG93L10sXG4gIFsnR0VUJywgL15cXC9zZXNzaW9uXFwvW15cXC9dKyQvXSxcbiAgWydHRVQnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ0dFVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydHRVQnLCAvYXBwaXVtL10sXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9jb250ZXh0L10sXG4gIFsnR0VUJywgL2xvY2F0aW9uL10sXG4gIFsnR0VUJywgL2xvZy9dLFxuICBbJ0dFVCcsIC9zY3JlZW5zaG90L10sXG4gIFsnR0VUJywgL3NpemUvXSxcbiAgWydHRVQnLCAvc291cmNlL10sXG4gIFsnR0VUJywgL3RpbWVvdXRzJC9dLFxuICBbJ0dFVCcsIC91cmwvXSxcbiAgWydHRVQnLCAvd2luZG93L10sXG4gIFsnUE9TVCcsIC9hY2NlcHRfYWxlcnQvXSxcbiAgWydQT1NUJywgL2FjdGlvbnMkL10sXG4gIFsnUE9TVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnUE9TVCcsIC9hbGVydFxcL1teXFwvXSsvXSxcbiAgWydQT1NUJywgL2FwcGl1bS9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvaXNfbG9ja2VkL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9sb2NrL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC91bmxvY2svXSxcbiAgWydQT1NUJywgL2JhY2svXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jb250ZXh0L10sXG4gIFsnUE9TVCcsIC9kaXNtaXNzX2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9lbGVtZW50XFwvYWN0aXZlL10sIC8vIE1KU09OV1AgZ2V0IGFjdGl2ZSBlbGVtZW50IHNob3VsZCBwcm94eVxuICBbJ1BPU1QnLCAvZWxlbWVudCQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRzJC9dLFxuICBbJ1BPU1QnLCAvZXhlY3V0ZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvbG9nL10sXG4gIFsnUE9TVCcsIC9tb3ZldG8vXSxcbiAgWydQT1NUJywgL3JlY2VpdmVfYXN5bmNfcmVzcG9uc2UvXSwgLy8gYWx3YXlzLCBpbiBjYXNlIGNvbnRleHQgc3dpdGNoZXMgd2hpbGUgd2FpdGluZ1xuICBbJ1BPU1QnLCAvc2Vzc2lvblxcL1teXFwvXStcXC9sb2NhdGlvbi9dLCAvLyBnZW8gbG9jYXRpb24sIGJ1dCBub3QgZWxlbWVudCBsb2NhdGlvblxuICBbJ1BPU1QnLCAvc2hha2UvXSxcbiAgWydQT1NUJywgL3RpbWVvdXRzL10sXG4gIFsnUE9TVCcsIC90b3VjaC9dLFxuICBbJ1BPU1QnLCAvdXJsL10sXG4gIFsnUE9TVCcsIC92YWx1ZS9dLFxuICBbJ1BPU1QnLCAvd2luZG93L10sXG4gIFsnREVMRVRFJywgL2Nvb2tpZS9dLFxuICBbJ0dFVCcsIC9jb29raWUvXSxcbiAgWydQT1NUJywgL2Nvb2tpZS9dLFxuXTtcbmNvbnN0IE5PX1BST1hZX1dFQl9MSVNUID0gW1xuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvZWxlbWVudC9dLFxuICBbJ0dFVCcsIC90ZXh0L10sXG4gIFsnR0VUJywgL3RpdGxlL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY2xpY2svXSxcbiAgWydQT1NUJywgL2VsZW1lbnQvXSxcbiAgWydQT1NUJywgL2ZvcndhcmQvXSxcbiAgWydQT1NUJywgL2ZyYW1lL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9yZWZyZXNoL10sXG5dLmNvbmNhdChOT19QUk9YWV9OQVRJVkVfTElTVCk7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXG5cbmNvbnN0IE1FTU9JWkVEX0ZVTkNUSU9OUyA9IFtcbiAgJ2dldFN0YXR1c0JhckhlaWdodCcsXG4gICdnZXREZXZpY2VQaXhlbFJhdGlvJyxcbiAgJ2dldFNjcmVlbkluZm8nLFxuXTtcblxuY2xhc3MgWENVSVRlc3REcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgICAgJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICAgICd0YWcgbmFtZScsXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdwYXJ0aWFsIGxpbmsgdGV4dCcsXG4gICAgXTtcbiAgICB0aGlzLnJlc2V0SW9zKCk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyhERUZBVUxUX1NFVFRJTkdTLCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5sb2dzID0ge307XG5cbiAgICAvLyBtZW1vaXplIGZ1bmN0aW9ucyBoZXJlLCBzbyB0aGF0IHRoZXkgYXJlIGRvbmUgb24gYSBwZXItaW5zdGFuY2UgYmFzaXNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE1FTU9JWkVEX0ZVTkNUSU9OUykge1xuICAgICAgdGhpc1tmbl0gPSBfLm1lbW9pemUodGhpc1tmbl0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ICE9PSAnbmF0aXZlV2ViVGFwJyAmJiBrZXkgIT09ICduYXRpdmVXZWJUYXBTdHJpY3QnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtcbiAgICAgICAgc2V0dGluZ3M6IHtba2V5XTogdmFsdWV9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vcHRzW2tleV0gPSAhIXZhbHVlO1xuICB9XG5cbiAgcmVzZXRJb3MgKCkge1xuICAgIHRoaXMub3B0cyA9IHRoaXMub3B0cyB8fCB7fTtcbiAgICB0aGlzLndkYSA9IG51bGw7XG4gICAgdGhpcy5vcHRzLmRldmljZSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IFtdO1xuICAgIHRoaXMuc2FmYXJpID0gZmFsc2U7XG4gICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSBudWxsO1xuXG4gICAgdGhpcy5jdXJXZWJGcmFtZXMgPSBbXTtcbiAgICB0aGlzLl9jdXJyZW50VXJsID0gbnVsbDtcbiAgICB0aGlzLmN1ckNvbnRleHQgPSBudWxsO1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0ge307XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuaW1wbGljaXRXYWl0TXMgPSAwO1xuICAgIHRoaXMuYXN5bmNsaWJXYWl0TXMgPSAwO1xuICAgIHRoaXMucGFnZUxvYWRNcyA9IDYwMDA7XG4gICAgdGhpcy5sYW5kc2NhcGVXZWJDb29yZHNPZmZzZXQgPSAwO1xuICAgIHRoaXMucmVtb3RlID0gbnVsbDtcblxuICAgIHRoaXMud2ViRWxlbWVudHNDYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGwgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmRyaXZlckluZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlckluZm8gPSBhd2FpdCBnZXREcml2ZXJJbmZvKCk7XG4gICAgfVxuICAgIGxldCBzdGF0dXMgPSB7YnVpbGQ6IHt2ZXJzaW9uOiB0aGlzLmRyaXZlckluZm8udmVyc2lvbn19O1xuICAgIGlmICh0aGlzLmNhY2hlZFdkYVN0YXR1cykge1xuICAgICAgc3RhdHVzLndkYSA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgbWVyZ2VDbGlBcmdzVG9PcHRzICgpIHtcbiAgICBsZXQgZGlkTWVyZ2UgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNsaUFyZ3Mgc2hvdWxkIG5ldmVyIGluY2x1ZGUgYW55dGhpbmcgd2UgZG8gbm90IGV4cGVjdC5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNsaUFyZ3MgPz8ge30pKSB7XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCBrZXkpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYENMSSBhcmcgJyR7a2V5fScgd2l0aCB2YWx1ZSAnJHt2YWx1ZX0nIG92ZXJ3cml0ZXMgdmFsdWUgJyR7dGhpcy5vcHRzW2tleV19JyBzZW50IGluIHZpYSBjYXBzKWApO1xuICAgICAgICBkaWRNZXJnZSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZGlkTWVyZ2U7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhID0ge307IC8vIHRoaXMgaXMgdXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB0aGUgc3RhdGUgd2Ugc3RhcnQgc28gd2hlbiB3ZSBkZWxldGUgdGhlIHNlc3Npb24gd2UgY2FuIHB1dCB0aGluZ3MgYmFja1xuICAgIHRyeSB7XG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuICAgICAgdGhpcy5vcHRzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcblxuICAgICAgLy8gbWVyZ2UgY2xpIGFyZ3MgdG8gb3B0cywgYW5kIGlmIHdlIGRpZCBtZXJnZSBhbnksIHJldmFsaWRhdGUgb3B0cyB0byBlbnN1cmUgdGhlIGZpbmFsIHNldFxuICAgICAgLy8gaXMgYWxzbyBjb25zaXN0ZW50XG4gICAgICBpZiAodGhpcy5tZXJnZUNsaUFyZ3NUb09wdHMoKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRGVzaXJlZENhcHMoey4uLmNhcHMsIC4uLnRoaXMuY2xpQXJnc30pO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIC8vIG1lcmdlIHNlcnZlciBjYXBhYmlsaXRpZXMgKyBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY2FwcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXJ2ZXJDYXBzLCBjYXBzKTtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgdWRpZCB3aXRoIHdoYXQgaXMgYWN0dWFsbHkgdXNlZFxuICAgICAgY2Fwcy51ZGlkID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXAnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXA6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXBTdHJpY3QgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcFN0cmljdCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcFN0cmljdDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcFN0cmljdH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIHVzZUpTT05Tb3VyY2UgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3VzZUpTT05Tb3VyY2UnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHt1c2VKU09OU291cmNlOiB0aGlzLm9wdHMudXNlSlNPTlNvdXJjZX0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgd2RhU2V0dGluZ3MgPSB7XG4gICAgICAgIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6IERFRkFVTFRfU0VUVElOR1MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgICAgICAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogREVGQVVMVF9TRVRUSU5HUy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgfTtcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcyA9IHRoaXMub3B0cy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3Nob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzID0gdGhpcy5vcHRzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlckZyYW1lcmF0ZScpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLm1qcGVnU2VydmVyRnJhbWVyYXRlID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyRnJhbWVyYXRlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ3NjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyB0aGUgcXVhbGl0eSBvZiBwaG9uZSBzY3JlZW5zaG90OiAnJHt0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHl9J2ApO1xuICAgICAgICB3ZGFTZXR0aW5ncy5zY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSBXREEgZ2V0cyBvdXIgZGVmYXVsdHMgaW5zdGVhZCBvZiB3aGF0ZXZlciBpdHMgb3duIG1pZ2h0IGJlXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHdkYVNldHRpbmdzKTtcblxuICAgICAgLy8gdHVybiBvbiBtanBlZyBzdHJlYW0gcmVhZGluZyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIE1KUEVHIHN0cmVhbSByZWFkaW5nIFVSTDogJyR7dGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybH0nYCk7XG4gICAgICAgIHRoaXMubWpwZWdTdHJlYW0gPSBuZXcgbWpwZWcuTUpwZWdTdHJlYW0odGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCk7XG4gICAgICAgIGF3YWl0IHRoaXMubWpwZWdTdHJlYW0uc3RhcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihKU09OLnN0cmluZ2lmeShlKSk7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlZmF1bHQgVVJMIGZvciBTYWZhcmkgYnJvd3NlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZGVmYXVsdCBVUkxcbiAgICovXG4gIGdldERlZmF1bHRVcmwgKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICA/ICdodHRwOi8vYXBwaXVtLmlvJ1xuICAgICAgOiBgaHR0cDovLyR7XG4gICAgICAgIHRoaXMub3B0cy5hZGRyZXNzLmluY2x1ZGVzKCc6JykgPyBgWyR7dGhpcy5vcHRzLmFkZHJlc3N9XWAgOiB0aGlzLm9wdHMuYWRkcmVzc1xuICAgICAgfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICB0aGlzLm9wdHMubm9SZXNldCA9ICEhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9ICEhdGhpcy5vcHRzLmZ1bGxSZXNldDtcblxuICAgIGF3YWl0IHByaW50VXNlcigpO1xuXG4gICAgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24gPSBudWxsOyAvLyBGb3IgV0RBIGFuZCB4Y29kZWJ1aWxkXG4gICAgY29uc3Qge2RldmljZSwgdWRpZCwgcmVhbERldmljZX0gPSBhd2FpdCB0aGlzLmRldGVybWluZURldmljZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYERldGVybWluaW5nIGRldmljZSB0byBydW4gdGVzdHMgb246IHVkaWQ6ICcke3VkaWR9JywgcmVhbCBkZXZpY2U6ICR7cmVhbERldmljZX1gKTtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gZGV2aWNlO1xuICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLm9wdHMucmVhbERldmljZSA9IHJlYWxEZXZpY2U7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoKSB7XG4gICAgICBpZiAocmVhbERldmljZSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBUaGUgJ3NpbXVsYXRvckRldmljZXNTZXRQYXRoJyBjYXBhYmlsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3IgZGV2aWNlc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyBzaW11bGF0b3IgZGV2aWNlcyBzZXQgcGF0aCB0byAnJHt0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGh9J2ApO1xuICAgICAgICB0aGlzLm9wdHMuZGV2aWNlLmRldmljZXNTZXRQYXRoID0gdGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMgbm8gcGxhdGZvcm1WZXJzaW9uLCBnZXQgaXQgZnJvbSB0aGUgZGV2aWNlXG4gICAgaWYgKCF0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICYmIHRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgZGV2aWNlIHZlcnNpb246ICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRWZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24pO1xuICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBub3JtYWxpemVkVmVyc2lvbikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm9ybWFsaXplZCBwbGF0Zm9ybVZlcnNpb24gY2FwYWJpbGl0eSB2YWx1ZSAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgdG8gJyR7bm9ybWFsaXplZFZlcnNpb259J2ApO1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnOS4zJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhdGZvcm0gdmVyc2lvbiBtdXN0IGJlIDkuMyBvciBhYm92ZS4gJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnhjb2RlVmVyc2lvbikgJiYgKCF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwgfHwgIXRoaXMub3B0cy5yZWFsRGV2aWNlKSkge1xuICAgICAgLy8gbm8gYHdlYkRyaXZlckFnZW50VXJsYCwgb3Igb24gYSBzaW11bGF0b3IsIHNvIHdlIG5lZWQgYW4gWGNvZGUgdmVyc2lvblxuICAgICAgdGhpcy54Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCd4Y29kZURldGFpbHNSZXRyaWV2ZWQnKTtcblxuICAgIGlmIChfLnRvTG93ZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKSA9PT0gJ3NhZmFyaScpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NhZmFyaSB0ZXN0IHJlcXVlc3RlZCcpO1xuICAgICAgdGhpcy5zYWZhcmkgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzID0gdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgfHwge307XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBTQUZBUklfQlVORExFX0lEO1xuICAgICAgdGhpcy5fY3VycmVudFVybCA9IHRoaXMub3B0cy5zYWZhcmlJbml0aWFsVXJsIHx8IHRoaXMuZ2V0RGVmYXVsdFVybCgpO1xuICAgICAgaWYgKHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc8JywgJzEyLjInKSkge1xuICAgICAgICAvLyB0aGlzIG9wdGlvbiBkb2VzIG5vdCB3b3JrIG9uIDEyLjIgYW5kIGFib3ZlXG4gICAgICAgIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzLmFyZ3MgPSBbJy11JywgdGhpcy5fY3VycmVudFVybF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXBwIHx8IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVBcHAoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwQ29uZmlndXJlZCcpO1xuXG4gICAgLy8gZmFpbCB2ZXJ5IGVhcmx5IGlmIHRoZSBhcHAgZG9lc24ndCBhY3R1YWxseSBleGlzdFxuICAgIC8vIG9yIGlmIGJ1bmRsZSBpZCBkb2Vzbid0IHBvaW50IHRvIGFuIGluc3RhbGxlZCBhcHBcbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgY2hlY2tBcHBQcmVzZW50KHRoaXMub3B0cy5hcHApO1xuXG4gICAgICBpZiAoIXRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSBhd2FpdCBleHRyYWN0QnVuZGxlSWQodGhpcy5vcHRzLmFwcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5ydW5SZXNldCgpO1xuXG4gICAgdGhpcy53ZGEgPSBuZXcgV2ViRHJpdmVyQWdlbnQodGhpcy54Y29kZVZlcnNpb24sIHRoaXMub3B0cywgdGhpcy5sb2cpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW5cbiAgICB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpLmNhdGNoKChlKSA9PiB0aGlzLmxvZy5kZWJ1ZyhlKSk7XG5cbiAgICBjb25zdCBtZW1vaXplZExvZ0luZm8gPSBfLm1lbW9pemUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2cuaW5mbyhcIidza2lwTG9nQ2FwdHVyZScgaXMgc2V0LiBTa2lwcGluZyBzdGFydGluZyBsb2dzIHN1Y2ggYXMgY3Jhc2gsIHN5c3RlbSwgc2FmYXJpIGNvbnNvbGUgYW5kIHNhZmFyaSBuZXR3b3JrLlwiKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdGFydExvZ0NhcHR1cmUgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNraXBMb2dDYXB0dXJlKSB7XG4gICAgICAgIG1lbW9pemVkTG9nSW5mbygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2xvZ0NhcHR1cmVTdGFydGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgaXNMb2dDYXB0dXJlU3RhcnRlZCA9IGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuXG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFNhZmFyaSBnbG9iYWwgcHJlZmVyZW5jZXMgdXBkYXRlZGApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9jYWxDb25maWcgPSBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSwgYXN5bmMgKHNpbSkgPT4ge1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcihzaW0pO1xuXG4gICAgICAgIC8vIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgbmVlZHMgdG8gYmUgY2hhbmdlcyBhIHByaW9yaSwgc28gY2hhbmdlIGZpcnN0LlxuICAgICAgICAvLyBzb21ldGltZXMgdGhlIHNodXRkb3duIHByb2Nlc3MgY2hhbmdlcyB0aGUgc2V0dGluZ3MsIHNvIHJlc2V0IHRoZW0sXG4gICAgICAgIC8vIGtub3dpbmcgdGhhdCB0aGUgc2ltIGlzIGFscmVhZHkgc2h1dFxuICAgICAgICBhd2FpdCBzZXRMb2NhbGVBbmRQcmVmZXJlbmNlcyhzaW0sIHRoaXMub3B0cywgdGhpcy5pc1NhZmFyaSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQgJiYgIShhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSkge1xuICAgICAgICBjb25zdCBjZXJ0SGVhZCA9IF8udHJ1bmNhdGUodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQsIHtsZW5ndGg6IDIwfSk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEluc3RhbGxpbmcgdGhlIGN1c3RvbSBTU0wgY2VydGlmaWNhdGUgJyR7Y2VydEhlYWR9J2ApO1xuICAgICAgICBpZiAoYXdhaXQgaGFzQ2VydGlmaWNhdGVMZWdhY3kodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBNYWtpbmcgc3VyZSBTaW11bGF0b3IgaXMgc2h1dCBkb3duLCAnICtcbiAgICAgICAgICAgICdzbyB0aGF0IFNTTCBjZXJ0aWZpY2F0ZSBpbnN0YWxsYXRpb24gdGFrZXMgZWZmZWN0YCk7XG4gICAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSk7XG4gICAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlTGVnYWN5KHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdjdXN0b21DZXJ0SW5zdGFsbGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRTaW0oKTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmIGF3YWl0IGRvZXNTdXBwb3J0S2V5Y2hhaW5BcGkodGhpcy5vcHRzLmRldmljZSkpIHtcbiAgICAgICAgLy8gU2ltdWxhdG9yIG11c3QgYmUgYm9vdGVkIGluIG9yZGVyIHRvIGNhbGwgdGhpcyBoZWxwZXJcbiAgICAgICAgYXdhaXQgaW5zdGFsbENlcnRpZmljYXRlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmxhdW5jaFdpdGhJREIgJiYgdGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaWRiID0gbmV3IElEQih7dWRpZH0pO1xuICAgICAgICAgIGF3YWl0IGlkYi5jb25uZWN0KCk7XG4gICAgICAgICAgdGhpcy5vcHRzLmRldmljZS5pZGIgPSBpZGI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBpZGIgd2lsbCBub3QgYmUgdXNlZCBmb3IgU2ltdWxhdG9yIGludGVyYWN0aW9uLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dFdmVudCgnc2ltU3RhcnRlZCcpO1xuICAgICAgaWYgKCFpc0xvZ0NhcHR1cmVTdGFydGVkKSB7XG4gICAgICAgIC8vIFJldHJ5IGxvZyBjYXB0dXJlIGlmIFNpbXVsYXRvciB3YXMgbm90IHJ1bm5pbmcgYmVmb3JlXG4gICAgICAgIGF3YWl0IHN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmN1c3RvbVNTTENlcnQpIHtcbiAgICAgIGF3YWl0IG5ldyBQeWlkZXZpY2UodWRpZCkuaW5zdGFsbFByb2ZpbGUoe3BheWxvYWQ6IHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0fSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbEFVVCgpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnYXBwSW5zdGFsbGVkJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugb25seSBoYXZlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBubyBhcHAsIGZhaWwgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwICYmIHRoaXMub3B0cy5idW5kbGVJZCAmJiAhdGhpcy5zYWZhcmkpIHtcbiAgICAgIGlmICghYXdhaXQgdGhpcy5vcHRzLmRldmljZS5pc0FwcEluc3RhbGxlZCh0aGlzLm9wdHMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYEFwcCB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHVua25vd25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdTZXR0aW5nIHRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbnMgYmVmb3JlIFdEQSBpcyBzdGFydGVkJyk7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtaXNzaW9uc01hcHBpbmddIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKHRoaXMub3B0cy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zZXRQZXJtaXNzaW9ucyhidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybignU2V0dGluZyBwZXJtaXNzaW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBTaW11bGF0b3IuICcgK1xuICAgICAgICAgICdUaGUgXCJwZXJtaXNzaW9uc1wiIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU2ltdWxhdG9yKCkpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZW5hYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kaXNhYmxlQ2FsZW5kYXJBY2Nlc3ModGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhKHRoaXMub3B0cy5zZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRSZWR1Y2VNb3Rpb24odGhpcy5vcHRzLnJlZHVjZU1vdGlvbik7XG5cbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxPcmllbnRhdGlvbih0aGlzLm9wdHMub3JpZW50YXRpb24pO1xuICAgIHRoaXMubG9nRXZlbnQoJ29yaWVudGF0aW9uU2V0Jyk7XG5cbiAgICAvLyByZWFsIGRldmljZXMgd2lsbCBiZSBoYW5kbGVkIGxhdGVyLCBhZnRlciB0aGUgd2ViIGNvbnRleHQgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmICF0aGlzLmlzUmVhbERldmljZSgpXG4gICAgICAmJiB1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAvLyBvbiAxMi4yIHRoZSBwYWdlIGlzIG5vdCBvcGVuZWQgaW4gV0RBXG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLm9wZW5VcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdXYWl0aW5nIGZvciBpbml0aWFsIHdlYnZpZXcnKTtcbiAgICAgIGF3YWl0IHRoaXMubmF2VG9Jbml0aWFsV2VidmlldygpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnaW5pdGlhbFdlYnZpZXdOYXZpZ2F0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFdlYkRyaXZlckFnZW50UnVubmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSBUaGUgaWQgb2YgdGhlIHRhcmdldCBzZXNzaW9uIHRvIGxhdW5jaCBXREEgd2l0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIHRlc3QgdGFyZ2V0IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgc3RhcnRXZGEgKHNlc3Npb25JZCwgcmVhbERldmljZSkge1xuICAgIC8vIERvbid0IGNsZWFudXAgdGhlIHByb2Nlc3NlcyBpZiB3ZWJEcml2ZXJBZ2VudFVybCBpcyBzZXRcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBhd2FpdCB0aGlzLndkYS5jbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VQb3J0Rm9yd2FyZGluZyA9IHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmICF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybFxuICAgICAgJiYgaXNMb2NhbEhvc3QodGhpcy53ZGEud2RhQmFzZVVybCk7XG4gICAgYXdhaXQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVxdWVzdENvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQsIHRoaXMud2RhLnVybC5wb3J0LCB7XG4gICAgICBkZXZpY2VQb3J0OiB1c2VQb3J0Rm9yd2FyZGluZyA/IHRoaXMud2RhLndkYVJlbW90ZVBvcnQgOiBudWxsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgfSk7XG5cbiAgICAvLyBMZXQgbXVsdGlwbGUgV0RBIGJpbmFyaWVzIHdpdGggZGlmZmVyZW50IGRlcml2ZWQgZGF0YSBmb2xkZXJzIGJlIGJ1aWx0IGluIHBhcmFsbGVsXG4gICAgLy8gQ29uY3VycmVudCBXREEgYnVpbGRzIGZyb20gdGhlIHNhbWUgc291cmNlIHdpbGwgY2F1c2UgeGNvZGVidWlsZCBzeW5jaHJvbml6YXRpb24gZXJyb3JzXG4gICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgaWYgKHRoaXMub3B0cy51c2VYY3Rlc3RydW5GaWxlIHx8ICEoYXdhaXQgdGhpcy53ZGEuaXNTb3VyY2VGcmVzaCgpKSkge1xuICAgICAgLy8gRmlyc3QtdGltZSBjb21waWxhdGlvbiBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCB3aGljaCBpcyBkb25lIGZhc3RlciBpZiBleGVjdXRlZFxuICAgICAgLy8gc2VxdWVudGlhbGx5LiBYY29kZWJ1aWxkIHNwcmVhZHMgdGhlIGxvYWQgY2F1c2VkIGJ5IHRoZSBjbGFuZyBjb21waWxlciB0byBhbGwgYXZhaWxhYmxlIENQVSBjb3Jlc1xuICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFN0YXJ0aW5nIFdlYkRyaXZlckFnZW50IGluaXRpYWxpemF0aW9uIHdpdGggdGhlIHN5bmNocm9uaXphdGlvbiBrZXkgJyR7c3luY2hyb25pemF0aW9uS2V5fSdgKTtcbiAgICBpZiAoU0hBUkVEX1JFU09VUkNFU19HVUFSRC5pc0J1c3koKSAmJiAhdGhpcy5vcHRzLmRlcml2ZWREYXRhUGF0aCAmJiAhdGhpcy5vcHRzLmJvb3RzdHJhcFBhdGgpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBDb25zaWRlciBzZXR0aW5nIGEgdW5pcXVlICdkZXJpdmVkRGF0YVBhdGgnIGNhcGFiaWxpdHkgdmFsdWUgZm9yIGVhY2ggcGFyYWxsZWwgZHJpdmVyIGluc3RhbmNlIGAgK1xuICAgICAgICBgdG8gYXZvaWQgY29uZmxpY3RzIGFuZCBzcGVlZCB1cCB0aGUgYnVpbGRpbmcgcHJvY2Vzc2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENhcGFiaWxpdHkgJ3VzZU5ld1dEQScgc2V0IHRvIHRydWUsIHNvIHVuaW5zdGFsbGluZyBXREEgYmVmb3JlIHByb2NlZWRpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFVbmluc3RhbGxlZCcpO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEuc2V0dXBDYWNoaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvY2FsIGhlbHBlciBmb3IgdGhlIHR3byBwbGFjZXMgd2UgbmVlZCB0byB1bmluc3RhbGwgd2RhIGFuZCByZS1zdGFydCBpdFxuICAgICAgY29uc3QgcXVpdEFuZFVuaW5zdGFsbCA9IGFzeW5jIChtc2cpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcobXNnKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKCdOb3QgcXVpdHRpbmcvdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50IHNpbmNlIHdlYkRyaXZlckFnZW50VXJsIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZy53YXJuKCdRdWl0dGluZyBhbmQgdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZWQgaW4gdGhlIGZvbGxvd2luZyBXREEgYnVpbGRcbiAgICAgIGlmICh0aGlzLm9wdHMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydHVwUmV0cmllcyA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcyB8fCAodGhpcy5pc1JlYWxEZXZpY2UoKSA/IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgOiBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyk7XG4gICAgICBjb25zdCBzdGFydHVwUmV0cnlJbnRlcnZhbCA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCB8fCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTDtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBUcnlpbmcgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgJHtzdGFydHVwUmV0cmllc30gdGltZXMgd2l0aCAke3N0YXJ0dXBSZXRyeUludGVydmFsfW1zIGludGVydmFsYCk7XG4gICAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzKSAmJiAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBUaGVzZSB2YWx1ZXMgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgY2hhbmdpbmcgd2RhU3RhcnR1cFJldHJpZXMvd2RhU3RhcnR1cFJldHJ5SW50ZXJ2YWwgY2FwYWJpbGl0aWVzYCk7XG4gICAgICB9XG4gICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgICBhd2FpdCByZXRyeUludGVydmFsKHN0YXJ0dXBSZXRyaWVzLCBzdGFydHVwUmV0cnlJbnRlcnZhbCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEF0dGVtcHRlZCcpO1xuICAgICAgICBpZiAocmV0cnlDb3VudCA+IDApIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBSZXRyeWluZyBXREEgc3RhcnR1cCAoJHtyZXRyeUNvdW50ICsgMX0gb2YgJHtzdGFydHVwUmV0cmllc30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBvbiB4Y29kZSAxMCBpbnN0YWxsZCB3aWxsIG9mdGVuIHRyeSB0byBhY2Nlc3MgdGhlIGFwcCBmcm9tIGl0cyBzdGFnaW5nXG4gICAgICAgICAgLy8gZGlyZWN0b3J5IGJlZm9yZSBmdWxseSBtb3ZpbmcgaXQgdGhlcmUsIGFuZCBmYWlsLiBSZXRyeWluZyBvbmNlXG4gICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaGVscHNcbiAgICAgICAgICBjb25zdCByZXRyaWVzID0gdGhpcy54Y29kZVZlcnNpb24ubWFqb3IgPj0gMTAgPyAyIDogMTtcbiAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IGF3YWl0IHJldHJ5KHJldHJpZXMsIHRoaXMud2RhLmxhdW5jaC5iaW5kKHRoaXMud2RhKSwgc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRGYWlsZWQnKTtcbiAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBsYXVuY2ggV2ViRHJpdmVyQWdlbnQgYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYC4gTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMud2RhLnByb3h5UmVxUmVzLmJpbmQodGhpcy53ZGEpO1xuICAgICAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBsZXQgb3JpZ2luYWxTdGFja3RyYWNlID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZXRyeUludGVydmFsKDE1LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uQXR0ZW1wdGVkJyk7XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2VuZGluZyBjcmVhdGVTZXNzaW9uIGNvbW1hbmQgdG8gV0RBJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IHRoaXMuY2FjaGVkV2RhU3RhdHVzIHx8IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V2RhU2Vzc2lvbih0aGlzLm9wdHMuYnVuZGxlSWQsIHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICBvcmlnaW5hbFN0YWNrdHJhY2UgPSBlcnIuc3RhY2s7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBGYWlsZWQgdG8gY3JlYXRlIFdEQSBzZXNzaW9uICgke2Vyci5tZXNzYWdlfSkuIFJldHJ5aW5nLi4uYCk7XG4gICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uU3RhcnRlZCcpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAob3JpZ2luYWxTdGFja3RyYWNlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhvcmlnaW5hbFN0YWNrdHJhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50IHNlc3Npb24gYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYCBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGF3YWl0IG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAodGhpcy53ZGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgZXhwZWN0IGNlcnRhaW4gc29ja2V0IGVycm9ycyB1bnRpbCB0aGlzIHBvaW50LCBidXQgbm93XG4gICAgICAgIC8vIG1hcmsgdGhpbmdzIGFzIGZ1bGx5IHdvcmtpbmdcbiAgICAgICAgdGhpcy53ZGEuZnVsbHlTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRlZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBydW5SZXNldCAob3B0cyA9IG51bGwpIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldFN0YXJ0ZWQnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgcnVuUmVhbERldmljZVJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgcnVuU2ltdWxhdG9yUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldENvbXBsZXRlJyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBhd2FpdCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgXy5jb21wYWN0KFtcbiAgICAgIHRoaXMuX3JlY2VudFNjcmVlblJlY29yZGVyLCB0aGlzLl9hdWRpb1JlY29yZGVyLCB0aGlzLl90cmFmZmljQ2FwdHVyZVxuICAgIF0pKSB7XG4gICAgICBhd2FpdCByZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSk7XG4gICAgICBhd2FpdCByZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fcGVyZlJlY29yZGVycykpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHRoaXMuX3BlcmZSZWNvcmRlcnMubWFwKCh4KSA9PiB4LnN0b3AodHJ1ZSkpKTtcbiAgICAgIHRoaXMuX3BlcmZSZWNvcmRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcblxuICAgIGlmICh0aGlzLndkYSAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMpIHtcbiAgICAgICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGVhclN5c3RlbUZpbGVzKHRoaXMud2RhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnTm90IGNsZWFyaW5nIGxvZyBmaWxlcy4gVXNlIGBjbGVhclN5c3RlbUZpbGVzYCBjYXBhYmlsaXR5IHRvIHR1cm4gb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnRm91bmQgYSByZW1vdGUgZGVidWdnZXIgc2Vzc2lvbi4gUmVtb3ZpbmcuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcFJlbW90ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge1xuICAgICAgICBlbmZvcmNlU2ltdWxhdG9yU2h1dGRvd246IHRydWUsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSAmJiAhdGhpcy5vcHRzLm5vUmVzZXQgJiYgISF0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgRGVsZXRpbmcgc2ltdWxhdG9yIGNyZWF0ZWQgZm9yIHRoaXMgcnVuICh1ZGlkOiAnJHt0aGlzLm9wdHMudWRpZH0nKWApO1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kZWxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UgPSB0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5vcHRzLnJlc2V0TG9jYXRpb25TZXJ2aWNlO1xuICAgIGlmIChzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UoKTtcbiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgeyAvKiBJZ25vcmUgdGhpcyBlcnJvciBzaW5jZSBtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSBhbHJlYWR5IGxvZ2dlZCB0aGUgZXJyb3IgKi8gfVxuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMubG9ncykpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9ncy5zeXNsb2cuc3RvcENhcHR1cmUoKTtcbiAgICAgIHRoaXMubG9ncyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldElvcygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuXG5cbiAgICBpZiAodGhpcy53ZGEgJiYgdGhpcy53ZGEuZnVsbHlTdGFydGVkKSB7XG4gICAgICBpZiAodGhpcy53ZGEuandwcm94eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKGAvc2Vzc2lvbi8ke3RoaXMuc2Vzc2lvbklkfWAsICdERUxFVEUnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gYW4gZXJyb3IgaGVyZSBzaG91bGQgbm90IHNob3J0LWNpcmN1aXQgdGhlIHJlc3Qgb2YgY2xlYW4gdXBcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5hYmxlIHRvIERFTEVURSBzZXNzaW9uIG9uIFdEQTogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZyBzaHV0ZG93bi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCAmJiB0aGlzLm9wdHMudXNlTmV3V0RBKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZWxlYXNlQ29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYEV4ZWN1dGluZyBjb21tYW5kICcke2NtZH0nYCk7XG5cbiAgICBpZiAoY21kID09PSAncmVjZWl2ZUFzeW5jUmVzcG9uc2UnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNlaXZlQXN5bmNSZXNwb25zZSguLi5hcmdzKTtcbiAgICB9XG4gICAgLy8gVE9ETzogb25jZSB0aGlzIGZpeCBnZXRzIGludG8gYmFzZSBkcml2ZXIgcmVtb3ZlIGZyb20gaGVyZVxuICAgIGlmIChjbWQgPT09ICdnZXRTdGF0dXMnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmVBcHAgKCkge1xuICAgIGZ1bmN0aW9uIGFwcElzUGFja2FnZU9yQnVuZGxlIChhcHApIHtcbiAgICAgIHJldHVybiAoL14oW2EtekEtWjAtOVxcLV9dK1xcLlthLXpBLVowLTlcXC1fXSspKyQvKS50ZXN0KGFwcCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGFwcCBuYW1lIGlzIGEgYnVuZGxlSWQgYXNzaWduIGl0IHRvIHRoZSBidW5kbGVJZCBwcm9wZXJ0eVxuICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9ICcnO1xuICAgIH1cbiAgICAvLyB3ZSBoYXZlIGEgYnVuZGxlIElELCBidXQgbm8gYXBwLCBvciBhcHAgaXMgYWxzbyBhIGJ1bmRsZVxuICAgIGlmICgodGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5idW5kbGVJZCkpICYmXG4gICAgICAgICh0aGlzLm9wdHMuYXBwID09PSAnJyB8fCBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdBcHAgaXMgYW4gaU9TIGJ1bmRsZSwgd2lsbCBhdHRlbXB0IHRvIHJ1biBhcyBwcmUtZXhpc3RpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3Igc3VwcG9ydGVkIGJ1aWxkLWluIGFwcHNcbiAgICBzd2l0Y2ggKF8udG9Mb3dlcih0aGlzLm9wdHMuYXBwKSkge1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLlByZWZlcmVuY2VzJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2NhbGVuZGFyJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5tb2JpbGVjYWwnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBkb3dubG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsICcuYXBwJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgYXBwOiAke3RoaXMub3B0cy5hcHB9LiBgICtcbiAgICAgICAgYEFwcCBwYXRocyBuZWVkIHRvIGJlIGFic29sdXRlIG9yIGFuIFVSTCB0byBhIGNvbXByZXNzZWQgYXBwIGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGV2aWNlICgpIHtcbiAgICAvLyBpbiB0aGUgb25lIGNhc2Ugd2hlcmUgd2UgY3JlYXRlIGEgc2ltLCB3ZSB3aWxsIHNldCB0aGlzIHN0YXRlXG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgd2UgZ2V0IGdlbmVyaWMgbmFtZXMsIHRyYW5zbGF0ZSB0aGVtXG4gICAgdGhpcy5vcHRzLmRldmljZU5hbWUgPSB0cmFuc2xhdGVEZXZpY2VOYW1lKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sIHRoaXMub3B0cy5kZXZpY2VOYW1lKTtcblxuICAgIGNvbnN0IHNldHVwVmVyc2lvbkNhcHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrSW9zU2RrVmVyc2lvbigpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgaU9TIFNESyBWZXJzaW9uIHNldCB0byAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nYCk7XG4gICAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgTm8gcGxhdGZvcm1WZXJzaW9uIHNwZWNpZmllZC4gVXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIFhjb2RlIHN1cHBvcnRzOiAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nLiBgICtcbiAgICAgICAgICBgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgYSBzaW11bGF0b3IgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgcGxhdGZvcm0gdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbih0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdHMudWRpZCkge1xuICAgICAgaWYgKHRoaXMub3B0cy51ZGlkLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gYXdhaXQgZGV0ZWN0VWRpZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBUcnlpbmcgdG8gZmluZCBtYXRjaGluZyBVRElEIGZvciBTaW11bGF0b3JcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgZGV0ZWN0IGFueSBjb25uZWN0ZWQgcmVhbCBkZXZpY2VzLiBGYWxsaW5nIGJhY2sgdG8gU2ltdWxhdG9yLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuICAgICAgICAgIGlmICghZGV2aWNlKSB7XG4gICAgICAgICAgICAvLyBObyBtYXRjaGluZyBTaW11bGF0b3IgaXMgZm91bmQuIFRocm93IGFuIGVycm9yXG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZWN0IHVkaWQgZm9yICR7dGhpcy5vcHRzLmRldmljZU5hbWV9IFNpbXVsYXRvciBydW5uaW5nIGlPUyAke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWF0Y2hpbmcgU2ltdWxhdG9yIGV4aXN0cyBhbmQgaXMgZm91bmQuIFVzZSBpdFxuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgY29uc3QgZGV2aWNlUGxhdGZvcm0gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24oYXdhaXQgZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gZGV2aWNlUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBkZXZpY2VQbGF0Zm9ybTtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oYFNldCBwbGF0Zm9ybVZlcnNpb24gdG8gJyR7ZGV2aWNlUGxhdGZvcm19JyB0byBtYXRjaCB0aGUgZGV2aWNlIHdpdGggZ2l2ZW4gVURJRGApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBpdCBpcyBhIGNvbm5lY3RlZCBkZXZpY2UuIElmIG5vdCwgdGhlIHVkaWQgcGFzc2VkIGluIGlzIGludmFsaWRcbiAgICAgICAgY29uc3QgZGV2aWNlcyA9IGF3YWl0IGdldENvbm5lY3RlZERldmljZXMoKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEF2YWlsYWJsZSBkZXZpY2VzOiAke2RldmljZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgaWYgKCFkZXZpY2VzLmluY2x1ZGVzKHRoaXMub3B0cy51ZGlkKSkge1xuICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBhcnRpY3VsYXIgc2ltdWxhdG9yXG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYE5vIHJlYWwgZGV2aWNlIHdpdGggdWRpZCAnJHt0aGlzLm9wdHMudWRpZH0nLiBMb29raW5nIGZvciBzaW11bGF0b3JgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0U2ltdWxhdG9yKHRoaXMub3B0cy51ZGlkLCB7XG4gICAgICAgICAgICAgIGRldmljZXNTZXRQYXRoOiB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRldmljZSBvciBzaW11bGF0b3IgVURJRDogJyR7dGhpcy5vcHRzLnVkaWR9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRSZWFsRGV2aWNlT2JqKHRoaXMub3B0cy51ZGlkKTtcbiAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiB0cnVlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUgdGhlIGRldmljZSB3aWxsIGJlIGEgU2ltdWxhdG9yXG4gICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgIGlmICh0aGlzLm9wdHMuZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBOZXcgc2ltdWxhdG9yIGlzIHJlcXVlc3RlZC4gSWYgdGhpcyBpcyBub3Qgd2FudGVkLCBzZXQgJ2VuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uJyBjYXBhYmlsaXR5IHRvIGZhbHNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3Qgc2ltdWxhdG9yIHRvIHVzZSwgZ2l2ZW4gdGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRFeGlzdGluZ1NpbSh0aGlzLm9wdHMpO1xuXG4gICAgICAvLyBjaGVjayBmb3IgYW4gZXhpc3Rpbmcgc2ltdWxhdG9yXG4gICAgICBpZiAoZGV2aWNlKSB7XG4gICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5pbmZvKCdTaW11bGF0b3IgdWRpZCBub3QgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBubyBkZXZpY2Ugb2YgdGhpcyB0eXBlIGV4aXN0cywgb3IgdGhleSByZXF1ZXN0IG5ldyBzaW0sIHNvIGNyZWF0ZSBvbmVcbiAgICB0aGlzLmxvZy5pbmZvKCdVc2luZyBkZXNpcmVkIGNhcHMgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvcicpO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY3JlYXRlU2ltKCk7XG4gICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gIH1cblxuICBhc3luYyBzdGFydFNpbSAoKSB7XG4gICAgY29uc3QgcnVuT3B0cyA9IHtcbiAgICAgIHNjYWxlRmFjdG9yOiB0aGlzLm9wdHMuc2NhbGVGYWN0b3IsXG4gICAgICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogISF0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQsXG4gICAgICBwYXN0ZWJvYXJkQXV0b21hdGljU3luYzogdGhpcy5vcHRzLnNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jID8/ICdvZmYnLFxuICAgICAgaXNIZWFkbGVzczogISF0aGlzLm9wdHMuaXNIZWFkbGVzcyxcbiAgICAgIHRyYWNlUG9pbnRlcjogdGhpcy5vcHRzLnNpbXVsYXRvclRyYWNlUG9pbnRlcixcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSB3aW5kb3cgY2VudGVyLCBpZiBpdCBpcyBzcGVjaWZpZWRcbiAgICBpZiAodGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikge1xuICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIgPSB0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyO1xuICAgIH1cblxuICAgIGlmIChfLmlzSW50ZWdlcih0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQpKSB7XG4gICAgICBydW5PcHRzLnN0YXJ0dXBUaW1lb3V0ID0gdGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCBYQ1Rlc3QgYnVnIGFib3V0IGNoYW5naW5nIFNpbXVsYXRvclxuICAgIC8vIG9yaWVudGF0aW9uIGlzIG5vdCBzeW5jaHJvbml6ZWQgdG8gdGhlIGFjdHVhbCB3aW5kb3cgb3JpZW50YXRpb25cbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IF8uaXNTdHJpbmcodGhpcy5vcHRzLm9yaWVudGF0aW9uKSAmJiB0aGlzLm9wdHMub3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlICdMQU5EU0NBUEUnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ0xhbmRzY2FwZUxlZnQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSA5MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQT1JUUkFJVCc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnUG9ydHJhaXQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJ1bihydW5PcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpbSAoKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IHRydWU7XG5cbiAgICAvLyBHZXQgcGxhdGZvcm0gbmFtZSBmcm9tIGNvbnN0IHNpbmNlIGl0IG11c3QgYmUgY2FzZSBzZW5zaXRpdmUgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvclxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IHRoaXMuaXNUdk9TKCkgPyBQTEFURk9STV9OQU1FX1RWT1MgOiBQTEFURk9STV9OQU1FX0lPUztcblxuICAgIC8vIGNyZWF0ZSBzaW0gZm9yIGNhcHNcbiAgICBjb25zdCBzaW0gPSBhd2FpdCBjcmVhdGVTaW0odGhpcy5vcHRzLCBwbGF0Zm9ybU5hbWUpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0ZWQgc2ltdWxhdG9yIHdpdGggdWRpZCAnJHtzaW0udWRpZH0nLmApO1xuXG4gICAgcmV0dXJuIHNpbTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaEFwcCAoKSB7XG4gICAgY29uc3QgQVBQX0xBVU5DSF9USU1FT1VUID0gMjAgKiAxMDAwO1xuXG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoQXR0ZW1wdGVkJyk7XG4gICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5zaW1jdGwubGF1bmNoQXBwKHRoaXMub3B0cy5idW5kbGVJZCk7XG5cbiAgICBsZXQgY2hlY2tTdGF0dXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGxldCBjdXJyZW50QXBwID0gcmVzcG9uc2UuY3VycmVudEFwcC5idW5kbGVJRDtcbiAgICAgIGlmIChjdXJyZW50QXBwICE9PSB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMub3B0cy5idW5kbGVJZH0gbm90IGluIGZvcmVncm91bmQuICR7Y3VycmVudEFwcH0gaXMgaW4gZm9yZWdyb3VuZGApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBXYWl0aW5nIGZvciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB0byBiZSBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgbGV0IHJldHJpZXMgPSBwYXJzZUludChBUFBfTEFVTkNIX1RJTUVPVVQgLyAyMDAsIDEwKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHJldHJpZXMsIDIwMCwgY2hlY2tTdGF0dXMpO1xuICAgIHRoaXMubG9nLmluZm8oYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoZWQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2RhU2Vzc2lvbiAoYnVuZGxlSWQsIHByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmFyZ3MgfHwgW10pIDogW107XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5hcmdzIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuZW52IHx8IHt9KSA6IHt9O1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5lbnYgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhIGRpY3Rpb25hcnkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShlbnYpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxhbmd1YWdlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICAgIGFyZ3MucHVzaCgnLU5TTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sb2NhbGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxvY2FsZScsIHRoaXMub3B0cy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoKSkge1xuICAgICAgICB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGFDYXBzID0ge1xuICAgICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5hdXRvTGF1bmNoID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJ1bmRsZUlkLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZW52aXJvbm1lbnQ6IGVudixcbiAgICAgIGV2ZW50bG9vcElkbGVEZWxheVNlYzogdGhpcy5vcHRzLndkYUV2ZW50bG9vcElkbGVEZWxheSA/PyAwLFxuICAgICAgc2hvdWxkV2FpdEZvclF1aWVzY2VuY2U6IHRoaXMub3B0cy53YWl0Rm9yUXVpZXNjZW5jZSA/PyB0cnVlLFxuICAgICAgc2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uOiB0aGlzLm9wdHMuc2ltcGxlSXNWaXNpYmxlQ2hlY2sgPz8gZmFsc2UsXG4gICAgICBtYXhUeXBpbmdGcmVxdWVuY3k6IHRoaXMub3B0cy5tYXhUeXBpbmdGcmVxdWVuY3kgPz8gNjAsXG4gICAgICBzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlcjogdGhpcy5vcHRzLnNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyID8/IHRydWUsXG4gICAgICB3YWl0Rm9ySWRsZVRpbWVvdXQ6IHRoaXMub3B0cy53YWl0Rm9ySWRsZVRpbWVvdXQsXG4gICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIGVsZW1lbnRSZXNwb25zZUZpZWxkczogdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUZpZWxkcyxcbiAgICAgIGRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90czogdGhpcy5vcHRzLmRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyxcbiAgICAgIHNob3VsZFRlcm1pbmF0ZUFwcDogdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA/PyB0cnVlLFxuICAgICAgZm9yY2VBcHBMYXVuY2g6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA/PyB0cnVlLFxuICAgICAgdXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5OiB0aGlzLm9wdHMudXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5ID8/IHRydWUsXG4gICAgICBmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZTogdGhpcy5vcHRzLmZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlXG4gICAgICAgID8/ICh0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIGluY2x1ZGUgbmVpdGhlciBhbiBhcHAgbm9yIGEgYnVuZGxlSWQuICcgK1xuICAgICAgICAnV2ViRHJpdmVyQWdlbnQgd2lsbCBiZSBzdGFydGVkIHdpdGhvdXQgdGhlIGRlZmF1bHQgYXBwJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgJ3BsYXRmb3JtVmVyc2lvbicgY2FwYWJpbGl0eSAoJyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259JykgaXMgbm90IGEgdmFsaWQgdmVyc2lvbiBudW1iZXIuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgZml4aW5nIGl0IG9yIGJlIHJlYWR5IHRvIGV4cGVyaWVuY2UgYW4gaW5jb25zaXN0ZW50IGRyaXZlciBiZWhhdmlvci5gKTtcbiAgICB9XG5cbiAgICBsZXQgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50ID0gKHByb2Nlc3NBcmd1bWVudHMpID0+IHtcbiAgICAgIGNvbnN0IHthcmdzLCBlbnZ9ID0gcHJvY2Vzc0FyZ3VtZW50cztcbiAgICAgIGlmICghXy5pc05pbChhcmdzKSAmJiAhXy5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdwcm9jZXNzQXJndW1lbnRzLmVudiBtdXN0IGJlIGFuIG9iamVjdCA8a2V5LHZhbHVlPiBwYWlyIHthOmIsIGM6ZH0nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYHByb2Nlc3NBcmd1bWVudHNgIHNob3VsZCBiZSBKU09OIHN0cmluZyBvciBhbiBvYmplY3Qgd2l0aCBhcmd1bWVudHMgYW5kLyBlbnZpcm9ubWVudCBkZXRhaWxzXG4gICAgaWYgKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykge1xuICAgICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIGFzIEpTT05cbiAgICAgICAgICBjYXBzLnByb2Nlc3NBcmd1bWVudHMgPSBKU09OLnBhcnNlKGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgdmVyaWZ5UHJvY2Vzc0FyZ3VtZW50KGNhcHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYHByb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhIEpTT04gZm9ybWF0IG9yIGFuIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuIEVycm9yOiAke2Vycn1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSkge1xuICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBJZiAna2V5Y2hhaW5QYXRoJyBpcyBzZXQsICdrZXljaGFpblBhc3N3b3JkJyBtdXN0IGFsc28gYmUgc2V0IChhbmQgdmljZSB2ZXJzYSkuYCk7XG4gICAgfVxuXG4gICAgLy8gYHJlc2V0T25TZXNzaW9uU3RhcnRPbmx5YCBzaG91bGQgYmUgc2V0IHRvIHRydWUgYnkgZGVmYXVsdFxuICAgIHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9ICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSkgfHwgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5O1xuICAgIHRoaXMub3B0cy51c2VOZXdXREEgPSB1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy51c2VOZXdXREEpID8gdGhpcy5vcHRzLnVzZU5ld1dEQSA6IGZhbHNlO1xuXG4gICAgaWYgKGNhcHMuY29tbWFuZFRpbWVvdXRzKSB7XG4gICAgICBjYXBzLmNvbW1hbmRUaW1lb3V0cyA9IG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyhjYXBzLmNvbW1hbmRUaW1lb3V0cyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdH0gPSB1cmwucGFyc2UoY2Fwcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KHByb3RvY29sKSB8fCBfLmlzRW1wdHkoaG9zdCkpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3dlYkRyaXZlckFnZW50VXJsJyBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGNvbnRhaW4gYSB2YWxpZCBXZWJEcml2ZXJBZ2VudCBzZXJ2ZXIgVVJMLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke2NhcHMud2ViRHJpdmVyQWdlbnRVcmx9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMuYnJvd3Nlck5hbWUpIHtcbiAgICAgIGlmIChjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGVybWlzc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgW2J1bmRsZUlkLCBwZXJtc10gb2YgXy50b1BhaXJzKEpTT04ucGFyc2UoY2Fwcy5wZXJtaXNzaW9ucykpKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKGJ1bmRsZUlkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShidW5kbGVJZCl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHBlcm1zKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtKU09OLnN0cmluZ2lmeShwZXJtcyl9JyBtdXN0IGJlIGEgSlNPTiBvYmplY3RgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7Y2Fwcy5wZXJtaXNzaW9uc30nIGlzIGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgb2JqZWN0IHdpdGggZm9ybWF0IGAgK1xuICAgICAgICAgIGB7XCI8YnVuZGxlSWQxPlwiOiB7XCI8c2VydmljZU5hbWUxPlwiOiBcIjxzZXJ2aWNlU3RhdHVzMT5cIiwgLi4ufSwgLi4ufS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBsYXRmb3JtVmVyc2lvbiAmJiAhdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgICAgc3RyYXRlZ3k6IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxPdGhlckFwcHModGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy82ODg5XG4gICAgICBsZXQgcGF1c2UgPSBwYXJzZUludCh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlLCAxMCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgaW9zSW5zdGFsbFBhdXNlIHNldC4gUGF1c2luZyAke3BhdXNlfSBtcyBiZWZvcmUgY29udGludWluZ2ApO1xuICAgICAgYXdhaXQgQi5kZWxheShwYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbE90aGVyQXBwcyAob3RoZXJBcHBzKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ0NhcGFiaWxpdHkgb3RoZXJBcHBzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3JzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhcHBzTGlzdDtcbiAgICB0cnkge1xuICAgICAgYXBwc0xpc3QgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkob3RoZXJBcHBzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShhcHBzTGlzdCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYEdvdCB6ZXJvIGFwcHMgZnJvbSAnb3RoZXJBcHBzJyBjYXBhYmlsaXR5IHZhbHVlLiBEb2luZyBub3RoaW5nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwUGF0aHMgPSBhd2FpdCBCLmFsbChhcHBzTGlzdC5tYXAoXG4gICAgICAoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgJy5hcHAnKVxuICAgICkpO1xuICAgIGZvciAoY29uc3Qgb3RoZXJBcHAgb2YgYXBwUGF0aHMpIHtcbiAgICAgIGF3YWl0IGluc3RhbGxUb1NpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlLCBvdGhlckFwcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlZHVjZU1vdGlvbiBhcyAnaXNFbmFibGVkJyBvbmx5IHdoZW4gdGhlIGNhcGFiaWxpdGllcyBoYXMgJ3JlZHVjZU1vdGlvbidcbiAgICogVGhlIGNhbGwgaXMgaWdub3JlZCBmb3IgcmVhbCBkZXZpY2VzLlxuICAgKiBAcGFyYW0gez9ib29sZWFufSBpc0VuYWJsZWQgV2V0aGVyIGVuYWJsZSByZWR1Y2VNb3Rpb25cbiAgICovXG4gIGFzeW5jIHNldFJlZHVjZU1vdGlvbiAoaXNFbmFibGVkKSB7XG4gICAgaWYgKHRoaXMuaXNSZWFsRGV2aWNlKCkgfHwgIV8uaXNCb29sZWFuKGlzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHJlZHVjZU1vdGlvbiB0byAke2lzRW5hYmxlZH1gKTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtyZWR1Y2VNb3Rpb246IGlzRW5hYmxlZH0pO1xuICB9XG5cbiAgYXN5bmMgc2V0SW5pdGlhbE9yaWVudGF0aW9uIChvcmllbnRhdGlvbikge1xuICAgIGlmICghXy5pc1N0cmluZyhvcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIHNldHRpbmcgb2YgdGhlIGluaXRpYWwgZGlzcGxheSBvcmllbnRhdGlvbi4gJyArXG4gICAgICAgICdTZXQgdGhlIFwib3JpZW50YXRpb25cIiBjYXBhYmlsaXR5IHRvIGVpdGhlciBcIkxBTkRTQ0FQRVwiIG9yIFwiUE9SVFJBSVRcIiwgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoWydMQU5EU0NBUEUnLCAnUE9SVFJBSVQnXSwgb3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVW5hYmxlIHRvIHNldCBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvb3JpZW50YXRpb24nLCAnUE9TVCcsIHtvcmllbnRhdGlvbn0pO1xuICAgICAgdGhpcy5vcHRzLmN1ck9yaWVudGF0aW9uID0gb3JpZW50YXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgX2dldENvbW1hbmRUaW1lb3V0IChjbWROYW1lKSB7XG4gICAgaWYgKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGlmIChjbWROYW1lICYmIF8uaGFzKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMsIGNtZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW2NtZE5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbREVGQVVMVF9USU1FT1VUX0tFWV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZXNzaW9uIGNhcGFiaWxpdGllcyBtZXJnZWQgd2l0aCB3aGF0IFdEQSByZXBvcnRzXG4gICAqIFRoaXMgaXMgYSBsaWJyYXJ5IGNvbW1hbmQgYnV0IG5lZWRzIHRvIGNhbGwgJ3N1cGVyJyBzbyBjYW4ndCBiZSBvblxuICAgKiBhIGhlbHBlciBvYmplY3RcbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIC8vIGNhbGwgc3VwZXIgdG8gZ2V0IGV2ZW50IHRpbWluZ3MsIGV0Yy4uLlxuICAgIGNvbnN0IGRyaXZlclNlc3Npb24gPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLndkYUNhcHMpIHtcbiAgICAgIHRoaXMud2RhQ2FwcyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvJywgJ0dFVCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEdldERldmljZUNhcHMgPSBfLmlzQm9vbGVhbih0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvKVxuICAgICAgPyB0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvXG4gICAgICA6IHRydWU7IC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoc2hvdWxkR2V0RGV2aWNlQ2FwcyAmJiAhdGhpcy5kZXZpY2VDYXBzKSB7XG4gICAgICBjb25zdCB7c3RhdHVzQmFyU2l6ZSwgc2NhbGV9ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5JbmZvKCk7XG4gICAgICB0aGlzLmRldmljZUNhcHMgPSB7XG4gICAgICAgIHBpeGVsUmF0aW86IHNjYWxlLFxuICAgICAgICBzdGF0QmFySGVpZ2h0OiBzdGF0dXNCYXJTaXplLmhlaWdodCxcbiAgICAgICAgdmlld3BvcnRSZWN0OiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0UmVjdCgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sb2cuaW5mbygnTWVyZ2luZyBXREEgY2FwcyBvdmVyIEFwcGl1bSBjYXBzIGZvciBzZXNzaW9uIGRldGFpbCByZXNwb25zZScpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt1ZGlkOiB0aGlzLm9wdHMudWRpZH0sIGRyaXZlclNlc3Npb24sXG4gICAgICB0aGlzLndkYUNhcHMuY2FwYWJpbGl0aWVzLCB0aGlzLmRldmljZUNhcHMgfHwge30pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgLy8gVGhpcyBpcyB0byBtYWtlIHN1cmUgcmVzZXQgaGFwcGVucyBldmVuIGlmIG5vUmVzZXQgaXMgc2V0IHRvIHRydWVcbiAgICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICAgIG9wdHMubm9SZXNldCA9IGZhbHNlO1xuICAgICAgb3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHNodXRkb3duSGFuZGxlciA9IHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9ICgpID0+IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5SZXNldChvcHRzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMucmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biA9IHNodXRkb3duSGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIucmVzZXQoKTtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFhDVUlUZXN0RHJpdmVyLnByb3RvdHlwZSwgY29tbWFuZHMpO1xuXG5leHBvcnQgZGVmYXVsdCBYQ1VJVGVzdERyaXZlcjtcbmV4cG9ydCB7IFhDVUlUZXN0RHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
1300
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsImdldERlZmF1bHRVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwiaW5jbHVkZXMiLCJwb3J0IiwiZG9lc1NhZmFyaVN1cHBvcnRVcmxBcmd1bWVudCIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJwbGF0Zm9ybVZlcnNpb24iLCJub1Jlc2V0IiwiZnVsbFJlc2V0IiwiaW9zU2RrVmVyc2lvbiIsInJlYWxEZXZpY2UiLCJkZXRlcm1pbmVEZXZpY2UiLCJzaW11bGF0b3JEZXZpY2VzU2V0UGF0aCIsImRldmljZXNTZXRQYXRoIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwibm9ybWFsaXplZFZlcnNpb24iLCJFcnJvciIsImlzRW1wdHkiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsImxvZ0V2ZW50IiwidG9Mb3dlciIsImFwcCIsInVuZGVmaW5lZCIsInByb2Nlc3NBcmd1bWVudHMiLCJidW5kbGVJZCIsInNhZmFyaUluaXRpYWxVcmwiLCJjb25maWd1cmVBcHAiLCJydW5SZXNldCIsIldlYkRyaXZlckFnZW50IiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJjYXRjaCIsImRlYnVnIiwibWVtb2l6ZWRMb2dJbmZvIiwic3RhcnRMb2dDYXB0dXJlIiwic2tpcExvZ0NhcHR1cmUiLCJyZXN1bHQiLCJpc0xvZ0NhcHR1cmVTdGFydGVkIiwiaXNTaW11bGF0b3IiLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiaXNTYWZhcmkiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsInVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzIiwibG9jYWxDb25maWciLCJzaW0iLCJjdXN0b21TU0xDZXJ0IiwiY2VydEhlYWQiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsInN0YXJ0U2ltIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwib3BlblVybCIsImF1dG9XZWJ2aWV3IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInNldFVybCIsImhhc1ZhbHVlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwidXNlUG9ydEZvcndhcmRpbmciLCJ3ZGFCYXNlVXJsIiwiREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkiLCJyZXF1ZXN0Q29ubmVjdGlvbiIsInVybCIsImRldmljZVBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwic3luY2hyb25pemF0aW9uS2V5IiwibmFtZSIsInVzZVhjdGVzdHJ1bkZpbGUiLCJpc1NvdXJjZUZyZXNoIiwiZGVyaXZlZERhdGFQYXRoIiwicGF0aCIsIm5vcm1hbGl6ZSIsImlzQnVzeSIsImJvb3RzdHJhcFBhdGgiLCJhY3F1aXJlIiwidXNlTmV3V0RBIiwicXVpdEFuZFVuaW5zdGFsbCIsInNldHVwQ2FjaGluZyIsIm1zZyIsInJlc3VsdEJ1bmRsZVBhdGgiLCJzdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyaWVzIiwic3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJyZXRyaWVzIiwibWFqb3IiLCJsYXVuY2giLCJlcnIiLCJlcnJvck1zZyIsIm9yaWdpbmFsU3RhY2t0cmFjZSIsInN0YXJ0V2RhU2Vzc2lvbiIsInN0YWNrIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImZ1bGx5U3RhcnRlZCIsInNlcnZlciIsInJlY29yZGVyIiwiY29tcGFjdCIsIl9yZWNlbnRTY3JlZW5SZWNvcmRlciIsIl9hdWRpb1JlY29yZGVyIiwiX3RyYWZmaWNDYXB0dXJlIiwiaW50ZXJydXB0IiwiY2xlYW51cCIsIl9wZXJmUmVjb3JkZXJzIiwiQiIsImFsbCIsIm1hcCIsIngiLCJzdG9wIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwiZGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJ0b0xvd2VyQ2FzZSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImpvaW4iLCJpZ24iLCJlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbiIsInJ1bk9wdHMiLCJzY2FsZUZhY3RvciIsImNvbm5lY3RIYXJkd2FyZUtleWJvYXJkIiwicGFzdGVib2FyZEF1dG9tYXRpY1N5bmMiLCJzaW11bGF0b3JQYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsImlzSGVhZGxlc3MiLCJ0cmFjZVBvaW50ZXIiLCJzaW11bGF0b3JUcmFjZVBvaW50ZXIiLCJkZXZpY2VQcmVmZXJlbmNlcyIsIlNpbXVsYXRvcldpbmRvd0NlbnRlciIsImlzSW50ZWdlciIsInNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0Iiwic3RhcnR1cFRpbWVvdXQiLCJpc1N0cmluZyIsInRvVXBwZXJDYXNlIiwiU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24iLCJTaW11bGF0b3JXaW5kb3dSb3RhdGlvbkFuZ2xlIiwicnVuIiwicGxhdGZvcm1OYW1lIiwiaXNUdk9TIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwiUExBVEZPUk1fTkFNRV9JT1MiLCJsYXVuY2hBcHAiLCJBUFBfTEFVTkNIX1RJTUVPVVQiLCJzaW1jdGwiLCJjaGVja1N0YXR1cyIsInJlc3BvbnNlIiwiY3VycmVudEFwcCIsImJ1bmRsZUlEIiwicGFyc2VJbnQiLCJpc0FycmF5IiwiZW52IiwiaXNQbGFpbk9iamVjdCIsImxhbmd1YWdlIiwicHVzaCIsImxvY2FsZSIsImlzTmlsIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZm9yY2VBcHBMYXVuY2giLCJ3ZGFDYXBzIiwiYXV0b0xhdW5jaCIsImFyZ3VtZW50cyIsImVudmlyb25tZW50IiwiZXZlbnRsb29wSWRsZURlbGF5U2VjIiwid2RhRXZlbnRsb29wSWRsZURlbGF5Iiwic2hvdWxkV2FpdEZvclF1aWVzY2VuY2UiLCJ3YWl0Rm9yUXVpZXNjZW5jZSIsInNob3VsZFVzZVRlc3RNYW5hZ2VyRm9yVmlzaWJpbGl0eURldGVjdGlvbiIsInNpbXBsZUlzVmlzaWJsZUNoZWNrIiwibWF4VHlwaW5nRnJlcXVlbmN5Iiwic2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIiLCJ3YWl0Rm9ySWRsZVRpbWVvdXQiLCJlbGVtZW50UmVzcG9uc2VGaWVsZHMiLCJkaXNhYmxlQXV0b21hdGljU2NyZWVuc2hvdHMiLCJ1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kiLCJmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZSIsImF1dG9BY2NlcHRBbGVydHMiLCJkZWZhdWx0QWxlcnRBY3Rpb24iLCJhdXRvRGlzbWlzc0FsZXJ0cyIsImNhcGFiaWxpdGllcyIsImZpcnN0TWF0Y2giLCJhbHdheXNNYXRjaCIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJpc1dlYnZpZXciLCJjYW5Qcm94eSIsImlzV2ViQ29udGV4dCIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJjb2VyY2VWZXJzaW9uIiwidmVyaWZ5UHJvY2Vzc0FyZ3VtZW50Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImNvbW1hbmRUaW1lb3V0cyIsInByb3RvY29sIiwiaG9zdCIsInBlcm1zIiwiYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMiLCJwYXJzZUNhcHNBcnJheSIsInRpbWVvdXQiLCJhcHBQdXNoVGltZW91dCIsImFwcEluc3RhbGxTdHJhdGVneSIsIm5ld1NpbXVsYXRvciIsIm90aGVyQXBwcyIsImluc3RhbGxPdGhlckFwcHMiLCJpb3NJbnN0YWxsUGF1c2UiLCJwYXVzZSIsImRlbGF5IiwiYXBwc0xpc3QiLCJhcHBQYXRocyIsIm90aGVyQXBwIiwiaXNFbmFibGVkIiwiaXNCb29sZWFuIiwiY3VyT3JpZW50YXRpb24iLCJfZ2V0Q29tbWFuZFRpbWVvdXQiLCJjbWROYW1lIiwiREVGQVVMVF9USU1FT1VUX0tFWSIsImdldFNlc3Npb24iLCJkcml2ZXJTZXNzaW9uIiwic2hvdWxkR2V0RGV2aWNlQ2FwcyIsImluY2x1ZGVEZXZpY2VDYXBzVG9TZXNzaW9uSW5mbyIsImRldmljZUNhcHMiLCJzdGF0dXNCYXJTaXplIiwic2NhbGUiLCJnZXRTY3JlZW5JbmZvIiwicGl4ZWxSYXRpbyIsInN0YXRCYXJIZWlnaHQiLCJoZWlnaHQiLCJ2aWV3cG9ydFJlY3QiLCJnZXRWaWV3cG9ydFJlY3QiLCJyZXNldCIsImNsb25lRGVlcCIsInNodXRkb3duSGFuZGxlciIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFRQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSx3QkFBd0IsR0FBRyxxQkFBakM7QUFDQSxNQUFNQyw0QkFBNEIsR0FBRyw4QkFBckM7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRztBQUN4QkMsRUFBQUEsaUJBQWlCLEVBQUUsS0FESztB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Q0FBQ0ssTUFGYjtBQUdoQkMsUUFBQUEsWUFBWSxFQUFFLE1BQU0sS0FBS0MsZUFBTDtBQUhKLE9BQWxCO0FBS0Q7O0FBQ0QsU0FBS3BTLEdBQUwsQ0FBU0MsSUFBVCxDQUFjLCtEQUFkO0FBQ0EsV0FBT0wsTUFBTSxDQUFDYSxNQUFQLENBQWM7QUFBQ0MsTUFBQUEsSUFBSSxFQUFFLEtBQUszRCxJQUFMLENBQVUyRDtBQUFqQixLQUFkLEVBQXNDK1EsYUFBdEMsRUFDTCxLQUFLM0QsT0FBTCxDQUFhb0IsWUFEUixFQUNzQixLQUFLMEMsVUFBTCxJQUFtQixFQUR6QyxDQUFQO0FBRUQ7O0FBRVUsUUFBTFMsS0FBSyxHQUFJO0FBQ2IsUUFBSSxLQUFLdFYsSUFBTCxDQUFVZ0YsT0FBZCxFQUF1QjtBQUVyQixVQUFJaEYsSUFBSSxHQUFHWSxnQkFBRTJVLFNBQUYsQ0FBWSxLQUFLdlYsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDZ0YsT0FBTCxHQUFlLEtBQWY7QUFDQWhGLE1BQUFBLElBQUksQ0FBQ2lGLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNdVEsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBS3JQLFFBQUwsQ0FBY3BHLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUt5Vix5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBcnJDcUM7OztBQXdyQ3hDelMsTUFBTSxDQUFDYSxNQUFQLENBQWM3RCxjQUFjLENBQUM2VixTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZTlWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmltcG9ydCB7IFdlYkRyaXZlckFnZW50IH0gZnJvbSAnYXBwaXVtLXdlYmRyaXZlcmFnZW50JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQge1xuICBkb2VzU3VwcG9ydEtleWNoYWluQXBpLCBpbnN0YWxsQ2VydGlmaWNhdGUsIGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSxcbiAgaGFzQ2VydGlmaWNhdGVMZWdhY3ksXG59IGZyb20gJy4vY2VydC11dGlscyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi9weS1pb3MtZGV2aWNlLWNsaWVudCc7XG5cblxuY29uc3QgU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FID0gJ3NodXRkb3duX290aGVyX3NpbXMnO1xuY29uc3QgQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCA9ICdjdXN0b21pemVfcmVzdWx0X2J1bmRsZV9wYXRoJztcblxuY29uc3QgZGVmYXVsdFNlcnZlckNhcHMgPSB7XG4gIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gIGJyb3dzZXJOYW1lOiAnJyxcbiAgcGxhdGZvcm06ICdNQUMnLFxuICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxufTtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyA9IDI7XG5jb25zdCBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTID0gMTtcbmNvbnN0IFdEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0teGN1aXRlc3QtZHJpdmVyL2Jsb2IvbWFzdGVyL2RvY3MvcmVhbC1kZXZpY2UtY29uZmlnLm1kJztcbmNvbnN0IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBuYXRpdmVXZWJUYXA6IGZhbHNlLFxuICBuYXRpdmVXZWJUYXBTdHJpY3Q6IGZhbHNlLFxuICB1c2VKU09OU291cmNlOiBmYWxzZSxcbiAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdHJ1ZSxcbiAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogJ3R5cGUsbGFiZWwnLFxuICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvVXRpbGl0aWVzL0ZCQ29uZmlndXJhdGlvbi5tIGZvciBmb2xsb3dpbmcgc2V0dGluZ3MnIHZhbHVlc1xuICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5OiAyNSxcbiAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGU6IDEwLFxuICBzY3JlZW5zaG90UXVhbGl0eTogMSxcbiAgbWpwZWdTY2FsaW5nRmFjdG9yOiAxMDAsXG4gIC8vIHNldCBgcmVkdWNlTW90aW9uYCB0byBgbnVsbGAgc28gdGhhdCBpdCB3aWxsIGJlIHZlcmlmaWVkIGJ1dCBzdGlsbCBzZXQgZWl0aGVyIHRydWUvZmFsc2VcbiAgcmVkdWNlTW90aW9uOiBudWxsLFxufTtcbi8vIFRoaXMgbG9jayBhc3N1cmVzLCB0aGF0IGVhY2ggZHJpdmVyIHNlc3Npb24gZG9lcyBub3Rcbi8vIGFmZmVjdCBzaGFyZWQgcmVzb3VyY2VzIG9mIHRoZSBvdGhlciBwYXJhbGxlbCBzZXNzaW9uc1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFID0gNTAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuY29uc3QgTk9fUFJPWFlfTkFUSVZFX0xJU1QgPSBbXG4gIFsnREVMRVRFJywgL3dpbmRvdy9dLFxuICBbJ0dFVCcsIC9eXFwvc2Vzc2lvblxcL1teXFwvXSskL10sXG4gIFsnR0VUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydHRVQnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnR0VUJywgL2FwcGl1bS9dLFxuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvY29udGV4dC9dLFxuICBbJ0dFVCcsIC9sb2NhdGlvbi9dLFxuICBbJ0dFVCcsIC9sb2cvXSxcbiAgWydHRVQnLCAvc2NyZWVuc2hvdC9dLFxuICBbJ0dFVCcsIC9zaXplL10sXG4gIFsnR0VUJywgL3NvdXJjZS9dLFxuICBbJ0dFVCcsIC90aW1lb3V0cyQvXSxcbiAgWydHRVQnLCAvdXJsL10sXG4gIFsnR0VUJywgL3dpbmRvdy9dLFxuICBbJ1BPU1QnLCAvYWNjZXB0X2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9hY3Rpb25zJC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnUE9TVCcsIC9hcHBpdW0vXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2lzX2xvY2tlZC9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvbG9jay9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvdW5sb2NrL10sXG4gIFsnUE9TVCcsIC9iYWNrL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY29udGV4dC9dLFxuICBbJ1BPU1QnLCAvZGlzbWlzc19hbGVydC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudFxcL2FjdGl2ZS9dLCAvLyBNSlNPTldQIGdldCBhY3RpdmUgZWxlbWVudCBzaG91bGQgcHJveHlcbiAgWydQT1NUJywgL2VsZW1lbnQkL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50cyQvXSxcbiAgWydQT1NUJywgL2V4ZWN1dGUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL2xvZy9dLFxuICBbJ1BPU1QnLCAvbW92ZXRvL10sXG4gIFsnUE9TVCcsIC9yZWNlaXZlX2FzeW5jX3Jlc3BvbnNlL10sIC8vIGFsd2F5cywgaW4gY2FzZSBjb250ZXh0IHN3aXRjaGVzIHdoaWxlIHdhaXRpbmdcbiAgWydQT1NUJywgL3Nlc3Npb25cXC9bXlxcL10rXFwvbG9jYXRpb24vXSwgLy8gZ2VvIGxvY2F0aW9uLCBidXQgbm90IGVsZW1lbnQgbG9jYXRpb25cbiAgWydQT1NUJywgL3NoYWtlL10sXG4gIFsnUE9TVCcsIC90aW1lb3V0cy9dLFxuICBbJ1BPU1QnLCAvdG91Y2gvXSxcbiAgWydQT1NUJywgL3VybC9dLFxuICBbJ1BPU1QnLCAvdmFsdWUvXSxcbiAgWydQT1NUJywgL3dpbmRvdy9dLFxuICBbJ0RFTEVURScsIC9jb29raWUvXSxcbiAgWydHRVQnLCAvY29va2llL10sXG4gIFsnUE9TVCcsIC9jb29raWUvXSxcbl07XG5jb25zdCBOT19QUk9YWV9XRUJfTElTVCA9IFtcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2VsZW1lbnQvXSxcbiAgWydHRVQnLCAvdGV4dC9dLFxuICBbJ0dFVCcsIC90aXRsZS9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NsaWNrL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50L10sXG4gIFsnUE9TVCcsIC9mb3J3YXJkL10sXG4gIFsnUE9TVCcsIC9mcmFtZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvcmVmcmVzaC9dLFxuXS5jb25jYXQoTk9fUFJPWFlfTkFUSVZFX0xJU1QpO1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG4gICdnZXRTY3JlZW5JbmZvJyxcbl07XG5cbmNsYXNzIFhDVUlUZXN0RHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICAgICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgIF07XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgIF07XG4gICAgdGhpcy5yZXNldElvcygpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoREVGQVVMVF9TRVRUSU5HUywgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMubG9ncyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdGl2ZVdlYlRhcCcgJiYga2V5ICE9PSAnbmF0aXZlV2ViVGFwU3RyaWN0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICAgIHNldHRpbmdzOiB7W2tleV06IHZhbHVlfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub3B0c1trZXldID0gISF2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0SW9zICgpIHtcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge307XG4gICAgdGhpcy53ZGEgPSBudWxsO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbXTtcbiAgICB0aGlzLnNhZmFyaSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gbnVsbDtcblxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5fY3VycmVudFVybCA9IG51bGw7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHt9O1xuICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICB0aGlzLmFzeW5jbGliV2FpdE1zID0gMDtcbiAgICB0aGlzLnBhZ2VMb2FkTXMgPSA2MDAwO1xuICAgIHRoaXMubGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG5cbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIG1lcmdlQ2xpQXJnc1RvT3B0cyAoKSB7XG4gICAgbGV0IGRpZE1lcmdlID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jbGlBcmdzIHNob3VsZCBuZXZlciBpbmNsdWRlIGFueXRoaW5nIHdlIGRvIG5vdCBleHBlY3QuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jbGlBcmdzID8/IHt9KSkge1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywga2V5KSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBDTEkgYXJnICcke2tleX0nIHdpdGggdmFsdWUgJyR7dmFsdWV9JyBvdmVyd3JpdGVzIHZhbHVlICcke3RoaXMub3B0c1trZXldfScgc2VudCBpbiB2aWEgY2FwcylgKTtcbiAgICAgICAgZGlkTWVyZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZE1lcmdlO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRoaXMubGlmZWN5Y2xlRGF0YSA9IHt9OyAvLyB0aGlzIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN0YXRlIHdlIHN0YXJ0IHNvIHdoZW4gd2UgZGVsZXRlIHRoZSBzZXNzaW9uIHdlIGNhbiBwdXQgdGhpbmdzIGJhY2tcbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcbiAgICAgIHRoaXMub3B0cy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG5cbiAgICAgIC8vIG1lcmdlIGNsaSBhcmdzIHRvIG9wdHMsIGFuZCBpZiB3ZSBkaWQgbWVyZ2UgYW55LCByZXZhbGlkYXRlIG9wdHMgdG8gZW5zdXJlIHRoZSBmaW5hbCBzZXRcbiAgICAgIC8vIGlzIGFsc28gY29uc2lzdGVudFxuICAgICAgaWYgKHRoaXMubWVyZ2VDbGlBcmdzVG9PcHRzKCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURlc2lyZWRDYXBzKHsuLi5jYXBzLCAuLi50aGlzLmNsaUFyZ3N9KTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydCgpO1xuXG4gICAgICAvLyBtZXJnZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzICsgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNhcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0U2VydmVyQ2FwcywgY2Fwcyk7XG4gICAgICAvLyB1cGRhdGUgdGhlIHVkaWQgd2l0aCB3aGF0IGlzIGFjdHVhbGx5IHVzZWRcbiAgICAgIGNhcHMudWRpZCA9IHRoaXMub3B0cy51ZGlkO1xuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwOiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwfSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgbmF0aXZlV2ViVGFwU3RyaWN0IGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICduYXRpdmVXZWJUYXBTdHJpY3QnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHtuYXRpdmVXZWJUYXBTdHJpY3Q6IHRoaXMub3B0cy5uYXRpdmVXZWJUYXBTdHJpY3R9KTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayB1c2VKU09OU291cmNlIGNhcGFiaWxpdHkgYXMgYSBzZXR0aW5nIGFzIHdlbGxcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICd1c2VKU09OU291cmNlJykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7dXNlSlNPTlNvdXJjZTogdGhpcy5vcHRzLnVzZUpTT05Tb3VyY2V9KTtcbiAgICAgIH1cblxuICAgICAgbGV0IHdkYVNldHRpbmdzID0ge1xuICAgICAgICBlbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzOiBERUZBVUxUX1NFVFRJTkdTLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gICAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IERFRkFVTFRfU0VUVElOR1Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIH07XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMgPSB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyA9IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzO1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5ID0gdGhpcy5vcHRzLm1qcGVnU2VydmVyU2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbWpwZWdTZXJ2ZXJGcmFtZXJhdGUnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5tanBlZ1NlcnZlckZyYW1lcmF0ZSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlckZyYW1lcmF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdzY3JlZW5zaG90UXVhbGl0eScpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgdGhlIHF1YWxpdHkgb2YgcGhvbmUgc2NyZWVuc2hvdDogJyR7dGhpcy5vcHRzLnNjcmVlbnNob3RRdWFsaXR5fSdgKTtcbiAgICAgICAgd2RhU2V0dGluZ3Muc2NyZWVuc2hvdFF1YWxpdHkgPSB0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgV0RBIGdldHMgb3VyIGRlZmF1bHRzIGluc3RlYWQgb2Ygd2hhdGV2ZXIgaXRzIG93biBtaWdodCBiZVxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh3ZGFTZXR0aW5ncyk7XG5cbiAgICAgIC8vIHR1cm4gb24gbWpwZWcgc3RyZWFtIHJlYWRpbmcgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2NyZWVuc2hvdFVybCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IFVSTCBmb3IgU2FmYXJpIGJyb3dzZXJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlZmF1bHQgVVJMXG4gICAqL1xuICBnZXREZWZhdWx0VXJsICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgPyAnaHR0cDovL2FwcGl1bS5pbydcbiAgICAgIDogYGh0dHA6Ly8ke1xuICAgICAgICB0aGlzLm9wdHMuYWRkcmVzcy5pbmNsdWRlcygnOicpID8gYFske3RoaXMub3B0cy5hZGRyZXNzfV1gIDogdGhpcy5vcHRzLmFkZHJlc3NcbiAgICAgIH06JHt0aGlzLm9wdHMucG9ydH0vd2VsY29tZWA7XG4gIH1cblxuICBkb2VzU2FmYXJpU3VwcG9ydFVybEFyZ3VtZW50ICgpIHtcbiAgICByZXR1cm4gdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnMTIuMicpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gISF0aGlzLm9wdHMubm9SZXNldDtcbiAgICB0aGlzLm9wdHMuZnVsbFJlc2V0ID0gISF0aGlzLm9wdHMuZnVsbFJlc2V0O1xuXG4gICAgYXdhaXQgcHJpbnRVc2VyKCk7XG5cbiAgICB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbiA9IG51bGw7IC8vIEZvciBXREEgYW5kIHhjb2RlYnVpbGRcbiAgICBjb25zdCB7ZGV2aWNlLCB1ZGlkLCByZWFsRGV2aWNlfSA9IGF3YWl0IHRoaXMuZGV0ZXJtaW5lRGV2aWNlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFRoZSAnc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgnIGNhcGFiaWxpdHkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvciBkZXZpY2VzYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHNpbXVsYXRvciBkZXZpY2VzIHNldCBwYXRoIHRvICcke3RoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aH0nYCk7XG4gICAgICAgIHRoaXMub3B0cy5kZXZpY2UuZGV2aWNlc1NldFBhdGggPSB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCBpZiB0aGVyZSBpcyBubyBwbGF0Zm9ybVZlcnNpb24sIGdldCBpdCBmcm9tIHRoZSBkZXZpY2VcbiAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmRldmljZSkge1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3JtYWxpemVkIHBsYXRmb3JtVmVyc2lvbiBjYXBhYmlsaXR5IHZhbHVlICcke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259JyB0byAnJHtub3JtYWxpemVkVmVyc2lvbn0nYCk7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplZFZlcnNpb247XG4gICAgfVxuICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICc5LjMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgOS4zIG9yIGFib3ZlLiAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMueGNvZGVWZXJzaW9uKSAmJiAoIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCB8fCAhdGhpcy5vcHRzLnJlYWxEZXZpY2UpKSB7XG4gICAgICAvLyBubyBgd2ViRHJpdmVyQWdlbnRVcmxgLCBvciBvbiBhIHNpbXVsYXRvciwgc28gd2UgbmVlZCBhbiBYY29kZSB2ZXJzaW9uXG4gICAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IGF3YWl0IGdldEFuZENoZWNrWGNvZGVWZXJzaW9uKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3hjb2RlRGV0YWlsc1JldHJpZXZlZCcpO1xuXG4gICAgaWYgKF8udG9Mb3dlcih0aGlzLm9wdHMuYnJvd3Nlck5hbWUpID09PSAnc2FmYXJpJykge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2FmYXJpIHRlc3QgcmVxdWVzdGVkJyk7XG4gICAgICB0aGlzLnNhZmFyaSA9IHRydWU7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMgPSB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyB8fCB7fTtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IFNBRkFSSV9CVU5ETEVfSUQ7XG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gdGhpcy5vcHRzLnNhZmFyaUluaXRpYWxVcmwgfHwgdGhpcy5nZXREZWZhdWx0VXJsKCk7XG4gICAgICBpZiAodGhpcy5kb2VzU2FmYXJpU3VwcG9ydFVybEFyZ3VtZW50KCkpIHtcbiAgICAgICAgLy8gdGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBvbiAxMi4yIGFuZCBhYm92ZVxuICAgICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cy5hcmdzID0gWyctdScsIHRoaXMuX2N1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcCB8fCB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQXBwKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcENvbmZpZ3VyZWQnKTtcblxuICAgIC8vIGZhaWwgdmVyeSBlYXJseSBpZiB0aGUgYXBwIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3RcbiAgICAvLyBvciBpZiBidW5kbGUgaWQgZG9lc24ndCBwb2ludCB0byBhbiBpbnN0YWxsZWQgYXBwXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGNoZWNrQXBwUHJlc2VudCh0aGlzLm9wdHMuYXBwKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoKTtcblxuICAgIHRoaXMud2RhID0gbmV3IFdlYkRyaXZlckFnZW50KHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLm9wdHMsIHRoaXMubG9nKTtcbiAgICAvLyBEZXJpdmVkIGRhdGEgcGF0aCByZXRyaWV2YWwgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvblxuICAgIC8vIFdlIGNvdWxkIHN0YXJ0IHRoYXQgbm93IGluIGJhY2tncm91bmQgYW5kIGdldCB0aGUgY2FjaGVkIHJlc3VsdFxuICAgIC8vIHdoZW5ldmVyIGl0IGlzIG5lZWRlZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuXG4gICAgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKS5jYXRjaCgoZSkgPT4gdGhpcy5sb2cuZGVidWcoZSkpO1xuXG4gICAgY29uc3QgbWVtb2l6ZWRMb2dJbmZvID0gXy5tZW1vaXplKCgpID0+IHtcbiAgICAgIHRoaXMubG9nLmluZm8oXCInc2tpcExvZ0NhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9ncyBzdWNoIGFzIGNyYXNoLCBzeXN0ZW0sIHNhZmFyaSBjb25zb2xlIGFuZCBzYWZhcmkgbmV0d29yay5cIik7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRMb2dDYXB0dXJlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5za2lwTG9nQ2FwdHVyZSkge1xuICAgICAgICBtZW1vaXplZExvZ0luZm8oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN0YXJ0TG9nQ2FwdHVyZSgpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCdsb2dDYXB0dXJlU3RhcnRlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzTG9nQ2FwdHVyZVN0YXJ0ZWQgPSBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcblxuICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgdXAgJHt0aGlzLmlzUmVhbERldmljZSgpID8gJ3JlYWwgZGV2aWNlJyA6ICdzaW11bGF0b3InfWApO1xuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5zaHV0ZG93bk90aGVyU2ltdWxhdG9ycykge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duT3RoZXJTaW11bGF0b3JzKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzIHNob3VsZCBiZSBkb25lIGJlZm9yZSB0aGUgc2ltdWxhdG9yIGlzIHN0YXJ0ZWRcbiAgICAgIC8vIGlmIGl0IGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjYXAgd29uJ3Qgd29yaywgd2hpY2ggaXMgZG9jdW1lbnRlZFxuICAgICAgaWYgKHRoaXMuaXNTYWZhcmkoKSAmJiB0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMub3B0cy5kZXZpY2UudXBkYXRlU2FmYXJpR2xvYmFsU2V0dGluZ3ModGhpcy5vcHRzLnNhZmFyaUdsb2JhbFByZWZlcmVuY2VzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBTYWZhcmkgZ2xvYmFsIHByZWZlcmVuY2VzIHVwZGF0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvY2FsQ29uZmlnID0gYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXModGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCksIGFzeW5jIChzaW0pID0+IHtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3Ioc2ltKTtcblxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIG5lZWRzIHRvIGJlIGNoYW5nZXMgYSBwcmlvcmksIHNvIGNoYW5nZSBmaXJzdC5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBzaHV0ZG93biBwcm9jZXNzIGNoYW5nZXMgdGhlIHNldHRpbmdzLCBzbyByZXNldCB0aGVtLFxuICAgICAgICAvLyBrbm93aW5nIHRoYXQgdGhlIHNpbSBpcyBhbHJlYWR5IHNodXRcbiAgICAgICAgYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXMoc2ltLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmICEoYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkpIHtcbiAgICAgICAgY29uc3QgY2VydEhlYWQgPSBfLnRydW5jYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7bGVuZ3RoOiAyMH0pO1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBJbnN0YWxsaW5nIHRoZSBjdXN0b20gU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfSdgKTtcbiAgICAgICAgaWYgKGF3YWl0IGhhc0NlcnRpZmljYXRlTGVnYWN5KHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nIGFscmVhZHkgaW5zdGFsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgTWFraW5nIHN1cmUgU2ltdWxhdG9yIGlzIHNodXQgZG93biwgJyArXG4gICAgICAgICAgICAnc28gdGhhdCBTU0wgY2VydGlmaWNhdGUgaW5zdGFsbGF0aW9uIHRha2VzIGVmZmVjdGApO1xuICAgICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2ltKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiBhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSB7XG4gICAgICAgIC8vIFNpbXVsYXRvciBtdXN0IGJlIGJvb3RlZCBpbiBvcmRlciB0byBjYWxsIHRoaXMgaGVscGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5sYXVuY2hXaXRoSURCICYmIHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlkYiA9IG5ldyBJREIoe3VkaWR9KTtcbiAgICAgICAgICBhd2FpdCBpZGIuY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub3B0cy5kZXZpY2UuaWRiID0gaWRiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgaWRiIHdpbGwgbm90IGJlIHVzZWQgZm9yIFNpbXVsYXRvciBpbnRlcmFjdGlvbi4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nRXZlbnQoJ3NpbVN0YXJ0ZWQnKTtcbiAgICAgIGlmICghaXNMb2dDYXB0dXJlU3RhcnRlZCkge1xuICAgICAgICAvLyBSZXRyeSBsb2cgY2FwdHVyZSBpZiBTaW11bGF0b3Igd2FzIG5vdCBydW5uaW5nIGJlZm9yZVxuICAgICAgICBhd2FpdCBzdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0KSB7XG4gICAgICBhd2FpdCBuZXcgUHlpZGV2aWNlKHVkaWQpLmluc3RhbGxQcm9maWxlKHtwYXlsb2FkOiB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxBVVQoKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoJ2FwcEluc3RhbGxlZCcpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIG9ubHkgaGF2ZSBidW5kbGUgaWRlbnRpZmllciBhbmQgbm8gYXBwLCBmYWlsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCAmJiB0aGlzLm9wdHMuYnVuZGxlSWQgJiYgIXRoaXMuc2FmYXJpKSB7XG4gICAgICBpZiAoIWF3YWl0IHRoaXMub3B0cy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmJ1bmRsZUlkKSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBBcHAgd2l0aCBidW5kbGUgaWRlbnRpZmllciAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9JyB1bmtub3duYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5wZXJtaXNzaW9ucykge1xuICAgICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oJ1NldHRpbmcgcGVybWlzc2lvbnMgaXMgb25seSBzdXBwb3J0ZWQgb24gU2ltdWxhdG9yLiAnICtcbiAgICAgICAgICAnVGhlIFwicGVybWlzc2lvbnNcIiBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNhbGVuZGFyQWNjZXNzQXV0aG9yaXplZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmVuYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UuZGlzYWJsZUNhbGVuZGFyQWNjZXNzKHRoaXMub3B0cy5idW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zdGFydFdkYSh0aGlzLm9wdHMuc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0UmVkdWNlTW90aW9uKHRoaXMub3B0cy5yZWR1Y2VNb3Rpb24pO1xuXG4gICAgYXdhaXQgdGhpcy5zZXRJbml0aWFsT3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdvcmllbnRhdGlvblNldCcpO1xuXG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgLy8gcmVhbCBkZXZpY2VzIHdpbGwgYmUgaGFuZGxlZCBsYXRlciwgYWZ0ZXIgdGhlIHdlYiBjb250ZXh0IGhhcyBiZWVuIGluaXRpYWxpemVkXG4gICAgICBpZiAoIXRoaXMuZG9lc1NhZmFyaVN1cHBvcnRVcmxBcmd1bWVudCgpICYmICF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFib3V0IHRvIHNldCB0aGUgaW5pdGlhbCBVUkwgdG8gJyR7dGhpcy5fY3VycmVudFVybH0nIG9uIFNpbXVsYXRvci4gYCArXG4gICAgICAgICAgYFVzZSAnc2FmYXJpSW5pdGlhbFVybCcgY2FwYWJpbGl0eSBpbiBvcmRlciB0byBjdXN0b21pemUgaXRgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5vcGVuVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdXYWl0aW5nIGZvciBpbml0aWFsIHdlYnZpZXcnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZUb0luaXRpYWxXZWJ2aWV3KCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2luaXRpYWxXZWJ2aWV3TmF2aWdhdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5kb2VzU2FmYXJpU3VwcG9ydFVybEFyZ3VtZW50KCkgJiYgdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBYm91dCB0byBzZXQgdGhlIGluaXRpYWwgVVJMIHRvICcke3RoaXMuX2N1cnJlbnRVcmx9JyBvbiB0aGUgZGV2aWNlLiBgICtcbiAgICAgICAgICBgVXNlICdzYWZhcmlJbml0aWFsVXJsJyBjYXBhYmlsaXR5IGluIG9yZGVyIHRvIGN1c3RvbWl6ZSBpdGApO1xuICAgICAgICBhd2FpdCB0aGlzLnNldFVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgV2ViRHJpdmVyQWdlbnRSdW5uZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIFRoZSBpZCBvZiB0aGUgdGFyZ2V0IHNlc3Npb24gdG8gbGF1bmNoIFdEQSB3aXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgdGVzdCB0YXJnZXQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2UuXG4gICAqL1xuICBhc3luYyBzdGFydFdkYSAoc2Vzc2lvbklkLCByZWFsRGV2aWNlKSB7XG4gICAgLy8gRG9uJ3QgY2xlYW51cCB0aGUgcHJvY2Vzc2VzIGlmIHdlYkRyaXZlckFnZW50VXJsIGlzIHNldFxuICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RhLmNsZWFudXBPYnNvbGV0ZVByb2Nlc3NlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVBvcnRGb3J3YXJkaW5nID0gdGhpcy5pc1JlYWxEZXZpY2UoKVxuICAgICAgJiYgIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsXG4gICAgICAmJiBpc0xvY2FsSG9zdCh0aGlzLndkYS53ZGFCYXNlVXJsKTtcbiAgICBhd2FpdCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWS5yZXF1ZXN0Q29ubmVjdGlvbih0aGlzLm9wdHMudWRpZCwgdGhpcy53ZGEudXJsLnBvcnQsIHtcbiAgICAgIGRldmljZVBvcnQ6IHVzZVBvcnRGb3J3YXJkaW5nID8gdGhpcy53ZGEud2RhUmVtb3RlUG9ydCA6IG51bGwsXG4gICAgICB1c2VQb3J0Rm9yd2FyZGluZyxcbiAgICB9KTtcblxuICAgIC8vIExldCBtdWx0aXBsZSBXREEgYmluYXJpZXMgd2l0aCBkaWZmZXJlbnQgZGVyaXZlZCBkYXRhIGZvbGRlcnMgYmUgYnVpbHQgaW4gcGFyYWxsZWxcbiAgICAvLyBDb25jdXJyZW50IFdEQSBidWlsZHMgZnJvbSB0aGUgc2FtZSBzb3VyY2Ugd2lsbCBjYXVzZSB4Y29kZWJ1aWxkIHN5bmNocm9uaXphdGlvbiBlcnJvcnNcbiAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICBpZiAodGhpcy5vcHRzLnVzZVhjdGVzdHJ1bkZpbGUgfHwgIShhd2FpdCB0aGlzLndkYS5pc1NvdXJjZUZyZXNoKCkpKSB7XG4gICAgICAvLyBGaXJzdC10aW1lIGNvbXBpbGF0aW9uIGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24sIHdoaWNoIGlzIGRvbmUgZmFzdGVyIGlmIGV4ZWN1dGVkXG4gICAgICAvLyBzZXF1ZW50aWFsbHkuIFhjb2RlYnVpbGQgc3ByZWFkcyB0aGUgbG9hZCBjYXVzZWQgYnkgdGhlIGNsYW5nIGNvbXBpbGVyIHRvIGFsbCBhdmFpbGFibGUgQ1BVIGNvcmVzXG4gICAgICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB0aGlzLndkYS5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgV2ViRHJpdmVyQWdlbnQgaW5pdGlhbGl6YXRpb24gd2l0aCB0aGUgc3luY2hyb25pemF0aW9uIGtleSAnJHtzeW5jaHJvbml6YXRpb25LZXl9J2ApO1xuICAgIGlmIChTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmlzQnVzeSgpICYmICF0aGlzLm9wdHMuZGVyaXZlZERhdGFQYXRoICYmICF0aGlzLm9wdHMuYm9vdHN0cmFwUGF0aCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENvbnNpZGVyIHNldHRpbmcgYSB1bmlxdWUgJ2Rlcml2ZWREYXRhUGF0aCcgY2FwYWJpbGl0eSB2YWx1ZSBmb3IgZWFjaCBwYXJhbGxlbCBkcml2ZXIgaW5zdGFuY2UgYCArXG4gICAgICAgIGB0byBhdm9pZCBjb25mbGljdHMgYW5kIHNwZWVkIHVwIHRoZSBidWlsZGluZyBwcm9jZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2FwYWJpbGl0eSAndXNlTmV3V0RBJyBzZXQgdG8gdHJ1ZSwgc28gdW5pbnN0YWxsaW5nIFdEQSBiZWZvcmUgcHJvY2VlZGluZ2ApO1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5xdWl0QW5kVW5pbnN0YWxsKCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVVuaW5zdGFsbGVkJyk7XG4gICAgICB9IGVsc2UgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndkYS5zZXR1cENhY2hpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gbG9jYWwgaGVscGVyIGZvciB0aGUgdHdvIHBsYWNlcyB3ZSBuZWVkIHRvIHVuaW5zdGFsbCB3ZGEgYW5kIHJlLXN0YXJ0IGl0XG4gICAgICBjb25zdCBxdWl0QW5kVW5pbnN0YWxsID0gYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1Zyhtc2cpO1xuICAgICAgICBpZiAodGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoJ05vdCBxdWl0dGluZy91bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQgc2luY2Ugd2ViRHJpdmVyQWdlbnRVcmwgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLndhcm4oJ1F1aXR0aW5nIGFuZCB1bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfTtcblxuICAgICAgLy8gVXNlZCBpbiB0aGUgZm9sbG93aW5nIFdEQSBidWlsZFxuICAgICAgaWYgKHRoaXMub3B0cy5yZXN1bHRCdW5kbGVQYXRoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyaWVzID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyaWVzIHx8ICh0aGlzLmlzUmVhbERldmljZSgpID8gV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA6IFdEQV9TSU1fU1RBUlRVUF9SRVRSSUVTKTtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXRyeUludGVydmFsID0gdGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsIHx8IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRyeWluZyB0byBzdGFydCBXZWJEcml2ZXJBZ2VudCAke3N0YXJ0dXBSZXRyaWVzfSB0aW1lcyB3aXRoICR7c3RhcnR1cFJldHJ5SW50ZXJ2YWx9bXMgaW50ZXJ2YWxgKTtcbiAgICAgIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMud2RhU3RhcnR1cFJldHJpZXMpICYmICF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCkpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZXNlIHZhbHVlcyBjYW4gYmUgY3VzdG9taXplZCBieSBjaGFuZ2luZyB3ZGFTdGFydHVwUmV0cmllcy93ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCBjYXBhYmlsaXRpZXNgKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3RhcnR1cFJldHJpZXMsIHN0YXJ0dXBSZXRyeUludGVydmFsLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0QXR0ZW1wdGVkJyk7XG4gICAgICAgIGlmIChyZXRyeUNvdW50ID4gMCkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oYFJldHJ5aW5nIFdEQSBzdGFydHVwICgke3JldHJ5Q291bnQgKyAxfSBvZiAke3N0YXJ0dXBSZXRyaWVzfSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG9uIHhjb2RlIDEwIGluc3RhbGxkIHdpbGwgb2Z0ZW4gdHJ5IHRvIGFjY2VzcyB0aGUgYXBwIGZyb20gaXRzIHN0YWdpbmdcbiAgICAgICAgICAvLyBkaXJlY3RvcnkgYmVmb3JlIGZ1bGx5IG1vdmluZyBpdCB0aGVyZSwgYW5kIGZhaWwuIFJldHJ5aW5nIG9uY2VcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseSBoZWxwc1xuICAgICAgICAgIGNvbnN0IHJldHJpZXMgPSB0aGlzLnhjb2RlVmVyc2lvbi5tYWpvciA+PSAxMCA/IDIgOiAxO1xuICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gYXdhaXQgcmV0cnkocmV0cmllcywgdGhpcy53ZGEubGF1bmNoLmJpbmQodGhpcy53ZGEpLCBzZXNzaW9uSWQsIHJlYWxEZXZpY2UpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydEZhaWxlZCcpO1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIGxhdW5jaCBXZWJEcml2ZXJBZ2VudCBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgLiBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy53ZGEucHJveHlSZXFSZXMuYmluZCh0aGlzLndkYSk7XG4gICAgICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGxldCBvcmlnaW5hbFN0YWNrdHJhY2UgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMTUsIDEwMDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25BdHRlbXB0ZWQnKTtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKCdTZW5kaW5nIGNyZWF0ZVNlc3Npb24gY29tbWFuZCB0byBXREEnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gdGhpcy5jYWNoZWRXZGFTdGF0dXMgfHwgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXZGFTZXNzaW9uKHRoaXMub3B0cy5idW5kbGVJZCwgdGhpcy5vcHRzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsU3RhY2t0cmFjZSA9IGVyci5zdGFjaztcbiAgICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZhaWxlZCB0byBjcmVhdGUgV0RBIHNlc3Npb24gKCR7ZXJyLm1lc3NhZ2V9KS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25TdGFydGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChvcmlnaW5hbFN0YWNrdHJhY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKG9yaWdpbmFsU3RhY2t0cmFjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBlcnJvck1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQgc2Vzc2lvbiBiZWNhdXNlIG9mIHhjb2RlYnVpbGQgZmFpbHVyZTogJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgICAgICBlcnJvck1zZyArPSBgIE1ha2Ugc3VyZSB5b3UgZm9sbG93IHRoZSB0dXRvcmlhbCBhdCAke1dEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkx9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBUcnkgdG8gcmVtb3ZlIHRoZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBhcHBsaWNhdGlvbiBmcm9tIHRoZSBkZXZpY2UgaWYgaXQgaXMgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGFuZCByZWJvb3QgdGhlIGRldmljZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCBxdWl0QW5kVW5pbnN0YWxsKGVycm9yTXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcyAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAgICAgYXdhaXQgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCh0aGlzLndkYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBleHBlY3QgY2VydGFpbiBzb2NrZXQgZXJyb3JzIHVudGlsIHRoaXMgcG9pbnQsIGJ1dCBub3dcbiAgICAgICAgLy8gbWFyayB0aGluZ3MgYXMgZnVsbHkgd29ya2luZ1xuICAgICAgICB0aGlzLndkYS5mdWxseVN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTdGFydGVkJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1blJlc2V0IChvcHRzID0gbnVsbCkge1xuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0U3RhcnRlZCcpO1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBydW5SZWFsRGV2aWNlUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5TaW11bGF0b3JSZXNldCh0aGlzLm9wdHMuZGV2aWNlLCBvcHRzIHx8IHRoaXMub3B0cyk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ3Jlc2V0Q29tcGxldGUnKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGF3YWl0IHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgZm9yIChjb25zdCByZWNvcmRlciBvZiBfLmNvbXBhY3QoW1xuICAgICAgdGhpcy5fcmVjZW50U2NyZWVuUmVjb3JkZXIsIHRoaXMuX2F1ZGlvUmVjb3JkZXIsIHRoaXMuX3RyYWZmaWNDYXB0dXJlXG4gICAgXSkpIHtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmludGVycnVwdCh0cnVlKTtcbiAgICAgIGF3YWl0IHJlY29yZGVyLmNsZWFudXAoKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9wZXJmUmVjb3JkZXJzKSkge1xuICAgICAgYXdhaXQgQi5hbGwodGhpcy5fcGVyZlJlY29yZGVycy5tYXAoKHgpID0+IHguc3RvcCh0cnVlKSkpO1xuICAgICAgdGhpcy5fcGVyZlJlY29yZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RvcCgpO1xuXG4gICAgaWYgKHRoaXMud2RhICYmICF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuY2xlYXJTeXN0ZW1GaWxlcykge1xuICAgICAgICBsZXQgc3luY2hyb25pemF0aW9uS2V5ID0gWENVSVRlc3REcml2ZXIubmFtZTtcbiAgICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgICAgaWYgKGRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICAgIHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKGRlcml2ZWREYXRhUGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgU0hBUkVEX1JFU09VUkNFU19HVUFSRC5hY3F1aXJlKHN5bmNocm9uaXphdGlvbktleSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNsZWFyU3lzdGVtRmlsZXModGhpcy53ZGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdOb3QgY2xlYXJpbmcgbG9nIGZpbGVzLiBVc2UgYGNsZWFyU3lzdGVtRmlsZXNgIGNhcGFiaWxpdHkgdG8gdHVybiBvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdGb3VuZCBhIHJlbW90ZSBkZWJ1Z2dlciBzZXNzaW9uLiBSZW1vdmluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wUmVtb3RlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XG4gICAgICAgIGVuZm9yY2VTaW11bGF0b3JTaHV0ZG93bjogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpICYmICF0aGlzLm9wdHMubm9SZXNldCAmJiAhIXRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBEZWxldGluZyBzaW11bGF0b3IgY3JlYXRlZCBmb3IgdGhpcyBydW4gKHVkaWQ6ICcke3RoaXMub3B0cy51ZGlkfScpYCk7XG4gICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRlbGV0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSA9IHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgISF0aGlzLm9wdHMucmVzZXRMb2NhdGlvblNlcnZpY2U7XG4gICAgaWYgKHNob3VsZFJlc2V0TG9jYXRpb25TZXJ2aXZjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSgpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlKSB7IC8qIElnbm9yZSB0aGlzIGVycm9yIHNpbmNlIG1vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlIGFscmVhZHkgbG9nZ2VkIHRoZSBlcnJvciAqLyB9XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5sb2dzKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2dzLnN5c2xvZy5zdG9wQ2FwdHVyZSgpO1xuICAgICAgdGhpcy5sb2dzID0ge307XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ0Nsb3NpbmcgTUpQRUcgc3RyZWFtJyk7XG4gICAgICB0aGlzLm1qcGVnU3RyZWFtLnN0b3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0SW9zKCk7XG5cbiAgICBhd2FpdCBzdXBlci5kZWxldGVTZXNzaW9uKCk7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG5cblxuICAgIGlmICh0aGlzLndkYSAmJiB0aGlzLndkYS5mdWxseVN0YXJ0ZWQpIHtcbiAgICAgIGlmICh0aGlzLndkYS5qd3Byb3h5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoYC9zZXNzaW9uLyR7dGhpcy5zZXNzaW9uSWR9YCwgJ0RFTEVURScpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBhbiBlcnJvciBoZXJlIHNob3VsZCBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgcmVzdCBvZiBjbGVhbiB1cFxuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBVbmFibGUgdG8gREVMRVRFIHNlc3Npb24gb24gV0RBOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nIHNodXRkb3duLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsICYmIHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlbGVhc2VDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjbWQsIC4uLmFyZ3MpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgIGlmIChjbWQgPT09ICdyZWNlaXZlQXN5bmNSZXNwb25zZScpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlY2VpdmVBc3luY1Jlc3BvbnNlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBvbmNlIHRoaXMgZml4IGdldHMgaW50byBiYXNlIGRyaXZlciByZW1vdmUgZnJvbSBoZXJlXG4gICAgaWYgKGNtZCA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbmZpZ3VyZUFwcCAoKSB7XG4gICAgZnVuY3Rpb24gYXBwSXNQYWNrYWdlT3JCdW5kbGUgKGFwcCkge1xuICAgICAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgYXBwIG5hbWUgaXMgYSBidW5kbGVJZCBhc3NpZ24gaXQgdG8gdGhlIGJ1bmRsZUlkIHByb3BlcnR5XG4gICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9IHRoaXMub3B0cy5hcHA7XG4gICAgICB0aGlzLm9wdHMuYXBwID0gJyc7XG4gICAgfVxuICAgIC8vIHdlIGhhdmUgYSBidW5kbGUgSUQsIGJ1dCBubyBhcHAsIG9yIGFwcCBpcyBhbHNvIGEgYnVuZGxlXG4gICAgaWYgKCh0aGlzLm9wdHMuYnVuZGxlSWQgJiYgYXBwSXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmJ1bmRsZUlkKSkgJiZcbiAgICAgICAgKHRoaXMub3B0cy5hcHAgPT09ICcnIHx8IGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0FwcCBpcyBhbiBpT1MgYnVuZGxlLCB3aWxsIGF0dGVtcHQgdG8gcnVuIGFzIHByZS1leGlzdGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBzdXBwb3J0ZWQgYnVpbGQtaW4gYXBwc1xuICAgIHN3aXRjaCAoXy50b0xvd2VyKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUuUHJlZmVyZW5jZXMnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnY2FsZW5kYXInOlxuICAgICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSAnY29tLmFwcGxlLm1vYmlsZWNhbCc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGRvd25sb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgJy5hcHAnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhcHA6ICR7dGhpcy5vcHRzLmFwcH0uIGAgK1xuICAgICAgICBgQXBwIHBhdGhzIG5lZWQgdG8gYmUgYWJzb2x1dGUgb3IgYW4gVVJMIHRvIGEgY29tcHJlc3NlZCBhcHAgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXZpY2UgKCkge1xuICAgIC8vIGluIHRoZSBvbmUgY2FzZSB3aGVyZSB3ZSBjcmVhdGUgYSBzaW0sIHdlIHdpbGwgc2V0IHRoaXMgc3RhdGVcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gZmFsc2U7XG5cbiAgICAvLyBpZiB3ZSBnZXQgZ2VuZXJpYyBuYW1lcywgdHJhbnNsYXRlIHRoZW1cbiAgICB0aGlzLm9wdHMuZGV2aWNlTmFtZSA9IHRyYW5zbGF0ZURldmljZU5hbWUodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgdGhpcy5vcHRzLmRldmljZU5hbWUpO1xuXG4gICAgY29uc3Qgc2V0dXBWZXJzaW9uQ2FwcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBpT1MgU0RLIFZlcnNpb24gc2V0IHRvICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufSdgKTtcbiAgICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gWGNvZGUgc3VwcG9ydHM6ICcke3RoaXMub3B0cy5pb3NTZGtWZXJzaW9ufScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcyBpZiBhIHNpbXVsYXRvciBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBwbGF0Zm9ybSB2ZXJzaW9uLmApO1xuICAgICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uKHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0cy51ZGlkKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVkaWQudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBhd2FpdCBkZXRlY3RVZGlkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIFRyeWluZyB0byBmaW5kIG1hdGNoaW5nIFVESUQgZm9yIFNpbXVsYXRvclxuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBkZXRlY3QgYW55IGNvbm5lY3RlZCByZWFsIGRldmljZXMuIEZhbGxpbmcgYmFjayB0byBTaW11bGF0b3IuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG4gICAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIC8vIE5vIG1hdGNoaW5nIFNpbXVsYXRvciBpcyBmb3VuZC4gVGhyb3cgYW4gZXJyb3JcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBkZXRlY3QgdWRpZCBmb3IgJHt0aGlzLm9wdHMuZGV2aWNlTmFtZX0gU2ltdWxhdG9yIHJ1bm5pbmcgaU9TICR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXRjaGluZyBTaW11bGF0b3IgZXhpc3RzIGFuZCBpcyBmb3VuZC4gVXNlIGl0XG4gICAgICAgICAgdGhpcy5vcHRzLnVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBjb25zdCBkZXZpY2VQbGF0Zm9ybSA9IG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbihhd2FpdCBkZXZpY2UuZ2V0UGxhdGZvcm1WZXJzaW9uKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uICE9PSBkZXZpY2VQbGF0Zm9ybSkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGRldmljZVBsYXRmb3JtO1xuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0IHBsYXRmb3JtVmVyc2lvbiB0byAnJHtkZXZpY2VQbGF0Zm9ybX0nIHRvIG1hdGNoIHRoZSBkZXZpY2Ugd2l0aCBnaXZlbiBVRElEYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHNldHVwVmVyc2lvbkNhcHMoKTtcbiAgICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGl0IGlzIGEgY29ubmVjdGVkIGRldmljZS4gSWYgbm90LCB0aGUgdWRpZCBwYXNzZWQgaW4gaXMgaW52YWxpZFxuICAgICAgICBjb25zdCBkZXZpY2VzID0gYXdhaXQgZ2V0Q29ubmVjdGVkRGV2aWNlcygpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGRldmljZXM6ICR7ZGV2aWNlcy5qb2luKCcsICcpfWApO1xuICAgICAgICBpZiAoIWRldmljZXMuaW5jbHVkZXModGhpcy5vcHRzLnVkaWQpKSB7XG4gICAgICAgICAgLy8gY2hlY2sgZm9yIGEgcGFydGljdWxhciBzaW11bGF0b3JcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gcmVhbCBkZXZpY2Ugd2l0aCB1ZGlkICcke3RoaXMub3B0cy51ZGlkfScuIExvb2tpbmcgZm9yIHNpbXVsYXRvcmApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRTaW11bGF0b3IodGhpcy5vcHRzLnVkaWQsIHtcbiAgICAgICAgICAgICAgZGV2aWNlc1NldFBhdGg6IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGV2aWNlIG9yIHNpbXVsYXRvciBVRElEOiAnJHt0aGlzLm9wdHMudWRpZH0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldFJlYWxEZXZpY2VPYmoodGhpcy5vcHRzLnVkaWQpO1xuICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IHRydWUsIHVkaWQ6IHRoaXMub3B0cy51ZGlkfTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2Uga25vdyBmb3Igc3VyZSB0aGUgZGV2aWNlIHdpbGwgYmUgYSBTaW11bGF0b3JcbiAgICBhd2FpdCBzZXR1cFZlcnNpb25DYXBzKCk7XG4gICAgaWYgKHRoaXMub3B0cy5lbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbikge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYE5ldyBzaW11bGF0b3IgaXMgcmVxdWVzdGVkLiBJZiB0aGlzIGlzIG5vdCB3YW50ZWQsIHNldCAnZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24nIGNhcGFiaWxpdHkgdG8gZmFsc2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBzaW11bGF0b3IgdG8gdXNlLCBnaXZlbiB0aGUgZGVzaXJlZCBjYXBhYmlsaXRpZXNcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG5cbiAgICAgIC8vIGNoZWNrIGZvciBhbiBleGlzdGluZyBzaW11bGF0b3JcbiAgICAgIGlmIChkZXZpY2UpIHtcbiAgICAgICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oJ1NpbXVsYXRvciB1ZGlkIG5vdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIG5vIGRldmljZSBvZiB0aGlzIHR5cGUgZXhpc3RzLCBvciB0aGV5IHJlcXVlc3QgbmV3IHNpbSwgc28gY3JlYXRlIG9uZVxuICAgIHRoaXMubG9nLmluZm8oJ1VzaW5nIGRlc2lyZWQgY2FwcyB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yJyk7XG4gICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jcmVhdGVTaW0oKTtcbiAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2ltICgpIHtcbiAgICBjb25zdCBydW5PcHRzID0ge1xuICAgICAgc2NhbGVGYWN0b3I6IHRoaXMub3B0cy5zY2FsZUZhY3RvcixcbiAgICAgIGNvbm5lY3RIYXJkd2FyZUtleWJvYXJkOiAhIXRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCxcbiAgICAgIHBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jOiB0aGlzLm9wdHMuc2ltdWxhdG9yUGFzdGVib2FyZEF1dG9tYXRpY1N5bmMgPz8gJ29mZicsXG4gICAgICBpc0hlYWRsZXNzOiAhIXRoaXMub3B0cy5pc0hlYWRsZXNzLFxuICAgICAgdHJhY2VQb2ludGVyOiB0aGlzLm9wdHMuc2ltdWxhdG9yVHJhY2VQb2ludGVyLFxuICAgICAgZGV2aWNlUHJlZmVyZW5jZXM6IHt9LFxuICAgIH07XG5cbiAgICAvLyBhZGQgdGhlIHdpbmRvdyBjZW50ZXIsIGlmIGl0IGlzIHNwZWNpZmllZFxuICAgIGlmICh0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyKSB7XG4gICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd0NlbnRlciA9IHRoaXMub3B0cy5TaW11bGF0b3JXaW5kb3dDZW50ZXI7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNJbnRlZ2VyKHRoaXMub3B0cy5zaW11bGF0b3JTdGFydHVwVGltZW91dCkpIHtcbiAgICAgIHJ1bk9wdHMuc3RhcnR1cFRpbWVvdXQgPSB0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyB0byB3b3JrYXJvdW5kIFhDVGVzdCBidWcgYWJvdXQgY2hhbmdpbmcgU2ltdWxhdG9yXG4gICAgLy8gb3JpZW50YXRpb24gaXMgbm90IHN5bmNocm9uaXplZCB0byB0aGUgYWN0dWFsIHdpbmRvdyBvcmllbnRhdGlvblxuICAgIGNvbnN0IG9yaWVudGF0aW9uID0gXy5pc1N0cmluZyh0aGlzLm9wdHMub3JpZW50YXRpb24pICYmIHRoaXMub3B0cy5vcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIHN3aXRjaCAob3JpZW50YXRpb24pIHtcbiAgICAgIGNhc2UgJ0xBTkRTQ0FQRSc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnTGFuZHNjYXBlTGVmdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDkwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BPUlRSQUlUJzpcbiAgICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiA9ICdQb3J0cmFpdCc7XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93Um90YXRpb25BbmdsZSA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2UucnVuKHJ1bk9wdHMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2ltICgpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gdHJ1ZTtcblxuICAgIC8vIEdldCBwbGF0Zm9ybSBuYW1lIGZyb20gY29uc3Qgc2luY2UgaXQgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSB0byBjcmVhdGUgYSBuZXcgc2ltdWxhdG9yXG4gICAgY29uc3QgcGxhdGZvcm1OYW1lID0gdGhpcy5pc1R2T1MoKSA/IFBMQVRGT1JNX05BTUVfVFZPUyA6IFBMQVRGT1JNX05BTUVfSU9TO1xuXG4gICAgLy8gY3JlYXRlIHNpbSBmb3IgY2Fwc1xuICAgIGNvbnN0IHNpbSA9IGF3YWl0IGNyZWF0ZVNpbSh0aGlzLm9wdHMsIHBsYXRmb3JtTmFtZSk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRlZCBzaW11bGF0b3Igd2l0aCB1ZGlkICcke3NpbS51ZGlkfScuYCk7XG5cbiAgICByZXR1cm4gc2ltO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoQXBwICgpIHtcbiAgICBjb25zdCBBUFBfTEFVTkNIX1RJTUVPVVQgPSAyMCAqIDEwMDA7XG5cbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hBdHRlbXB0ZWQnKTtcbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bC5sYXVuY2hBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcblxuICAgIGxldCBjaGVja1N0YXR1cyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgbGV0IGN1cnJlbnRBcHAgPSByZXNwb25zZS5jdXJyZW50QXBwLmJ1bmRsZUlEO1xuICAgICAgaWYgKGN1cnJlbnRBcHAgIT09IHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBub3QgaW4gZm9yZWdyb3VuZC4gJHtjdXJyZW50QXBwfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubG9nLmluZm8oYFdhaXRpbmcgZm9yICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHRvIGJlIGluIGZvcmVncm91bmRgKTtcbiAgICBsZXQgcmV0cmllcyA9IHBhcnNlSW50KEFQUF9MQVVOQ0hfVElNRU9VVCAvIDIwMCwgMTApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMjAwLCBjaGVja1N0YXR1cyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhcHBMYXVuY2hlZCcpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXZGFTZXNzaW9uIChidW5kbGVJZCwgcHJvY2Vzc0FyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3MgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuYXJncyB8fCBbXSkgOiBbXTtcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmFyZ3MgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuICAgIGNvbnN0IGVudiA9IHByb2Nlc3NBcmd1bWVudHMgPyAocHJvY2Vzc0FyZ3VtZW50cy5lbnYgfHwge30pIDoge307XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9jZXNzQXJndW1lbnRzLmVudiBjYXBhYmlsaXR5IGlzIGV4cGVjdGVkIHRvIGJlIGEgZGljdGlvbmFyeS4gYCArXG4gICAgICAgIGAke0pTT04uc3RyaW5naWZ5KGVudil9IGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubGFuZ3VhZ2UpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxhbmd1YWdlcycsIGAoJHt0aGlzLm9wdHMubGFuZ3VhZ2V9KWApO1xuICAgICAgYXJncy5wdXNoKCctTlNMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxvY2FsZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLUFwcGxlTG9jYWxlJywgdGhpcy5vcHRzLmxvY2FsZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwKSkge1xuICAgICAgICB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc05pbCh0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2gpKSB7XG4gICAgICAgIHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYUNhcHMgPSB7XG4gICAgICBidW5kbGVJZDogdGhpcy5vcHRzLmF1dG9MYXVuY2ggPT09IGZhbHNlID8gdW5kZWZpbmVkIDogYnVuZGxlSWQsXG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZXZlbnRsb29wSWRsZURlbGF5U2VjOiB0aGlzLm9wdHMud2RhRXZlbnRsb29wSWRsZURlbGF5ID8/IDAsXG4gICAgICBzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZTogdGhpcy5vcHRzLndhaXRGb3JRdWllc2NlbmNlID8/IHRydWUsXG4gICAgICBzaG91bGRVc2VUZXN0TWFuYWdlckZvclZpc2liaWxpdHlEZXRlY3Rpb246IHRoaXMub3B0cy5zaW1wbGVJc1Zpc2libGVDaGVjayA/PyBmYWxzZSxcbiAgICAgIG1heFR5cGluZ0ZyZXF1ZW5jeTogdGhpcy5vcHRzLm1heFR5cGluZ0ZyZXF1ZW5jeSA/PyA2MCxcbiAgICAgIHNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyOiB0aGlzLm9wdHMuc2hvdWxkVXNlU2luZ2xldG9uVGVzdE1hbmFnZXIgPz8gdHJ1ZSxcbiAgICAgIHdhaXRGb3JJZGxlVGltZW91dDogdGhpcy5vcHRzLndhaXRGb3JJZGxlVGltZW91dCxcbiAgICAgIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRoaXMub3B0cy5zaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzLFxuICAgICAgZWxlbWVudFJlc3BvbnNlRmllbGRzOiB0aGlzLm9wdHMuZWxlbWVudFJlc3BvbnNlRmllbGRzLFxuICAgICAgZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzOiB0aGlzLm9wdHMuZGlzYWJsZUF1dG9tYXRpY1NjcmVlbnNob3RzLFxuICAgICAgc2hvdWxkVGVybWluYXRlQXBwOiB0aGlzLm9wdHMuc2hvdWxkVGVybWluYXRlQXBwID8/IHRydWUsXG4gICAgICBmb3JjZUFwcExhdW5jaDogdGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoID8/IHRydWUsXG4gICAgICB1c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3k6IHRoaXMub3B0cy51c2VOYXRpdmVDYWNoaW5nU3RyYXRlZ3kgPz8gdHJ1ZSxcbiAgICAgIGZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlOiB0aGlzLm9wdHMuZm9yY2VTaW11bGF0b3JTb2Z0d2FyZUtleWJvYXJkUHJlc2VuY2VcbiAgICAgICAgPz8gKHRoaXMub3B0cy5jb25uZWN0SGFyZHdhcmVLZXlib2FyZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZSksXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9BY2NlcHRBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2FjY2VwdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYXV0b0Rpc21pc3NBbGVydHMpIHtcbiAgICAgIHdkYUNhcHMuZGVmYXVsdEFsZXJ0QWN0aW9uID0gJ2Rpc21pc3MnO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFt3ZGFDYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgUHJveHkgbWV0aG9kcyBmcm9tIEJhc2VEcml2ZXJcbiAgcHJveHlBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKCkge1xuICAgIGlmICh0aGlzLmlzV2VidmlldygpKSB7XG4gICAgICByZXR1cm4gTk9fUFJPWFlfV0VCX0xJU1Q7XG4gICAgfVxuICAgIHJldHVybiBOT19QUk9YWV9OQVRJVkVfTElTVDtcbiAgfVxuXG4gIGNhblByb3h5ICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzU2FmYXJpICgpIHtcbiAgICByZXR1cm4gISF0aGlzLnNhZmFyaTtcbiAgfVxuXG4gIGlzUmVhbERldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNTaW11bGF0b3IgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLnJlYWxEZXZpY2U7XG4gIH1cblxuICBpc1R2T1MgKCkge1xuICAgIHJldHVybiBfLnRvTG93ZXIodGhpcy5vcHRzLnBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xuICB9XG5cbiAgaXNXZWJ2aWV3ICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMuaXNXZWJDb250ZXh0KCk7XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3kpIHtcbiAgICBzdXBlci52YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgdGhpcy5pc1dlYkNvbnRleHQoKSk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFiaWxpdGllcyBoYXZlIG9uZSBvZiBgYXBwYCBvciBgYnVuZGxlSWRgXG4gICAgaWYgKF8udG9Mb3dlcihjYXBzLmJyb3dzZXJOYW1lKSAhPT0gJ3NhZmFyaScgJiYgIWNhcHMuYXBwICYmICFjYXBzLmJ1bmRsZUlkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMgaW5jbHVkZSBuZWl0aGVyIGFuIGFwcCBub3IgYSBidW5kbGVJZC4gJyArXG4gICAgICAgICdXZWJEcml2ZXJBZ2VudCB3aWxsIGJlIHN0YXJ0ZWQgd2l0aG91dCB0aGUgZGVmYXVsdCBhcHAnKTtcbiAgICB9XG5cbiAgICBpZiAoIXV0aWwuY29lcmNlVmVyc2lvbihjYXBzLnBsYXRmb3JtVmVyc2lvbiwgZmFsc2UpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGAncGxhdGZvcm1WZXJzaW9uJyBjYXBhYmlsaXR5ICgnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nKSBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGBDb25zaWRlciBmaXhpbmcgaXQgb3IgYmUgcmVhZHkgdG8gZXhwZXJpZW5jZSBhbiBpbmNvbnNpc3RlbnQgZHJpdmVyIGJlaGF2aW9yLmApO1xuICAgIH1cblxuICAgIGxldCB2ZXJpZnlQcm9jZXNzQXJndW1lbnQgPSAocHJvY2Vzc0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3Qge2FyZ3MsIGVudn0gPSBwcm9jZXNzQXJndW1lbnRzO1xuICAgICAgaWYgKCFfLmlzTmlsKGFyZ3MpICYmICFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5hcmdzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzTmlsKGVudikgJiYgIV8uaXNQbGFpbk9iamVjdChlbnYpKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuZW52IG11c3QgYmUgYW4gb2JqZWN0IDxrZXksdmFsdWU+IHBhaXIge2E6YiwgYzpkfScpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBgcHJvY2Vzc0FyZ3VtZW50c2Agc2hvdWxkIGJlIEpTT04gc3RyaW5nIG9yIGFuIG9iamVjdCB3aXRoIGFyZ3VtZW50cyBhbmQvIGVudmlyb25tZW50IGRldGFpbHNcbiAgICBpZiAoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyhjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgSlNPTlxuICAgICAgICAgIGNhcHMucHJvY2Vzc0FyZ3VtZW50cyA9IEpTT04ucGFyc2UoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgICB2ZXJpZnlQcm9jZXNzQXJndW1lbnQoY2Fwcy5wcm9jZXNzQXJndW1lbnRzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgcHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGEgSlNPTiBmb3JtYXQgb3IgYW4gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3Byb2Nlc3NBcmd1bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIG9yIGEgc3RyaW5nIEpTT04gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICBgQm90aCBlbnZpcm9ubWVudCBhbmQgYXJndW1lbnQgY2FuIGJlIG51bGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nIGBrZXljaGFpblBhdGhgIHdpdGhvdXQgYGtleWNoYWluUGFzc3dvcmRgXG4gICAgaWYgKChjYXBzLmtleWNoYWluUGF0aCAmJiAhY2Fwcy5rZXljaGFpblBhc3N3b3JkKSB8fCAoIWNhcHMua2V5Y2hhaW5QYXRoICYmIGNhcHMua2V5Y2hhaW5QYXNzd29yZCkpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYElmICdrZXljaGFpblBhdGgnIGlzIHNldCwgJ2tleWNoYWluUGFzc3dvcmQnIG11c3QgYWxzbyBiZSBzZXQgKGFuZCB2aWNlIHZlcnNhKS5gKTtcbiAgICB9XG5cbiAgICAvLyBgcmVzZXRPblNlc3Npb25TdGFydE9ubHlgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0XG4gICAgdGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5ID0gIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnJlc2V0T25TZXNzaW9uU3RhcnRPbmx5KSB8fCB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHk7XG4gICAgdGhpcy5vcHRzLnVzZU5ld1dEQSA9IHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLnVzZU5ld1dEQSkgPyB0aGlzLm9wdHMudXNlTmV3V0RBIDogZmFsc2U7XG5cbiAgICBpZiAoY2Fwcy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGNhcHMuY29tbWFuZFRpbWVvdXRzID0gbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzKGNhcHMuY29tbWFuZFRpbWVvdXRzKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1N0cmluZyhjYXBzLndlYkRyaXZlckFnZW50VXJsKSkge1xuICAgICAgY29uc3Qge3Byb3RvY29sLCBob3N0fSA9IHVybC5wYXJzZShjYXBzLndlYkRyaXZlckFnZW50VXJsKTtcbiAgICAgIGlmIChfLmlzRW1wdHkocHJvdG9jb2wpIHx8IF8uaXNFbXB0eShob3N0KSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnd2ViRHJpdmVyQWdlbnRVcmwnIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHZhbGlkIFdlYkRyaXZlckFnZW50IHNlcnZlciBVUkwuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudFVybH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgICAgaWYgKGNhcHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ2Jyb3dzZXJOYW1lJyBjYW5ub3QgYmUgc2V0IHRvZ2V0aGVyIHdpdGggJ2J1bmRsZUlkJyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpc1xuICAgICAgLy8gaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGdlbmVyYWxseSBub3QgaW5jbHVkZSBib3RoIGFuICdhcHAnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5wZXJtaXNzaW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBbYnVuZGxlSWQsIHBlcm1zXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZShjYXBzLnBlcm1pc3Npb25zKSkpIHtcbiAgICAgICAgICBpZiAoIV8uaXNTdHJpbmcoYnVuZGxlSWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0pTT04uc3RyaW5naWZ5KGJ1bmRsZUlkKX0nIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QocGVybXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke0pTT04uc3RyaW5naWZ5KHBlcm1zKX0nIG11c3QgYmUgYSBKU09OIG9iamVjdGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAnJHtjYXBzLnBlcm1pc3Npb25zfScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBmb3JtYXQgYCArXG4gICAgICAgICAgYHtcIjxidW5kbGVJZDE+XCI6IHtcIjxzZXJ2aWNlTmFtZTE+XCI6IFwiPHNlcnZpY2VTdGF0dXMxPlwiLCAuLi59LCAuLi59LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGxhdGZvcm1WZXJzaW9uICYmICF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJ3BsYXRmb3JtVmVyc2lvbicgbXVzdCBiZSBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBgICtcbiAgICAgICAgYCcke2NhcHMucGxhdGZvcm1WZXJzaW9ufScgaXMgZ2l2ZW4gaW5zdGVhZC5gKTtcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyBpcyBhbiBhcnJheSwgSlNPTiBhcnJheSwgb3Igc3RyaW5nXG4gICAgaWYgKGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpIHtcbiAgICAgIGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgPSB0aGlzLmhlbHBlcnMucGFyc2VDYXBzQXJyYXkoY2Fwcy5hZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyk7XG4gICAgfVxuXG4gICAgLy8gZmluYWxseSwgcmV0dXJuIHRydWUgc2luY2UgdGhlIHN1cGVyY2xhc3MgY2hlY2sgcGFzc2VkLCBhcyBkaWQgdGhpc1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbEFVVCAoKSB7XG4gICAgaWYgKHRoaXMuaXNTYWZhcmkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0odGhpcy5vcHRzLmFwcCwge1xuICAgICAgaXNTaW11bGF0b3I6IHRoaXMuaXNTaW11bGF0b3IoKSxcbiAgICAgIGlzVHZPUzogdGhpcy5pc1R2T1MoKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9SZWFsRGV2aWNlKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgdGltZW91dDogdGhpcy5vcHRzLmFwcFB1c2hUaW1lb3V0LFxuICAgICAgICBzdHJhdGVneTogdGhpcy5vcHRzLmFwcEluc3RhbGxTdHJhdGVneSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmJ1bmRsZUlkLCB7XG4gICAgICAgIG5vUmVzZXQ6IHRoaXMub3B0cy5ub1Jlc2V0LFxuICAgICAgICBuZXdTaW11bGF0b3I6IHRoaXMubGlmZWN5Y2xlRGF0YS5jcmVhdGVTaW0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5zdGFsbE90aGVyQXBwcyh0aGlzLm9wdHMub3RoZXJBcHBzKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlKSkge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzY4ODlcbiAgICAgIGxldCBwYXVzZSA9IHBhcnNlSW50KHRoaXMub3B0cy5pb3NJbnN0YWxsUGF1c2UsIDEwKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBpb3NJbnN0YWxsUGF1c2Ugc2V0LiBQYXVzaW5nICR7cGF1c2V9IG1zIGJlZm9yZSBjb250aW51aW5nYCk7XG4gICAgICBhd2FpdCBCLmRlbGF5KHBhdXNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnN0YWxsT3RoZXJBcHBzIChvdGhlckFwcHMpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgdGhpcy5sb2cud2FybignQ2FwYWJpbGl0eSBvdGhlckFwcHMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvcnMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGFwcHNMaXN0O1xuICAgIHRyeSB7XG4gICAgICBhcHBzTGlzdCA9IHRoaXMuaGVscGVycy5wYXJzZUNhcHNBcnJheShvdGhlckFwcHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KGFwcHNMaXN0KSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgR290IHplcm8gYXBwcyBmcm9tICdvdGhlckFwcHMnIGNhcGFiaWxpdHkgdmFsdWUuIERvaW5nIG5vdGhpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBQYXRocyA9IGF3YWl0IEIuYWxsKGFwcHNMaXN0Lm1hcChcbiAgICAgIChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCAnLmFwcCcpXG4gICAgKSk7XG4gICAgZm9yIChjb25zdCBvdGhlckFwcCBvZiBhcHBQYXRocykge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIG90aGVyQXBwLCB1bmRlZmluZWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIG5ld1NpbXVsYXRvcjogdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVkdWNlTW90aW9uIGFzICdpc0VuYWJsZWQnIG9ubHkgd2hlbiB0aGUgY2FwYWJpbGl0aWVzIGhhcyAncmVkdWNlTW90aW9uJ1xuICAgKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGZvciByZWFsIGRldmljZXMuXG4gICAqIEBwYXJhbSB7P2Jvb2xlYW59IGlzRW5hYmxlZCBXZXRoZXIgZW5hYmxlIHJlZHVjZU1vdGlvblxuICAgKi9cbiAgYXN5bmMgc2V0UmVkdWNlTW90aW9uIChpc0VuYWJsZWQpIHtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSB8fCAhXy5pc0Jvb2xlYW4oaXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgcmVkdWNlTW90aW9uIHRvICR7aXNFbmFibGVkfWApO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3JlZHVjZU1vdGlvbjogaXNFbmFibGVkfSk7XG4gIH1cblxuICBhc3luYyBzZXRJbml0aWFsT3JpZW50YXRpb24gKG9yaWVudGF0aW9uKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9yaWVudGF0aW9uKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBpbmcgc2V0dGluZyBvZiB0aGUgaW5pdGlhbCBkaXNwbGF5IG9yaWVudGF0aW9uLiAnICtcbiAgICAgICAgJ1NldCB0aGUgXCJvcmllbnRhdGlvblwiIGNhcGFiaWxpdHkgdG8gZWl0aGVyIFwiTEFORFNDQVBFXCIgb3IgXCJQT1JUUkFJVFwiLCBpZiB0aGlzIGlzIGFuIHVuZGVzaXJlZCBiZWhhdmlvci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbi50b1VwcGVyQ2FzZSgpO1xuICAgIGlmICghXy5pbmNsdWRlcyhbJ0xBTkRTQ0FQRScsICdQT1JUUkFJVCddLCBvcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBVbmFibGUgdG8gc2V0IGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7b3JpZW50YXRpb259J2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9vcmllbnRhdGlvbicsICdQT1NUJywge29yaWVudGF0aW9ufSk7XG4gICAgICB0aGlzLm9wdHMuY3VyT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFNldHRpbmcgaW5pdGlhbCBvcmllbnRhdGlvbiBmYWlsZWQgd2l0aDogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29tbWFuZFRpbWVvdXQgKGNtZE5hbWUpIHtcbiAgICBpZiAodGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgaWYgKGNtZE5hbWUgJiYgXy5oYXModGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0cywgY21kTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbY21kTmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRzLmNvbW1hbmRUaW1lb3V0c1tERUZBVUxUX1RJTUVPVVRfS0VZXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlc3Npb24gY2FwYWJpbGl0aWVzIG1lcmdlZCB3aXRoIHdoYXQgV0RBIHJlcG9ydHNcbiAgICogVGhpcyBpcyBhIGxpYnJhcnkgY29tbWFuZCBidXQgbmVlZHMgdG8gY2FsbCAnc3VwZXInIHNvIGNhbid0IGJlIG9uXG4gICAqIGEgaGVscGVyIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgLy8gY2FsbCBzdXBlciB0byBnZXQgZXZlbnQgdGltaW5ncywgZXRjLi4uXG4gICAgY29uc3QgZHJpdmVyU2Vzc2lvbiA9IGF3YWl0IHN1cGVyLmdldFNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMud2RhQ2Fwcykge1xuICAgICAgdGhpcy53ZGFDYXBzID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy8nLCAnR0VUJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR2V0RGV2aWNlQ2FwcyA9IF8uaXNCb29sZWFuKHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm8pXG4gICAgICA/IHRoaXMub3B0cy5pbmNsdWRlRGV2aWNlQ2Fwc1RvU2Vzc2lvbkluZm9cbiAgICAgIDogdHJ1ZTsgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmIChzaG91bGRHZXREZXZpY2VDYXBzICYmICF0aGlzLmRldmljZUNhcHMpIHtcbiAgICAgIGNvbnN0IHtzdGF0dXNCYXJTaXplLCBzY2FsZX0gPSBhd2FpdCB0aGlzLmdldFNjcmVlbkluZm8oKTtcbiAgICAgIHRoaXMuZGV2aWNlQ2FwcyA9IHtcbiAgICAgICAgcGl4ZWxSYXRpbzogc2NhbGUsXG4gICAgICAgIHN0YXRCYXJIZWlnaHQ6IHN0YXR1c0JhclNpemUuaGVpZ2h0LFxuICAgICAgICB2aWV3cG9ydFJlY3Q6IGF3YWl0IHRoaXMuZ2V0Vmlld3BvcnRSZWN0KCksXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmxvZy5pbmZvKCdNZXJnaW5nIFdEQSBjYXBzIG92ZXIgQXBwaXVtIGNhcHMgZm9yIHNlc3Npb24gZGV0YWlsIHJlc3BvbnNlJyk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe3VkaWQ6IHRoaXMub3B0cy51ZGlkfSwgZHJpdmVyU2Vzc2lvbixcbiAgICAgIHRoaXMud2RhQ2Fwcy5jYXBhYmlsaXRpZXMsIHRoaXMuZGV2aWNlQ2FwcyB8fCB7fSk7XG4gIH1cblxuICBhc3luYyByZXNldCAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0KSB7XG4gICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSByZXNldCBoYXBwZW5zIGV2ZW4gaWYgbm9SZXNldCBpcyBzZXQgdG8gdHJ1ZVxuICAgICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgICAgb3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICBvcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc2h1dGRvd25IYW5kbGVyID0gdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duO1xuICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blJlc2V0KG9wdHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gc2h1dGRvd25IYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCBzdXBlci5yZXNldCgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oWENVSVRlc3REcml2ZXIucHJvdG90eXBlLCBjb21tYW5kcyk7XG5cbmV4cG9ydCBkZWZhdWx0IFhDVUlUZXN0RHJpdmVyO1xuZXhwb3J0IHsgWENVSVRlc3REcml2ZXIgfTtcbiJdLCJmaWxlIjoibGliL2RyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
package/lib/driver.js CHANGED
@@ -320,6 +320,10 @@ class XCUITestDriver extends BaseDriver {
320
320
  }:${this.opts.port}/welcome`;
321
321
  }
322
322
 
323
+ doesSafariSupportUrlArgument () {
324
+ return util.compareVersions(this.opts.platformVersion, '<', '12.2');
325
+ }
326
+
323
327
  async start () {
324
328
  this.opts.noReset = !!this.opts.noReset;
325
329
  this.opts.fullReset = !!this.opts.fullReset;
@@ -370,7 +374,7 @@ class XCUITestDriver extends BaseDriver {
370
374
  this.opts.processArguments = this.opts.processArguments || {};
371
375
  this.opts.bundleId = SAFARI_BUNDLE_ID;
372
376
  this._currentUrl = this.opts.safariInitialUrl || this.getDefaultUrl();
373
- if (util.compareVersions(this.opts.platformVersion, '<', '12.2')) {
377
+ if (this.doesSafariSupportUrlArgument()) {
374
378
  // this option does not work on 12.2 and above
375
379
  this.opts.processArguments.args = ['-u', this._currentUrl];
376
380
  }
@@ -520,22 +524,25 @@ class XCUITestDriver extends BaseDriver {
520
524
  await this.setInitialOrientation(this.opts.orientation);
521
525
  this.logEvent('orientationSet');
522
526
 
523
- // real devices will be handled later, after the web context has been initialized
524
- if (this.isSafari() && !this.isRealDevice()
525
- && util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {
526
- // on 12.2 the page is not opened in WDA
527
- await this.opts.device.openUrl(this._currentUrl);
528
- }
527
+ if (this.isSafari()) {
528
+ // real devices will be handled later, after the web context has been initialized
529
+ if (!this.doesSafariSupportUrlArgument() && !this.isRealDevice()) {
530
+ this.log.info(`About to set the initial URL to '${this._currentUrl}' on Simulator. ` +
531
+ `Use 'safariInitialUrl' capability in order to customize it`);
532
+ await this.opts.device.openUrl(this._currentUrl);
533
+ }
529
534
 
530
- if (this.isSafari() || this.opts.autoWebview) {
531
- this.log.debug('Waiting for initial webview');
532
- await this.navToInitialWebview();
533
- this.logEvent('initialWebviewNavigated');
534
- }
535
+ if (this.opts.autoWebview) {
536
+ this.log.debug('Waiting for initial webview');
537
+ await this.navToInitialWebview();
538
+ this.logEvent('initialWebviewNavigated');
539
+ }
535
540
 
536
- if (this.isSafari() && this.isRealDevice() && util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {
537
- // on 12.2 the page is not opened in WDA
538
- await this.setUrl(this._currentUrl);
541
+ if (!this.doesSafariSupportUrlArgument() && this.isRealDevice()) {
542
+ this.log.info(`About to set the initial URL to '${this._currentUrl}' on the device. ` +
543
+ `Use 'safariInitialUrl' capability in order to customize it`);
544
+ await this.setUrl(this._currentUrl);
545
+ }
539
546
  }
540
547
  }
541
548
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "4.3.4",
3
+ "version": "4.3.5",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -30,6 +30,14 @@
30
30
  "ws": "7.5.7"
31
31
  },
32
32
  "dependencies": {
33
+ "@babel/runtime": {
34
+ "version": "7.17.8",
35
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz",
36
+ "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==",
37
+ "requires": {
38
+ "regenerator-runtime": "^0.13.4"
39
+ }
40
+ },
33
41
  "lru-cache": {
34
42
  "version": "7.7.1",
35
43
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.1.tgz",
@@ -82,6 +90,37 @@
82
90
  "uuid": "8.3.2",
83
91
  "which": "2.0.2",
84
92
  "yauzl": "2.10.0"
93
+ },
94
+ "dependencies": {
95
+ "@babel/runtime": {
96
+ "version": "7.17.8",
97
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz",
98
+ "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==",
99
+ "requires": {
100
+ "regenerator-runtime": "^0.13.4"
101
+ }
102
+ },
103
+ "lru-cache": {
104
+ "version": "6.0.0",
105
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
106
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
107
+ "requires": {
108
+ "yallist": "^4.0.0"
109
+ }
110
+ },
111
+ "moment": {
112
+ "version": "2.29.1",
113
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
114
+ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
115
+ },
116
+ "semver": {
117
+ "version": "7.3.5",
118
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
119
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
120
+ "requires": {
121
+ "lru-cache": "^6.0.0"
122
+ }
123
+ }
85
124
  }
86
125
  },
87
126
  "@babel/code-frame": {
@@ -98,9 +137,9 @@
98
137
  "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
99
138
  },
100
139
  "@babel/highlight": {
101
- "version": "7.16.10",
102
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
103
- "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
140
+ "version": "7.17.9",
141
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
142
+ "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
104
143
  "requires": {
105
144
  "@babel/helper-validator-identifier": "^7.16.7",
106
145
  "chalk": "^2.0.0",
@@ -108,9 +147,9 @@
108
147
  }
109
148
  },
110
149
  "@babel/runtime": {
111
- "version": "7.17.8",
112
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz",
113
- "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==",
150
+ "version": "7.17.9",
151
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
152
+ "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
114
153
  "requires": {
115
154
  "regenerator-runtime": "^0.13.4"
116
155
  }
@@ -459,9 +498,9 @@
459
498
  "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
460
499
  },
461
500
  "@xmldom/xmldom": {
462
- "version": "0.8.1",
463
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.1.tgz",
464
- "integrity": "sha512-4wOae+5N2RZ+CZXd9ZKwkaDi55IxrSTOjHpxTvQQ4fomtOJmqVxbmICA9jE1jvnqNhpfgz8cnfFagG86wV/xLQ=="
501
+ "version": "0.8.2",
502
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.2.tgz",
503
+ "integrity": "sha512-+R0juSseERyoPvnBQ/cZih6bpF7IpCXlWbHRoCRzYzqpz6gWHOgf8o4MOEf6KBVuOyqU+gCNLkCWVIJAro8XyQ=="
465
504
  },
466
505
  "accepts": {
467
506
  "version": "1.3.8",
@@ -918,13 +957,9 @@
918
957
  "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
919
958
  },
920
959
  "crc-32": {
921
- "version": "1.2.1",
922
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz",
923
- "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==",
924
- "requires": {
925
- "exit-on-epipe": "~1.0.1",
926
- "printj": "~1.3.1"
927
- }
960
+ "version": "1.2.2",
961
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
962
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
928
963
  },
929
964
  "crc32-stream": {
930
965
  "version": "4.0.2",
@@ -1042,11 +1077,6 @@
1042
1077
  "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
1043
1078
  "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI="
1044
1079
  },
1045
- "exit-on-epipe": {
1046
- "version": "1.0.1",
1047
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
1048
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
1049
- },
1050
1080
  "express": {
1051
1081
  "version": "4.17.3",
1052
1082
  "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz",
@@ -1278,9 +1308,9 @@
1278
1308
  }
1279
1309
  },
1280
1310
  "graceful-fs": {
1281
- "version": "4.2.9",
1282
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
1283
- "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
1311
+ "version": "4.2.10",
1312
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
1313
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
1284
1314
  },
1285
1315
  "has": {
1286
1316
  "version": "1.0.3",
@@ -1645,9 +1675,9 @@
1645
1675
  }
1646
1676
  },
1647
1677
  "moment": {
1648
- "version": "2.29.1",
1649
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
1650
- "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
1678
+ "version": "2.29.2",
1679
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz",
1680
+ "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg=="
1651
1681
  },
1652
1682
  "moment-timezone": {
1653
1683
  "version": "0.5.34",
@@ -1983,11 +2013,6 @@
1983
2013
  }
1984
2014
  }
1985
2015
  },
1986
- "printj": {
1987
- "version": "1.3.1",
1988
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz",
1989
- "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg=="
1990
- },
1991
2016
  "process": {
1992
2017
  "version": "0.11.10",
1993
2018
  "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -2109,21 +2134,11 @@
2109
2134
  "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
2110
2135
  },
2111
2136
  "semver": {
2112
- "version": "7.3.5",
2113
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
2114
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
2137
+ "version": "7.3.6",
2138
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz",
2139
+ "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==",
2115
2140
  "requires": {
2116
- "lru-cache": "^6.0.0"
2117
- },
2118
- "dependencies": {
2119
- "lru-cache": {
2120
- "version": "6.0.0",
2121
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2122
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2123
- "requires": {
2124
- "yallist": "^4.0.0"
2125
- }
2126
- }
2141
+ "lru-cache": "^7.4.0"
2127
2142
  }
2128
2143
  },
2129
2144
  "send": {
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "4.3.4",
11
+ "version": "4.3.5",
12
12
  "author": "appium",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {