appium-chromedriver 5.1.7 → 5.2.2

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
@@ -9,23 +9,10 @@ Node.js wrapper around [Chromedriver](https://sites.google.com/a/chromium.org/ch
9
9
 
10
10
  Issues for this repo are disabled. Log any issues at the [main Appium repo's issue tracker](https://github.com/appium/appium/issues).
11
11
 
12
- ## Local installation
13
-
14
- Because of the oddities of `npm`'s lifecycle hooks, installing locally the first time _will_ fail, saying `Project does not appear to built yet. Please run `gulp transpile` first.`. This is because we transpile in the `prepublish` phase, but run the install script in the `install` phase. Any other way would make development dependencies necessary on user's machines, or make the binary not install, unfortunately.
15
-
16
- The solution, however, is simple. Simple run `gulp transpile` and then `npm install`. The former will build the project and the latter will simply install the binary.
17
-
18
12
  ## Skipping binary installation
19
13
 
20
14
  If, for some reason, you want to install without installing the Chromedriver
21
- binary, either set the `APPIUM_SKIP_CHROMEDRIVER_INSTALL` environment variable,
22
- pass the `--chromedriver-skip-install` flag while running `npm install`
23
- or add the following property into your [`.npmrc`](https://docs.npmjs.com/files/npmrc) file.
24
-
25
- ```bash
26
- chromedriver_skip_install=true
27
- ```
28
-
15
+ binary set the `APPIUM_SKIP_CHROMEDRIVER_INSTALL` environment variable.
29
16
 
30
17
  ## Usage
31
18
 
@@ -112,16 +99,16 @@ CHROMEDRIVER_CDNURL=http://npm.taobao.org/mirrors/chromedriver npm install appiu
112
99
 
113
100
  ## Dev
114
101
 
115
- We use Gulp for building/transpiling.
116
-
117
- ### Watch
102
+ ### Build & Lint
118
103
 
119
104
  ```
120
- npm run watch
105
+ npm run build
106
+ npm run lint
121
107
  ```
122
108
 
123
109
  ### Run Tests
124
110
 
125
111
  ```
126
112
  npm test
113
+ npm e2e-test
127
114
  ```
package/build/index.js CHANGED
@@ -20,7 +20,5 @@ var _chromedriver = _interopRequireDefault(require("./lib/chromedriver"));
20
20
  var _storageClient = _interopRequireDefault(require("./lib/storage-client"));
21
21
 
22
22
  var _default = _chromedriver.default;
23
- exports.default = _default;require('source-map-support').install();
24
-
25
-
26
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjaHJvbWVkcml2ZXIiXSwic291cmNlUm9vdCI6Ii4uIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGNocm9tZWRyaXZlciB9IGZyb20gJy4vbGliL2Nocm9tZWRyaXZlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL2xpYi9zdG9yYWdlLWNsaWVudCc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgfTtcbmV4cG9ydCBkZWZhdWx0IGNocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7ZUFHZUEscUIifQ==
23
+ exports.default = _default;
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaHJvbWVkcml2ZXIiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0IGFzIGNocm9tZWRyaXZlciB9IGZyb20gJy4vbGliL2Nocm9tZWRyaXZlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCBmcm9tICcuL2xpYi9zdG9yYWdlLWNsaWVudCc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgfTtcbmV4cG9ydCBkZWZhdWx0IGNocm9tZWRyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7ZUFHZUEscUIifQ==
@@ -733,7 +733,5 @@ Chromedriver.STATE_ONLINE = 'online';
733
733
  Chromedriver.STATE_STOPPING = 'stopping';
734
734
  Chromedriver.STATE_RESTARTING = 'restarting';
735
735
  var _default = Chromedriver;
736
- exports.default = _default;require('source-map-support').install();
737
-
738
-
739
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Nocm9tZWRyaXZlci5qcyIsIm5hbWVzIjpbIk5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OIiwiREVGQVVMVF9IT1NUIiwiTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCIsIkRFRkFVTFRfUE9SVCIsIkNIUk9NRV9CVU5ETEVfSUQiLCJXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCIsIldFQlZJRVdfQlVORExFX0lEUyIsIkNIUk9NRURSSVZFUl9UVVRPUklBTCIsIlZFUlNJT05fUEFUVEVSTiIsIkNEX1ZFUlNJT05fVElNRU9VVCIsIkNocm9tZWRyaXZlciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImhvc3QiLCJwb3J0IiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImV4ZWN1dGFibGUiLCJleGVjdXRhYmxlRGlyIiwiZ2V0Q2hyb21lZHJpdmVyRGlyIiwiYnVuZGxlSWQiLCJtYXBwaW5nUGF0aCIsImNtZEFyZ3MiLCJhZGIiLCJ2ZXJib3NlIiwibG9nUGF0aCIsImRpc2FibGVCdWlsZENoZWNrIiwiZGV0YWlscyIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIl9sb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZUxvZ1ByZWZpeCIsInByb3h5SG9zdCIsInByb3h5UG9ydCIsInByb2MiLCJjaHJvbWVkcml2ZXIiLCJleGVjdXRhYmxlVmVyaWZpZWQiLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJqd3Byb3h5IiwiSldQcm94eSIsInNlcnZlciIsImxvZyIsInN0b3JhZ2VDbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwiY2hyb21lZHJpdmVyRGlyIiwiY2FwYWJpbGl0aWVzIiwiZGVzaXJlZFByb3RvY29sIiwiUFJPVE9DT0xTIiwiTUpTT05XUCIsImdldERyaXZlcnNNYXBwaW5nIiwibWFwcGluZyIsIl8iLCJjbG9uZURlZXAiLCJDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkciLCJkZWJ1ZyIsImZzIiwiZXhpc3RzIiwid2FybiIsImluZm8iLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZSIsImVyciIsIm1lc3NhZ2UiLCJjZFZlcnNpb24iLCJjaHJvbWVWZXJzaW9uIiwidG9QYWlycyIsImNvZXJjZWRWZXJzaW9uIiwic2VtdmVyIiwiY29lcmNlIiwidmVyc2lvbiIsImdldENocm9tZWRyaXZlcnMiLCJleGVjdXRhYmxlcyIsImdsb2IiLCJjd2QiLCJzdHJpY3QiLCJub2RpciIsImFic29sdXRlIiwidXRpbCIsInBsdXJhbGl6ZSIsImxlbmd0aCIsImNkcyIsImFzeW5jbWFwIiwibG9nRXJyb3IiLCJzdGRvdXQiLCJzdGRlcnIiLCJlcnJNc2ciLCJwYXRoIiwiYmFzZW5hbWUiLCJleGVjIiwidGltZW91dCIsImluY2x1ZGVzIiwibWF0Y2giLCJtaW5DaHJvbWVWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImZpbHRlciIsImNkIiwic29ydCIsImEiLCJiIiwiY29tcGFyZVZlcnNpb25zIiwiaXNFbXB0eSIsImdldENocm9tZVZlcnNpb24iLCJCcm93c2VyIiwidmVyc2lvbk1hdGNoIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsInVwZGF0ZURyaXZlcnNNYXBwaW5nIiwibmV3TWFwcGluZyIsInNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmciLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiLCJlIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlciIsImdldENocm9tZWRyaXZlckJpbmFyeVBhdGgiLCJ2YWx1ZXMiLCJkaWRTdG9yYWdlU3luYyIsInN5bmNDaHJvbWVkcml2ZXJzIiwicmV0cmlldmVkTWFwcGluZyIsInJldHJpZXZlTWFwcGluZyIsImRyaXZlcktleXMiLCJzeW5jRHJpdmVycyIsIm1pbkJyb3dzZXJWZXJzaW9uIiwic3luY2hyb25pemVkRHJpdmVyc01hcHBpbmciLCJyZWR1Y2UiLCJhY2MiLCJ4IiwibWlzc2luZ1ZlcnNpb25zIiwiY29lcmNlZFZlciIsInNpemUiLCJlcnJvckFuZFRocm93IiwibWF0Y2hpbmdEcml2ZXJzIiwibWluQ2hyb21lVmVyc2lvblMiLCJndGUiLCJDRF9DRE4iLCJzdGFjayIsImF1dG9kb3dubG9hZFN1Z2dlc3Rpb24iLCJFcnJvciIsImJpblBhdGgiLCJpbml0Q2hyb21lZHJpdmVyUGF0aCIsInN5bmNQcm90b2NvbCIsIlczQyIsImNocm9tZU9wdGlvbnMiLCJnZXRDYXBWYWx1ZSIsInczYyIsInRvVzNjQ2FwTmFtZXMiLCJzdGFydCIsImNhcHMiLCJlbWl0U3RhcnRpbmdTdGF0ZSIsImxvZ2dpbmdQcmVmcyIsImJyb3dzZXIiLCJjaGFuZ2VTdGF0ZSIsIlNUQVRFX1NUQVJUSU5HIiwiYWRiUG9ydCIsInB1c2giLCJpc0FycmF5Iiwic3RhcnREZXRlY3RvciIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzSXNBbGl2ZSIsIndlYnZpZXdWZXJzaW9uIiwia2lsbEFsbCIsIlN1YlByb2Nlc3MiLCJvbiIsIm91dCIsImxpbmUiLCJ0cmltIiwic3BsaXQiLCJlcnJvciIsImNvZGUiLCJzaWduYWwiLCJTVEFURV9TVE9QUElORyIsIlNUQVRFX1JFU1RBUlRJTkciLCJtc2ciLCJqb2luIiwid2FpdEZvck9ubGluZSIsInN0YXJ0U2Vzc2lvbiIsImVtaXQiLCJFVkVOVF9FUlJPUiIsInN0b3AiLCJ2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyIiwic2Vzc2lvbklkIiwiU1RBVEVfT05MSU5FIiwicmVzdGFydCIsImNocm9tZWRyaXZlclN0b3BwZWQiLCJyZXRyeUludGVydmFsIiwiZ2V0U3RhdHVzIiwiY29tbWFuZCIsInNlc3Npb25DYXBzIiwiYWx3YXlzTWF0Y2giLCJkZXNpcmVkQ2FwYWJpbGl0aWVzIiwicHJlZml4IiwiZW1pdFN0YXRlcyIsInJ1blNhZmVTdGVwIiwiZiIsIkVWRU5UX0NIQU5HRUQiLCJzZW5kQ29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJwcm94eVJlcSIsInJlcSIsInJlcyIsInByb3h5UmVxUmVzIiwiY21kIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiQiIsInByb21pc2lmeSIsImNwIiwidWRpZEluZGV4IiwiZGVmYXVsdEFyZ3MiLCJmaW5kSW5kZXgiLCJpdGVtIiwidWRpZCIsImNvbm4iLCJnZXRGb3J3YXJkTGlzdCIsInBhcmFtcyIsInJlbW92ZVBvcnRGb3J3YXJkIiwicmVwbGFjZSIsImhhc1dvcmtpbmdXZWJ2aWV3Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Nocm9tZWRyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBKV1Byb3h5LCBQUk9UT0NPTFMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIGFzeW5jbWFwIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU3ViUHJvY2VzcywgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyxcbiAgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCwgQ0RfQ0ROLCBnZW5lcmF0ZUxvZ1ByZWZpeFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQgeyB0b1czY0NhcE5hbWVzLCBnZXRDYXBWYWx1ZSB9IGZyb20gJy4vcHJvdG9jb2wtaGVscGVycyc7XG5cbmNvbnN0IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OID0gNzM7XG5jb25zdCBERUZBVUxUX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IE1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQgPSA3NTtcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDk1MTU7XG5jb25zdCBDSFJPTUVfQlVORExFX0lEID0gJ2NvbS5hbmRyb2lkLmNocm9tZSc7XG5jb25zdCBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCA9ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCc7XG5jb25zdCBXRUJWSUVXX0JVTkRMRV9JRFMgPSBbXG4gICdjb20uZ29vZ2xlLmFuZHJvaWQud2VidmlldycsXG4gICdjb20uYW5kcm9pZC53ZWJ2aWV3Jyxcbl07XG5jb25zdCBDSFJPTUVEUklWRVJfVFVUT1JJQUwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3dlYi9jaHJvbWVkcml2ZXIubWQnO1xuY29uc3QgVkVSU0lPTl9QQVRURVJOID0gLyhbXFxkLl0rKS87XG5cbmNvbnN0IENEX1ZFUlNJT05fVElNRU9VVCA9IDUwMDA7XG5cbmNsYXNzIENocm9tZWRyaXZlciBleHRlbmRzIGV2ZW50cy5FdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGhvc3QgPSBERUZBVUxUX0hPU1QsXG4gICAgICBwb3J0ID0gREVGQVVMVF9QT1JULFxuICAgICAgdXNlU3lzdGVtRXhlY3V0YWJsZSA9IGZhbHNlLFxuICAgICAgZXhlY3V0YWJsZSxcbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBnZXRDaHJvbWVkcml2ZXJEaXIoKSxcbiAgICAgIGJ1bmRsZUlkLFxuICAgICAgbWFwcGluZ1BhdGgsXG4gICAgICBjbWRBcmdzLFxuICAgICAgYWRiLFxuICAgICAgdmVyYm9zZSxcbiAgICAgIGxvZ1BhdGgsXG4gICAgICBkaXNhYmxlQnVpbGRDaGVjayxcbiAgICAgIGRldGFpbHMsXG4gICAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQgPSBmYWxzZSxcbiAgICB9ID0gYXJncztcbiAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKGdlbmVyYXRlTG9nUHJlZml4KHRoaXMpKTtcblxuICAgIHRoaXMucHJveHlIb3N0ID0gaG9zdDtcbiAgICB0aGlzLnByb3h5UG9ydCA9IHBvcnQ7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy5jbWRBcmdzID0gY21kQXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMudXNlU3lzdGVtRXhlY3V0YWJsZSA9IHVzZVN5c3RlbUV4ZWN1dGFibGU7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBleGVjdXRhYmxlO1xuICAgIHRoaXMuZXhlY3V0YWJsZURpciA9IGV4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5tYXBwaW5nUGF0aCA9IG1hcHBpbmdQYXRoO1xuICAgIHRoaXMuYnVuZGxlSWQgPSBidW5kbGVJZDtcbiAgICB0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUgPSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRDtcbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMucHJveHlIb3N0LFxuICAgICAgcG9ydDogdGhpcy5wcm94eVBvcnQsXG4gICAgICBsb2c6IHRoaXMuX2xvZyxcbiAgICB9KTtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlO1xuICAgIHRoaXMubG9nUGF0aCA9IGxvZ1BhdGg7XG4gICAgdGhpcy5kaXNhYmxlQnVpbGRDaGVjayA9ICEhZGlzYWJsZUJ1aWxkQ2hlY2s7XG4gICAgdGhpcy5zdG9yYWdlQ2xpZW50ID0gaXNBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHsgY2hyb21lZHJpdmVyRGlyOiB0aGlzLmV4ZWN1dGFibGVEaXIgfSlcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0ge307XG4gICAgdGhpcy5kZXNpcmVkUHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGdldCBsb2cgKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICBhc3luYyBnZXREcml2ZXJzTWFwcGluZyAoKSB7XG4gICAgbGV0IG1hcHBpbmcgPSBfLmNsb25lRGVlcChDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcpO1xuICAgIGlmICh0aGlzLm1hcHBpbmdQYXRoKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQXR0ZW1wdGluZyB0byB1c2UgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9J2ApO1xuICAgICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5tYXBwaW5nUGF0aCkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgTm8gZmlsZSBmb3VuZCBhdCAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbWFwcGluZyA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUodGhpcy5tYXBwaW5nUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYEVycm9yIHBhcnNpbmcgbWFwcGluZyBmcm9tICcke3RoaXMubWFwcGluZ1BhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKCdEZWZhdWx0aW5nIHRvIHRoZSBzdGF0aWMgQ2hyb21lZHJpdmVyLT5DaHJvbWUgbWFwcGluZycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdVc2luZyB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGZvciBtaW5pbXVtIGNocm9tZSB2ZXJzaW9uIGFyZSBzZW12ZXIgY29tcGxpYW50XG4gICAgZm9yIChjb25zdCBbY2RWZXJzaW9uLCBjaHJvbWVWZXJzaW9uXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKTtcbiAgICAgIGlmIChjb2VyY2VkVmVyc2lvbikge1xuICAgICAgICBtYXBwaW5nW2NkVmVyc2lvbl0gPSBjb2VyY2VkVmVyc2lvbi52ZXJzaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgJyR7Y2hyb21lVmVyc2lvbn0nIGlzIG5vdCBhIHZhbGlkIHZlcnNpb24gbnVtYmVyLiBTa2lwcGluZyBpdGApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFwcGluZztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZWRyaXZlcnMgKG1hcHBpbmcpIHtcbiAgICAvLyBnbyB0aHJvdWdoIHRoZSB2ZXJzaW9ucyBhdmFpbGFibGVcbiAgICBjb25zdCBleGVjdXRhYmxlcyA9IGF3YWl0IGZzLmdsb2IoJyonLCB7XG4gICAgICBjd2Q6IHRoaXMuZXhlY3V0YWJsZURpcixcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBub2RpcjogdHJ1ZSxcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdleGVjdXRhYmxlJywgZXhlY3V0YWJsZXMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICBgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICBjb25zdCBjZHMgPSAoYXdhaXQgYXN5bmNtYXAoZXhlY3V0YWJsZXMsIGFzeW5jIChleGVjdXRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBsb2dFcnJvciA9ICh7bWVzc2FnZSwgc3Rkb3V0ID0gbnVsbCwgc3RkZXJyID0gbnVsbH0pID0+IHtcbiAgICAgICAgbGV0IGVyck1zZyA9IGBDYW5ub3QgcmV0cmlldmUgdmVyc2lvbiBudW1iZXIgZnJvbSAnJHtwYXRoLmJhc2VuYW1lKGV4ZWN1dGFibGUpfScgQ2hyb21lZHJpdmVyIGJpbmFyeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSBpdCByZXR1cm5zIGEgdmFsaWQgdmVyc2lvbiBzdHJpbmcgaW4gcmVzcG9uc2UgdG8gJy0tdmVyc2lvbicgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAke21lc3NhZ2V9YDtcbiAgICAgICAgaWYgKHN0ZG91dCkge1xuICAgICAgICAgIGVyck1zZyArPSBgXFxuU3Rkb3V0OiAke3N0ZG91dH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZGVycjogJHtzdGRlcnJ9YDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZy53YXJuKGVyck1zZyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgbGV0IHN0ZG91dDtcbiAgICAgIGxldCBzdGRlcnI7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IGV4ZWMoZXhlY3V0YWJsZSwgWyctLXZlcnNpb24nXSwge1xuICAgICAgICAgIHRpbWVvdXQ6IENEX1ZFUlNJT05fVElNRU9VVCxcbiAgICAgICAgfSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghKGVyci5tZXNzYWdlIHx8ICcnKS5pbmNsdWRlcygndGltZWQgb3V0JykgJiYgIShlcnIuc3Rkb3V0IHx8ICcnKS5pbmNsdWRlcygnU3RhcnRpbmcgQ2hyb21lRHJpdmVyJykpIHtcbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoaXMgaGFzIHRpbWVkIG91dCwgaXQgaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgQ2hyb21lZHJpdmVyLFxuICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHRoZXJlIHdpbGwgYWxzbyBiZSB0aGUgdmVyc2lvbiBzdHJpbmcgaW4gdGhlIG91dHB1dFxuICAgICAgICBzdGRvdXQgPSBlcnIuc3Rkb3V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXRjaCA9IC9DaHJvbWVEcml2ZXJcXHMrXFwoP3Y/KFtcXGQuXSspXFwpPy9pLmV4ZWMoc3Rkb3V0KTsgLy8gaHR0cHM6Ly9yZWdleDEwMS5jb20vci96cGo1d0EvMVxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe21lc3NhZ2U6ICdDYW5ub3QgcGFyc2UgdGhlIHZlcnNpb24gc3RyaW5nJywgc3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICAgIH1cbiAgICAgIGxldCB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gICAgICBsZXQgbWluQ2hyb21lVmVyc2lvbiA9IG1hcHBpbmdbdmVyc2lvbl07XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UodmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgLy8gYmVmb3JlIDIwMTktMDMtMDYgdmVyc2lvbnMgd2VyZSBvZiB0aGUgZm9ybSBtYWpvci5taW5vclxuICAgICAgICBpZiAoY29lcmNlZFZlcnNpb24ubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIHZlcnNpb24gPSBgJHtjb2VyY2VkVmVyc2lvbi5tYWpvcn0uJHtjb2VyY2VkVmVyc2lvbi5taW5vcn1gO1xuICAgICAgICAgIG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvbiAmJiBjb2VyY2VkVmVyc2lvbi5tYWpvciA+PSBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIC8vIEFzc3VtZSB0aGUgbWFqb3IgQ2hyb21lIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIG1ham9yIHZlcnNpb25cbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhlY3V0YWJsZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgbWluQ2hyb21lVmVyc2lvbixcbiAgICAgIH07XG4gICAgfSkpXG4gICAgICAuZmlsdGVyKChjZCkgPT4gISFjZClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBjb21wYXJlVmVyc2lvbnMoYi52ZXJzaW9uLCBhLnZlcnNpb24pKTtcbiAgICBpZiAoXy5pc0VtcHR5KGNkcykpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYE5vIENocm9tZWRyaXZlcnMgd2VyZSBmb3VuZCBpbiAnJHt0aGlzLmV4ZWN1dGFibGVEaXJ9J2ApO1xuICAgICAgcmV0dXJuIGNkcztcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGVzIHdlcmUgZm91bmQ6YCk7XG4gICAgZm9yIChjb25zdCBjZCBvZiBjZHMpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAgICAgJyR7Y2QuZXhlY3V0YWJsZX0nICh2ZXJzaW9uICcke2NkLnZlcnNpb259JywgbWluaW11bSBDaHJvbWUgdmVyc2lvbiAnJHtjZC5taW5DaHJvbWVWZXJzaW9uID8gY2QubWluQ2hyb21lVmVyc2lvbiA6ICdVbmtub3duJ30nKWApO1xuICAgIH1cbiAgICByZXR1cm4gY2RzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2hyb21lVmVyc2lvbiAoKSB7XG4gICAgLy8gVHJ5IHRvIHJldHJpZXZlIHRoZSB2ZXJzaW9uIGZyb20gYGRldGFpbHNgIHByb3BlcnR5IGlmIGl0IGlzIHNldFxuICAgIC8vIFRoZSBgaW5mb2AgaXRlbSBtdXN0IGNvbnRhaW4gdGhlIG91dHB1dCBvZiAvanNvbi92ZXJzaW9uIENEUCBjb21tYW5kXG4gICAgLy8gd2hlcmUgYEJyb3dzZXJgIGZpZWxkIGxvb2tzIGxpa2UgYENocm9tZS83Mi4wLjM2MDEuMGBgXG4gICAgaWYgKHRoaXMuZGV0YWlscz8uaW5mbykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEJyb3dzZXIgdmVyc2lvbiBpbiB0aGUgc3VwcGxpZWQgZGV0YWlsczogJHt0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IFZFUlNJT05fUEFUVEVSTi5leGVjKHRoaXMuZGV0YWlscz8uaW5mbz8uQnJvd3Nlcik7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb25NYXRjaFsxXSk7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGNvZXJjZWRWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjaHJvbWVWZXJzaW9uO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyLCBzaW1wbHkgdHJ5IHRvIGZpbmQgdGhlIHVuZGVybHlpbmcgd2Vidmlld1xuICAgIGlmICh0aGlzLmJ1bmRsZUlkID09PSBXRUJWSUVXX1NIRUxMX0JVTkRMRV9JRCkge1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgcmV0dXJuIHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIG9uIEFuZHJvaWQgNy05IHdlYnZpZXdzIGFyZSBiYWNrZWQgYnkgdGhlIG1haW4gQ2hyb21lLCBub3QgdGhlIHN5c3RlbSB3ZWJ2aWV3XG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gICAgICBpZiAoYXBpTGV2ZWwgPj0gMjQgJiYgYXBpTGV2ZWwgPD0gMjggJiZcbiAgICAgICAgICBbV0VCVklFV19TSEVMTF9CVU5ETEVfSUQsIC4uLldFQlZJRVdfQlVORExFX0lEU10uaW5jbHVkZXModGhpcy5idW5kbGVJZCkpIHtcbiAgICAgICAgdGhpcy5idW5kbGVJZCA9IENIUk9NRV9CVU5ETEVfSUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJ5IG91dCB3ZWJ2aWV3cyB3aGVuIG5vIGJ1bmRsZSBpZCBpcyBzZW50IGluXG4gICAgaWYgKCF0aGlzLmJ1bmRsZUlkKSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBnZW5lcmljIENocm9tZSBidW5kbGVcbiAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuXG4gICAgICAvLyB3ZSBoYXZlIGEgd2VidmlldyBvZiBzb21lIHNvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBidW5kbGUgdmVyc2lvblxuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBXRUJWSUVXX0JVTkRMRV9JRFMpIHtcbiAgICAgICAgY2hyb21lVmVyc2lvbiA9IGF3YWl0IGdldENocm9tZVZlcnNpb24odGhpcy5hZGIsIGJ1bmRsZUlkKTtcbiAgICAgICAgaWYgKGNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBkbyBub3QgaGF2ZSBhIGNocm9tZSB2ZXJzaW9uLCBpdCBtdXN0IG5vdCBiZSBhIHdlYnZpZXdcbiAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCB0aGlzLmJ1bmRsZUlkKTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIHN1cmUgaXQgaXMgc2VtdmVyLCBzbyBsYXRlciBjaGVja3Mgd29uJ3QgZmFpbFxuICAgIHJldHVybiBjaHJvbWVWZXJzaW9uID8gc2VtdmVyLmNvZXJjZShjaHJvbWVWZXJzaW9uKSA6IG51bGw7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEcml2ZXJzTWFwcGluZyAobmV3TWFwcGluZykge1xuICAgIGxldCBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gdHJ1ZTtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGhpcy5tYXBwaW5nUGF0aCwgSlNPTi5zdHJpbmdpZnkobmV3TWFwcGluZywgbnVsbCwgMiksICd1dGY4Jyk7XG4gICAgICAgIHNob3VsZFVwZGF0ZVN0YXRpY01hcHBpbmcgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN0b3JlIHRoZSB1cGRhdGVkIGNocm9tZWRyaXZlcnMgbWFwcGluZyBpbnRvICcke3RoaXMubWFwcGluZ1BhdGh9Jy4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IHJlZHVjZSB0aGUgcGVyZm9ybWFuY2Ugb2YgZnVydGhlciBleGVjdXRpb25zLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORywgbmV3TWFwcGluZyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlciAoKSB7XG4gICAgaWYgKCF0aGlzLmFkYikge1xuICAgICAgcmV0dXJuIGF3YWl0IGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgoKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwaW5nID0gYXdhaXQgdGhpcy5nZXREcml2ZXJzTWFwcGluZygpO1xuICAgIGlmICghXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIG1vc3QgcmVjZW50IGtub3duIENocm9tZSB2ZXJzaW9uOiAke18udmFsdWVzKG1hcHBpbmcpWzBdfWApO1xuICAgIH1cblxuICAgIGxldCBkaWRTdG9yYWdlU3luYyA9IGZhbHNlO1xuICAgIGNvbnN0IHN5bmNDaHJvbWVkcml2ZXJzID0gYXN5bmMgKGNocm9tZVZlcnNpb24pID0+IHtcbiAgICAgIGRpZFN0b3JhZ2VTeW5jID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJldHJpZXZlZE1hcHBpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQucmV0cmlldmVNYXBwaW5nKCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnR290IGNocm9tZWRyaXZlcnMgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlOiAnICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkocmV0cmlldmVkTWFwcGluZywgbnVsbCwgMikpO1xuICAgICAgY29uc3QgZHJpdmVyS2V5cyA9IGF3YWl0IHRoaXMuc3RvcmFnZUNsaWVudC5zeW5jRHJpdmVycyh7XG4gICAgICAgIG1pbkJyb3dzZXJWZXJzaW9uOiBjaHJvbWVWZXJzaW9uLm1ham9yLFxuICAgICAgfSk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcktleXMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nID0gZHJpdmVyS2V5cy5yZWR1Y2UoKGFjYywgeCkgPT4ge1xuICAgICAgICBjb25zdCB7dmVyc2lvbiwgbWluQnJvd3NlclZlcnNpb259ID0gcmV0cmlldmVkTWFwcGluZ1t4XTtcbiAgICAgICAgYWNjW3ZlcnNpb25dID0gbWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKG1hcHBpbmcsIHN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcobWFwcGluZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgY2RzID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVkcml2ZXJzKG1hcHBpbmcpO1xuXG4gICAgICBjb25zdCBtaXNzaW5nVmVyc2lvbnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qge3ZlcnNpb24sIG1pbkNocm9tZVZlcnNpb259IG9mIGNkcykge1xuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gfHwgbWFwcGluZ1t2ZXJzaW9uXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZXJjZWRWZXIgPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgICBpZiAoIWNvZXJjZWRWZXIgfHwgY29lcmNlZFZlci5tYWpvciA8IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBtaXNzaW5nVmVyc2lvbnNbdmVyc2lvbl0gPSBtaW5DaHJvbWVWZXJzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ1ZlcnNpb25zKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBGb3VuZCAke3V0aWwucGx1cmFsaXplKCdDaHJvbWVkcml2ZXInLCBfLnNpemUobWlzc2luZ1ZlcnNpb25zKSwgdHJ1ZSl9LCBgICtcbiAgICAgICAgICBgd2hpY2ggJHtfLnNpemUobWlzc2luZ1ZlcnNpb25zKSA9PT0gMSA/ICdpcycgOiAnYXJlJ30gbWlzc2luZyBpbiB0aGUgbGlzdCBvZiBrbm93biB2ZXJzaW9uczogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRHJpdmVyc01hcHBpbmcoT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBtaXNzaW5nVmVyc2lvbnMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2spIHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgJ2Nocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrJyBjYXBhYmlsaXR5IGlzIHNldCB0byAndHJ1ZSdgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENocm9tZSBidWlsZCBjaGVjayBkaXNhYmxlZC4gVXNpbmcgbW9zdCByZWNlbnQgQ2hyb21lZHJpdmVyIHZlcnNpb24gKCR7dmVyc2lvbn0sIGF0ICcke2V4ZWN1dGFibGV9JylgKTtcbiAgICAgICAgdGhpcy5sb2cud2FybihgSWYgdGhpcyBpcyB3cm9uZywgc2V0ICdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSB0byAnZmFsc2UnYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaHJvbWVWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRDaHJvbWVWZXJzaW9uKCk7XG4gICAgICBpZiAoIWNocm9tZVZlcnNpb24pIHtcbiAgICAgICAgLy8gdW5hYmxlIHRvIGdldCB0aGUgY2hyb21lIHZlcnNpb25cbiAgICAgICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgQ2hyb21lZHJpdmVyIGV4ZWN1dGFibGUgYXZhaWxhYmxlIGZvciB1c2UgaWYgYCArXG4gICAgICAgICAgICBgdGhlIGN1cnJlbnQgQ2hyb21lIHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dmVyc2lvbiwgZXhlY3V0YWJsZX0gPSBjZHNbMF07XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byBkaXNjb3ZlciBDaHJvbWUgdmVyc2lvbi4gVXNpbmcgQ2hyb21lZHJpdmVyICR7dmVyc2lvbn0gYXQgJyR7ZXhlY3V0YWJsZX0nYCk7XG4gICAgICAgIHJldHVybiBleGVjdXRhYmxlO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIENocm9tZSBidW5kbGUgJyR7dGhpcy5idW5kbGVJZH0nIHZlcnNpb24gJyR7Y2hyb21lVmVyc2lvbn0nYCk7XG5cbiAgICAgIGNvbnN0IG1hdGNoaW5nRHJpdmVycyA9IGNkcy5maWx0ZXIoKHttaW5DaHJvbWVWZXJzaW9ufSkgPT4ge1xuICAgICAgICBjb25zdCBtaW5DaHJvbWVWZXJzaW9uUyA9IG1pbkNocm9tZVZlcnNpb24gJiYgc2VtdmVyLmNvZXJjZShtaW5DaHJvbWVWZXJzaW9uKTtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uUykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaHJvbWVWZXJzaW9uLm1ham9yID4gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT05cbiAgICAgICAgICA/IG1pbkNocm9tZVZlcnNpb25TLm1ham9yID09PSBjaHJvbWVWZXJzaW9uLm1ham9yXG4gICAgICAgICAgOiBzZW12ZXIuZ3RlKGNocm9tZVZlcnNpb24sIG1pbkNocm9tZVZlcnNpb25TKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShtYXRjaGluZ0RyaXZlcnMpKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JhZ2VDbGllbnQgJiYgIWRpZFN0b3JhZ2VTeW5jKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBzeW5jQ2hyb21lZHJpdmVycyhjaHJvbWVWZXJzaW9uKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3Qgc3luY2hyb25pemUgbG9jYWwgY2hyb21lZHJpdmVycyB3aXRoIHRoZSByZW1vdGUgc3RvcmFnZSBhdCAke0NEX0NETn06IGAgK1xuICAgICAgICAgICAgICBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF1dG9kb3dubG9hZFN1Z2dlc3Rpb24gPVxuICAgICAgICAgICdZb3UgY291bGQgYWxzbyB0cnkgdG8gZW5hYmxlIGF1dG9tYXRlZCBjaHJvbWVkcml2ZXJzIGRvd25sb2FkIHNlcnZlciBmZWF0dXJlJztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBDaHJvbWVkcml2ZXIgZm91bmQgdGhhdCBjYW4gYXV0b21hdGUgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy4gYCArXG4gICAgICAgICAgKCF0aGlzLnN0b3JhZ2VDbGllbnQgPyBgJHthdXRvZG93bmxvYWRTdWdnZXN0aW9ufS4gYCA6ICcnKSArXG4gICAgICAgICAgYFNlZSAke0NIUk9NRURSSVZFUl9UVVRPUklBTH0gZm9yIG1vcmUgZGV0YWlsc2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiaW5QYXRoID0gbWF0Y2hpbmdEcml2ZXJzWzBdLmV4ZWN1dGFibGU7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIG1hdGNoaW5nRHJpdmVycy5sZW5ndGgsIHRydWUpfSBgICtcbiAgICAgICAgYGNhcGFibGUgb2YgYXV0b21hdGluZyBDaHJvbWUgJyR7Y2hyb21lVmVyc2lvbn0nLlxcbkNob29zaW5nIHRoZSBtb3N0IHJlY2VudCwgJyR7YmluUGF0aH0nLmApO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0lmIGEgc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1aXJlZCwgc3BlY2lmeSBpdCB3aXRoIHRoZSBgY2hyb21lZHJpdmVyRXhlY3V0YWJsZWAnICtcbiAgICAgICAgJ2Rlc2lyZWQgY2FwYWJpbGl0eS4nKTtcbiAgICAgIHJldHVybiBiaW5QYXRoO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICB9IHdoaWxlICh0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDaHJvbWVkcml2ZXJQYXRoICgpIHtcbiAgICBpZiAodGhpcy5leGVjdXRhYmxlVmVyaWZpZWQpIHJldHVybjsgLy9lc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICAvLyB0aGUgZXhlY3V0YWJsZSBtaWdodCBiZSBzZXQgKGlmIHBhc3NlZCBpbilcbiAgICAvLyBvciB3ZSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYmFzaWMgb25lIGluc3RhbGxlZCB3aXRoIHRoaXMgZHJpdmVyXG4gICAgLy8gb3Igd2Ugd2FudCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZVxuICAgIGlmICghdGhpcy5jaHJvbWVkcml2ZXIpIHtcbiAgICAgIHRoaXMuY2hyb21lZHJpdmVyID0gdGhpcy51c2VTeXN0ZW1FeGVjdXRhYmxlXG4gICAgICAgID8gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCgpXG4gICAgICAgIDogYXdhaXQgdGhpcy5nZXRDb21wYXRpYmxlQ2hyb21lZHJpdmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHModGhpcy5jaHJvbWVkcml2ZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgYSBjaHJvbWVkcml2ZXIgYmluYXJ5IGF0IHRoZSBwYXRoIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2hyb21lZHJpdmVyfSwgYnV0IGl0IGRvZXNuJ3QgZXhpc3QhYCk7XG4gICAgfVxuICAgIHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXQgY2hyb21lZHJpdmVyIGJpbmFyeSBhczogJHt0aGlzLmNocm9tZWRyaXZlcn1gKTtcbiAgfVxuXG4gIHN5bmNQcm90b2NvbCAoY2RWZXJzaW9uID0gbnVsbCkge1xuICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShjZFZlcnNpb24pO1xuICAgIGlmICghY29lcmNlZFZlcnNpb24gfHwgY29lcmNlZFZlcnNpb24ubWFqb3IgPCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHYuICR7Y2RWZXJzaW9ufSBkb2VzIG5vdCBmdWxseSBzdXBwb3J0ICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wuIGAgK1xuICAgICAgICBgRGVmYXVsdGluZyB0byAke1BST1RPQ09MUy5NSlNPTldQfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaHJvbWVPcHRpb25zID0gZ2V0Q2FwVmFsdWUodGhpcy5jYXBhYmlsaXRpZXMsICdjaHJvbWVPcHRpb25zJywge30pO1xuICAgIGlmIChjaHJvbWVPcHRpb25zLnczYyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gc3VwcG9ydHMgJHtQUk9UT0NPTFMuVzNDfSBwcm90b2NvbCwgYCArXG4gICAgICAgIGBidXQgJHtQUk9UT0NPTFMuTUpTT05XUH0gb25lIGhhcyBiZWVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgICAvLyBnaXZlbiBjYXBzIG1pZ2h0IG5vdCBiZSBwcm9wZXJseSBwcmVmaXhlZFxuICAgIC8vIHNvIHdlIHRyeSB0byBmaXggdGhlbSBpbiBvcmRlciB0byBwcm9wZXJseSBpbml0XG4gICAgLy8gdGhlIG5ldyBXM0Mgc2Vzc2lvblxuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdG9XM2NDYXBOYW1lcyh0aGlzLmNhcGFiaWxpdGllcyk7XG4gIH1cblxuICBhc3luYyBzdGFydCAoY2FwcywgZW1pdFN0YXJ0aW5nU3RhdGUgPSB0cnVlKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChjYXBzKTtcblxuICAgIC8vIHNldCB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlcyB0byBBTEwgdGhlIGNvbnNvbGUgbG9nc1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcyA9IF8uY2xvbmVEZWVwKGdldENhcFZhbHVlKGNhcHMsICdsb2dnaW5nUHJlZnMnLCB7fSkpO1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIpKSB7XG4gICAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMuYnJvd3NlciA9ICdBTEwnO1xuICAgIH1cblxuICAgIGlmIChlbWl0U3RhcnRpbmdTdGF0ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RBUlRJTkcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZ3MgPSBbYC0tcG9ydD0ke3RoaXMucHJveHlQb3J0fWBdO1xuICAgIGlmICh0aGlzLmFkYiAmJiB0aGlzLmFkYi5hZGJQb3J0KSB7XG4gICAgICBhcmdzLnB1c2goYC0tYWRiLXBvcnQ9JHt0aGlzLmFkYi5hZGJQb3J0fWApO1xuICAgIH1cbiAgICBpZiAoXy5pc0FycmF5KHRoaXMuY21kQXJncykpIHtcbiAgICAgIGFyZ3MucHVzaCguLi50aGlzLmNtZEFyZ3MpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2dQYXRoKSB7XG4gICAgICBhcmdzLnB1c2goYC0tbG9nLXBhdGg9JHt0aGlzLmxvZ1BhdGh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZGlzYWJsZS1idWlsZC1jaGVjaycpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdmVyYm9zZScpO1xuICAgIC8vIHdoYXQgYXJlIHRoZSBwcm9jZXNzIHN0ZG91dC9zdGRlcnIgY29uZGl0aW9ucyB3aGVyZWluIHdlIGtub3cgdGhhdFxuICAgIC8vIHRoZSBwcm9jZXNzIGhhcyBzdGFydGVkIHRvIG91ciBzYXRpc2ZhY3Rpb24/XG4gICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzdGRvdXQpID0+IHN0ZG91dC5zdGFydHNXaXRoKCdTdGFydGluZyAnKTtcblxuICAgIGxldCBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgIGxldCB3ZWJ2aWV3VmVyc2lvbjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0Q2hyb21lZHJpdmVyUGF0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5raWxsQWxsKCk7XG5cbiAgICAgIC8vIHNldCB1cCBvdXIgc3VicHJvY2VzcyBvYmplY3RcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuY2hyb21lZHJpdmVyLCBhcmdzKTtcbiAgICAgIHByb2Nlc3NJc0FsaXZlID0gdHJ1ZTtcblxuICAgICAgLy8gaGFuZGxlIGxvZyBvdXRwdXRcbiAgICAgIHRoaXMucHJvYy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBjZCBvdXRwdXQgaXMgbm90IHByaW50ZWQsIGZpbmQgdGhlIGNocm9tZSB2ZXJzaW9uIGFuZCBwcmludFxuICAgICAgICAvLyB3aWxsIGdldCBhIHJlc3BvbnNlIGxpa2VcbiAgICAgICAgLy8gICBEZXZUb29scyByZXNwb25zZToge1xuICAgICAgICAvLyAgICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNhbXBsZWFwcFwiLFxuICAgICAgICAvLyAgICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS81NS4wLjI4ODMuOTFcIixcbiAgICAgICAgLy8gICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjJcIixcbiAgICAgICAgLy8gICAgICBcIlVzZXItQWdlbnRcIjogXCIuLi5cIixcbiAgICAgICAgLy8gICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2XCJcbiAgICAgICAgLy8gICB9XG4gICAgICAgIGNvbnN0IG91dCA9IHN0ZG91dCArIHN0ZGVycjtcbiAgICAgICAgbGV0IG1hdGNoID0gL1wiQnJvd3NlclwiOiBcIiguKilcIi8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB3ZWJ2aWV3VmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBXZWJ2aWV3IHZlcnNpb246ICcke3dlYnZpZXdWZXJzaW9ufSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsc28gcHJpbnQgY2hyb21lZHJpdmVyIHZlcnNpb24gdG8gbG9nc1xuICAgICAgICAvLyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZVxuICAgICAgICAvLyAgU3RhcnRpbmcgQ2hyb21lRHJpdmVyIDIuMzMuNTA2MTA2ICg4YTA2YzM5YzQ1ODJmYmZiYWI2OTY2ZGJiMWMzOGE5MTczYmZiMWEyKSBvbiBwb3J0IDk1MTVcbiAgICAgICAgbWF0Y2ggPSAvU3RhcnRpbmcgQ2hyb21lRHJpdmVyIChbLlxcZF0rKS8uZXhlYyhvdXQpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hyb21lZHJpdmVyIHZlcnNpb246ICcke21hdGNoWzFdfSdgKTtcbiAgICAgICAgICB0aGlzLnN5bmNQcm90b2NvbChtYXRjaFsxXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnaXZlIHRoZSBvdXRwdXQgaWYgaXQgaXMgcmVxdWVzdGVkXG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lIG9mIChzdGRvdXQgfHwgJycpLnRyaW0oKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICAgIGlmICghbGluZS50cmltKCkubGVuZ3RoKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFtTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3RkZXJyIHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKGBbU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gYENocm9tZWRyaXZlciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9LCBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICB0aGlzLmxvZy5lcnJvcihtc2cpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nLmluZm8oYFNwYXduaW5nIGNocm9tZWRyaXZlciB3aXRoOiAke3RoaXMuY2hyb21lZHJpdmVyfSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgLy8gc3RhcnQgc3VicHJvYyBhbmQgd2FpdCBmb3Igc3RhcnREZXRlY3RvclxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yT25saW5lKCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICAvLyBqdXN0IGJlY2F1c2Ugd2UgaGFkIGFuIGVycm9yIGRvZXNuJ3QgbWVhbiB0aGUgY2hyb21lZHJpdmVyIHByb2Nlc3NcbiAgICAgIC8vIGZpbmlzaGVkOyB3ZSBzaG91bGQgY2xlYW4gdXAgaWYgbmVjZXNzYXJ5XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2UgPSAnJztcbiAgICAgIC8vIG9mdGVuIHRoZSB1c2VyJ3MgQ2hyb21lIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXJcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUnKSkge1xuICAgICAgICBtZXNzYWdlICs9ICdVbmFibGUgdG8gYXV0b21hdGUgQ2hyb21lIHZlcnNpb24gYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBDaHJvbWVkcml2ZXIuXFxuJztcbiAgICAgICAgaWYgKHdlYnZpZXdWZXJzaW9uKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lIHZlcnNpb24gb24gdGhlIGRldmljZTogJHt3ZWJ2aWV3VmVyc2lvbn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIgPSAvQ2hyb21lIHZlcnNpb24gbXVzdCBiZSAoLispLy5leGVjKGUubWVzc2FnZSk/LlsxXSB8fCAnJztcbiAgICAgICAgaWYgKHZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXIpIHtcbiAgICAgICAgICBtZXNzYWdlICs9IGBDaHJvbWVkcml2ZXIgc3VwcG9ydHMgQ2hyb21lIHZlcnNpb24ocyk6ICR7dmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlcn1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgKz0gYFZpc2l0ICcke0NIUk9NRURSSVZFUl9UVVRPUklBTH0nIHRvIHRyb3VibGVzaG9vdCB0aGUgcHJvYmxlbS5cXG5gO1xuICAgICAgfVxuXG4gICAgICBtZXNzYWdlICs9IGUubWVzc2FnZTtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgc2Vzc2lvbklkICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSA/IHRoaXMuandwcm94eS5zZXNzaW9uSWQgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcmVzdGFydCAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbygnUmVzdGFydGluZyBjaHJvbWVkcml2ZXInKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcmVzdGFydCB3aGVuIHdlJ3JlIG5vdCBvbmxpbmVcIik7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcpO1xuICAgIGF3YWl0IHRoaXMuc3RvcChmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0aGlzLmNhcGFiaWxpdGllcywgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvck9ubGluZSAoKSB7XG4gICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBDRCBoYXNuJ3QgY3Jhc2hlZFxuICAgIGxldCBjaHJvbWVkcml2ZXJTdG9wcGVkID0gZmFsc2U7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCgyMCwgMjAwLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgLy8gd2UgYXJlIGVpdGhlciBzdG9wcGVkIG9yIHN0b3BwaW5nLCBzbyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgICBjaHJvbWVkcml2ZXJTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9KTtcbiAgICBpZiAoY2hyb21lZHJpdmVyU3RvcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaHJvbWVEcml2ZXIgY3Jhc2hlZCBkdXJpbmcgc3RhcnR1cC4nKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbkNhcHMgPSB0aGlzLmRlc2lyZWRQcm90b2NvbCA9PT0gUFJPVE9DT0xTLlczQ1xuICAgICAgPyB7Y2FwYWJpbGl0aWVzOiB7YWx3YXlzTWF0Y2g6IHRoaXMuY2FwYWJpbGl0aWVzfX1cbiAgICAgIDoge2Rlc2lyZWRDYXBhYmlsaXRpZXM6IHRoaXMuY2FwYWJpbGl0aWVzfTtcbiAgICB0aGlzLmxvZy5pbmZvKGBTdGFydGluZyAke3RoaXMuZGVzaXJlZFByb3RvY29sfSBDaHJvbWVkcml2ZXIgc2Vzc2lvbiB3aXRoIGNhcGFiaWxpdGllczogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uQ2FwcywgbnVsbCwgMikpO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywgc2Vzc2lvbkNhcHMpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMsIHRoaXMuandwcm94eS5zZXNzaW9uSWQpO1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX09OTElORSk7XG4gIH1cblxuICBhc3luYyBzdG9wIChlbWl0U3RhdGVzID0gdHJ1ZSkge1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1blNhZmVTdGVwID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLmp3cHJveHkuY29tbWFuZCgnJywgJ0RFTEVURScpKTtcbiAgICBhd2FpdCBydW5TYWZlU3RlcCgoKSA9PiB0aGlzLnByb2Muc3RvcCgnU0lHVEVSTScsIDIwMDAwKSk7XG4gICAgdGhpcy5sb2cucHJlZml4ID0gZ2VuZXJhdGVMb2dQcmVmaXgodGhpcyk7XG4gICAgaWYgKGVtaXRTdGF0ZXMpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2hhbmdlZCBzdGF0ZSB0byAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5lbWl0KENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcSAocmVxLCByZXMpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LnByb3h5UmVxUmVzKHJlcSwgcmVzKTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxBbGwgKCkge1xuICAgIGxldCBjbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKClcbiAgICAgID8gYHdtaWMgcHJvY2VzcyB3aGVyZSBcImNvbW1hbmRsaW5lIGxpa2UgJyVjaHJvbWVkcml2ZXIuZXhlJS0tcG9ydD0ke3RoaXMucHJveHlQb3J0fSUnXCIgZGVsZXRlYFxuICAgICAgOiBgcGtpbGwgLTE1IC1mIFwiJHt0aGlzLmNocm9tZWRyaXZlcn0uKi0tcG9ydD0ke3RoaXMucHJveHlQb3J0fVwiYDtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgS2lsbGluZyBhbnkgb2xkIGNocm9tZWRyaXZlcnMsIHJ1bm5pbmc6ICR7Y21kfWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAoQi5wcm9taXNpZnkoY3AuZXhlYykpKGNtZCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgdXAgb2xkIGNocm9tZWRyaXZlcnMnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ05vIG9sZCBjaHJvbWVkcml2ZXJzIHNlZW0gdG8gZXhpc3QnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGNvbnN0IHVkaWRJbmRleCA9IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3MuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnLXMnKTtcbiAgICAgIGNvbnN0IHVkaWQgPSB1ZGlkSW5kZXggPiAtMSA/IHRoaXMuYWRiLmV4ZWN1dGFibGUuZGVmYXVsdEFyZ3NbdWRpZEluZGV4ICsgMV0gOiBudWxsO1xuXG4gICAgICBpZiAodWRpZCkge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdGhpcyBkZXZpY2UncyBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zOiAke3VkaWR9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xlYW5pbmcgYW55IG9sZCBhZGIgZm9yd2FyZGVkIHBvcnQgc29ja2V0IGNvbm5lY3Rpb25zYCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAobGV0IGNvbm4gb2YgYXdhaXQgdGhpcy5hZGIuZ2V0Rm9yd2FyZExpc3QoKSkge1xuICAgICAgICAgIC8vIGNocm9tZWRyaXZlciB3aWxsIGFzayBBREIgdG8gZm9yd2FyZCBhIHBvcnQgbGlrZSBcImRldmljZUlkIHRjcDpwb3J0IGxvY2FsYWJzdHJhY3Q6d2Vidmlld19kZXZ0b29sc19yZW1vdGVfcG9ydFwiXG4gICAgICAgICAgaWYgKCEoY29ubi5pbmNsdWRlcygnd2Vidmlld19kZXZ0b29scycpICYmICghdWRpZCB8fCBjb25uLmluY2x1ZGVzKHVkaWQpKSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBwYXJhbXMgPSBjb25uLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZChwYXJhbXNbMV0ucmVwbGFjZSgvW1xcRF0qLywgJycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gY2xlYW4gZm9yd2FyZGVkIHBvcnRzLiBFcnJvcjogJyR7ZXJyLm1lc3NhZ2V9Jy4gQ29udGludWluZy5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNXb3JraW5nV2VidmlldyAoKSB7XG4gICAgLy8gc29tZXRpbWVzIGNocm9tZWRyaXZlciBzdG9wcyBhdXRvbWF0aW5nIHdlYnZpZXdzLiB0aGlzIG1ldGhvZCBydW5zIGFcbiAgICAvLyBzaW1wbGUgY29tbWFuZCB0byBkZXRlcm1pbmUgb3VyIHN0YXRlLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy91cmwnLCAnR0VUJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbkNocm9tZWRyaXZlci5FVkVOVF9FUlJPUiA9ICdjaHJvbWVkcml2ZXJfZXJyb3InO1xuQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEID0gJ3N0b3BwZWQnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcbkNocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcbkNocm9tZWRyaXZlci5TVEFURV9TVE9QUElORyA9ICdzdG9wcGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORyA9ICdyZXN0YXJ0aW5nJztcblxuZXhwb3J0IHsgQ2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBDaHJvbWVkcml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsbUNBQW1DLEdBQUcsRUFBNUM7QUFDQSxNQUFNQyxZQUFZLEdBQUcsV0FBckI7QUFDQSxNQUFNQywrQkFBK0IsR0FBRyxFQUF4QztBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjtBQUNBLE1BQU1DLGdCQUFnQixHQUFHLG9CQUF6QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLDRCQUFoQztBQUNBLE1BQU1DLGtCQUFrQixHQUFHLENB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
736
+ exports.default = _default;
737
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiIsIkRFRkFVTFRfSE9TVCIsIk1JTl9DRF9WRVJTSU9OX1dJVEhfVzNDX1NVUFBPUlQiLCJERUZBVUxUX1BPUlQiLCJDSFJPTUVfQlVORExFX0lEIiwiV0VCVklFV19TSEVMTF9CVU5ETEVfSUQiLCJXRUJWSUVXX0JVTkRMRV9JRFMiLCJDSFJPTUVEUklWRVJfVFVUT1JJQUwiLCJWRVJTSU9OX1BBVFRFUk4iLCJDRF9WRVJTSU9OX1RJTUVPVVQiLCJDaHJvbWVkcml2ZXIiLCJldmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJob3N0IiwicG9ydCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJleGVjdXRhYmxlIiwiZXhlY3V0YWJsZURpciIsImdldENocm9tZWRyaXZlckRpciIsImJ1bmRsZUlkIiwibWFwcGluZ1BhdGgiLCJjbWRBcmdzIiwiYWRiIiwidmVyYm9zZSIsImxvZ1BhdGgiLCJkaXNhYmxlQnVpbGRDaGVjayIsImRldGFpbHMiLCJpc0F1dG9kb3dubG9hZEVuYWJsZWQiLCJfbG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJwcm94eUhvc3QiLCJwcm94eVBvcnQiLCJwcm9jIiwiY2hyb21lZHJpdmVyIiwiZXhlY3V0YWJsZVZlcmlmaWVkIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiandwcm94eSIsIkpXUHJveHkiLCJzZXJ2ZXIiLCJsb2ciLCJzdG9yYWdlQ2xpZW50IiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNocm9tZWRyaXZlckRpciIsImNhcGFiaWxpdGllcyIsImRlc2lyZWRQcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJnZXREcml2ZXJzTWFwcGluZyIsIm1hcHBpbmciLCJfIiwiY2xvbmVEZWVwIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwiZGVidWciLCJmcyIsImV4aXN0cyIsIndhcm4iLCJpbmZvIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGUiLCJlcnIiLCJtZXNzYWdlIiwiY2RWZXJzaW9uIiwiY2hyb21lVmVyc2lvbiIsInRvUGFpcnMiLCJjb2VyY2VkVmVyc2lvbiIsInNlbXZlciIsImNvZXJjZSIsInZlcnNpb24iLCJnZXRDaHJvbWVkcml2ZXJzIiwiZXhlY3V0YWJsZXMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwibm9kaXIiLCJhYnNvbHV0ZSIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJjZHMiLCJhc3luY21hcCIsImxvZ0Vycm9yIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXJyTXNnIiwicGF0aCIsImJhc2VuYW1lIiwiZXhlYyIsInRpbWVvdXQiLCJpbmNsdWRlcyIsIm1hdGNoIiwibWluQ2hyb21lVmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJmaWx0ZXIiLCJjZCIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmVWZXJzaW9ucyIsImlzRW1wdHkiLCJnZXRDaHJvbWVWZXJzaW9uIiwiQnJvd3NlciIsInZlcnNpb25NYXRjaCIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJ1cGRhdGVEcml2ZXJzTWFwcGluZyIsIm5ld01hcHBpbmciLCJzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5IiwiZSIsIk9iamVjdCIsImFzc2lnbiIsImdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIiLCJnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoIiwidmFsdWVzIiwiZGlkU3RvcmFnZVN5bmMiLCJzeW5jQ2hyb21lZHJpdmVycyIsInJldHJpZXZlZE1hcHBpbmciLCJyZXRyaWV2ZU1hcHBpbmciLCJkcml2ZXJLZXlzIiwic3luY0RyaXZlcnMiLCJtaW5Ccm93c2VyVmVyc2lvbiIsInN5bmNocm9uaXplZERyaXZlcnNNYXBwaW5nIiwicmVkdWNlIiwiYWNjIiwieCIsIm1pc3NpbmdWZXJzaW9ucyIsImNvZXJjZWRWZXIiLCJzaXplIiwiZXJyb3JBbmRUaHJvdyIsIm1hdGNoaW5nRHJpdmVycyIsIm1pbkNocm9tZVZlcnNpb25TIiwiZ3RlIiwiQ0RfQ0ROIiwic3RhY2siLCJhdXRvZG93bmxvYWRTdWdnZXN0aW9uIiwiRXJyb3IiLCJiaW5QYXRoIiwiaW5pdENocm9tZWRyaXZlclBhdGgiLCJzeW5jUHJvdG9jb2wiLCJXM0MiLCJjaHJvbWVPcHRpb25zIiwiZ2V0Q2FwVmFsdWUiLCJ3M2MiLCJ0b1czY0NhcE5hbWVzIiwic3RhcnQiLCJjYXBzIiwiZW1pdFN0YXJ0aW5nU3RhdGUiLCJsb2dnaW5nUHJlZnMiLCJicm93c2VyIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImFkYlBvcnQiLCJwdXNoIiwiaXNBcnJheSIsInN0YXJ0RGV0ZWN0b3IiLCJzdGFydHNXaXRoIiwicHJvY2Vzc0lzQWxpdmUiLCJ3ZWJ2aWV3VmVyc2lvbiIsImtpbGxBbGwiLCJTdWJQcm9jZXNzIiwib24iLCJvdXQiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXJyb3IiLCJjb2RlIiwic2lnbmFsIiwiU1RBVEVfU1RPUFBJTkciLCJTVEFURV9SRVNUQVJUSU5HIiwibXNnIiwiam9pbiIsIndhaXRGb3JPbmxpbmUiLCJzdGFydFNlc3Npb24iLCJlbWl0IiwiRVZFTlRfRVJST1IiLCJzdG9wIiwidmVyc2lvbnNTdXBwb3J0ZWRCeURyaXZlciIsInNlc3Npb25JZCIsIlNUQVRFX09OTElORSIsInJlc3RhcnQiLCJjaHJvbWVkcml2ZXJTdG9wcGVkIiwicmV0cnlJbnRlcnZhbCIsImdldFN0YXR1cyIsImNvbW1hbmQiLCJzZXNzaW9uQ2FwcyIsImFsd2F5c01hdGNoIiwiZGVzaXJlZENhcGFiaWxpdGllcyIsInByZWZpeCIsImVtaXRTdGF0ZXMiLCJydW5TYWZlU3RlcCIsImYiLCJFVkVOVF9DSEFOR0VEIiwic2VuZENvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwicHJveHlSZXEiLCJyZXEiLCJyZXMiLCJwcm94eVJlcVJlcyIsImNtZCIsInN5c3RlbSIsImlzV2luZG93cyIsIkIiLCJwcm9taXNpZnkiLCJjcCIsInVkaWRJbmRleCIsImRlZmF1bHRBcmdzIiwiZmluZEluZGV4IiwiaXRlbSIsInVkaWQiLCJjb25uIiwiZ2V0Rm9yd2FyZExpc3QiLCJwYXJhbXMiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsInJlcGxhY2UiLCJoYXNXb3JraW5nV2VidmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jaHJvbWVkcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgSldQcm94eSwgUFJPVE9DT0xTIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCBhc3luY21hcCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtcbiAgZ2V0Q2hyb21lVmVyc2lvbiwgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsXG4gIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIENEX0NETiwgZ2VuZXJhdGVMb2dQcmVmaXhcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IGZyb20gJy4vc3RvcmFnZS1jbGllbnQnO1xuaW1wb3J0IHsgdG9XM2NDYXBOYW1lcywgZ2V0Q2FwVmFsdWUgfSBmcm9tICcuL3Byb3RvY29sLWhlbHBlcnMnO1xuXG5jb25zdCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTiA9IDczO1xuY29uc3QgREVGQVVMVF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBNSU5fQ0RfVkVSU0lPTl9XSVRIX1czQ19TVVBQT1JUID0gNzU7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA5NTE1O1xuY29uc3QgQ0hST01FX0JVTkRMRV9JRCA9ICdjb20uYW5kcm9pZC5jaHJvbWUnO1xuY29uc3QgV0VCVklFV19TSEVMTF9CVU5ETEVfSUQgPSAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnO1xuY29uc3QgV0VCVklFV19CVU5ETEVfSURTID0gW1xuICAnY29tLmdvb2dsZS5hbmRyb2lkLndlYnZpZXcnLFxuICAnY29tLmFuZHJvaWQud2VidmlldycsXG5dO1xuY29uc3QgQ0hST01FRFJJVkVSX1RVVE9SSUFMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vd3JpdGluZy1ydW5uaW5nLWFwcGl1bS93ZWIvY2hyb21lZHJpdmVyLm1kJztcbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC8oW1xcZC5dKykvO1xuXG5jb25zdCBDRF9WRVJTSU9OX1RJTUVPVVQgPSA1MDAwO1xuXG5jbGFzcyBDaHJvbWVkcml2ZXIgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBob3N0ID0gREVGQVVMVF9IT1NULFxuICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVCxcbiAgICAgIHVzZVN5c3RlbUV4ZWN1dGFibGUgPSBmYWxzZSxcbiAgICAgIGV4ZWN1dGFibGUsXG4gICAgICBleGVjdXRhYmxlRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICBidW5kbGVJZCxcbiAgICAgIG1hcHBpbmdQYXRoLFxuICAgICAgY21kQXJncyxcbiAgICAgIGFkYixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBsb2dQYXRoLFxuICAgICAgZGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgICBkZXRhaWxzLFxuICAgICAgaXNBdXRvZG93bmxvYWRFbmFibGVkID0gZmFsc2UsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5fbG9nID0gbG9nZ2VyLmdldExvZ2dlcihnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICB0aGlzLnByb3h5SG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wcm94eVBvcnQgPSBwb3J0O1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuY21kQXJncyA9IGNtZEFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLnVzZVN5c3RlbUV4ZWN1dGFibGUgPSB1c2VTeXN0ZW1FeGVjdXRhYmxlO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gZXhlY3V0YWJsZTtcbiAgICB0aGlzLmV4ZWN1dGFibGVEaXIgPSBleGVjdXRhYmxlRGlyO1xuICAgIHRoaXMubWFwcGluZ1BhdGggPSBtYXBwaW5nUGF0aDtcbiAgICB0aGlzLmJ1bmRsZUlkID0gYnVuZGxlSWQ7XG4gICAgdGhpcy5leGVjdXRhYmxlVmVyaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlID0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQ7XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IEpXUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnByb3h5SG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMucHJveHlQb3J0LFxuICAgICAgbG9nOiB0aGlzLl9sb2csXG4gICAgfSk7XG4gICAgdGhpcy52ZXJib3NlID0gdmVyYm9zZTtcbiAgICB0aGlzLmxvZ1BhdGggPSBsb2dQYXRoO1xuICAgIHRoaXMuZGlzYWJsZUJ1aWxkQ2hlY2sgPSAhIWRpc2FibGVCdWlsZENoZWNrO1xuICAgIHRoaXMuc3RvcmFnZUNsaWVudCA9IGlzQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyBuZXcgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCh7IGNocm9tZWRyaXZlckRpcjogdGhpcy5leGVjdXRhYmxlRGlyIH0pXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHt9O1xuICAgIHRoaXMuZGVzaXJlZFByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBnZXQgbG9nICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgYXN5bmMgZ2V0RHJpdmVyc01hcHBpbmcgKCkge1xuICAgIGxldCBtYXBwaW5nID0gXy5jbG9uZURlZXAoQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HKTtcbiAgICBpZiAodGhpcy5tYXBwaW5nUGF0aCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEF0dGVtcHRpbmcgdG8gdXNlIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSdgKTtcbiAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMubWFwcGluZ1BhdGgpKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYE5vIGZpbGUgZm91bmQgYXQgJyR7dGhpcy5tYXBwaW5nUGF0aH0nYCk7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0RlZmF1bHRpbmcgdG8gdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG1hcHBpbmcgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMubWFwcGluZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBwYXJzaW5nIG1hcHBpbmcgZnJvbSAnJHt0aGlzLm1hcHBpbmdQYXRofSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbygnRGVmYXVsdGluZyB0byB0aGUgc3RhdGljIENocm9tZWRyaXZlci0+Q2hyb21lIG1hcHBpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnVXNpbmcgdGhlIHN0YXRpYyBDaHJvbWVkcml2ZXItPkNocm9tZSBtYXBwaW5nJyk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBmb3IgbWluaW11bSBjaHJvbWUgdmVyc2lvbiBhcmUgc2VtdmVyIGNvbXBsaWFudFxuICAgIGZvciAoY29uc3QgW2NkVmVyc2lvbiwgY2hyb21lVmVyc2lvbl0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbik7XG4gICAgICBpZiAoY29lcmNlZFZlcnNpb24pIHtcbiAgICAgICAgbWFwcGluZ1tjZFZlcnNpb25dID0gY29lcmNlZFZlcnNpb24udmVyc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYCcke2Nocm9tZVZlcnNpb259JyBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gU2tpcHBpbmcgaXRgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcHBpbmc7XG4gIH1cblxuICBhc3luYyBnZXRDaHJvbWVkcml2ZXJzIChtYXBwaW5nKSB7XG4gICAgLy8gZ28gdGhyb3VnaCB0aGUgdmVyc2lvbnMgYXZhaWxhYmxlXG4gICAgY29uc3QgZXhlY3V0YWJsZXMgPSBhd2FpdCBmcy5nbG9iKCcqJywge1xuICAgICAgY3dkOiB0aGlzLmV4ZWN1dGFibGVEaXIsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgbm9kaXI6IHRydWUsXG4gICAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnZXhlY3V0YWJsZScsIGV4ZWN1dGFibGVzLmxlbmd0aCwgdHJ1ZSl9IGAgK1xuICAgICAgYGluICcke3RoaXMuZXhlY3V0YWJsZURpcn0nYCk7XG4gICAgY29uc3QgY2RzID0gKGF3YWl0IGFzeW5jbWFwKGV4ZWN1dGFibGVzLCBhc3luYyAoZXhlY3V0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgbG9nRXJyb3IgPSAoe21lc3NhZ2UsIHN0ZG91dCA9IG51bGwsIHN0ZGVyciA9IG51bGx9KSA9PiB7XG4gICAgICAgIGxldCBlcnJNc2cgPSBgQ2Fubm90IHJldHJpZXZlIHZlcnNpb24gbnVtYmVyIGZyb20gJyR7cGF0aC5iYXNlbmFtZShleGVjdXRhYmxlKX0nIENocm9tZWRyaXZlciBiaW5hcnkuIGAgK1xuICAgICAgICAgIGBNYWtlIHN1cmUgaXQgcmV0dXJucyBhIHZhbGlkIHZlcnNpb24gc3RyaW5nIGluIHJlc3BvbnNlIHRvICctLXZlcnNpb24nIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gJHttZXNzYWdlfWA7XG4gICAgICAgIGlmIChzdGRvdXQpIHtcbiAgICAgICAgICBlcnJNc2cgKz0gYFxcblN0ZG91dDogJHtzdGRvdXR9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgZXJyTXNnICs9IGBcXG5TdGRlcnI6ICR7c3RkZXJyfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2cud2FybihlcnJNc2cpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICBsZXQgc3RkZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKGV4ZWN1dGFibGUsIFsnLS12ZXJzaW9uJ10sIHtcbiAgICAgICAgICB0aW1lb3V0OiBDRF9WRVJTSU9OX1RJTUVPVVQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIShlcnIubWVzc2FnZSB8fCAnJykuaW5jbHVkZXMoJ3RpbWVkIG91dCcpICYmICEoZXJyLnN0ZG91dCB8fCAnJykuaW5jbHVkZXMoJ1N0YXJ0aW5nIENocm9tZURyaXZlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGlzIGhhcyB0aW1lZCBvdXQsIGl0IGhhcyBhY3R1YWxseSBzdGFydGVkIENocm9tZWRyaXZlcixcbiAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGVyZSB3aWxsIGFsc28gYmUgdGhlIHZlcnNpb24gc3RyaW5nIGluIHRoZSBvdXRwdXRcbiAgICAgICAgc3Rkb3V0ID0gZXJyLnN0ZG91dDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0Y2ggPSAvQ2hyb21lRHJpdmVyXFxzK1xcKD92PyhbXFxkLl0rKVxcKT8vaS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvenBqNXdBLzFcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKHttZXNzYWdlOiAnQ2Fubm90IHBhcnNlIHRoZSB2ZXJzaW9uIHN0cmluZycsIHN0ZG91dCwgc3RkZXJyfSk7XG4gICAgICB9XG4gICAgICBsZXQgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICAgICAgbGV0IG1pbkNocm9tZVZlcnNpb24gPSBtYXBwaW5nW3ZlcnNpb25dO1xuICAgICAgY29uc3QgY29lcmNlZFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKHZlcnNpb24pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIC8vIGJlZm9yZSAyMDE5LTAzLTA2IHZlcnNpb25zIHdlcmUgb2YgdGhlIGZvcm0gbWFqb3IubWlub3JcbiAgICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICB2ZXJzaW9uID0gYCR7Y29lcmNlZFZlcnNpb24ubWFqb3J9LiR7Y29lcmNlZFZlcnNpb24ubWlub3J9YDtcbiAgICAgICAgICBtaW5DaHJvbWVWZXJzaW9uID0gbWFwcGluZ1t2ZXJzaW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1pbkNocm9tZVZlcnNpb24gJiYgY29lcmNlZFZlcnNpb24ubWFqb3IgPj0gTkVXX0NEX1ZFUlNJT05fRk9STUFUX01BSk9SX1ZFUlNJT04pIHtcbiAgICAgICAgICAvLyBBc3N1bWUgdGhlIG1ham9yIENocm9tZSB2ZXJzaW9uIGlzIHRoZSBzYW1lIGFzIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBtYWpvciB2ZXJzaW9uXG4gICAgICAgICAgbWluQ2hyb21lVmVyc2lvbiA9IGAke2NvZXJjZWRWZXJzaW9uLm1ham9yfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4ZWN1dGFibGUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIG1pbkNocm9tZVZlcnNpb24sXG4gICAgICB9O1xuICAgIH0pKVxuICAgICAgLmZpbHRlcigoY2QpID0+ICEhY2QpXG4gICAgICAuc29ydCgoYSwgYikgPT4gY29tcGFyZVZlcnNpb25zKGIudmVyc2lvbiwgYS52ZXJzaW9uKSk7XG4gICAgaWYgKF8uaXNFbXB0eShjZHMpKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBObyBDaHJvbWVkcml2ZXJzIHdlcmUgZm91bmQgaW4gJyR7dGhpcy5leGVjdXRhYmxlRGlyfSdgKTtcbiAgICAgIHJldHVybiBjZHM7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIENocm9tZWRyaXZlciBleGVjdXRhYmxlcyB3ZXJlIGZvdW5kOmApO1xuICAgIGZvciAoY29uc3QgY2Qgb2YgY2RzKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgICAgICcke2NkLmV4ZWN1dGFibGV9JyAodmVyc2lvbiAnJHtjZC52ZXJzaW9ufScsIG1pbmltdW0gQ2hyb21lIHZlcnNpb24gJyR7Y2QubWluQ2hyb21lVmVyc2lvbiA/IGNkLm1pbkNocm9tZVZlcnNpb24gOiAnVW5rbm93bid9JylgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNkcztcbiAgfVxuXG4gIGFzeW5jIGdldENocm9tZVZlcnNpb24gKCkge1xuICAgIC8vIFRyeSB0byByZXRyaWV2ZSB0aGUgdmVyc2lvbiBmcm9tIGBkZXRhaWxzYCBwcm9wZXJ0eSBpZiBpdCBpcyBzZXRcbiAgICAvLyBUaGUgYGluZm9gIGl0ZW0gbXVzdCBjb250YWluIHRoZSBvdXRwdXQgb2YgL2pzb24vdmVyc2lvbiBDRFAgY29tbWFuZFxuICAgIC8vIHdoZXJlIGBCcm93c2VyYCBmaWVsZCBsb29rcyBsaWtlIGBDaHJvbWUvNzIuMC4zNjAxLjBgYFxuICAgIGlmICh0aGlzLmRldGFpbHM/LmluZm8pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBCcm93c2VyIHZlcnNpb24gaW4gdGhlIHN1cHBsaWVkIGRldGFpbHM6ICR7dGhpcy5kZXRhaWxzPy5pbmZvPy5Ccm93c2VyfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBWRVJTSU9OX1BBVFRFUk4uZXhlYyh0aGlzLmRldGFpbHM/LmluZm8/LkJyb3dzZXIpO1xuICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGNvZXJjZWRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uTWF0Y2hbMV0pO1xuICAgICAgaWYgKGNvZXJjZWRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VkVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2hyb21lVmVyc2lvbjtcblxuICAgIC8vIGluIGNhc2Ugb2YgV2ViVmlldyBCcm93c2VyIFRlc3Rlciwgc2ltcGx5IHRyeSB0byBmaW5kIHRoZSB1bmRlcmx5aW5nIHdlYnZpZXdcbiAgICBpZiAodGhpcy5idW5kbGVJZCA9PT0gV0VCVklFV19TSEVMTF9CVU5ETEVfSUQpIHtcbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIHJldHVybiBzZW12ZXIuY29lcmNlKGNocm9tZVZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBvbiBBbmRyb2lkIDctOSB3ZWJ2aWV3cyBhcmUgYmFja2VkIGJ5IHRoZSBtYWluIENocm9tZSwgbm90IHRoZSBzeXN0ZW0gd2Vidmlld1xuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAgICAgaWYgKGFwaUxldmVsID49IDI0ICYmIGFwaUxldmVsIDw9IDI4ICYmXG4gICAgICAgICAgW1dFQlZJRVdfU0hFTExfQlVORExFX0lELCAuLi5XRUJWSUVXX0JVTkRMRV9JRFNdLmluY2x1ZGVzKHRoaXMuYnVuZGxlSWQpKSB7XG4gICAgICAgIHRoaXMuYnVuZGxlSWQgPSBDSFJPTUVfQlVORExFX0lEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRyeSBvdXQgd2Vidmlld3Mgd2hlbiBubyBidW5kbGUgaWQgaXMgc2VudCBpblxuICAgIGlmICghdGhpcy5idW5kbGVJZCkge1xuICAgICAgLy8gZGVmYXVsdCB0byB0aGUgZ2VuZXJpYyBDaHJvbWUgYnVuZGxlXG4gICAgICB0aGlzLmJ1bmRsZUlkID0gQ0hST01FX0JVTkRMRV9JRDtcblxuICAgICAgLy8gd2UgaGF2ZSBhIHdlYnZpZXcgb2Ygc29tZSBzb3J0LCBzbyB0cnkgdG8gZmluZCB0aGUgYnVuZGxlIHZlcnNpb25cbiAgICAgIGZvciAoY29uc3QgYnVuZGxlSWQgb2YgV0VCVklFV19CVU5ETEVfSURTKSB7XG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBhd2FpdCBnZXRDaHJvbWVWZXJzaW9uKHRoaXMuYWRiLCBidW5kbGVJZCk7XG4gICAgICAgIGlmIChjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5idW5kbGVJZCA9IGJ1bmRsZUlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZG8gbm90IGhhdmUgYSBjaHJvbWUgdmVyc2lvbiwgaXQgbXVzdCBub3QgYmUgYSB3ZWJ2aWV3XG4gICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICBjaHJvbWVWZXJzaW9uID0gYXdhaXQgZ2V0Q2hyb21lVmVyc2lvbih0aGlzLmFkYiwgdGhpcy5idW5kbGVJZCk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBzdXJlIGl0IGlzIHNlbXZlciwgc28gbGF0ZXIgY2hlY2tzIHdvbid0IGZhaWxcbiAgICByZXR1cm4gY2hyb21lVmVyc2lvbiA/IHNlbXZlci5jb2VyY2UoY2hyb21lVmVyc2lvbikgOiBudWxsO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJpdmVyc01hcHBpbmcgKG5ld01hcHBpbmcpIHtcbiAgICBsZXQgc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZyA9IHRydWU7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyh0aGlzLm1hcHBpbmdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMubWFwcGluZ1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld01hcHBpbmcsIG51bGwsIDIpLCAndXRmOCcpO1xuICAgICAgICBzaG91bGRVcGRhdGVTdGF0aWNNYXBwaW5nID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBzdG9yZSB0aGUgdXBkYXRlZCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgaW50byAnJHt0aGlzLm1hcHBpbmdQYXRofScuIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIG9mIGZ1cnRoZXIgZXhlY3V0aW9ucy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hvdWxkVXBkYXRlU3RhdGljTWFwcGluZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIG5ld01hcHBpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbXBhdGlibGVDaHJvbWVkcml2ZXIgKCkge1xuICAgIGlmICghdGhpcy5hZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRDaHJvbWVkcml2ZXJCaW5hcnlQYXRoKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwcGluZyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyc01hcHBpbmcoKTtcbiAgICBpZiAoIV8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSBtb3N0IHJlY2VudCBrbm93biBDaHJvbWUgdmVyc2lvbjogJHtfLnZhbHVlcyhtYXBwaW5nKVswXX1gKTtcbiAgICB9XG5cbiAgICBsZXQgZGlkU3RvcmFnZVN5bmMgPSBmYWxzZTtcbiAgICBjb25zdCBzeW5jQ2hyb21lZHJpdmVycyA9IGFzeW5jIChjaHJvbWVWZXJzaW9uKSA9PiB7XG4gICAgICBkaWRTdG9yYWdlU3luYyA9IHRydWU7XG4gICAgICBjb25zdCByZXRyaWV2ZWRNYXBwaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlQ2xpZW50LnJldHJpZXZlTWFwcGluZygpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0dvdCBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSB0aGUgc3RvcmFnZTogJyArXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHJldHJpZXZlZE1hcHBpbmcsIG51bGwsIDIpKTtcbiAgICAgIGNvbnN0IGRyaXZlcktleXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2VDbGllbnQuc3luY0RyaXZlcnMoe1xuICAgICAgICBtaW5Ccm93c2VyVmVyc2lvbjogY2hyb21lVmVyc2lvbi5tYWpvcixcbiAgICAgIH0pO1xuICAgICAgaWYgKF8uaXNFbXB0eShkcml2ZXJLZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyA9IGRyaXZlcktleXMucmVkdWNlKChhY2MsIHgpID0+IHtcbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIG1pbkJyb3dzZXJWZXJzaW9ufSA9IHJldHJpZXZlZE1hcHBpbmdbeF07XG4gICAgICAgIGFjY1t2ZXJzaW9uXSA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwaW5nLCBzeW5jaHJvbml6ZWREcml2ZXJzTWFwcGluZyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKG1hcHBpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGNkcyA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lZHJpdmVycyhtYXBwaW5nKTtcblxuICAgICAgY29uc3QgbWlzc2luZ1ZlcnNpb25zID0ge307XG4gICAgICBmb3IgKGNvbnN0IHt2ZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9ufSBvZiBjZHMpIHtcbiAgICAgICAgaWYgKCFtaW5DaHJvbWVWZXJzaW9uIHx8IG1hcHBpbmdbdmVyc2lvbl0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2VyY2VkVmVyID0gc2VtdmVyLmNvZXJjZSh2ZXJzaW9uKTtcbiAgICAgICAgaWYgKCFjb2VyY2VkVmVyIHx8IGNvZXJjZWRWZXIubWFqb3IgPCBORVdfQ0RfVkVSU0lPTl9GT1JNQVRfTUFKT1JfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbWlzc2luZ1ZlcnNpb25zW3ZlcnNpb25dID0gbWluQ2hyb21lVmVyc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdWZXJzaW9ucykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgRm91bmQgJHt1dGlsLnBsdXJhbGl6ZSgnQ2hyb21lZHJpdmVyJywgXy5zaXplKG1pc3NpbmdWZXJzaW9ucyksIHRydWUpfSwgYCArXG4gICAgICAgICAgYHdoaWNoICR7Xy5zaXplKG1pc3NpbmdWZXJzaW9ucykgPT09IDEgPyAnaXMnIDogJ2FyZSd9IG1pc3NpbmcgaW4gdGhlIGxpc3Qgb2Yga25vd24gdmVyc2lvbnM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1pc3NpbmdWZXJzaW9ucykpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZURyaXZlcnNNYXBwaW5nKE9iamVjdC5hc3NpZ24obWFwcGluZywgbWlzc2luZ1ZlcnNpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCdWlsZENoZWNrKSB7XG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYCdjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjaycgY2FwYWJpbGl0eSBpcyBzZXQgdG8gJ3RydWUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDaHJvbWUgYnVpbGQgY2hlY2sgZGlzYWJsZWQuIFVzaW5nIG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uICgke3ZlcnNpb259LCBhdCAnJHtleGVjdXRhYmxlfScpYCk7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYElmIHRoaXMgaXMgd3JvbmcsIHNldCAnY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2snIGNhcGFiaWxpdHkgdG8gJ2ZhbHNlJ2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hyb21lVmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q2hyb21lVmVyc2lvbigpO1xuICAgICAgaWYgKCFjaHJvbWVWZXJzaW9uKSB7XG4gICAgICAgIC8vIHVuYWJsZSB0byBnZXQgdGhlIGNocm9tZSB2ZXJzaW9uXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY2RzKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIENocm9tZWRyaXZlciBleGVjdXRhYmxlIGF2YWlsYWJsZSBmb3IgdXNlIGlmIGAgK1xuICAgICAgICAgICAgYHRoZSBjdXJyZW50IENocm9tZSB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3ZlcnNpb24sIGV4ZWN1dGFibGV9ID0gY2RzWzBdO1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gZGlzY292ZXIgQ2hyb21lIHZlcnNpb24uIFVzaW5nIENocm9tZWRyaXZlciAke3ZlcnNpb259IGF0ICcke2V4ZWN1dGFibGV9J2ApO1xuICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBDaHJvbWUgYnVuZGxlICcke3RoaXMuYnVuZGxlSWR9JyB2ZXJzaW9uICcke2Nocm9tZVZlcnNpb259J2ApO1xuXG4gICAgICBjb25zdCBtYXRjaGluZ0RyaXZlcnMgPSBjZHMuZmlsdGVyKCh7bWluQ2hyb21lVmVyc2lvbn0pID0+IHtcbiAgICAgICAgY29uc3QgbWluQ2hyb21lVmVyc2lvblMgPSBtaW5DaHJvbWVWZXJzaW9uICYmIHNlbXZlci5jb2VyY2UobWluQ2hyb21lVmVyc2lvbik7XG4gICAgICAgIGlmICghbWluQ2hyb21lVmVyc2lvblMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hyb21lVmVyc2lvbi5tYWpvciA+IE5FV19DRF9WRVJTSU9OX0ZPUk1BVF9NQUpPUl9WRVJTSU9OXG4gICAgICAgICAgPyBtaW5DaHJvbWVWZXJzaW9uUy5tYWpvciA9PT0gY2hyb21lVmVyc2lvbi5tYWpvclxuICAgICAgICAgIDogc2VtdmVyLmd0ZShjaHJvbWVWZXJzaW9uLCBtaW5DaHJvbWVWZXJzaW9uUyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChfLmlzRW1wdHkobWF0Y2hpbmdEcml2ZXJzKSkge1xuICAgICAgICBpZiAodGhpcy5zdG9yYWdlQ2xpZW50ICYmICFkaWRTdG9yYWdlU3luYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgc3luY0Nocm9tZWRyaXZlcnMoY2hyb21lVmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHN5bmNocm9uaXplIGxvY2FsIGNocm9tZWRyaXZlcnMgd2l0aCB0aGUgcmVtb3RlIHN0b3JhZ2UgYXQgJHtDRF9DRE59OiBgICtcbiAgICAgICAgICAgICAgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRvZG93bmxvYWRTdWdnZXN0aW9uID1cbiAgICAgICAgICAnWW91IGNvdWxkIGFsc28gdHJ5IHRvIGVuYWJsZSBhdXRvbWF0ZWQgY2hyb21lZHJpdmVycyBkb3dubG9hZCBzZXJ2ZXIgZmVhdHVyZSc7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQ2hyb21lZHJpdmVyIGZvdW5kIHRoYXQgY2FuIGF1dG9tYXRlIENocm9tZSAnJHtjaHJvbWVWZXJzaW9ufScuIGAgK1xuICAgICAgICAgICghdGhpcy5zdG9yYWdlQ2xpZW50ID8gYCR7YXV0b2Rvd25sb2FkU3VnZ2VzdGlvbn0uIGAgOiAnJykgK1xuICAgICAgICAgIGBTZWUgJHtDSFJPTUVEUklWRVJfVFVUT1JJQUx9IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmluUGF0aCA9IG1hdGNoaW5nRHJpdmVyc1swXS5leGVjdXRhYmxlO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kICR7dXRpbC5wbHVyYWxpemUoJ2V4ZWN1dGFibGUnLCBtYXRjaGluZ0RyaXZlcnMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICAgIGBjYXBhYmxlIG9mIGF1dG9tYXRpbmcgQ2hyb21lICcke2Nocm9tZVZlcnNpb259Jy5cXG5DaG9vc2luZyB0aGUgbW9zdCByZWNlbnQsICcke2JpblBhdGh9Jy5gKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdJZiBhIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWlyZWQsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGNocm9tZWRyaXZlckV4ZWN1dGFibGVgJyArXG4gICAgICAgICdkZXNpcmVkIGNhcGFiaWxpdHkuJyk7XG4gICAgICByZXR1cm4gYmluUGF0aDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgfSB3aGlsZSAodHJ1ZSk7XG4gIH1cblxuICBhc3luYyBpbml0Q2hyb21lZHJpdmVyUGF0aCAoKSB7XG4gICAgaWYgKHRoaXMuZXhlY3V0YWJsZVZlcmlmaWVkKSByZXR1cm47IC8vZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgLy8gdGhlIGV4ZWN1dGFibGUgbWlnaHQgYmUgc2V0IChpZiBwYXNzZWQgaW4pXG4gICAgLy8gb3Igd2UgbWlnaHQgd2FudCB0byB1c2UgdGhlIGJhc2ljIG9uZSBpbnN0YWxsZWQgd2l0aCB0aGlzIGRyaXZlclxuICAgIC8vIG9yIHdlIHdhbnQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBvbmVcbiAgICBpZiAoIXRoaXMuY2hyb21lZHJpdmVyKSB7XG4gICAgICB0aGlzLmNocm9tZWRyaXZlciA9IHRoaXMudXNlU3lzdGVtRXhlY3V0YWJsZVxuICAgICAgICA/IGF3YWl0IGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgoKVxuICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q29tcGF0aWJsZUNocm9tZWRyaXZlcigpO1xuICAgIH1cblxuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKHRoaXMuY2hyb21lZHJpdmVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcnlpbmcgdG8gdXNlIGEgY2hyb21lZHJpdmVyIGJpbmFyeSBhdCB0aGUgcGF0aCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNocm9tZWRyaXZlcn0sIGJ1dCBpdCBkb2Vzbid0IGV4aXN0IWApO1xuICAgIH1cbiAgICB0aGlzLmV4ZWN1dGFibGVWZXJpZmllZCA9IHRydWU7XG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0IGNocm9tZWRyaXZlciBiaW5hcnkgYXM6ICR7dGhpcy5jaHJvbWVkcml2ZXJ9YCk7XG4gIH1cblxuICBzeW5jUHJvdG9jb2wgKGNkVmVyc2lvbiA9IG51bGwpIHtcbiAgICBjb25zdCBjb2VyY2VkVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoY2RWZXJzaW9uKTtcbiAgICBpZiAoIWNvZXJjZWRWZXJzaW9uIHx8IGNvZXJjZWRWZXJzaW9uLm1ham9yIDwgTUlOX0NEX1ZFUlNJT05fV0lUSF9XM0NfU1VQUE9SVCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENocm9tZWRyaXZlciB2LiAke2NkVmVyc2lvbn0gZG9lcyBub3QgZnVsbHkgc3VwcG9ydCAke1BST1RPQ09MUy5XM0N9IHByb3RvY29sLiBgICtcbiAgICAgICAgYERlZmF1bHRpbmcgdG8gJHtQUk9UT0NPTFMuTUpTT05XUH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hyb21lT3B0aW9ucyA9IGdldENhcFZhbHVlKHRoaXMuY2FwYWJpbGl0aWVzLCAnY2hyb21lT3B0aW9ucycsIHt9KTtcbiAgICBpZiAoY2hyb21lT3B0aW9ucy53M2MgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBDaHJvbWVkcml2ZXIgdi4gJHtjZFZlcnNpb259IHN1cHBvcnRzICR7UFJPVE9DT0xTLlczQ30gcHJvdG9jb2wsIGAgK1xuICAgICAgICBgYnV0ICR7UFJPVE9DT0xTLk1KU09OV1B9IG9uZSBoYXMgYmVlbiBleHBsaWNpdGx5IHJlcXVlc3RlZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRlc2lyZWRQcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gICAgLy8gZ2l2ZW4gY2FwcyBtaWdodCBub3QgYmUgcHJvcGVybHkgcHJlZml4ZWRcbiAgICAvLyBzbyB3ZSB0cnkgdG8gZml4IHRoZW0gaW4gb3JkZXIgdG8gcHJvcGVybHkgaW5pdFxuICAgIC8vIHRoZSBuZXcgVzNDIHNlc3Npb25cbiAgICB0aGlzLmNhcGFiaWxpdGllcyA9IHRvVzNjQ2FwTmFtZXModGhpcy5jYXBhYmlsaXRpZXMpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGNhcHMsIGVtaXRTdGFydGluZ1N0YXRlID0gdHJ1ZSkge1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoY2Fwcyk7XG5cbiAgICAvLyBzZXQgdGhlIGxvZ2dpbmcgcHJlZmVyZW5jZXMgdG8gQUxMIHRoZSBjb25zb2xlIGxvZ3NcbiAgICB0aGlzLmNhcGFiaWxpdGllcy5sb2dnaW5nUHJlZnMgPSBfLmNsb25lRGVlcChnZXRDYXBWYWx1ZShjYXBzLCAnbG9nZ2luZ1ByZWZzJywge30pKTtcbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuY2FwYWJpbGl0aWVzLmxvZ2dpbmdQcmVmcy5icm93c2VyKSkge1xuICAgICAgdGhpcy5jYXBhYmlsaXRpZXMubG9nZ2luZ1ByZWZzLmJyb3dzZXIgPSAnQUxMJztcbiAgICB9XG5cbiAgICBpZiAoZW1pdFN0YXJ0aW5nU3RhdGUpIHtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoQ2hyb21lZHJpdmVyLlNUQVRFX1NUQVJUSU5HKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gW2AtLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH1gXTtcbiAgICBpZiAodGhpcy5hZGIgJiYgdGhpcy5hZGIuYWRiUG9ydCkge1xuICAgICAgYXJncy5wdXNoKGAtLWFkYi1wb3J0PSR7dGhpcy5hZGIuYWRiUG9ydH1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNBcnJheSh0aGlzLmNtZEFyZ3MpKSB7XG4gICAgICBhcmdzLnB1c2goLi4udGhpcy5jbWRBcmdzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9nUGF0aCkge1xuICAgICAgYXJncy5wdXNoKGAtLWxvZy1wYXRoPSR7dGhpcy5sb2dQYXRofWApO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlQnVpbGRDaGVjaykge1xuICAgICAgYXJncy5wdXNoKCctLWRpc2FibGUtYnVpbGQtY2hlY2snKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLXZlcmJvc2UnKTtcbiAgICAvLyB3aGF0IGFyZSB0aGUgcHJvY2VzcyBzdGRvdXQvc3RkZXJyIGNvbmRpdGlvbnMgd2hlcmVpbiB3ZSBrbm93IHRoYXRcbiAgICAvLyB0aGUgcHJvY2VzcyBoYXMgc3RhcnRlZCB0byBvdXIgc2F0aXNmYWN0aW9uP1xuICAgIGNvbnN0IHN0YXJ0RGV0ZWN0b3IgPSAoc3Rkb3V0KSA9PiBzdGRvdXQuc3RhcnRzV2l0aCgnU3RhcnRpbmcgJyk7XG5cbiAgICBsZXQgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICBsZXQgd2Vidmlld1ZlcnNpb247XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdENocm9tZWRyaXZlclBhdGgoKTtcbiAgICAgIGF3YWl0IHRoaXMua2lsbEFsbCgpO1xuXG4gICAgICAvLyBzZXQgdXAgb3VyIHN1YnByb2Nlc3Mgb2JqZWN0XG4gICAgICB0aGlzLnByb2MgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmNocm9tZWRyaXZlciwgYXJncyk7XG4gICAgICBwcm9jZXNzSXNBbGl2ZSA9IHRydWU7XG5cbiAgICAgIC8vIGhhbmRsZSBsb2cgb3V0cHV0XG4gICAgICB0aGlzLnByb2Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICAvLyBpZiB0aGUgY2Qgb3V0cHV0IGlzIG5vdCBwcmludGVkLCBmaW5kIHRoZSBjaHJvbWUgdmVyc2lvbiBhbmQgcHJpbnRcbiAgICAgICAgLy8gd2lsbCBnZXQgYSByZXNwb25zZSBsaWtlXG4gICAgICAgIC8vICAgRGV2VG9vbHMgcmVzcG9uc2U6IHtcbiAgICAgICAgLy8gICAgICBcIkFuZHJvaWQtUGFja2FnZVwiOiBcImlvLmFwcGl1bS5zYW1wbGVhcHBcIixcbiAgICAgICAgLy8gICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNTUuMC4yODgzLjkxXCIsXG4gICAgICAgIC8vICAgICAgXCJQcm90b2NvbC1WZXJzaW9uXCI6IFwiMS4yXCIsXG4gICAgICAgIC8vICAgICAgXCJVc2VyLUFnZW50XCI6IFwiLi4uXCIsXG4gICAgICAgIC8vICAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNlwiXG4gICAgICAgIC8vICAgfVxuICAgICAgICBjb25zdCBvdXQgPSBzdGRvdXQgKyBzdGRlcnI7XG4gICAgICAgIGxldCBtYXRjaCA9IC9cIkJyb3dzZXJcIjogXCIoLiopXCIvLmV4ZWMob3V0KTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgd2Vidmlld1ZlcnNpb24gPSBtYXRjaFsxXTtcbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2VidmlldyB2ZXJzaW9uOiAnJHt3ZWJ2aWV3VmVyc2lvbn0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbHNvIHByaW50IGNocm9tZWRyaXZlciB2ZXJzaW9uIHRvIGxvZ3NcbiAgICAgICAgLy8gd2lsbCBvdXRwdXQgc29tZXRoaW5nIGxpa2VcbiAgICAgICAgLy8gIFN0YXJ0aW5nIENocm9tZURyaXZlciAyLjMzLjUwNjEwNiAoOGEwNmMzOWM0NTgyZmJmYmFiNjk2NmRiYjFjMzhhOTE3M2JmYjFhMikgb24gcG9ydCA5NTE1XG4gICAgICAgIG1hdGNoID0gL1N0YXJ0aW5nIENocm9tZURyaXZlciAoWy5cXGRdKykvLmV4ZWMob3V0KTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoYENocm9tZWRyaXZlciB2ZXJzaW9uOiAnJHttYXRjaFsxXX0nYCk7XG4gICAgICAgICAgdGhpcy5zeW5jUHJvdG9jb2wobWF0Y2hbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZ2l2ZSB0aGUgb3V0cHV0IGlmIGl0IGlzIHJlcXVlc3RlZFxuICAgICAgICBpZiAodGhpcy52ZXJib3NlKSB7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSBvZiAoc3Rkb3V0IHx8ICcnKS50cmltKCkuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpLmxlbmd0aCkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBbU1RET1VUXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgKHN0ZGVyciB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLnRyaW0oKS5sZW5ndGgpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihgW1NUREVSUl0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGhhbmRsZSBvdXQtb2YtYm91bmQgZXhpdCBieSBzaW1wbHkgZW1pdHRpbmcgYSBzdG9wcGVkIHN0YXRlXG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3NJc0FsaXZlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQSU5HICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBDaHJvbWVkcml2ZXIuU1RBVEVfUkVTVEFSVElORykge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGBDaHJvbWVkcml2ZXIgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aXRoIGNvZGUgJHtjb2RlfSwgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBTcGF3bmluZyBjaHJvbWVkcml2ZXIgd2l0aDogJHt0aGlzLmNocm9tZWRyaXZlcn0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIC8vIHN0YXJ0IHN1YnByb2MgYW5kIHdhaXQgZm9yIHN0YXJ0RGV0ZWN0b3JcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdGFydChzdGFydERldGVjdG9yKTtcbiAgICAgIGF3YWl0IHRoaXMud2FpdEZvck9ubGluZSgpO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFNlc3Npb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMuZW1pdChDaHJvbWVkcml2ZXIuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgLy8ganVzdCBiZWNhdXNlIHdlIGhhZCBhbiBlcnJvciBkb2Vzbid0IG1lYW4gdGhlIGNocm9tZWRyaXZlciBwcm9jZXNzXG4gICAgICAvLyBmaW5pc2hlZDsgd2Ugc2hvdWxkIGNsZWFuIHVwIGlmIG5lY2Vzc2FyeVxuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgICAvLyBvZnRlbiB0aGUgdXNlcidzIENocm9tZSB2ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyXG4gICAgICBpZiAoZS5tZXNzYWdlLmluY2x1ZGVzKCdDaHJvbWUgdmVyc2lvbiBtdXN0IGJlJykpIHtcbiAgICAgICAgbWVzc2FnZSArPSAnVW5hYmxlIHRvIGF1dG9tYXRlIENocm9tZSB2ZXJzaW9uIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHZlcnNpb24gb2YgQ2hyb21lZHJpdmVyLlxcbic7XG4gICAgICAgIGlmICh3ZWJ2aWV3VmVyc2lvbikge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gYENocm9tZSB2ZXJzaW9uIG9uIHRoZSBkZXZpY2U6ICR7d2Vidmlld1ZlcnNpb259XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyID0gL0Nocm9tZSB2ZXJzaW9uIG11c3QgYmUgKC4rKS8uZXhlYyhlLm1lc3NhZ2UpPy5bMV0gfHwgJyc7XG4gICAgICAgIGlmICh2ZXJzaW9uc1N1cHBvcnRlZEJ5RHJpdmVyKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBgQ2hyb21lZHJpdmVyIHN1cHBvcnRzIENocm9tZSB2ZXJzaW9uKHMpOiAke3ZlcnNpb25zU3VwcG9ydGVkQnlEcml2ZXJ9XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlICs9IGBWaXNpdCAnJHtDSFJPTUVEUklWRVJfVFVUT1JJQUx9JyB0byB0cm91Ymxlc2hvb3QgdGhlIHByb2JsZW0uXFxuYDtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZSArPSBlLm1lc3NhZ2U7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHNlc3Npb25JZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUgPyB0aGlzLmp3cHJveHkuc2Vzc2lvbklkIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHJlc3RhcnQgKCkge1xuICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RhcnRpbmcgY2hyb21lZHJpdmVyJyk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHJlc3RhcnQgd2hlbiB3ZSdyZSBub3Qgb25saW5lXCIpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9SRVNUQVJUSU5HKTtcbiAgICBhd2FpdCB0aGlzLnN0b3AoZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnQodGhpcy5jYXBhYmlsaXRpZXMsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JPbmxpbmUgKCkge1xuICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgQ0QgaGFzbid0IGNyYXNoZWRcbiAgICBsZXQgY2hyb21lZHJpdmVyU3RvcHBlZCA9IGZhbHNlO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoMjAsIDIwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIC8vIHdlIGFyZSBlaXRoZXIgc3RvcHBlZCBvciBzdG9wcGluZywgc28gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICAgICAgY2hyb21lZHJpdmVyU3RvcHBlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgfSk7XG4gICAgaWYgKGNocm9tZWRyaXZlclN0b3BwZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hyb21lRHJpdmVyIGNyYXNoZWQgZHVyaW5nIHN0YXJ0dXAuJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKCkge1xuICAgIGNvbnN0IHNlc3Npb25DYXBzID0gdGhpcy5kZXNpcmVkUHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0NcbiAgICAgID8ge2NhcGFiaWxpdGllczoge2Fsd2F5c01hdGNoOiB0aGlzLmNhcGFiaWxpdGllc319XG4gICAgICA6IHtkZXNpcmVkQ2FwYWJpbGl0aWVzOiB0aGlzLmNhcGFiaWxpdGllc307XG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgJHt0aGlzLmRlc2lyZWRQcm90b2NvbH0gQ2hyb21lZHJpdmVyIHNlc3Npb24gd2l0aCBjYXBhYmlsaXRpZXM6IGAgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkNhcHMsIG51bGwsIDIpKTtcbiAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHNlc3Npb25DYXBzKTtcbiAgICB0aGlzLmxvZy5wcmVmaXggPSBnZW5lcmF0ZUxvZ1ByZWZpeCh0aGlzLCB0aGlzLmp3cHJveHkuc2Vzc2lvbklkKTtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9PTkxJTkUpO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoZW1pdFN0YXRlcyA9IHRydWUpIHtcbiAgICBpZiAoZW1pdFN0YXRlcykge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcpO1xuICAgIH1cbiAgICBjb25zdCBydW5TYWZlU3RlcCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGUuc3RhY2spO1xuICAgICAgfVxuICAgIH07XG4gICAgYXdhaXQgcnVuU2FmZVN0ZXAoKCkgPT4gdGhpcy5qd3Byb3h5LmNvbW1hbmQoJycsICdERUxFVEUnKSk7XG4gICAgYXdhaXQgcnVuU2FmZVN0ZXAoKCkgPT4gdGhpcy5wcm9jLnN0b3AoJ1NJR1RFUk0nLCAyMDAwMCkpO1xuICAgIHRoaXMubG9nLnByZWZpeCA9IGdlbmVyYXRlTG9nUHJlZml4KHRoaXMpO1xuICAgIGlmIChlbWl0U3RhdGVzKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5sb2cuZGVidWcoYENoYW5nZWQgc3RhdGUgdG8gJyR7c3RhdGV9J2ApO1xuICAgIHRoaXMuZW1pdChDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwge3N0YXRlfSk7XG4gIH1cblxuICBhc3luYyBzZW5kQ29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG5cbiAgYXN5bmMgcHJveHlSZXEgKHJlcSwgcmVzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuandwcm94eS5wcm94eVJlcVJlcyhyZXEsIHJlcyk7XG4gIH1cblxuICBhc3luYyBraWxsQWxsICgpIHtcbiAgICBsZXQgY21kID0gc3lzdGVtLmlzV2luZG93cygpXG4gICAgICA/IGB3bWljIHByb2Nlc3Mgd2hlcmUgXCJjb21tYW5kbGluZSBsaWtlICclY2hyb21lZHJpdmVyLmV4ZSUtLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH0lJ1wiIGRlbGV0ZWBcbiAgICAgIDogYHBraWxsIC0xNSAtZiBcIiR7dGhpcy5jaHJvbWVkcml2ZXJ9LiotLXBvcnQ9JHt0aGlzLnByb3h5UG9ydH1cImA7XG4gICAgdGhpcy5sb2cuZGVidWcoYEtpbGxpbmcgYW55IG9sZCBjaHJvbWVkcml2ZXJzLCBydW5uaW5nOiAke2NtZH1gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKEIucHJvbWlzaWZ5KGNwLmV4ZWMpKShjbWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIHVwIG9sZCBjaHJvbWVkcml2ZXJzJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCdObyBvbGQgY2hyb21lZHJpdmVycyBzZWVtIHRvIGV4aXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBjb25zdCB1ZGlkSW5kZXggPSB0aGlzLmFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbSA9PT0gJy1zJyk7XG4gICAgICBjb25zdCB1ZGlkID0gdWRpZEluZGV4ID4gLTEgPyB0aGlzLmFkYi5leGVjdXRhYmxlLmRlZmF1bHRBcmdzW3VkaWRJbmRleCArIDFdIDogbnVsbDtcblxuICAgICAgaWYgKHVkaWQpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoaXMgZGV2aWNlJ3MgYWRiIGZvcndhcmRlZCBwb3J0IHNvY2tldCBjb25uZWN0aW9uczogJHt1ZGlkfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIGFueSBvbGQgYWRiIGZvcndhcmRlZCBwb3J0IHNvY2tldCBjb25uZWN0aW9uc2ApO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGxldCBjb25uIG9mIGF3YWl0IHRoaXMuYWRiLmdldEZvcndhcmRMaXN0KCkpIHtcbiAgICAgICAgICAvLyBjaHJvbWVkcml2ZXIgd2lsbCBhc2sgQURCIHRvIGZvcndhcmQgYSBwb3J0IGxpa2UgXCJkZXZpY2VJZCB0Y3A6cG9ydCBsb2NhbGFic3RyYWN0OndlYnZpZXdfZGV2dG9vbHNfcmVtb3RlX3BvcnRcIlxuICAgICAgICAgIGlmICghKGNvbm4uaW5jbHVkZXMoJ3dlYnZpZXdfZGV2dG9vbHMnKSAmJiAoIXVkaWQgfHwgY29ubi5pbmNsdWRlcyh1ZGlkKSkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcGFyYW1zID0gY29ubi5zcGxpdCgvXFxzKy8pO1xuICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQocGFyYW1zWzFdLnJlcGxhY2UoL1tcXERdKi8sICcnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIGNsZWFuIGZvcndhcmRlZCBwb3J0cy4gRXJyb3I6ICcke2Vyci5tZXNzYWdlfScuIENvbnRpbnVpbmcuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzV29ya2luZ1dlYnZpZXcgKCkge1xuICAgIC8vIHNvbWV0aW1lcyBjaHJvbWVkcml2ZXIgc3RvcHMgYXV0b21hdGluZyB3ZWJ2aWV3cy4gdGhpcyBtZXRob2QgcnVucyBhXG4gICAgLy8gc2ltcGxlIGNvbW1hbmQgdG8gZGV0ZXJtaW5lIG91ciBzdGF0ZSwgYW5kIHJlc3BvbmRzIGFjY29yZGluZ2x5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvdXJsJywgJ0dFVCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5DaHJvbWVkcml2ZXIuRVZFTlRfRVJST1IgPSAnY2hyb21lZHJpdmVyX2Vycm9yJztcbkNocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEID0gJ3N0YXRlQ2hhbmdlZCc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCA9ICdzdG9wcGVkJztcbkNocm9tZWRyaXZlci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfT05MSU5FID0gJ29ubGluZSc7XG5DaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBJTkcgPSAnc3RvcHBpbmcnO1xuQ2hyb21lZHJpdmVyLlNUQVRFX1JFU1RBUlRJTkcgPSAncmVzdGFydGluZyc7XG5cbmV4cG9ydCB7IENocm9tZWRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQ2hyb21lZHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG1DQUFtQyxHQUFHLEVBQTVDO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLFdBQXJCO0FBQ0EsTUFBTUMsK0JBQStCLEdBQUcsRUFBeEM7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxvQkFBekI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyw0QkFBaEM7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6Qiw0QkFEeUIsRUFFekIscUJBRnlCLENBQTNCO0FBSUEsTUFBTUMscUJB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
@@ -51,7 +51,5 @@ async function install() {
51
51
 
52
52
  async function doInstall() {
53
53
  await install();
54
- }require('source-map-support').install();
55
-
56
-
57
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2luc3RhbGwuanMiLCJuYW1lcyI6WyJET1dOTE9BRF9USU1FT1VUX01TIiwiTEFURVNUX1ZFUlNJT04iLCJmb3JtYXRDZFZlcnNpb24iLCJ2ZXIiLCJyZXRyaWV2ZURhdGEiLCJDRF9DRE4iLCJhY2NlcHQiLCJ0aW1lb3V0IiwidHJpbSIsInByZXBhcmVDaHJvbWVkcml2ZXJEaXIiLCJwbGF0Zm9ybU5hbWUiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJmcyIsImV4aXN0cyIsIm1rZGlycCIsImluc3RhbGwiLCJvc0luZm8iLCJnZXRPc0luZm8iLCJjbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwibmFtZSIsInN5bmNEcml2ZXJzIiwidmVyc2lvbnMiLCJDRF9WRVIiLCJkb0luc3RhbGwiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQge1xuICBDRF9DRE4sIENEX1ZFUiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIGdldENocm9tZWRyaXZlckRpcixcbn0gZnJvbSAnLi91dGlscyc7XG5cblxuY29uc3QgRE9XTkxPQURfVElNRU9VVF9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ0xBVEVTVCc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENkVmVyc2lvbiAodmVyKSB7XG4gIHJldHVybiB2ZXIgPT09IExBVEVTVF9WRVJTSU9OXG4gICAgPyAoYXdhaXQgcmV0cmlldmVEYXRhKGAke0NEX0NETn0vTEFURVNUX1JFTEVBU0VgLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IERPV05MT0FEX1RJTUVPVVRfTVMgfSkpLnRyaW0oKVxuICAgIDogdmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hyb21lZHJpdmVyRGlyIChwbGF0Zm9ybU5hbWUpIHtcbiAgY29uc3QgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKHBsYXRmb3JtTmFtZSk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGNocm9tZWRyaXZlckRpcikpIHtcbiAgICBhd2FpdCBta2RpcnAoY2hyb21lZHJpdmVyRGlyKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyRGlyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsICgpIHtcbiAgY29uc3Qgb3NJbmZvID0gYXdhaXQgZ2V0T3NJbmZvKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHtcbiAgICBjaHJvbWVkcml2ZXJEaXI6IGF3YWl0IHByZXBhcmVDaHJvbWVkcml2ZXJEaXIob3NJbmZvLm5hbWUpLFxuICB9KTtcbiAgYXdhaXQgY2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICBvc0luZm8sXG4gICAgdmVyc2lvbnM6IFthd2FpdCBmb3JtYXRDZFZlcnNpb24oQ0RfVkVSKV0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luc3RhbGwgKCkge1xuICBhd2FpdCBpbnN0YWxsKCk7XG59XG5cbmV4cG9ydCB7IGluc3RhbGwsIGRvSW5zdGFsbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxtQkFBbUIsR0FBRyxLQUFLLElBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFFBQXZCOztBQUVBLGVBQWVDLGVBQWYsQ0FBZ0NDLEdBQWhDLEVBQXFDO0VBQ25DLE9BQU9BLEdBQUcsS0FBS0YsY0FBUixHQUNILENBQUMsTUFBTSxJQUFBRyxtQkFBQSxFQUFjLEdBQUVDLGFBQU8saUJBQXZCLEVBQXlDO0lBQ2hELGNBQWMsUUFEa0M7SUFFaERDLE1BQU0sRUFBRTtFQUZ3QyxDQUF6QyxFQUdOO0lBQUVDLE9BQU8sRUFBRVA7RUFBWCxDQUhNLENBQVAsRUFHb0NRLElBSHBDLEVBREcsR0FLSEwsR0FMSjtBQU1EOztBQUVELGVBQWVNLHNCQUFmLENBQXVDQyxZQUF2QyxFQUFxRDtFQUNuRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMseUJBQUEsRUFBbUJGLFlBQW5CLENBQXhCOztFQUNBLElBQUksRUFBQyxNQUFNRyxXQUFBLENBQUdDLE1BQUgsQ0FBVUgsZUFBVixDQUFQLENBQUosRUFBdUM7SUFDckMsTUFBTSxJQUFBSSxlQUFBLEVBQU9KLGVBQVAsQ0FBTjtFQUNEOztFQUNELE9BQU9BLGVBQVA7QUFDRDs7QUFFRCxlQUFlSyxPQUFmLEdBQTBCO0VBQ3hCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLGdCQUFBLEdBQXJCO0VBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlDLHNCQUFKLENBQThCO0lBQzNDVCxlQUFlLEVBQUUsTUFBTUYsc0JBQXNCLENBQUNRLE1BQU0sQ0FBQ0ksSUFBUjtFQURGLENBQTlCLENBQWY7RUFHQSxNQUFNRixNQUFNLENBQUNHLFdBQVAsQ0FBbUI7SUFDdkJMLE1BRHVCO0lBRXZCTSxRQUFRLEVBQUUsQ0FBQyxNQUFNckIsZUFBZSxDQUFDc0IsYUFBRCxDQUF0QjtFQUZhLENBQW5CLENBQU47QUFJRDs7QUFFRCxlQUFlQyxTQUFmLEdBQTRCO0VBQzFCLE1BQU1ULE9BQU8sRUFBYjtBQUNEIn0=
54
+ }
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJET1dOTE9BRF9USU1FT1VUX01TIiwiTEFURVNUX1ZFUlNJT04iLCJmb3JtYXRDZFZlcnNpb24iLCJ2ZXIiLCJyZXRyaWV2ZURhdGEiLCJDRF9DRE4iLCJhY2NlcHQiLCJ0aW1lb3V0IiwidHJpbSIsInByZXBhcmVDaHJvbWVkcml2ZXJEaXIiLCJwbGF0Zm9ybU5hbWUiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJmcyIsImV4aXN0cyIsIm1rZGlycCIsImluc3RhbGwiLCJvc0luZm8iLCJnZXRPc0luZm8iLCJjbGllbnQiLCJDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IiwibmFtZSIsInN5bmNEcml2ZXJzIiwidmVyc2lvbnMiLCJDRF9WRVIiLCJkb0luc3RhbGwiXSwic291cmNlcyI6WyIuLi8uLi9saWIvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgbWtkaXJwIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQgZnJvbSAnLi9zdG9yYWdlLWNsaWVudCc7XG5pbXBvcnQge1xuICBDRF9DRE4sIENEX1ZFUiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sIGdldENocm9tZWRyaXZlckRpcixcbn0gZnJvbSAnLi91dGlscyc7XG5cblxuY29uc3QgRE9XTkxPQURfVElNRU9VVF9NUyA9IDE1ICogMTAwMDtcbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ0xBVEVTVCc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdENkVmVyc2lvbiAodmVyKSB7XG4gIHJldHVybiB2ZXIgPT09IExBVEVTVF9WRVJTSU9OXG4gICAgPyAoYXdhaXQgcmV0cmlldmVEYXRhKGAke0NEX0NETn0vTEFURVNUX1JFTEVBU0VgLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IERPV05MT0FEX1RJTUVPVVRfTVMgfSkpLnRyaW0oKVxuICAgIDogdmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlQ2hyb21lZHJpdmVyRGlyIChwbGF0Zm9ybU5hbWUpIHtcbiAgY29uc3QgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKHBsYXRmb3JtTmFtZSk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGNocm9tZWRyaXZlckRpcikpIHtcbiAgICBhd2FpdCBta2RpcnAoY2hyb21lZHJpdmVyRGlyKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyRGlyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsICgpIHtcbiAgY29uc3Qgb3NJbmZvID0gYXdhaXQgZ2V0T3NJbmZvKCk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50KHtcbiAgICBjaHJvbWVkcml2ZXJEaXI6IGF3YWl0IHByZXBhcmVDaHJvbWVkcml2ZXJEaXIob3NJbmZvLm5hbWUpLFxuICB9KTtcbiAgYXdhaXQgY2xpZW50LnN5bmNEcml2ZXJzKHtcbiAgICBvc0luZm8sXG4gICAgdmVyc2lvbnM6IFthd2FpdCBmb3JtYXRDZFZlcnNpb24oQ0RfVkVSKV0sXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb0luc3RhbGwgKCkge1xuICBhd2FpdCBpbnN0YWxsKCk7XG59XG5cbmV4cG9ydCB7IGluc3RhbGwsIGRvSW5zdGFsbCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxtQkFBbUIsR0FBRyxLQUFLLElBQWpDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLFFBQXZCOztBQUVBLGVBQWVDLGVBQWYsQ0FBZ0NDLEdBQWhDLEVBQXFDO0VBQ25DLE9BQU9BLEdBQUcsS0FBS0YsY0FBUixHQUNILENBQUMsTUFBTSxJQUFBRyxtQkFBQSxFQUFjLEdBQUVDLGFBQU8saUJBQXZCLEVBQXlDO0lBQ2hELGNBQWMsUUFEa0M7SUFFaERDLE1BQU0sRUFBRTtFQUZ3QyxDQUF6QyxFQUdOO0lBQUVDLE9BQU8sRUFBRVA7RUFBWCxDQUhNLENBQVAsRUFHb0NRLElBSHBDLEVBREcsR0FLSEwsR0FMSjtBQU1EOztBQUVELGVBQWVNLHNCQUFmLENBQXVDQyxZQUF2QyxFQUFxRDtFQUNuRCxNQUFNQyxlQUFlLEdBQUcsSUFBQUMseUJBQUEsRUFBbUJGLFlBQW5CLENBQXhCOztFQUNBLElBQUksRUFBQyxNQUFNRyxXQUFBLENBQUdDLE1BQUgsQ0FBVUgsZUFBVixDQUFQLENBQUosRUFBdUM7SUFDckMsTUFBTSxJQUFBSSxlQUFBLEVBQU9KLGVBQVAsQ0FBTjtFQUNEOztFQUNELE9BQU9BLGVBQVA7QUFDRDs7QUFFRCxlQUFlSyxPQUFmLEdBQTBCO0VBQ3hCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLGdCQUFBLEdBQXJCO0VBQ0EsTUFBTUMsTUFBTSxHQUFHLElBQUlDLHNCQUFKLENBQThCO0lBQzNDVCxlQUFlLEVBQUUsTUFBTUYsc0JBQXNCLENBQUNRLE1BQU0sQ0FBQ0ksSUFBUjtFQURGLENBQTlCLENBQWY7RUFHQSxNQUFNRixNQUFNLENBQUNHLFdBQVAsQ0FBbUI7SUFDdkJMLE1BRHVCO0lBRXZCTSxRQUFRLEVBQUUsQ0FBQyxNQUFNckIsZUFBZSxDQUFDc0IsYUFBRCxDQUF0QjtFQUZhLENBQW5CLENBQU47QUFJRDs7QUFFRCxlQUFlQyxTQUFmLEdBQTRCO0VBQzFCLE1BQU1ULE9BQU8sRUFBYjtBQUNEIn0=
@@ -35,7 +35,5 @@ function toW3cCapNames(originalCaps = {}) {
35
35
  acc[toW3cCapName(key)] = value;
36
36
  return acc;
37
37
  }, {});
38
- }require('source-map-support').install();
39
-
40
-
41
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Byb3RvY29sLWhlbHBlcnMuanMiLCJuYW1lcyI6WyJXM0NfUFJFRklYIiwidG9XM2NDYXBOYW1lIiwiY2FwTmFtZSIsIl8iLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiaXNTdGFuZGFyZENhcCIsImdldENhcFZhbHVlIiwiYWxsQ2FwcyIsInJhd0NhcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJjYXBWYWx1ZSIsInRvUGFpcnMiLCJ0b1czY0NhcE5hbWVzIiwib3JpZ2luYWxDYXBzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvcHJvdG9jb2wtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZENhcCB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBXM0NfUFJFRklYID0gJ2dvb2c6JztcblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lIChjYXBOYW1lKSB7XG4gIHJldHVybiAoXy5pc1N0cmluZyhjYXBOYW1lKSAmJiAhY2FwTmFtZS5pbmNsdWRlcygnOicpICYmICFpc1N0YW5kYXJkQ2FwKGNhcE5hbWUpKVxuICAgID8gYCR7VzNDX1BSRUZJWH0ke2NhcE5hbWV9YFxuICAgIDogY2FwTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FwVmFsdWUgKGFsbENhcHMgPSB7fSwgcmF3Q2FwTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGZvciAoY29uc3QgW2NhcE5hbWUsIGNhcFZhbHVlXSBvZiBfLnRvUGFpcnMoYWxsQ2FwcykpIHtcbiAgICBpZiAodG9XM2NDYXBOYW1lKGNhcE5hbWUpID09PSB0b1czY0NhcE5hbWUocmF3Q2FwTmFtZSkpIHtcbiAgICAgIHJldHVybiBjYXBWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lcyAob3JpZ2luYWxDYXBzID0ge30pIHtcbiAgcmV0dXJuIF8ucmVkdWNlKG9yaWdpbmFsQ2FwcywgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgIGFjY1t0b1czY0NhcE5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxPQUFuQjs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxPQUF2QixFQUFnQztFQUM5QixPQUFRQyxlQUFBLENBQUVDLFFBQUYsQ0FBV0YsT0FBWCxLQUF1QixDQUFDQSxPQUFPLENBQUNHLFFBQVIsQ0FBaUIsR0FBakIsQ0FBeEIsSUFBaUQsQ0FBQyxJQUFBQyxxQkFBQSxFQUFjSixPQUFkLENBQW5ELEdBQ0YsR0FBRUYsVUFBVyxHQUFFRSxPQUFRLEVBRHJCLEdBRUhBLE9BRko7QUFHRDs7QUFFRCxTQUFTSyxXQUFULENBQXNCQyxPQUFPLEdBQUcsRUFBaEMsRUFBb0NDLFVBQXBDLEVBQWdEQyxZQUFoRCxFQUE4RDtFQUM1RCxLQUFLLE1BQU0sQ0FBQ1IsT0FBRCxFQUFVUyxRQUFWLENBQVgsSUFBa0NSLGVBQUEsQ0FBRVMsT0FBRixDQUFVSixPQUFWLENBQWxDLEVBQXNEO0lBQ3BELElBQUlQLFlBQVksQ0FBQ0MsT0FBRCxDQUFaLEtBQTBCRCxZQUFZLENBQUNRLFVBQUQsQ0FBMUMsRUFBd0Q7TUFDdEQsT0FBT0UsUUFBUDtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT0QsWUFBUDtBQUNEOztBQUVELFNBQVNHLGFBQVQsQ0FBd0JDLFlBQVksR0FBRyxFQUF2QyxFQUEyQztFQUN6QyxPQUFPWCxlQUFBLENBQUVZLE1BQUYsQ0FBU0QsWUFBVCxFQUF1QixDQUFDRSxHQUFELEVBQU1DLEtBQU4sRUFBYUMsR0FBYixLQUFxQjtJQUNqREYsR0FBRyxDQUFDZixZQUFZLENBQUNpQixHQUFELENBQWIsQ0FBSCxHQUF5QkQsS0FBekI7SUFDQSxPQUFPRCxHQUFQO0VBQ0QsQ0FITSxFQUdKLEVBSEksQ0FBUDtBQUlEIn0=
38
+ }
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfUFJFRklYIiwidG9XM2NDYXBOYW1lIiwiY2FwTmFtZSIsIl8iLCJpc1N0cmluZyIsImluY2x1ZGVzIiwiaXNTdGFuZGFyZENhcCIsImdldENhcFZhbHVlIiwiYWxsQ2FwcyIsInJhd0NhcE5hbWUiLCJkZWZhdWx0VmFsdWUiLCJjYXBWYWx1ZSIsInRvUGFpcnMiLCJ0b1czY0NhcE5hbWVzIiwib3JpZ2luYWxDYXBzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcHJvdG9jb2wtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgaXNTdGFuZGFyZENhcCB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBXM0NfUFJFRklYID0gJ2dvb2c6JztcblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lIChjYXBOYW1lKSB7XG4gIHJldHVybiAoXy5pc1N0cmluZyhjYXBOYW1lKSAmJiAhY2FwTmFtZS5pbmNsdWRlcygnOicpICYmICFpc1N0YW5kYXJkQ2FwKGNhcE5hbWUpKVxuICAgID8gYCR7VzNDX1BSRUZJWH0ke2NhcE5hbWV9YFxuICAgIDogY2FwTmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FwVmFsdWUgKGFsbENhcHMgPSB7fSwgcmF3Q2FwTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGZvciAoY29uc3QgW2NhcE5hbWUsIGNhcFZhbHVlXSBvZiBfLnRvUGFpcnMoYWxsQ2FwcykpIHtcbiAgICBpZiAodG9XM2NDYXBOYW1lKGNhcE5hbWUpID09PSB0b1czY0NhcE5hbWUocmF3Q2FwTmFtZSkpIHtcbiAgICAgIHJldHVybiBjYXBWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdG9XM2NDYXBOYW1lcyAob3JpZ2luYWxDYXBzID0ge30pIHtcbiAgcmV0dXJuIF8ucmVkdWNlKG9yaWdpbmFsQ2FwcywgKGFjYywgdmFsdWUsIGtleSkgPT4ge1xuICAgIGFjY1t0b1czY0NhcE5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCB7IHRvVzNjQ2FwTmFtZXMsIGdldENhcFZhbHVlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxPQUFuQjs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxPQUF2QixFQUFnQztFQUM5QixPQUFRQyxlQUFBLENBQUVDLFFBQUYsQ0FBV0YsT0FBWCxLQUF1QixDQUFDQSxPQUFPLENBQUNHLFFBQVIsQ0FBaUIsR0FBakIsQ0FBeEIsSUFBaUQsQ0FBQyxJQUFBQyxxQkFBQSxFQUFjSixPQUFkLENBQW5ELEdBQ0YsR0FBRUYsVUFBVyxHQUFFRSxPQUFRLEVBRHJCLEdBRUhBLE9BRko7QUFHRDs7QUFFRCxTQUFTSyxXQUFULENBQXNCQyxPQUFPLEdBQUcsRUFBaEMsRUFBb0NDLFVBQXBDLEVBQWdEQyxZQUFoRCxFQUE4RDtFQUM1RCxLQUFLLE1BQU0sQ0FBQ1IsT0FBRCxFQUFVUyxRQUFWLENBQVgsSUFBa0NSLGVBQUEsQ0FBRVMsT0FBRixDQUFVSixPQUFWLENBQWxDLEVBQXNEO0lBQ3BELElBQUlQLFlBQVksQ0FBQ0MsT0FBRCxDQUFaLEtBQTBCRCxZQUFZLENBQUNRLFVBQUQsQ0FBMUMsRUFBd0Q7TUFDdEQsT0FBT0UsUUFBUDtJQUNEO0VBQ0Y7O0VBQ0QsT0FBT0QsWUFBUDtBQUNEOztBQUVELFNBQVNHLGFBQVQsQ0FBd0JDLFlBQVksR0FBRyxFQUF2QyxFQUEyQztFQUN6QyxPQUFPWCxlQUFBLENBQUVZLE1BQUYsQ0FBU0QsWUFBVCxFQUF1QixDQUFDRSxHQUFELEVBQU1DLEtBQU4sRUFBYUMsR0FBYixLQUFxQjtJQUNqREYsR0FBRyxDQUFDZixZQUFZLENBQUNpQixHQUFELENBQWIsQ0FBSCxHQUF5QkQsS0FBekI7SUFDQSxPQUFPRCxHQUFQO0VBQ0QsQ0FITSxFQUdKLEVBSEksQ0FBUDtBQUlEIn0=
@@ -333,8 +333,6 @@ class ChromedriverStorageClient {
333
333
  }
334
334
 
335
335
  async syncDrivers(opts = {}) {
336
- var _opts$osInfo;
337
-
338
336
  if (_lodash.default.isEmpty(this.mapping)) {
339
337
  await this.retrieveMapping(!!opts.minBrowserVersion);
340
338
  }
@@ -343,7 +341,7 @@ class ChromedriverStorageClient {
343
341
  throw new Error('Cannot retrieve chromedrivers mapping from Google storage');
344
342
  }
345
343
 
346
- const driversToSync = this.selectMatchingDrivers((_opts$osInfo = opts.osInfo) !== null && _opts$osInfo !== void 0 ? _opts$osInfo : await (0, _utils.getOsInfo)(), opts);
344
+ const driversToSync = this.selectMatchingDrivers(opts.osInfo ?? (await (0, _utils.getOsInfo)()), opts);
347
345
 
348
346
  if (_lodash.default.isEmpty(driversToSync)) {
349
347
  log.debug(`There are no drivers to sync. Exiting`);
@@ -385,7 +383,5 @@ class ChromedriverStorageClient {
385
383
  }
386
384
 
387
385
  var _default = ChromedriverStorageClient;
388
- exports.default = _default;require('source-map-support').install();
389
-
390
-
391
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3N0b3JhZ2UtY2xpZW50LmpzIiwibmFtZXMiOlsiVElNRU9VVF9NUyIsIk1BWF9QQVJBTExFTF9ET1dOTE9BRFMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJpc0NyY09rIiwic3JjIiwiY2hlY2tzdW0iLCJtZDUiLCJmcyIsImhhc2giLCJfIiwidG9Mb3dlciIsImZpbmRDaGlsZE5vZGUiLCJwYXJlbnQiLCJjaGlsZE5hbWUiLCJ0ZXh0IiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkTm9kZUlkeCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZE5vZGUiLCJsb2NhbE5hbWUiLCJjaGlsZFRleHQiLCJleHRyYWN0Tm9kZVRleHQiLCJub2RlIiwiZmlyc3RDaGlsZCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5vZGVWYWx1ZSIsIkNocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJjaHJvbWVkcml2ZXJEaXIiLCJnZXRDaHJvbWVkcml2ZXJEaXIiLCJ0aW1lb3V0IiwibWFwcGluZyIsInBhcnNlTm90ZXMiLCJjb250ZW50IiwicmVzdWx0IiwidmVyc2lvbk1hdGNoIiwiZXhlYyIsInZlcnNpb24iLCJtaW5Ccm93c2VyVmVyc2lvbk1hdGNoIiwibWluQnJvd3NlclZlcnNpb24iLCJyZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIiwiZHJpdmVyS2V5Iiwibm90ZXNVcmwiLCJpbmZvRGljdCIsIm5vdGVzIiwicmV0cmlldmVEYXRhIiwiYWNjZXB0IiwiZGVidWciLCJwYXJzZVN0b3JhZ2VYbWwiLCJkb2MiLCJzaG91bGRQYXJzZU5vdGVzIiwiZHJpdmVyTm9kZXMiLCJ4cGF0aCIsInNlbGVjdCIsImlzRW1wdHkiLCJwcm9taXNlcyIsImRyaXZlck5vZGUiLCJrZXkiLCJpbmNsdWRlcyIsImV0YWciLCJjZEluZm8iLCJ1cmwiLCJDRF9DRE4iLCJ0cmltIiwiZmlyc3QiLCJzcGxpdCIsIm5vdGVzUGF0aCIsImlzTm90ZXNQcmVzZW50IiwicmVkdWNlIiwiYWNjIiwiaW5mbyIsInB1c2giLCJCIiwiYWxsIiwic2l6ZSIsInJldHJpZXZlTWFwcGluZyIsInhtbCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImNsb25lRGVlcCIsInVuemlwRHJpdmVyIiwiZHN0IiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiY2hyb21lZHJpdmVyUGF0aCIsIndhbGtEaXIiLCJpdGVtUGF0aCIsImlzRGlyZWN0b3J5IiwicGF0aCIsInBhcnNlIiwibmFtZSIsIkVycm9yIiwiYmFzZW5hbWUiLCJtdiIsIm1rZGlycCIsInJpbXJhZiIsInNlbGVjdE1hdGNoaW5nRHJpdmVycyIsIm9zSW5mbyIsIm9wdHMiLCJ2ZXJzaW9ucyIsImRyaXZlcnNUb1N5bmMiLCJrZXlzIiwiZmlsdGVyIiwiY2ROYW1lIiwicGx1cmFsaXplIiwiaXNOYU4iLCJtaW5Ccm93c2VyVmVyc2lvbkludCIsInBhcnNlSW50IiwiY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIiwiY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIiwidW5pcSIsIm1hcCIsImFyY2giLCJoYXJkd2FyZU5hbWUiLCJYNjQiLCJzb21lIiwiWDg2IiwiT1MiLCJtYWMiLCJNMV9BUkNIX1NVRkZJWCIsInBsYXRmb3JtUmUiLCJSZWdFeHAiLCJ0ZXN0IiwicmV0cmlldmVEcml2ZXIiLCJpbmRleCIsImFyY2hpdmVzUm9vdCIsImlzU3RyaWN0IiwiYXJjaGl2ZVBhdGgiLCJyZXNvbHZlIiwibmV0IiwiZG93bmxvYWRGaWxlIiwiaXNNZXRlcmVkIiwiZSIsIm1zZyIsIm1lc3NhZ2UiLCJlcnJvciIsImZpbGVOYW1lIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwidGFyZ2V0UGF0aCIsImNobW9kIiwic3luY0RyaXZlcnMiLCJnZXRPc0luZm8iLCJKU09OIiwic3RyaW5naWZ5Iiwic3luY2hyb25pemVkRHJpdmVycyIsImlkeCIsImVudHJpZXMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc3RvcmFnZS1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0Q2hyb21lZHJpdmVyRGlyLCBDRF9DRE4sIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLFxuICBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgRE9NUGFyc2VyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBzeXN0ZW0sIGZzLCBsb2dnZXIsIHRlbXBEaXIsIHppcCwgdXRpbCwgbmV0IH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IFRJTUVPVVRfTVMgPSAxNTAwMDtcbmNvbnN0IE1BWF9QQVJBTExFTF9ET1dOTE9BRFMgPSA1O1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50Jyk7XG5cblxuYXN5bmMgZnVuY3Rpb24gaXNDcmNPayAoc3JjLCBjaGVja3N1bSkge1xuICBjb25zdCBtZDUgPSBhd2FpdCBmcy5oYXNoKHNyYywgJ21kNScpO1xuICByZXR1cm4gXy50b0xvd2VyKG1kNSkgPT09IF8udG9Mb3dlcihjaGVja3N1bSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZE5vZGUgKHBhcmVudCwgY2hpbGROYW1lID0gbnVsbCwgdGV4dCA9IG51bGwpIHtcbiAgaWYgKCFjaGlsZE5hbWUgJiYgIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIXBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAobGV0IGNoaWxkTm9kZUlkeCA9IDA7IGNoaWxkTm9kZUlkeCA8IHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aDsgY2hpbGROb2RlSWR4KyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBwYXJlbnQuY2hpbGROb2Rlc1tjaGlsZE5vZGVJZHhdO1xuICAgIGlmIChjaGlsZE5hbWUgJiYgIXRleHQgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lKSB7XG4gICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgIH1cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3QgY2hpbGRUZXh0ID0gZXh0cmFjdE5vZGVUZXh0KGNoaWxkTm9kZSk7XG4gICAgICBpZiAoIWNoaWxkVGV4dCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZE5hbWUgJiYgY2hpbGROYW1lID09PSBjaGlsZE5vZGUubG9jYWxOYW1lICYmIHRleHQgPT09IGNoaWxkVGV4dCkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGlsZE5hbWUgJiYgdGV4dCA9PT0gY2hpbGRUZXh0KSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Tm9kZVRleHQgKG5vZGUpIHtcbiAgcmV0dXJuICghbm9kZSB8fCAhbm9kZS5maXJzdENoaWxkIHx8ICF1dGlsLmhhc1ZhbHVlKG5vZGUuZmlyc3RDaGlsZC5ub2RlVmFsdWUpKVxuICAgID8gbnVsbFxuICAgIDogbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZTtcbn1cblxuXG5jbGFzcyBDaHJvbWVkcml2ZXJTdG9yYWdlQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNocm9tZWRyaXZlckRpciA9IGdldENocm9tZWRyaXZlckRpcigpLFxuICAgICAgdGltZW91dCA9IFRJTUVPVVRfTVMsXG4gICAgfSA9IGFyZ3M7XG4gICAgdGhpcy5jaHJvbWVkcml2ZXJEaXIgPSBjaHJvbWVkcml2ZXJEaXI7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLm1hcHBpbmcgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IHZlcnNpb24gLSBDaHJvbWVkcml2ZXIgdmVyc2lvblxuICAgKiBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWluaW11bSBicm93c2VyIHZlcnNpb25cbiAgICogc3VwcG9ydGVkIGJ5IGNocm9tZWRyaXZlciBvciBgbnVsbGAgaWYgaXQgY2Fubm90IGJlIGZvdW5kXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGFkZGl0aW9uYWwgY2hyb21lZHJpdmVyIGRldGFpbHMgZnJvbSBjaHJvbWVkcml2ZXJcbiAgICogcmVsZWFzZSBub3Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIFJlbGVhc2Ugbm90ZXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2hyb21lZHJpdmVyXG4gICAqIEByZXR1cm5zIHtBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc31cbiAgICovXG4gIHBhcnNlTm90ZXMgKGNvbnRlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSAvXlxccypbLV0rQ2hyb21lRHJpdmVyW1xcRF0rKFtcXGQuXSspL2ltLmV4ZWMoY29udGVudCk7XG4gICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0LnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV07XG4gICAgfVxuICAgIGNvbnN0IG1pbkJyb3dzZXJWZXJzaW9uTWF0Y2ggPSAvXlxccypTdXBwb3J0cyBDaHJvbWVbXFxEXSsoXFxkKykvaW0uZXhlYyhjb250ZW50KTtcbiAgICBpZiAobWluQnJvd3NlclZlcnNpb25NYXRjaCkge1xuICAgICAgcmVzdWx0Lm1pbkJyb3dzZXJWZXJzaW9uID0gbWluQnJvd3NlclZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZHMgY2hyb21lZHJpdmVyIHJlbGVhc2Ugbm90ZXMgYW5kIHB1dHMgdGhlbVxuICAgKiBpbnRvIHRoZSBkaWN0aW9uYXJ5IGFyZ3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJLZXkgLSBEcml2ZXIgdmVyc2lvbiBwbHVzIGFyY2hpdmUgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbm90ZXNVcmwgLSBUaGUgVVJMIG9mIGNocm9tZWRyaXZlciBub3Rlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gaW5mb0RpY3QgLSBUaGUgZGljdGlvbmFyeSBjb250YWluaW5nIGRyaXZlciBpbmZvLlxuICAgKiBUaGUgbWV0aG9kIGNhbGwgbXV0YXRlcyBieSBtZXJnaW5nIGBBZGRpdGlvbmFsRHJpdmVyRGV0YWlsc2BcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSByZWxlYXNlIG5vdGVzIGNhbm5vdCBiZSBkb3dubG9hZGVkXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvIChkcml2ZXJLZXksIG5vdGVzVXJsLCBpbmZvRGljdCkge1xuICAgIGNvbnN0IG5vdGVzID0gYXdhaXQgcmV0cmlldmVEYXRhKG5vdGVzVXJsLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnKi8qJyxcbiAgICB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KTtcbiAgICBjb25zdCB7IG1pbkJyb3dzZXJWZXJzaW9uIH0gPSB0aGlzLnBhcnNlTm90ZXMobm90ZXMpO1xuICAgIGlmICghbWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlIGRyaXZlciAnJHtkcml2ZXJLZXl9JyBkb2VzIG5vdCBjb250YWluIHZhbGlkIHJlbGVhc2Ugbm90ZXMgYXQgJHtub3Rlc1VybH0uIGAgK1xuICAgICAgICBgU2tpcHBpbmcgaXRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5mb0RpY3QubWluQnJvd3NlclZlcnNpb24gPSBtaW5Ccm93c2VyVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MIGFuZCBzdG9yZXNcbiAgICogdGhlIHBhcnNlZCByZXN1bHRzIGludG8gYHRoaXMubWFwcGluZ2BcbiAgICpcbiAgICogQHBhcmFtIHtET01Eb2N1bWVudH0gZG9jIC0gVGhlIERPTSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgY2hyb21lZHJpdmVyIHN0b3JhZ2UgWE1MXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBJZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBkcml2ZXJzIGluZm9ybWF0aW9uIGlzIGdvaW5nIHRvIGJlIHBhcnNlZFxuICAgKiBhbmQgYXNzaWduZWQgdG8gYHRoaXMubWFwcGluZ2BcbiAgICovXG4gIGFzeW5jIHBhcnNlU3RvcmFnZVhtbCAoZG9jLCBzaG91bGRQYXJzZU5vdGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRyaXZlck5vZGVzID0geHBhdGguc2VsZWN0KGAvLypbbG9jYWwtbmFtZSguKT0nQ29udGVudHMnXWAsIGRvYyk7XG4gICAgbG9nLmRlYnVnKGBQYXJzZWQgJHtkcml2ZXJOb2Rlcy5sZW5ndGh9IGVudHJpZXMgZnJvbSBzdG9yYWdlIFhNTGApO1xuICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyTm9kZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGRyaXZlck5vZGUgb2YgZHJpdmVyTm9kZXMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdLZXknKSk7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoa2V5LCAnL2Nocm9tZWRyaXZlcl8nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXRhZyA9IGV4dHJhY3ROb2RlVGV4dChmaW5kQ2hpbGROb2RlKGRyaXZlck5vZGUsICdFVGFnJykpO1xuICAgICAgaWYgKCFldGFnKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIGVudHJ5ICcke2tleX0nIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNoZWNrc3VtLiBTa2lwcGluZyBpdGApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2RJbmZvID0ge1xuICAgICAgICB1cmw6IGAke0NEX0NETn0vJHtrZXl9YCxcbiAgICAgICAgZXRhZzogXy50cmltKGV0YWcsICdcIicpLFxuICAgICAgICB2ZXJzaW9uOiBfLmZpcnN0KGtleS5zcGxpdCgnLycpKSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1hcHBpbmdba2V5XSA9IGNkSW5mbztcblxuICAgICAgY29uc3Qgbm90ZXNQYXRoID0gYCR7Y2RJbmZvLnZlcnNpb259L25vdGVzLnR4dGA7XG4gICAgICBjb25zdCBpc05vdGVzUHJlc2VudCA9ICEhZHJpdmVyTm9kZXNcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBub2RlKSA9PiBhY2MgfHwgZmluZENoaWxkTm9kZShub2RlLCAnS2V5Jywgbm90ZXNQYXRoKSwgZmFsc2UpO1xuICAgICAgaWYgKCFpc05vdGVzUHJlc2VudCkge1xuICAgICAgICBjZEluZm8ubWluQnJvd3NlclZlcnNpb24gPSBudWxsO1xuICAgICAgICBpZiAoc2hvdWxkUGFyc2VOb3Rlcykge1xuICAgICAgICAgIGxvZy5pbmZvKGBUaGUgZW50cnkgJyR7a2V5fScgZG9lcyBub3QgY29udGFpbiBhbnkgbm90ZXMuIFNraXBwaW5nIGl0YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRQYXJzZU5vdGVzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMucmV0cmlldmVBZGRpdGlvbmFsRHJpdmVySW5mbyhrZXksIGAke0NEX0NETn0vJHtub3Rlc1BhdGh9YCwgY2RJbmZvKSk7XG4gICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICBsb2cuaW5mbyhgVGhlIHRvdGFsIGNvdW50IG9mIGVudHJpZXMgaW4gdGhlIG1hcHBpbmc6ICR7Xy5zaXplKHRoaXMubWFwcGluZyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gRHJpdmVyRGV0YWlsc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIC0gVGhlIGZ1bGwgdXJsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRyaXZlciBpblxuICAgKiB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGV0YWcgLSBUaGUgQ1JDIG9mIHRoZSBkcml2ZXIgYXJjaGl2ZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbiAtIENocm9tZWRyaXZlciB2ZXJzaW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBDaHJvbWVkcml2ZXJzTWFwcGluZ1xuICAgKiBAcHJvcGVydHkge0RyaXZlckRldGFpbHN9IC0gVGhlIGtleXMgYXJlIHVuaXF1ZSBkcml2ZXIgaWRlbnRpZmllcnNcbiAgICogKHZlcnNpb24vYXJjaGl2ZSBuYW1lKS4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGhhdmUgYERyaXZlckRldGFpbHNgXG4gICAqIGNvbnRhaW5pbmcgY2hyb21lZHJpdmVyIGRldGFpbHNcbiAgICovXG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBjaHJvbWVkcml2ZXIgbWFwcGluZyBmcm9tIHRoZSBzdG9yYWdlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkUGFyc2VOb3RlcyBbdHJ1ZV0gLSBpZiBzZXQgdG8gYHRydWVgXG4gICAqIHRoZW4gYWRkaXRpb25hbCBjaHJvbWVkcml2ZXJzIGluZm8gaXMgZ29pbmcgdG8gYmUgcmV0cmlldmVkIGFuZFxuICAgKiBwYXJzZWQgZnJvbSByZWxlYXNlIG5vdGVzXG4gICAqIEByZXR1cm5zIHtDaHJvbWVkcml2ZXJzTWFwcGluZ31cbiAgICovXG4gIGFzeW5jIHJldHJpZXZlTWFwcGluZyAoc2hvdWxkUGFyc2VOb3RlcyA9IHRydWUpIHtcbiAgICBjb25zdCB4bWwgPSBhd2FpdCByZXRyaWV2ZURhdGEoQ0RfQ0ROLCB7XG4gICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgYWNjZXB0OiAnYXBwbGljYXRpb24veG1sLCAqLyonLFxuICAgIH0sIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pO1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sKTtcbiAgICBhd2FpdCB0aGlzLnBhcnNlU3RvcmFnZVhtbChkb2MsIHNob3VsZFBhcnNlTm90ZXMpO1xuICAgIHJldHVybiBfLmNsb25lRGVlcCh0aGlzLm1hcHBpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGRvd25sb2FkZWQgY2hyb21lZHJpdmVyIGFyY2hpdmVcbiAgICogaW50byB0aGUgZ2l2ZW4gZGVzdGluYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyAtIFRoZSBzb3VyY2UgYXJjaGl2ZSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkc3QgLSBUaGUgZGVzdGluYXRpb24gY2hyb21lZHJpdmVyIHBhdGhcbiAgICovXG4gIGFzeW5jIHVuemlwRHJpdmVyIChzcmMsIGRzdCkge1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyhzcmMsIHRtcFJvb3QpO1xuICAgICAgY29uc3QgY2hyb21lZHJpdmVyUGF0aCA9IGF3YWl0IGZzLndhbGtEaXIodG1wUm9vdCwgdHJ1ZSwgKGl0ZW1QYXRoLCBpc0RpcmVjdG9yeSkgPT5cbiAgICAgICAgIWlzRGlyZWN0b3J5ICYmIF8udG9Mb3dlcihwYXRoLnBhcnNlKGl0ZW1QYXRoKS5uYW1lKSA9PT0gJ2Nocm9tZWRyaXZlcicpO1xuICAgICAgaWYgKCFjaHJvbWVkcml2ZXJQYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFyY2hpdmUgd2FzIHVuemlwcGVkIHByb3Blcmx5LCBidXQgd2UgY291bGQgbm90IGZpbmQgYW55IGNocm9tZWRyaXZlciBleGVjdXRhYmxlJyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYE1vdmluZyB0aGUgZXh0cmFjdGVkICcke3BhdGguYmFzZW5hbWUoY2hyb21lZHJpdmVyUGF0aCl9JyB0byAnJHtkc3R9J2ApO1xuICAgICAgYXdhaXQgZnMubXYoY2hyb21lZHJpdmVyUGF0aCwgZHN0LCB7XG4gICAgICAgIG1rZGlycDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gT1NJbmZvXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGhvc3QgT1NcbiAgICogQ2FuIGJlIGVpdGhlciBgbWFjYCwgYHdpbmRvd3NgIG9yIGBsaW51eGBcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFyY2ggLSBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBob3N0IE9ELlxuICAgKiBDYW4gYmUgZWl0aGVyIGAzMmAgb3IgYDY0YFxuICAgKiBAcHJvcGVydHkgez9zdHJpbmd9IGhhcmR3YXJlTmFtZSAtIFRoZSBvdXRwdXQgb2YgYHVuYW1lIC1tYCBjb21tYW5kXG4gICAqIG9uIGxpbnV4IGFuZCBtYWMgc3lzdGVtcy4gYG51bGxgIG9uIFdpbmRvd3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYHRoaXMubWFwcGluZ2AgdG8gb25seSBzZWxlY3QgbWF0Y2hpbmdcbiAgICogY2hyb21lZHJpdmVyIGVudHJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBpbmZvcm1hdGlvblxuICAgKiBhbmQvb3IgYWRkaXRpb25hbCBzeW5jaHJvbml6YXRpb24gb3B0aW9ucyAoaWYgcHJvdmlkZWQpXG4gICAqXG4gICAqIEBwYXJhbSB7P09TSW5mb30gb3NJbmZvXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEByZXR1cm5zIHtBcnJheTxTdHJpbmc+fSBUaGUgbGlzdCBvZiBmaWx0ZXJlZCBjaHJvbWVkcml2ZXJcbiAgICogZW50cnkgbmFtZXMgKHZlcnNpb24vYXJjaGl2ZSBuYW1lKVxuICAgKi9cbiAgc2VsZWN0TWF0Y2hpbmdEcml2ZXJzIChvc0luZm8sIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG1pbkJyb3dzZXJWZXJzaW9uLFxuICAgICAgdmVyc2lvbnMgPSBbXSxcbiAgICB9ID0gb3B0cztcbiAgICBsZXQgZHJpdmVyc1RvU3luYyA9IF8ua2V5cyh0aGlzLm1hcHBpbmcpO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkodmVyc2lvbnMpKSB7XG4gICAgICAvLyBIYW5kbGUgb25seSBzZWxlY3RlZCB2ZXJzaW9ucyBpZiByZXF1ZXN0ZWRcbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgdmVyc2lvbnMgbWF0Y2ggdG8gJHt2ZXJzaW9uc31gKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jXG4gICAgICAgIC5maWx0ZXIoKGNkTmFtZSkgPT4gdmVyc2lvbnMuaW5jbHVkZXMoYCR7dGhpcy5tYXBwaW5nW2NkTmFtZV0udmVyc2lvbn1gKSk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTmFOKG1pbkJyb3dzZXJWZXJzaW9uKSkge1xuICAgICAgLy8gT25seSBzZWxlY3QgZHJpdmVycyB0aGF0IHN1cHBvcnQgdGhlIGN1cnJlbnQgYnJvd3NlciB3aG9zZSBtYWpvciB2ZXJzaW9uIG51bWJlciBlcXVhbHMgdG8gYG1pbkJyb3dzZXJWZXJzaW9uYFxuICAgICAgY29uc3QgbWluQnJvd3NlclZlcnNpb25JbnQgPSBwYXJzZUludChtaW5Ccm93c2VyVmVyc2lvbiwgMTApO1xuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSBtaW5pbXVtIHN1cHBvcnRlZCBicm93c2VyIHZlcnNpb24gbWF0Y2hlcyB0byAke21pbkJyb3dzZXJWZXJzaW9uSW50fWApO1xuICAgICAgbGV0IGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA9IDA7XG4gICAgICAvLyBTZWxlY3QgdGhlIG5ld2VzdCBhdmFpbGFibGUgYW5kIGNvbXBhdGlibGUgY2hyb21lZHJpdmVyXG4gICAgICBmb3IgKGNvbnN0IGNkTmFtZSBvZiBkcml2ZXJzVG9TeW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbiA9IHBhcnNlSW50KHRoaXMubWFwcGluZ1tjZE5hbWVdLm1pbkJyb3dzZXJWZXJzaW9uLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4oY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uKVxuICAgICAgICAgICAgJiYgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uIDw9IG1pbkJyb3dzZXJWZXJzaW9uSW50XG4gICAgICAgICAgICAmJiBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPCBjdXJyZW50TWluQnJvd3NlclZlcnNpb24pIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPSBjdXJyZW50TWluQnJvd3NlclZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBgJHt0aGlzLm1hcHBpbmdbY2ROYW1lXS5taW5Ccm93c2VyVmVyc2lvbn1gID09PVxuICAgICAgICBgJHtjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgPiAwID8gY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyIDogbWluQnJvd3NlclZlcnNpb25JbnR9YCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgV2lsbCBzZWxlY3QgY2FuZGlkYXRlICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoKX0gYCArXG4gICAgICAgIGB2ZXJzaW9uZWQgYXMgJyR7Xy51bmlxKGRyaXZlcnNUb1N5bmMubWFwKChjZE5hbWUpID0+IHRoaXMubWFwcGluZ1tjZE5hbWVdLnZlcnNpb24pKX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkob3NJbmZvKSkge1xuICAgICAgLy8gRmlsdGVyIG91dCBkcml2ZXJzIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW0gYXJjaGl0ZWN0dXJlc1xuICAgICAgbGV0IHtuYW1lLCBhcmNoLCBoYXJkd2FyZU5hbWV9ID0gb3NJbmZvO1xuICAgICAgaWYgKGFyY2ggPT09IFg2NCAmJiAhZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhgXyR7bmFtZX0ke1g2NH1gKSkpIHtcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHg4NiBidWlsZCBpZiB4NjQgb25lIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBPU1xuICAgICAgICBhcmNoID0gWDg2O1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT09IE9TLm1hYyAmJiBfLmluY2x1ZGVzKGhhcmR3YXJlTmFtZSwgJ2FybScpXG4gICAgICAgICAgJiYgZHJpdmVyc1RvU3luYy5zb21lKChjZE5hbWUpID0+IGNkTmFtZS5pbmNsdWRlcyhNMV9BUkNIX1NVRkZJWCkpKSB7XG4gICAgICAgIC8vIHByZWZlciBleGVjdXRhYmxlIGZvciBNMSBhcmNoIGlmIHByZXNlbnRcbiAgICAgICAgYXJjaCArPSBNMV9BUkNIX1NVRkZJWDtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgU2VsZWN0aW5nIGNocm9tZWRyaXZlcnMgd2hvc2UgcGxhdGZvcm0gbWF0Y2hlcyB0byAke25hbWV9JHthcmNofWApO1xuICAgICAgY29uc3QgcGxhdGZvcm1SZSA9IG5ldyBSZWdFeHAoYChcXFxcYnxfKSR7bmFtZX0ke2FyY2h9XFxcXGJgKTtcbiAgICAgIGRyaXZlcnNUb1N5bmMgPSBkcml2ZXJzVG9TeW5jLmZpbHRlcigoY2ROYW1lKSA9PiBwbGF0Zm9ybVJlLnRlc3QoY2ROYW1lKSk7XG4gICAgICBsb2cuZGVidWcoYEdvdCAke3V0aWwucGx1cmFsaXplKCdpdGVtJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBkcml2ZXJzVG9TeW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ2l2ZW4gY2hyb21lZHJpdmVyIGZyb20gdGhlIHN0b3JhZ2VcbiAgICogYW5kIHVucGFja3MgaXQgaW50byBgdGhpcy5jaHJvbWVkcml2ZXJEaXJgIGZvbGRlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgdW5pcXVlIGRyaXZlciBpbmRleFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHJpdmVyS2V5IC0gVGhlIGRyaXZlciBrZXkgaW4gYHRoaXMubWFwcGluZ2BcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyY2hpdmVzUm9vdCAtIFRoZSB0ZW1wb3JhcnkgZm9sZGVyIHBhdGggdG8gZXh0cmFjdFxuICAgKiBkb3dubG9hZGVkIGFyY2hpdmVzIHRvXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdHJpY3QgW3RydWVdIC0gV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciAoYHRydWVgKVxuICAgKiBvciByZXR1cm4gYSBib29sZWFuIHJlc3VsdCBpZiB0aGUgZHJpdmVyIHJldHJpZXZhbCBwcm9jZXNzIGZhaWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHJldHJpZXZpbmcgdGhlIGRyaXZlclxuICAgKiBhbmQgYGlzU3RyaWN0YCBpcyBzZXQgdG8gYHRydWVgXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBgdHJ1ZWAgdGhlbiB0aGUgY2hyb21lZHJpdmVyIGlzIHN1Y2Nlc3NmdWxseVxuICAgKiBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWQuXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZURyaXZlciAoaW5kZXgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCBpc1N0cmljdCA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyB1cmwsIGV0YWcsIHZlcnNpb24gfSA9IHRoaXMubWFwcGluZ1tkcml2ZXJLZXldO1xuICAgIGNvbnN0IGFyY2hpdmVQYXRoID0gcGF0aC5yZXNvbHZlKGFyY2hpdmVzUm9vdCwgYCR7aW5kZXh9LnppcGApO1xuICAgIGxvZy5kZWJ1ZyhgUmV0cmlldmluZyAnJHt1cmx9JyB0byAnJHthcmNoaXZlUGF0aH0nYCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldC5kb3dubG9hZEZpbGUodXJsLCBhcmNoaXZlUGF0aCwge1xuICAgICAgICBpc01ldGVyZWQ6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiBUSU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBtc2cgPSBgQ2Fubm90IGRvd25sb2FkIGNocm9tZWRyaXZlciBhcmNoaXZlLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YDtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWF3YWl0IGlzQ3JjT2soYXJjaGl2ZVBhdGgsIGV0YWcpKSB7XG4gICAgICBjb25zdCBtc2cgPSBgVGhlIGNoZWNrc3VtIGZvciB0aGUgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXIgJyR7ZHJpdmVyS2V5fScgZGlkIG5vdCBtYXRjaGA7XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHtwYXRoLnBhcnNlKHVybCkubmFtZX1fdiR7dmVyc2lvbn1gICtcbiAgICAgIChzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJyk7XG4gICAgY29uc3QgdGFyZ2V0UGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmNocm9tZWRyaXZlckRpciwgZmlsZU5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVuemlwRHJpdmVyKGFyY2hpdmVQYXRoLCB0YXJnZXRQYXRoKTtcbiAgICAgIGF3YWl0IGZzLmNobW9kKHRhcmdldFBhdGgsIDBvNzU1KTtcbiAgICAgIGxvZy5kZWJ1ZyhgUGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgJyR7dGFyZ2V0UGF0aH0nIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIDc1NWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IFN5bmNPcHRpb25zXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8U3RyaW5nPn0gdmVyc2lvbnMgLSBUaGUgbGlzdCBvZiBjaHJvbWVkcml2ZXJcbiAgICogdmVyc2lvbnMgdG8gc3luYy4gSWYgZW1wdHkgKHRoZSBkZWZhdWx0IHZhbHVlKSB0aGVuIGFsbCBhdmFpbGFibGVcbiAgICogY2hyb21lZHJpdmVycyBhcmUgZ29pbmcgdG8gYmUgZG93bmxvYWRlZCBhbmQgZXh0cmFjdGVkXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bWJlcn0gbWluQnJvd3NlclZlcnNpb24gLSBUaGUgbWludW11bSBzdXBwb3J0ZWRcbiAgICogQ2hyb21lIHZlcnNpb24gdGhhdCBkb3dubG9hZGVkIGNocm9tZWRyaXZlcnMgc2hvdWxkIHN1cHBvcnQuIENhbiBtYXRjaFxuICAgKiBtdWx0aXBsZSBkcml2ZXJzLlxuICAgKiBAcHJvcGVydHkgez9PU0luZm99IG9zSW5mbyAtIFN5c3RlbSBpbmZvcm1hdGlvbiB1c2VkIHRvIGZpbHRlciBvdXRcbiAgICogdGhlIGxpc3Qgb2YgdGhlIHJldHJpZXZlZCBkcml2ZXJzLiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgc2NyaXB0XG4gICAqIHdpbGwgdHJ5IHRvIHJldHJpZXZlIGl0LlxuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlldmVzIGNocm9tZWRyaXZlcnMgZnJvbSB0aGUgcmVtb3RlIHN0b3JhZ2VcbiAgICogdG8gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7P1N5bmNPcHRpb25zfSBvcHRzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIHJldHJpZXZpbmdcbiAgICogdGhlIGRyaXZlcnNcbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZ30gVGhlIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5IHN5bmNocm9uaXplZCBkcml2ZXIga2V5c1xuICAgKi9cbiAgYXN5bmMgc3luY0RyaXZlcnMgKG9wdHMgPSB7fSkge1xuICAgIGlmIChfLmlzRW1wdHkodGhpcy5tYXBwaW5nKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZXRyaWV2ZU1hcHBpbmcoISFvcHRzLm1pbkJyb3dzZXJWZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLm1hcHBpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBjaHJvbWVkcml2ZXJzIG1hcHBpbmcgZnJvbSBHb29nbGUgc3RvcmFnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGRyaXZlcnNUb1N5bmMgPSB0aGlzLnNlbGVjdE1hdGNoaW5nRHJpdmVycyhvcHRzLm9zSW5mbyA/PyBhd2FpdCBnZXRPc0luZm8oKSwgb3B0cyk7XG4gICAgaWYgKF8uaXNFbXB0eShkcml2ZXJzVG9TeW5jKSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGVyZSBhcmUgbm8gZHJpdmVycyB0byBzeW5jLiBFeGl0aW5nYCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2RyaXZlcicsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX0gdG8gc3luYzogYCArXG4gICAgICBKU09OLnN0cmluZ2lmeShkcml2ZXJzVG9TeW5jLCBudWxsLCAyKSk7XG5cbiAgICBjb25zdCBzeW5jaHJvbml6ZWREcml2ZXJzID0gW107XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdCBhcmNoaXZlc1Jvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBbaWR4LCBkcml2ZXJLZXldIG9mIGRyaXZlcnNUb1N5bmMuZW50cmllcygpKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5yZXRyaWV2ZURyaXZlcihpZHgsIGRyaXZlcktleSwgYXJjaGl2ZXNSb290LCAhXy5pc0VtcHR5KG9wdHMpKSkge1xuICAgICAgICAgICAgc3luY2hyb25pemVkRHJpdmVycy5wdXNoKGRyaXZlcktleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpKTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoICUgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9PT0gMCkge1xuICAgICAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZXNSb290KTtcbiAgICB9XG4gICAgaWYgKCFfLmlzRW1wdHkoc3luY2hyb25pemVkRHJpdmVycykpIHtcbiAgICAgIGxvZy5pbmZvKGBTdWNjZXNzZnVsbHkgc3luY2hyb25pemVkIGAgK1xuICAgICAgICBgJHt1dGlsLnBsdXJhbGl6ZSgnY2hyb21lZHJpdmVyJywgc3luY2hyb25pemVkRHJpdmVycy5sZW5ndGgsIHRydWUpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuaW5mbyhgTm8gY2hyb21lZHJpdmVycyB3ZXJlIHN5bmNocm9uaXplZGApO1xuICAgIH1cbiAgICByZXR1cm4gc3luY2hyb25pemVkRHJpdmVycztcbiAgfVxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHLEtBQW5CO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBL0I7O0FBRUEsTUFBTUMsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsMkJBQWpCLENBQVo7O0FBR0EsZUFBZUMsT0FBZixDQUF3QkMsR0FBeEIsRUFBNkJDLFFBQTdCLEVBQXVDO0VBQ3JDLE1BQU1DLEdBQUcsR0FBRyxNQUFNQyxXQUFBLENBQUdDLElBQUgsQ0FBUUosR0FBUixFQUFhLEtBQWIsQ0FBbEI7RUFDQSxPQUFPSyxlQUFBLENBQUVDLE9BQUYsQ0FBVUosR0FBVixNQUFtQkcsZUFBQSxDQUFFQyxPQUFGLENBQVVMLFFBQVYsQ0FBMUI7QUFDRDs7QUFFRCxTQUFTTSxhQUFULENBQXdCQyxNQUF4QixFQUFnQ0MsU0FBUyxHQUFHLElBQTVDLEVBQWtEQyxJQUFJLEdBQUcsSUFBekQsRUFBK0Q7RUFDN0QsSUFBSSxDQUFDRCxTQUFELElBQWMsQ0FBQ0MsSUFBbkIsRUFBeUI7SUFDdkIsT0FBTyxJQUFQO0VBQ0Q7O0VBQ0QsSUFBSSxDQUFDRixNQUFNLENBQUNHLGFBQVAsRUFBTCxFQUE2QjtJQUMzQixPQUFPLElBQVA7RUFDRDs7RUFFRCxLQUFLLElBQUlDLFlBQVksR0FBRyxDQUF4QixFQUEyQkEsWUFBWSxHQUFHSixNQUFNLENBQUNLLFVBQVAsQ0FBa0JDLE1BQTVELEVBQW9FRixZQUFZLEVBQWhGLEVBQW9GO0lBQ2xGLE1BQU1HLFNBQVMsR0FBR1AsTUFBTSxDQUFDSyxVQUFQLENBQWtCRCxZQUFsQixDQUFsQjs7SUFDQSxJQUFJSCxTQUFTLElBQUksQ0FBQ0MsSUFBZCxJQUFzQkQsU0FBUyxLQUFLTSxTQUFTLENBQUNDLFNBQWxELEVBQTZEO01BQzNELE9BQU9ELFNBQVA7SUFDRDs7SUFDRCxJQUFJTCxJQUFKLEVBQVU7TUFDUixNQUFNTyxTQUFTLEdBQUdDLGVBQWUsQ0FBQ0gsU0FBRCxDQUFqQzs7TUFDQSxJQUFJLENBQUNFLFNBQUwsRUFBZ0I7UUFDZDtNQUNEOztNQUNELElBQUlSLFNBQVMsSUFBSUEsU0FBUyxLQUFLTSxTQUFTLENBQUNDLFNBQXJDLElBQWtETixJQUFJLEtBQUtPLFNBQS9ELEVBQTBFO1FBQ3hFLE9BQU9GLFNBQVA7TUFDRDs7TUFDRCxJQUFJLENBQUNOLFNBQUQsSUFBY0MsSUFBSSxLQUFLTyxTQUEzQixFQUFzQztRQUNwQyxPQUFPRixTQUFQO01BQ0Q7SUFDRjtFQUNGOztFQUNELE9BQU8sSUFBUDtBQUNEOztBQUVELFNBQVNHLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDO0VBQzlCLE9BQVEsQ0FBQ0EsSUFBRCxJQUFTLENBQUNBLElBQUksQ0FBQ0MsVUFBZixJQUE2QixDQUFDQyxhQUFBLENBQUtDLFFBQUwsQ0FBY0gsSUFBSSxDQUFDQyxVQUFMLENBQWdCRyxTQUE5QixDQUEvQixHQUNILElBREcsR0FFSEosSUFBSSxDQUFDQyxVQUFMLENBQWdCRyxTQUZwQjtBQUdEOztBQUdELE1BQU1DLHlCQUFOLENBQWdDO0VBQzlCQyxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVBQWE7SUFDdEIsTUFBTTtNQUNKQyxlQUFlLEdBQUcsSUFBQUMseUJBQUEsR0FEZDtNQUVKQyxPQUFPLEdBQUduQztJQUZOLElBR0ZnQyxJQUhKO0lBSUEsS0FBS0MsZUFBTCxHQUF1QkEsZUFBdkI7SUFDQSxLQUFLRSxPQUFMLEdBQWVBLE9BQWY7SUFDQSxLQUFLQyxPQUFMLEdBQWUsRUFBZjtFQUNEOztFQWlCREMsVUFBVSxDQUFFQyxPQUFGLEVBQVc7SUFDbkIsTUFBTUMsTUFBTSxHQUFHLEVBQWY7SUFDQSxNQUFNQyxZQUFZLEdBQUcsc0NBQXNDQyxJQUF0QyxDQUEyQ0gsT0FBM0MsQ0FBckI7O0lBQ0EsSUFBSUUsWUFBSixFQUFrQjtNQUNoQkQsTUFBTSxDQUFDRyxPQUFQLEdBQWlCRixZQUFZLENBQUMsQ0FBRCxDQUE3QjtJQUNEOztJQUNELE1BQU1HLHNCQUFzQixHQUFHLGtDQUFrQ0YsSUFBbEMsQ0FBdUNILE9BQXZDLENBQS9COztJQUNBLElBQUlLLHNCQUFKLEVBQTRCO01BQzFCSixNQUFNLENBQUNLLGlCQUFQLEdBQTJCRCxzQkFBc0IsQ0FBQyxDQUFELENBQWpEO0lBQ0Q7O0lBQ0QsT0FBT0osTUFBUDtFQUNEOztFQVlpQyxNQUE1Qk0sNEJBQTRCLENBQUVDLFNBQUYsRUFBYUMsUUFBYixFQUF1QkMsUUFBdkIsRUFBaUM7SUFDakUsTUFBTUMsS0FBSyxHQUFHLE1BQU0sSUFBQUMsbUJBQUEsRUFBYUgsUUFBYixFQUF1QjtNQUN6QyxjQUFjLFFBRDJCO01BRXpDSSxNQUFNLEVBQUU7SUFGaUMsQ0FBdkIsRUFHakI7TUFBRWhCLE9BQU8sRUFBRSxLQUFLQTtJQUFoQixDQUhpQixDQUFwQjtJQUlBLE1BQU07TUFBRVM7SUFBRixJQUF3QixLQUFLUCxVQUFMLENBQWdCWSxLQUFoQixDQUE5Qjs7SUFDQSxJQUFJLENBQUNMLGlCQUFMLEVBQXdCO01BQ3RCMUMsR0FBRyxDQUFDa0QsS0FBSixDQUFXLGVBQWNOLFNBQVUsNkNBQTRDQyxRQUFTLElBQTlFLEdBQ1AsYUFESDtNQUVBO0lBQ0Q7O0lBQ0RDLFFBQVEsQ0FBQ0osaUJBQVQsR0FBNkJBLGlCQUE3QjtFQUNEOztFQVlvQixNQUFmUyxlQUFlLENBQUVDLEdBQUYsRUFBT0MsZ0JBQWdCLEdBQUcsSUFBMUIsRUFBZ0M7SUFDbkQsTUFBTUMsV0FBVyxHQUFHQyxjQUFBLENBQU1DLE1BQU4sQ0FBYywrQkFBZCxFQUE4Q0osR0FBOUMsQ0FBcEI7O0lBQ0FwRCxHQUFHLENBQUNrRCxLQUFKLENBQVcsVUFBU0ksV0FBVyxDQUFDcEMsTUFBTywyQkFBdkM7O0lBQ0EsSUFBSVQsZUFBQSxDQUFFZ0QsT0FBRixDQUFVSCxXQUFWLENBQUosRUFBNEI7TUFDMUI7SUFDRDs7SUFFRCxNQUFNSSxRQUFRLEdBQUcsRUFBakI7O0lBQ0EsS0FBSyxNQUFNQyxVQUFYLElBQXlCTCxXQUF6QixFQUFzQztNQUNwQyxNQUFNTSxHQUFHLEdBQUd0QyxlQUFlLENBQUNYLGFBQWEsQ0FBQ2dELFVBQUQsRUFBYSxLQUFiLENBQWQsQ0FBM0I7O01BQ0EsSUFBSSxDQUFDbEQsZUFBQSxDQUFFb0QsUUFBRixDQUFXRCxHQUFYLEVBQWdCLGdCQUFoQixDQUFMLEVBQXdDO1FBQ3RDO01BQ0Q7O01BRUQsTUFBTUUsSUFBSSxHQUFHeEMsZUFBZSxDQUFDWCxhQUFhLENBQUNnRCxVQUFELEVBQWEsTUFBYixDQUFkLENBQTVCOztNQUNBLElBQUksQ0FBQ0csSUFBTCxFQUFXO1FBQ1Q5RCxHQUFHLENBQUNrRCxLQUFKLENBQVcsY0FBYVUsR0FBSSw4Q0FBNUI7UUFDQTtNQUNEOztNQUVELE1BQU1HLE1BQU0sR0FBRztRQUNiQyxHQUFHLEVBQUcsR0FBRUMsYUFBTyxJQUFHTCxHQUFJLEVBRFQ7UUFFYkUsSUFBSSxFQUFFckQsZUFBQSxDQUFFeUQsSUFBRixDQUFPSixJQUFQLEVBQWEsR0FBYixDQUZPO1FBR2J0QixPQUFPLEVBQUUvQixlQUFBLENBQUUwRCxLQUFGLENBQVFQLEdBQUcsQ0FBQ1EsS0FBSixDQUFVLEdBQVYsQ0FBUjtNQUhJLENBQWY7TUFLQSxLQUFLbEMsT0FBTCxDQUFhMEIsR0FBYixJQUFvQkcsTUFBcEI7TUFFQSxNQUFNTSxTQUFTLEdBQUksR0FBRU4sTUFBTSxDQUFDdkIsT0FBUSxZQUFwQztNQUNBLE1BQU04QixjQUFjLEdBQUcsQ0FBQyxDQUFDaEIsV0FBVyxDQUNqQ2lCLE1BRHNCLENBQ2YsQ0FBQ0MsR0FBRCxFQUFNakQsSUFBTixLQUFlaUQsR0FBRyxJQUFJN0QsYUFBYSxDQUFDWSxJQUFELEVBQU8sS0FBUCxFQUFjOEMsU0FBZCxDQURwQixFQUM4QyxLQUQ5QyxDQUF6Qjs7TUFFQSxJQUFJLENBQUNDLGNBQUwsRUFBcUI7UUFDbkJQLE1BQU0sQ0FBQ3JCLGlCQUFQLEdBQTJCLElBQTNCOztRQUNBLElBQUlXLGdCQUFKLEVBQXNCO1VBQ3BCckQsR0FBRyxDQUFDeUUsSUFBSixDQUFVLGNBQWFiLEdBQUksMkNBQTNCO1FBQ0Q7O1FBQ0Q7TUFDRCxDQU5ELE1BTU8sSUFBSSxDQUFDUCxnQkFBTCxFQUF1QjtRQUM1QjtNQUNEOztNQUVESyxRQUFRLENBQUNnQixJQUFULENBQWMsS0FBSy9CLDRCQUFMLENBQWtDaUIsR0FBbEMsRUFBd0MsR0FBRUssYUFBTyxJQUFHSSxTQUFVLEVBQTlELEVBQWlFTixNQUFqRSxDQUFkOztNQUNBLElBQUlMLFFBQVEsQ0FBQ3hDLE1BQVQsR0FBa0JuQixzQkFBbEIsS0FBNkMsQ0FBakQsRUFBb0Q7UUFDbEQsTUFBTTRFLGlCQUFBLENBQUVDLEdBQUYsQ0FBTWxCLFFBQU4sQ0FBTjtNQUNEO0lBQ0Y7O0lBQ0QsTUFBTWlCLGlCQUFBLENBQUVDLEdBQUYsQ0FBTWxCLFFBQU4sQ0FBTjtJQUNBMUQsR0FBRyxDQUFDeUUsSUFBSixDQUFVLDhDQUE2Q2hFLGVBQUEsQ0FBRW9FLElBQUYsQ0FBTyxLQUFLM0MsT0FBWixDQUFxQixFQUE1RTtFQUNEOztFQXlCb0IsTUFBZjRDLGVBQWUsQ0FBRXpCLGdCQUFnQixHQUFHLElBQXJCLEVBQTJCO0lBQzlDLE1BQU0wQixHQUFHLEdBQUcsTUFBTSxJQUFBL0IsbUJBQUEsRUFBYWlCLGFBQWIsRUFBcUI7TUFDckMsY0FBYyxRQUR1QjtNQUVyQ2hCLE1BQU0sRUFBRTtJQUY2QixDQUFyQixFQUdmO01BQUVoQixPQUFPLEVBQUUsS0FBS0E7SUFBaEIsQ0FIZSxDQUFsQjtJQUlBLE1BQU1tQixHQUFHLEdBQUcsSUFBSTRCLGlCQUFKLEdBQWdCQyxlQUFoQixDQUFnQ0YsR0FBaEMsQ0FBWjtJQUNBLE1BQU0sS0FBSzVCLGVBQUwsQ0FBcUJDLEdBQXJCLEVBQTBCQyxnQkFBMUIsQ0FBTjtJQUNBLE9BQU81QyxlQUFBLENBQUV5RSxTQUFGLENBQVksS0FBS2hELE9BQWpCLENBQVA7RUFDRDs7RUFTZ0IsTUFBWGlELFdBQVcsQ0FBRS9FLEdBQUYsRUFBT2dGLEdBQVAsRUFBWTtJQUMzQixNQUFNQyxPQUFPLEdBQUcsTUFBTUMsZ0JBQUEsQ0FBUUMsT0FBUixFQUF0Qjs7SUFDQSxJQUFJO01BQ0YsTUFBTUMsWUFBQSxDQUFJQyxZQUFKLENBQWlCckYsR0FBakIsRUFBc0JpRixPQUF0QixDQUFOO01BQ0EsTUFBTUssZ0JBQWdCLEdBQUcsTUFBTW5GLFdBQUEsQ0FBR29GLE9BQUgsQ0FBV04sT0FBWCxFQUFvQixJQUFwQixFQUEwQixDQUFDTyxRQUFELEVBQVdDLFdBQVgsS0FDdkQsQ0FBQ0EsV0FBRCxJQUFnQnBGLGVBQUEsQ0FBRUMsT0FBRixDQUFVb0YsYUFBQSxDQUFLQyxLQUFMLENBQVdILFFBQVgsRUFBcUJJLElBQS9CLE1BQXlDLGNBRDVCLENBQS9COztNQUVBLElBQUksQ0FBQ04sZ0JBQUwsRUFBdUI7UUFDckIsTUFBTSxJQUFJTyxLQUFKLENBQVUsc0ZBQVYsQ0FBTjtNQUNEOztNQUNEakcsR0FBRyxDQUFDa0QsS0FBSixDQUFXLHlCQUF3QjRDLGFBQUEsQ0FBS0ksUUFBTCxDQUFjUixnQkFBZCxDQUFnQyxTQUFRTixHQUFJLEdBQS9FO01BQ0EsTUFBTTdFLFdBQUEsQ0FBRzRGLEVBQUgsQ0FBTVQsZ0JBQU4sRUFBd0JOLEdBQXhCLEVBQTZCO1FBQ2pDZ0IsTUFBTSxFQUFFO01BRHlCLENBQTdCLENBQU47SUFHRCxDQVhELFNBV1U7TUFDUixNQUFNN0YsV0FBQSxDQUFHOEYsTUFBSCxDQUFVaEIsT0FBVixDQUFOO0lBQ0Q7RUFDRjs7RUFzQkRpQixxQkFBcUIsQ0FBRUMsTUFBRixFQUFVQyxJQUFJLEdBQUcsRUFBakIsRUFBcUI7SUFDeEMsTUFBTTtNQUNKOUQsaUJBREk7TUFFSitELFFBQVEsR0FBRztJQUZQLElBR0ZELElBSEo7O0lBSUEsSUFBSUUsYUFBYSxHQUFHakcsZUFBQSxDQUFFa0csSUFBRixDQUFPLEtBQUt6RSxPQUFaLENBQXBCOztJQUVBLElBQUksQ0FBQ3pCLGVBQUEsQ0FBRWdELE9BQUYsQ0FBVWdELFFBQVYsQ0FBTCxFQUEwQjtNQUV4QnpHLEdBQUcsQ0FBQ2tELEtBQUosQ0FBVyxtREFBa0R1RCxRQUFTLEVBQXRFO01BQ0FDLGFBQWEsR0FBR0EsYUFBYSxDQUMxQkUsTUFEYSxDQUNMQyxNQUFELElBQVlKLFFBQVEsQ0FBQzVDLFFBQVQsQ0FBbUIsR0FBRSxLQUFLM0IsT0FBTCxDQUFhMkUsTUFBYixFQUFxQnJFLE9BQVEsRUFBbEQsQ0FETixDQUFoQjtNQUdBeEMsR0FBRyxDQUFDa0QsS0FBSixDQUFXLE9BQU16QixhQUFBLENBQUtxRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDeEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7O01BQ0EsSUFBSVQsZUFBQSxDQUFFZ0QsT0FBRixDQUFVaUQsYUFBVixDQUFKLEVBQThCO1FBQzVCLE9BQU8sRUFBUDtNQUNEO0lBQ0Y7O0lBRUQsSUFBSSxDQUFDSyxLQUFLLENBQUNyRSxpQkFBRCxDQUFWLEVBQStCO01BRTdCLE1BQU1zRSxvQkFBb0IsR0FBR0MsUUFBUSxDQUFDdkUsaUJBQUQsRUFBb0IsRUFBcEIsQ0FBckM7TUFDQTFDLEdBQUcsQ0FBQ2tELEtBQUosQ0FBVyw4RUFBNkU4RCxvQkFBcUIsRUFBN0c7TUFDQSxJQUFJRSwyQkFBMkIsR0FBRyxDQUFsQzs7TUFFQSxLQUFLLE1BQU1MLE1BQVgsSUFBcUJILGFBQXJCLEVBQW9DO1FBQ2xDLE1BQU1TLHdCQUF3QixHQUFHRixRQUFRLENBQUMsS0FBSy9FLE9BQUwsQ0FBYTJFLE1BQWIsRUFBcUJuRSxpQkFBdEIsRUFBeUMsRUFBekMsQ0FBekM7O1FBQ0EsSUFBSSxDQUFDcUUsS0FBSyxDQUFDSSx3QkFBRCxDQUFOLElBQ0dBLHdCQUF3QixJQUFJSCxvQkFEL0IsSUFFR0UsMkJBQTJCLEdBQUdDLHdCQUZyQyxFQUUrRDtVQUM3REQsMkJBQTJCLEdBQUdDLHdCQUE5QjtRQUNEO01BQ0Y7O01BQ0RULGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxNQUFkLENBQXNCQyxNQUFELElBQWEsR0FBRSxLQUFLM0UsT0FBTCxDQUFhMkUsTUFBYixFQUFxQm5FLGlCQUFrQixFQUExQyxLQUM5QyxHQUFFd0UsMkJBQTJCLEdBQUcsQ0FBOUIsR0FBa0NBLDJCQUFsQyxHQUFnRUYsb0JBQXFCLEVBRDFFLENBQWhCO01BR0FoSCxHQUFHLENBQUNrRCxLQUFKLENBQVcsT0FBTXpCLGFBQUEsQ0FBS3FGLFNBQUwsQ0FBZSxNQUFmLEVBQXVCSixhQUFhLENBQUN4RixNQUFyQyxFQUE2QyxJQUE3QyxDQUFtRCxFQUFwRTs7TUFDQSxJQUFJVCxlQUFBLENBQUVnRCxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7UUFDNUIsT0FBTyxFQUFQO01BQ0Q7O01BQ0QxRyxHQUFHLENBQUNrRCxLQUFKLENBQVcseUJBQXdCekIsYUFBQSxDQUFLcUYsU0FBTCxDQUFlLFFBQWYsRUFBeUJKLGFBQWEsQ0FBQ3hGLE1BQXZDLENBQStDLEdBQXhFLEdBQ1AsaUJBQWdCVCxlQUFBLENBQUUyRyxJQUFGLENBQU9WLGFBQWEsQ0FBQ1csR0FBZCxDQUFtQlIsTUFBRCxJQUFZLEtBQUszRSxPQUFMLENBQWEyRSxNQUFiLEVBQXFCckUsT0FBbkQsQ0FBUCxDQUFvRSxHQUR2RjtJQUVEOztJQUVELElBQUksQ0FBQy9CLGVBQUEsQ0FBRWdELE9BQUYsQ0FBVThDLE1BQVYsQ0FBTCxFQUF3QjtNQUV0QixJQUFJO1FBQUNQLElBQUQ7UUFBT3NCLElBQVA7UUFBYUM7TUFBYixJQUE2QmhCLE1BQWpDOztNQUNBLElBQUllLElBQUksS0FBS0UsVUFBVCxJQUFnQixDQUFDZCxhQUFhLENBQUNlLElBQWQsQ0FBb0JaLE1BQUQsSUFBWUEsTUFBTSxDQUFDaEQsUUFBUCxDQUFpQixJQUFHbUMsSUFBSyxHQUFFd0IsVUFBSSxFQUEvQixDQUEvQixDQUFyQixFQUF3RjtRQUV0RkYsSUFBSSxHQUFHSSxVQUFQO01BQ0Q7O01BQ0QsSUFBSTFCLElBQUksS0FBSzJCLFNBQUEsQ0FBR0MsR0FBWixJQUFtQm5ILGVBQUEsQ0FBRW9ELFFBQUYsQ0FBVzBELFlBQVgsRUFBeUIsS0FBekIsQ0FBbkIsSUFDR2IsYUFBYSxDQUFDZSxJQUFkLENBQW9CWixNQUFELElBQVlBLE1BQU0sQ0FBQ2hELFFBQVAsQ0FBZ0JnRSxxQkFBaEIsQ0FBL0IsQ0FEUCxFQUN3RTtRQUV0RVAsSUFBSSxJQUFJTyxxQkFBUjtNQUNEOztNQUNEN0gsR0FBRyxDQUFDa0QsS0FBSixDQUFXLHFEQUFvRDhDLElBQUssR0FBRXNCLElBQUssRUFBM0U7TUFDQSxNQUFNUSxVQUFVLEdBQUcsSUFBSUMsTUFBSixDQUFZLFVBQVMvQixJQUFLLEdBQUVzQixJQUFLLEtBQWpDLENBQW5CO01BQ0FaLGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxNQUFkLENBQXNCQyxNQUFELElBQVlpQixVQUFVLENBQUNFLElBQVgsQ0FBZ0JuQixNQUFoQixDQUFqQyxDQUFoQjtNQUNBN0csR0FBRyxDQUFDa0QsS0FBSixDQUFXLE9BQU16QixhQUFBLENBQUtxRixTQUFMLENBQWUsTUFBZixFQUF1QkosYUFBYSxDQUFDeEYsTUFBckMsRUFBNkMsSUFBN0MsQ0FBbUQsRUFBcEU7SUFDRDs7SUFFRCxPQUFPd0YsYUFBUDtFQUNEOztFQWlCbUIsTUFBZHVCLGNBQWMsQ0FBRUMsS0FBRixFQUFTdEYsU0FBVCxFQUFvQnVGLFlBQXBCLEVBQWtDQyxRQUFRLEdBQUcsS0FBN0MsRUFBb0Q7SUFDdEUsTUFBTTtNQUFFcEUsR0FBRjtNQUFPRixJQUFQO01BQWF0QjtJQUFiLElBQXlCLEtBQUtOLE9BQUwsQ0FBYVUsU0FBYixDQUEvQjs7SUFDQSxNQUFNeUYsV0FBVyxHQUFHdkMsYUFBQSxDQUFLd0MsT0FBTCxDQUFhSCxZQUFiLEVBQTRCLEdBQUVELEtBQU0sTUFBcEMsQ0FBcEI7O0lBQ0FsSSxHQUFHLENBQUNrRCxLQUFKLENBQVcsZUFBY2MsR0FBSSxTQUFRcUUsV0FBWSxHQUFqRDs7SUFDQSxJQUFJO01BQ0YsTUFBTUUsWUFBQSxDQUFJQyxZQUFKLENBQWlCeEUsR0FBakIsRUFBc0JxRSxXQUF0QixFQUFtQztRQUN2Q0ksU0FBUyxFQUFFLEtBRDRCO1FBRXZDeEcsT0FBTyxFQUFFbkM7TUFGOEIsQ0FBbkMsQ0FBTjtJQUlELENBTEQsQ0FLRSxPQUFPNEksQ0FBUCxFQUFVO01BQ1YsTUFBTUMsR0FBRyxHQUFJLHlEQUF3REQsQ0FBQyxDQUFDRSxPQUFRLEVBQS9FOztNQUNBLElBQUlSLFFBQUosRUFBYztRQUNaLE1BQU0sSUFBSW5DLEtBQUosQ0FBVTBDLEdBQVYsQ0FBTjtNQUNEOztNQUNEM0ksR0FBRyxDQUFDNkksS0FBSixDQUFVRixHQUFWO01BQ0EsT0FBTyxLQUFQO0lBQ0Q7O0lBQ0QsSUFBSSxFQUFDLE1BQU14SSxPQUFPLENBQUNrSSxXQUFELEVBQWN2RSxJQUFkLENBQWQsQ0FBSixFQUF1QztNQUNyQyxNQUFNNkUsR0FBRyxHQUFJLGlEQUFnRC9GLFNBQVUsaUJBQXZFOztNQUNBLElBQUl3RixRQUFKLEVBQWM7UUFDWixNQUFNLElBQUluQyxLQUFKLENBQVUwQyxHQUFWLENBQU47TUFDRDs7TUFDRDNJLEdBQUcsQ0FBQzZJLEtBQUosQ0FBVUYsR0FBVjtNQUNBLE9BQU8sS0FBUDtJQUNEOztJQUNELE1BQU1HLFFBQVEsR0FBSSxHQUFFaEQsYUFBQSxDQUFLQyxLQUFMLENBQVcvQixHQUFYLEVBQWdCZ0MsSUFBSyxLQUFJeEQsT0FBUSxFQUFwQyxJQUNkdUcsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLE1BQXJCLEdBQThCLEVBRGhCLENBQWpCOztJQUVBLE1BQU1DLFVBQVUsR0FBR25ELGFBQUEsQ0FBS3dDLE9BQUwsQ0FBYSxLQUFLdkcsZUFBbEIsRUFBbUMrRyxRQUFuQyxDQUFuQjs7SUFDQSxJQUFJO01BQ0YsTUFBTSxLQUFLM0QsV0FBTCxDQUFpQmtELFdBQWpCLEVBQThCWSxVQUE5QixDQUFOO01BQ0EsTUFBTTFJLFdBQUEsQ0FBRzJJLEtBQUgsQ0FBU0QsVUFBVCxFQUFxQixLQUFyQixDQUFOO01BQ0FqSixHQUFHLENBQUNrRCxLQUFKLENBQVcsNEJBQTJCK0YsVUFBVyw0QkFBakQ7SUFDRCxDQUpELENBSUUsT0FBT1AsQ0FBUCxFQUFVO01BQ1YsSUFBSU4sUUFBSixFQUFjO1FBQ1osTUFBTU0sQ0FBTjtNQUNEOztNQUNEMUksR0FBRyxDQUFDNkksS0FBSixDQUFVSCxDQUFDLENBQUNFLE9BQVo7TUFDQSxPQUFPLEtBQVA7SUFDRDs7SUFDRCxPQUFPLElBQVA7RUFDRDs7RUF3QmdCLE1BQVhPLFdBQVcsQ0FBRTNDLElBQUksR0FBRyxFQUFULEVBQWE7SUFBQTs7SUFDNUIsSUFBSS9GLGVBQUEsQ0FBRWdELE9BQUYsQ0FBVSxLQUFLdkIsT0FBZixDQUFKLEVBQTZCO01BQzNCLE1BQU0sS0FBSzRDLGVBQUwsQ0FBcUIsQ0FBQyxDQUFDMEIsSUFBSSxDQUFDOUQsaUJBQTVCLENBQU47SUFDRDs7SUFDRCxJQUFJakMsZUFBQSxDQUFFZ0QsT0FBRixDQUFVLEtBQUt2QixPQUFmLENBQUosRUFBNkI7TUFDM0IsTUFBTSxJQUFJK0QsS0FBSixDQUFVLDJEQUFWLENBQU47SUFDRDs7SUFFRCxNQUFNUyxhQUFhLEdBQUcsS0FBS0oscUJBQUwsaUJBQTJCRSxJQUFJLENBQUNELE1BQWhDLHVEQUEwQyxNQUFNLElBQUE2QyxnQkFBQSxHQUFoRCxFQUE2RDVDLElBQTdELENBQXRCOztJQUNBLElBQUkvRixlQUFBLENBQUVnRCxPQUFGLENBQVVpRCxhQUFWLENBQUosRUFBOEI7TUFDNUIxRyxHQUFHLENBQUNrRCxLQUFKLENBQVcsdUNBQVg7TUFDQSxPQUFPLEVBQVA7SUFDRDs7SUFDRGxELEdBQUcsQ0FBQ2tELEtBQUosQ0FBVyxPQUFNekIsYUFBQSxDQUFLcUYsU0FBTCxDQUFlLFFBQWYsRUFBeUJKLGFBQWEsQ0FBQ3hGLE1BQXZDLEVBQStDLElBQS9DLENBQXFELFlBQTVELEdBQ1JtSSxJQUFJLENBQUNDLFNBQUwsQ0FBZTVDLGFBQWYsRUFBOEIsSUFBOUIsRUFBb0MsQ0FBcEMsQ0FERjtJQUdBLE1BQU02QyxtQkFBbUIsR0FBRyxFQUE1QjtJQUNBLE1BQU03RixRQUFRLEdBQUcsRUFBakI7SUFDQSxNQUFNeUUsWUFBWSxHQUFHLE1BQU03QyxnQkFBQSxDQUFRQyxPQUFSLEVBQTNCOztJQUNBLElBQUk7TUFDRixLQUFLLE1BQU0sQ0FBQ2lFLEdBQUQsRUFBTTVHLFNBQU4sQ0FBWCxJQUErQjhELGFBQWEsQ0FBQytDLE9BQWQsRUFBL0IsRUFBd0Q7UUFDdEQvRixRQUFRLENBQUNnQixJQUFULENBQWMsQ0FBQyxZQUFZO1VBQ3pCLElBQUksTUFBTSxLQUFLdUQsY0FBTCxDQUFvQnVCLEdBQXBCLEVBQXlCNUcsU0FBekIsRUFBb0N1RixZQUFwQyxFQUFrRCxDQUFDMUgsZUFBQSxDQUFFZ0QsT0FBRixDQUFVK0MsSUFBVixDQUFuRCxDQUFWLEVBQStFO1lBQzdFK0MsbUJBQW1CLENBQUM3RSxJQUFwQixDQUF5QjlCLFNBQXpCO1VBQ0Q7UUFDRixDQUphLEdBQWQ7O1FBTUEsSUFBSWMsUUFBUSxDQUFDeEMsTUFBVCxHQUFrQm5CLHNCQUFsQixLQUE2QyxDQUFqRCxFQUFvRDtVQUNsRCxNQUFNNEUsaUJBQUEsQ0FBRUMsR0FBRixDQUFNbEIsUUFBTixDQUFOO1FBQ0Q7TUFDRjs7TUFDRCxNQUFNaUIsaUJBQUEsQ0FBRUMsR0FBRixDQUFNbEIsUUFBTixDQUFOO0lBQ0QsQ0FiRCxTQWFVO01BQ1IsTUFBTW5ELFdBQUEsQ0FBRzhGLE1BQUgsQ0FBVThCLFlBQVYsQ0FBTjtJQUNEOztJQUNELElBQUksQ0FBQzFILGVBQUEsQ0FBRWdELE9BQUYsQ0FBVThGLG1CQUFWLENBQUwsRUFBcUM7TUFDbkN2SixHQUFHLENBQUN5RSxJQUFKLENBQVUsNEJBQUQsR0FDTixHQUFFaEQsYUFBQSxDQUFLcUYsU0FBTCxDQUFlLGNBQWYsRUFBK0J5QyxtQkFBbUIsQ0FBQ3JJLE1BQW5ELEVBQTJELElBQTNELENBQWlFLEVBRHRFO0lBRUQsQ0FIRCxNQUdPO01BQ0xsQixHQUFHLENBQUN5RSxJQUFKLENBQVUsb0NBQVY7SUFDRDs7SUFDRCxPQUFPOEUsbUJBQVA7RUFDRDs7QUFsWTZCOztlQXNZakIzSCx5QiJ9
386
+ exports.default = _default;
387
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUSU1FT1VUX01TIiwiTUFYX1BBUkFMTEVMX0RPV05MT0FEUyIsImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ3JjT2siLCJzcmMiLCJjaGVja3N1bSIsIm1kNSIsImZzIiwiaGFzaCIsIl8iLCJ0b0xvd2VyIiwiZmluZENoaWxkTm9kZSIsInBhcmVudCIsImNoaWxkTmFtZSIsInRleHQiLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGROb2RlSWR4IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkTm9kZSIsImxvY2FsTmFtZSIsImNoaWxkVGV4dCIsImV4dHJhY3ROb2RlVGV4dCIsIm5vZGUiLCJmaXJzdENoaWxkIiwidXRpbCIsImhhc1ZhbHVlIiwibm9kZVZhbHVlIiwiQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVudCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNocm9tZWRyaXZlckRpciIsImdldENocm9tZWRyaXZlckRpciIsInRpbWVvdXQiLCJtYXBwaW5nIiwicGFyc2VOb3RlcyIsImNvbnRlbnQiLCJyZXN1bHQiLCJ2ZXJzaW9uTWF0Y2giLCJleGVjIiwidmVyc2lvbiIsIm1pbkJyb3dzZXJWZXJzaW9uTWF0Y2giLCJtaW5Ccm93c2VyVmVyc2lvbiIsInJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8iLCJkcml2ZXJLZXkiLCJub3Rlc1VybCIsImluZm9EaWN0Iiwibm90ZXMiLCJyZXRyaWV2ZURhdGEiLCJhY2NlcHQiLCJkZWJ1ZyIsInBhcnNlU3RvcmFnZVhtbCIsImRvYyIsInNob3VsZFBhcnNlTm90ZXMiLCJkcml2ZXJOb2RlcyIsInhwYXRoIiwic2VsZWN0IiwiaXNFbXB0eSIsInByb21pc2VzIiwiZHJpdmVyTm9kZSIsImtleSIsImluY2x1ZGVzIiwiZXRhZyIsImNkSW5mbyIsInVybCIsIkNEX0NETiIsInRyaW0iLCJmaXJzdCIsInNwbGl0Iiwibm90ZXNQYXRoIiwiaXNOb3Rlc1ByZXNlbnQiLCJyZWR1Y2UiLCJhY2MiLCJpbmZvIiwicHVzaCIsIkIiLCJhbGwiLCJzaXplIiwicmV0cmlldmVNYXBwaW5nIiwieG1sIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiY2xvbmVEZWVwIiwidW56aXBEcml2ZXIiLCJkc3QiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ6aXAiLCJleHRyYWN0QWxsVG8iLCJjaHJvbWVkcml2ZXJQYXRoIiwid2Fsa0RpciIsIml0ZW1QYXRoIiwiaXNEaXJlY3RvcnkiLCJwYXRoIiwicGFyc2UiLCJuYW1lIiwiRXJyb3IiLCJiYXNlbmFtZSIsIm12IiwibWtkaXJwIiwicmltcmFmIiwic2VsZWN0TWF0Y2hpbmdEcml2ZXJzIiwib3NJbmZvIiwib3B0cyIsInZlcnNpb25zIiwiZHJpdmVyc1RvU3luYyIsImtleXMiLCJmaWx0ZXIiLCJjZE5hbWUiLCJwbHVyYWxpemUiLCJpc05hTiIsIm1pbkJyb3dzZXJWZXJzaW9uSW50IiwicGFyc2VJbnQiLCJjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIiLCJjdXJyZW50TWluQnJvd3NlclZlcnNpb24iLCJ1bmlxIiwibWFwIiwiYXJjaCIsImhhcmR3YXJlTmFtZSIsIlg2NCIsInNvbWUiLCJYODYiLCJPUyIsIm1hYyIsIk0xX0FSQ0hfU1VGRklYIiwicGxhdGZvcm1SZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXRyaWV2ZURyaXZlciIsImluZGV4IiwiYXJjaGl2ZXNSb290IiwiaXNTdHJpY3QiLCJhcmNoaXZlUGF0aCIsInJlc29sdmUiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJpc01ldGVyZWQiLCJlIiwibXNnIiwibWVzc2FnZSIsImVycm9yIiwiZmlsZU5hbWUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJ0YXJnZXRQYXRoIiwiY2htb2QiLCJzeW5jRHJpdmVycyIsImdldE9zSW5mbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzeW5jaHJvbml6ZWREcml2ZXJzIiwiaWR4IiwiZW50cmllcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zdG9yYWdlLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRDaHJvbWVkcml2ZXJEaXIsIENEX0NETiwgcmV0cmlldmVEYXRhLCBnZXRPc0luZm8sXG4gIE9TLCBYNjQsIFg4NiwgTTFfQVJDSF9TVUZGSVgsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB4cGF0aCBmcm9tICd4cGF0aCc7XG5pbXBvcnQgeyBET01QYXJzZXIgfSBmcm9tICdAeG1sZG9tL3htbGRvbSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMsIGxvZ2dlciwgdGVtcERpciwgemlwLCB1dGlsLCBuZXQgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgVElNRU9VVF9NUyA9IDE1MDAwO1xuY29uc3QgTUFYX1BBUkFMTEVMX0RPV05MT0FEUyA9IDU7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Nocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBpc0NyY09rIChzcmMsIGNoZWNrc3VtKSB7XG4gIGNvbnN0IG1kNSA9IGF3YWl0IGZzLmhhc2goc3JjLCAnbWQ1Jyk7XG4gIHJldHVybiBfLnRvTG93ZXIobWQ1KSA9PT0gXy50b0xvd2VyKGNoZWNrc3VtKTtcbn1cblxuZnVuY3Rpb24gZmluZENoaWxkTm9kZSAocGFyZW50LCBjaGlsZE5hbWUgPSBudWxsLCB0ZXh0ID0gbnVsbCkge1xuICBpZiAoIWNoaWxkTmFtZSAmJiAhdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICghcGFyZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yIChsZXQgY2hpbGROb2RlSWR4ID0gMDsgY2hpbGROb2RlSWR4IDwgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBjaGlsZE5vZGVJZHgrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBhcmVudC5jaGlsZE5vZGVzW2NoaWxkTm9kZUlkeF07XG4gICAgaWYgKGNoaWxkTmFtZSAmJiAhdGV4dCAmJiBjaGlsZE5hbWUgPT09IGNoaWxkTm9kZS5sb2NhbE5hbWUpIHtcbiAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgfVxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBjaGlsZFRleHQgPSBleHRyYWN0Tm9kZVRleHQoY2hpbGROb2RlKTtcbiAgICAgIGlmICghY2hpbGRUZXh0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkTmFtZSAmJiBjaGlsZE5hbWUgPT09IGNoaWxkTm9kZS5sb2NhbE5hbWUgJiYgdGV4dCA9PT0gY2hpbGRUZXh0KSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkTmFtZSAmJiB0ZXh0ID09PSBjaGlsZFRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3ROb2RlVGV4dCAobm9kZSkge1xuICByZXR1cm4gKCFub2RlIHx8ICFub2RlLmZpcnN0Q2hpbGQgfHwgIXV0aWwuaGFzVmFsdWUobm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSkpXG4gICAgPyBudWxsXG4gICAgOiBub2RlLmZpcnN0Q2hpbGQubm9kZVZhbHVlO1xufVxuXG5cbmNsYXNzIENocm9tZWRyaXZlclN0b3JhZ2VDbGllbnQge1xuICBjb25zdHJ1Y3RvciAoYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hyb21lZHJpdmVyRGlyID0gZ2V0Q2hyb21lZHJpdmVyRGlyKCksXG4gICAgICB0aW1lb3V0ID0gVElNRU9VVF9NUyxcbiAgICB9ID0gYXJncztcbiAgICB0aGlzLmNocm9tZWRyaXZlckRpciA9IGNocm9tZWRyaXZlckRpcjtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMubWFwcGluZyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IEFkZGl0aW9uYWxEcml2ZXJEZXRhaWxzXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdmVyc2lvbiAtIENocm9tZWRyaXZlciB2ZXJzaW9uXG4gICAqIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAgICogQHByb3BlcnR5IHs/c3RyaW5nfSBtaW5Ccm93c2VyVmVyc2lvbiAtIFRoZSBtaW5pbXVtIGJyb3dzZXIgdmVyc2lvblxuICAgKiBzdXBwb3J0ZWQgYnkgY2hyb21lZHJpdmVyIG9yIGBudWxsYCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcbiAgICovXG5cbiAgLyoqXG4gICAqIEdldHMgYWRkaXRpb25hbCBjaHJvbWVkcml2ZXIgZGV0YWlscyBmcm9tIGNocm9tZWRyaXZlclxuICAgKiByZWxlYXNlIG5vdGVzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gUmVsZWFzZSBub3RlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBjaHJvbWVkcml2ZXJcbiAgICogQHJldHVybnMge0FkZGl0aW9uYWxEcml2ZXJEZXRhaWxzfVxuICAgKi9cbiAgcGFyc2VOb3RlcyAoY29udGVudCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IC9eXFxzKlstXStDaHJvbWVEcml2ZXJbXFxEXSsoW1xcZC5dKykvaW0uZXhlYyhjb250ZW50KTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICByZXN1bHQudmVyc2lvbiA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICB9XG4gICAgY29uc3QgbWluQnJvd3NlclZlcnNpb25NYXRjaCA9IC9eXFxzKlN1cHBvcnRzIENocm9tZVtcXERdKyhcXGQrKS9pbS5leGVjKGNvbnRlbnQpO1xuICAgIGlmIChtaW5Ccm93c2VyVmVyc2lvbk1hdGNoKSB7XG4gICAgICByZXN1bHQubWluQnJvd3NlclZlcnNpb24gPSBtaW5Ccm93c2VyVmVyc2lvbk1hdGNoWzFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkcyBjaHJvbWVkcml2ZXIgcmVsZWFzZSBub3RlcyBhbmQgcHV0cyB0aGVtXG4gICAqIGludG8gdGhlIGRpY3Rpb25hcnkgYXJndW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyaXZlcktleSAtIERyaXZlciB2ZXJzaW9uIHBsdXMgYXJjaGl2ZSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBub3Rlc1VybCAtIFRoZSBVUkwgb2YgY2hyb21lZHJpdmVyIG5vdGVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvRGljdCAtIFRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZHJpdmVyIGluZm8uXG4gICAqIFRoZSBtZXRob2QgY2FsbCBtdXRhdGVzIGJ5IG1lcmdpbmcgYEFkZGl0aW9uYWxEcml2ZXJEZXRhaWxzYFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIHJlbGVhc2Ugbm90ZXMgY2Fubm90IGJlIGRvd25sb2FkZWRcbiAgICovXG4gIGFzeW5jIHJldHJpZXZlQWRkaXRpb25hbERyaXZlckluZm8gKGRyaXZlcktleSwgbm90ZXNVcmwsIGluZm9EaWN0KSB7XG4gICAgY29uc3Qgbm90ZXMgPSBhd2FpdCByZXRyaWV2ZURhdGEobm90ZXNVcmwsIHtcbiAgICAgICd1c2VyLWFnZW50JzogJ2FwcGl1bScsXG4gICAgICBhY2NlcHQ6ICcqLyonLFxuICAgIH0sIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pO1xuICAgIGNvbnN0IHsgbWluQnJvd3NlclZlcnNpb24gfSA9IHRoaXMucGFyc2VOb3Rlcyhub3Rlcyk7XG4gICAgaWYgKCFtaW5Ccm93c2VyVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKGBUaGUgZHJpdmVyICcke2RyaXZlcktleX0nIGRvZXMgbm90IGNvbnRhaW4gdmFsaWQgcmVsZWFzZSBub3RlcyBhdCAke25vdGVzVXJsfS4gYCArXG4gICAgICAgIGBTa2lwcGluZyBpdGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbmZvRGljdC5taW5Ccm93c2VyVmVyc2lvbiA9IG1pbkJyb3dzZXJWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBjaHJvbWVkcml2ZXIgc3RvcmFnZSBYTUwgYW5kIHN0b3Jlc1xuICAgKiB0aGUgcGFyc2VkIHJlc3VsdHMgaW50byBgdGhpcy5tYXBwaW5nYFxuICAgKlxuICAgKiBAcGFyYW0ge0RPTURvY3VtZW50fSBkb2MgLSBUaGUgRE9NIHJlcHJlc2VudGF0aW9uXG4gICAqIG9mIHRoZSBjaHJvbWVkcml2ZXIgc3RvcmFnZSBYTUxcbiAgICogQHBhcmFtIHtib29sZWFufSBzaG91bGRQYXJzZU5vdGVzIFt0cnVlXSAtIElmIHNldCB0byBgdHJ1ZWBcbiAgICogdGhlbiBhZGRpdGlvbmFsIGRyaXZlcnMgaW5mb3JtYXRpb24gaXMgZ29pbmcgdG8gYmUgcGFyc2VkXG4gICAqIGFuZCBhc3NpZ25lZCB0byBgdGhpcy5tYXBwaW5nYFxuICAgKi9cbiAgYXN5bmMgcGFyc2VTdG9yYWdlWG1sIChkb2MsIHNob3VsZFBhcnNlTm90ZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgZHJpdmVyTm9kZXMgPSB4cGF0aC5zZWxlY3QoYC8vKltsb2NhbC1uYW1lKC4pPSdDb250ZW50cyddYCwgZG9jKTtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCAke2RyaXZlck5vZGVzLmxlbmd0aH0gZW50cmllcyBmcm9tIHN0b3JhZ2UgWE1MYCk7XG4gICAgaWYgKF8uaXNFbXB0eShkcml2ZXJOb2RlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZHJpdmVyTm9kZSBvZiBkcml2ZXJOb2Rlcykge1xuICAgICAgY29uc3Qga2V5ID0gZXh0cmFjdE5vZGVUZXh0KGZpbmRDaGlsZE5vZGUoZHJpdmVyTm9kZSwgJ0tleScpKTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhrZXksICcvY2hyb21lZHJpdmVyXycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBldGFnID0gZXh0cmFjdE5vZGVUZXh0KGZpbmRDaGlsZE5vZGUoZHJpdmVyTm9kZSwgJ0VUYWcnKSk7XG4gICAgICBpZiAoIWV0YWcpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgZW50cnkgJyR7a2V5fScgZG9lcyBub3QgY29udGFpbiB0aGUgY2hlY2tzdW0uIFNraXBwaW5nIGl0YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZEluZm8gPSB7XG4gICAgICAgIHVybDogYCR7Q0RfQ0ROfS8ke2tleX1gLFxuICAgICAgICBldGFnOiBfLnRyaW0oZXRhZywgJ1wiJyksXG4gICAgICAgIHZlcnNpb246IF8uZmlyc3Qoa2V5LnNwbGl0KCcvJykpLFxuICAgICAgfTtcbiAgICAgIHRoaXMubWFwcGluZ1trZXldID0gY2RJbmZvO1xuXG4gICAgICBjb25zdCBub3Rlc1BhdGggPSBgJHtjZEluZm8udmVyc2lvbn0vbm90ZXMudHh0YDtcbiAgICAgIGNvbnN0IGlzTm90ZXNQcmVzZW50ID0gISFkcml2ZXJOb2Rlc1xuICAgICAgICAucmVkdWNlKChhY2MsIG5vZGUpID0+IGFjYyB8fCBmaW5kQ2hpbGROb2RlKG5vZGUsICdLZXknLCBub3Rlc1BhdGgpLCBmYWxzZSk7XG4gICAgICBpZiAoIWlzTm90ZXNQcmVzZW50KSB7XG4gICAgICAgIGNkSW5mby5taW5Ccm93c2VyVmVyc2lvbiA9IG51bGw7XG4gICAgICAgIGlmIChzaG91bGRQYXJzZU5vdGVzKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFRoZSBlbnRyeSAnJHtrZXl9JyBkb2VzIG5vdCBjb250YWluIGFueSBub3Rlcy4gU2tpcHBpbmcgaXRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZFBhcnNlTm90ZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5yZXRyaWV2ZUFkZGl0aW9uYWxEcml2ZXJJbmZvKGtleSwgYCR7Q0RfQ0ROfS8ke25vdGVzUGF0aH1gLCBjZEluZm8pKTtcbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggJSBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID09PSAwKSB7XG4gICAgICAgIGF3YWl0IEIuYWxsKHByb21pc2VzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgIGxvZy5pbmZvKGBUaGUgdG90YWwgY291bnQgb2YgZW50cmllcyBpbiB0aGUgbWFwcGluZzogJHtfLnNpemUodGhpcy5tYXBwaW5nKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBEcml2ZXJEZXRhaWxzXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgLSBUaGUgZnVsbCB1cmwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZHJpdmVyIGluXG4gICAqIHRoZSByZW1vdGUgc3RvcmFnZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gZXRhZyAtIFRoZSBDUkMgb2YgdGhlIGRyaXZlciBhcmNoaXZlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uIC0gQ2hyb21lZHJpdmVyIHZlcnNpb25cbiAgICovXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IENocm9tZWRyaXZlcnNNYXBwaW5nXG4gICAqIEBwcm9wZXJ0eSB7RHJpdmVyRGV0YWlsc30gLSBUaGUga2V5cyBhcmUgdW5pcXVlIGRyaXZlciBpZGVudGlmaWVyc1xuICAgKiAodmVyc2lvbi9hcmNoaXZlIG5hbWUpLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgaGF2ZSBgRHJpdmVyRGV0YWlsc2BcbiAgICogY29udGFpbmluZyBjaHJvbWVkcml2ZXIgZGV0YWlsc1xuICAgKi9cblxuICAvKipcbiAgICogUmV0cmlldmVzIGNocm9tZWRyaXZlciBtYXBwaW5nIGZyb20gdGhlIHN0b3JhZ2VcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBzaG91bGRQYXJzZU5vdGVzIFt0cnVlXSAtIGlmIHNldCB0byBgdHJ1ZWBcbiAgICogdGhlbiBhZGRpdGlvbmFsIGNocm9tZWRyaXZlcnMgaW5mbyBpcyBnb2luZyB0byBiZSByZXRyaWV2ZWQgYW5kXG4gICAqIHBhcnNlZCBmcm9tIHJlbGVhc2Ugbm90ZXNcbiAgICogQHJldHVybnMge0Nocm9tZWRyaXZlcnNNYXBwaW5nfVxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVNYXBwaW5nIChzaG91bGRQYXJzZU5vdGVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHhtbCA9IGF3YWl0IHJldHJpZXZlRGF0YShDRF9DRE4sIHtcbiAgICAgICd1c2VyLWFnZW50JzogJ2FwcGl1bScsXG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi94bWwsICovKicsXG4gICAgfSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSk7XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh4bWwpO1xuICAgIGF3YWl0IHRoaXMucGFyc2VTdG9yYWdlWG1sKGRvYywgc2hvdWxkUGFyc2VOb3Rlcyk7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRoaXMubWFwcGluZyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgZG93bmxvYWRlZCBjaHJvbWVkcml2ZXIgYXJjaGl2ZVxuICAgKiBpbnRvIHRoZSBnaXZlbiBkZXN0aW5hdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIC0gVGhlIHNvdXJjZSBhcmNoaXZlIHBhdGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRzdCAtIFRoZSBkZXN0aW5hdGlvbiBjaHJvbWVkcml2ZXIgcGF0aFxuICAgKi9cbiAgYXN5bmMgdW56aXBEcml2ZXIgKHNyYywgZHN0KSB7XG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKHNyYywgdG1wUm9vdCk7XG4gICAgICBjb25zdCBjaHJvbWVkcml2ZXJQYXRoID0gYXdhaXQgZnMud2Fsa0Rpcih0bXBSb290LCB0cnVlLCAoaXRlbVBhdGgsIGlzRGlyZWN0b3J5KSA9PlxuICAgICAgICAhaXNEaXJlY3RvcnkgJiYgXy50b0xvd2VyKHBhdGgucGFyc2UoaXRlbVBhdGgpLm5hbWUpID09PSAnY2hyb21lZHJpdmVyJyk7XG4gICAgICBpZiAoIWNocm9tZWRyaXZlclBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJjaGl2ZSB3YXMgdW56aXBwZWQgcHJvcGVybHksIGJ1dCB3ZSBjb3VsZCBub3QgZmluZCBhbnkgY2hyb21lZHJpdmVyIGV4ZWN1dGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgTW92aW5nIHRoZSBleHRyYWN0ZWQgJyR7cGF0aC5iYXNlbmFtZShjaHJvbWVkcml2ZXJQYXRoKX0nIHRvICcke2RzdH0nYCk7XG4gICAgICBhd2FpdCBmcy5tdihjaHJvbWVkcml2ZXJQYXRoLCBkc3QsIHtcbiAgICAgICAgbWtkaXJwOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBPU0luZm9cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgaG9zdCBPU1xuICAgKiBDYW4gYmUgZWl0aGVyIGBtYWNgLCBgd2luZG93c2Agb3IgYGxpbnV4YFxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gYXJjaCAtIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGhvc3QgT0QuXG4gICAqIENhbiBiZSBlaXRoZXIgYDMyYCBvciBgNjRgXG4gICAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gaGFyZHdhcmVOYW1lIC0gVGhlIG91dHB1dCBvZiBgdW5hbWUgLW1gIGNvbW1hbmRcbiAgICogb24gbGludXggYW5kIG1hYyBzeXN0ZW1zLiBgbnVsbGAgb24gV2luZG93c1xuICAgKi9cblxuICAvKipcbiAgICogRmlsdGVycyBgdGhpcy5tYXBwaW5nYCB0byBvbmx5IHNlbGVjdCBtYXRjaGluZ1xuICAgKiBjaHJvbWVkcml2ZXIgZW50cmllcyBieSBvcGVyYXRpbmcgc3lzdGVtIGluZm9ybWF0aW9uXG4gICAqIGFuZC9vciBhZGRpdGlvbmFsIHN5bmNocm9uaXphdGlvbiBvcHRpb25zIChpZiBwcm92aWRlZClcbiAgICpcbiAgICogQHBhcmFtIHs/T1NJbmZvfSBvc0luZm9cbiAgICogQHBhcmFtIHs/U3luY09wdGlvbnN9IG9wdHNcbiAgICogQHJldHVybnMge0FycmF5PFN0cmluZz59IFRoZSBsaXN0IG9mIGZpbHRlcmVkIGNocm9tZWRyaXZlclxuICAgKiBlbnRyeSBuYW1lcyAodmVyc2lvbi9hcmNoaXZlIG5hbWUpXG4gICAqL1xuICBzZWxlY3RNYXRjaGluZ0RyaXZlcnMgKG9zSW5mbywgb3B0cyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgbWluQnJvd3NlclZlcnNpb24sXG4gICAgICB2ZXJzaW9ucyA9IFtdLFxuICAgIH0gPSBvcHRzO1xuICAgIGxldCBkcml2ZXJzVG9TeW5jID0gXy5rZXlzKHRoaXMubWFwcGluZyk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eSh2ZXJzaW9ucykpIHtcbiAgICAgIC8vIEhhbmRsZSBvbmx5IHNlbGVjdGVkIHZlcnNpb25zIGlmIHJlcXVlc3RlZFxuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSB2ZXJzaW9ucyBtYXRjaCB0byAke3ZlcnNpb25zfWApO1xuICAgICAgZHJpdmVyc1RvU3luYyA9IGRyaXZlcnNUb1N5bmNcbiAgICAgICAgLmZpbHRlcigoY2ROYW1lKSA9PiB2ZXJzaW9ucy5pbmNsdWRlcyhgJHt0aGlzLm1hcHBpbmdbY2ROYW1lXS52ZXJzaW9ufWApKTtcblxuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNOYU4obWluQnJvd3NlclZlcnNpb24pKSB7XG4gICAgICAvLyBPbmx5IHNlbGVjdCBkcml2ZXJzIHRoYXQgc3VwcG9ydCB0aGUgY3VycmVudCBicm93c2VyIHdob3NlIG1ham9yIHZlcnNpb24gbnVtYmVyIGVxdWFscyB0byBgbWluQnJvd3NlclZlcnNpb25gXG4gICAgICBjb25zdCBtaW5Ccm93c2VyVmVyc2lvbkludCA9IHBhcnNlSW50KG1pbkJyb3dzZXJWZXJzaW9uLCAxMCk7XG4gICAgICBsb2cuZGVidWcoYFNlbGVjdGluZyBjaHJvbWVkcml2ZXJzIHdob3NlIG1pbmltdW0gc3VwcG9ydGVkIGJyb3dzZXIgdmVyc2lvbiBtYXRjaGVzIHRvICR7bWluQnJvd3NlclZlcnNpb25JbnR9YCk7XG4gICAgICBsZXQgY2xvc2VzdE1hdGNoZWRWZXJzaW9uTnVtYmVyID0gMDtcbiAgICAgIC8vIFNlbGVjdCB0aGUgbmV3ZXN0IGF2YWlsYWJsZSBhbmQgY29tcGF0aWJsZSBjaHJvbWVkcml2ZXJcbiAgICAgIGZvciAoY29uc3QgY2ROYW1lIG9mIGRyaXZlcnNUb1N5bmMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1pbkJyb3dzZXJWZXJzaW9uID0gcGFyc2VJbnQodGhpcy5tYXBwaW5nW2NkTmFtZV0ubWluQnJvd3NlclZlcnNpb24sIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihjdXJyZW50TWluQnJvd3NlclZlcnNpb24pXG4gICAgICAgICAgICAmJiBjdXJyZW50TWluQnJvd3NlclZlcnNpb24gPD0gbWluQnJvd3NlclZlcnNpb25JbnRcbiAgICAgICAgICAgICYmIGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA8IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbikge1xuICAgICAgICAgIGNsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA9IGN1cnJlbnRNaW5Ccm93c2VyVmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZHJpdmVyc1RvU3luYyA9IGRyaXZlcnNUb1N5bmMuZmlsdGVyKChjZE5hbWUpID0+IGAke3RoaXMubWFwcGluZ1tjZE5hbWVdLm1pbkJyb3dzZXJWZXJzaW9ufWAgPT09XG4gICAgICAgIGAke2Nsb3Nlc3RNYXRjaGVkVmVyc2lvbk51bWJlciA+IDAgPyBjbG9zZXN0TWF0Y2hlZFZlcnNpb25OdW1iZXIgOiBtaW5Ccm93c2VyVmVyc2lvbkludH1gKTtcblxuICAgICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnaXRlbScsIGRyaXZlcnNUb1N5bmMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICAgIGlmIChfLmlzRW1wdHkoZHJpdmVyc1RvU3luYykpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBXaWxsIHNlbGVjdCBjYW5kaWRhdGUgJHt1dGlsLnBsdXJhbGl6ZSgnZHJpdmVyJywgZHJpdmVyc1RvU3luYy5sZW5ndGgpfSBgICtcbiAgICAgICAgYHZlcnNpb25lZCBhcyAnJHtfLnVuaXEoZHJpdmVyc1RvU3luYy5tYXAoKGNkTmFtZSkgPT4gdGhpcy5tYXBwaW5nW2NkTmFtZV0udmVyc2lvbikpfSdgKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNFbXB0eShvc0luZm8pKSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IGRyaXZlcnMgZm9yIHVuc3VwcG9ydGVkIHN5c3RlbSBhcmNoaXRlY3R1cmVzXG4gICAgICBsZXQge25hbWUsIGFyY2gsIGhhcmR3YXJlTmFtZX0gPSBvc0luZm87XG4gICAgICBpZiAoYXJjaCA9PT0gWDY0ICYmICFkcml2ZXJzVG9TeW5jLnNvbWUoKGNkTmFtZSkgPT4gY2ROYW1lLmluY2x1ZGVzKGBfJHtuYW1lfSR7WDY0fWApKSkge1xuICAgICAgICAvLyBGYWxsIGJhY2sgdG8geDg2IGJ1aWxkIGlmIHg2NCBvbmUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIE9TXG4gICAgICAgIGFyY2ggPSBYODY7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSA9PT0gT1MubWFjICYmIF8uaW5jbHVkZXMoaGFyZHdhcmVOYW1lLCAnYXJtJylcbiAgICAgICAgICAmJiBkcml2ZXJzVG9TeW5jLnNvbWUoKGNkTmFtZSkgPT4gY2ROYW1lLmluY2x1ZGVzKE0xX0FSQ0hfU1VGRklYKSkpIHtcbiAgICAgICAgLy8gcHJlZmVyIGV4ZWN1dGFibGUgZm9yIE0xIGFyY2ggaWYgcHJlc2VudFxuICAgICAgICBhcmNoICs9IE0xX0FSQ0hfU1VGRklYO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBTZWxlY3RpbmcgY2hyb21lZHJpdmVycyB3aG9zZSBwbGF0Zm9ybSBtYXRjaGVzIHRvICR7bmFtZX0ke2FyY2h9YCk7XG4gICAgICBjb25zdCBwbGF0Zm9ybVJlID0gbmV3IFJlZ0V4cChgKFxcXFxifF8pJHtuYW1lfSR7YXJjaH1cXFxcYmApO1xuICAgICAgZHJpdmVyc1RvU3luYyA9IGRyaXZlcnNUb1N5bmMuZmlsdGVyKChjZE5hbWUpID0+IHBsYXRmb3JtUmUudGVzdChjZE5hbWUpKTtcbiAgICAgIGxvZy5kZWJ1ZyhgR290ICR7dXRpbC5wbHVyYWxpemUoJ2l0ZW0nLCBkcml2ZXJzVG9TeW5jLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRyaXZlcnNUb1N5bmM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBnaXZlbiBjaHJvbWVkcml2ZXIgZnJvbSB0aGUgc3RvcmFnZVxuICAgKiBhbmQgdW5wYWNrcyBpdCBpbnRvIGB0aGlzLmNocm9tZWRyaXZlckRpcmAgZm9sZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIFRoZSB1bmlxdWUgZHJpdmVyIGluZGV4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkcml2ZXJLZXkgLSBUaGUgZHJpdmVyIGtleSBpbiBgdGhpcy5tYXBwaW5nYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJjaGl2ZXNSb290IC0gVGhlIHRlbXBvcmFyeSBmb2xkZXIgcGF0aCB0byBleHRyYWN0XG4gICAqIGRvd25sb2FkZWQgYXJjaGl2ZXMgdG9cbiAgICogQHBhcmFtIHtib29sZWFufSBpc1N0cmljdCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIChgdHJ1ZWApXG4gICAqIG9yIHJldHVybiBhIGJvb2xlYW4gcmVzdWx0IGlmIHRoZSBkcml2ZXIgcmV0cmlldmFsIHByb2Nlc3MgZmFpbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcmV0cmlldmluZyB0aGUgZHJpdmVyXG4gICAqIGFuZCBgaXNTdHJpY3RgIGlzIHNldCB0byBgdHJ1ZWBcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIGB0cnVlYCB0aGVuIHRoZSBjaHJvbWVkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5XG4gICAqIGRvd25sb2FkZWQgYW5kIGV4dHJhY3RlZC5cbiAgICovXG4gIGFzeW5jIHJldHJpZXZlRHJpdmVyIChpbmRleCwgZHJpdmVyS2V5LCBhcmNoaXZlc1Jvb3QsIGlzU3RyaWN0ID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IHVybCwgZXRhZywgdmVyc2lvbiB9ID0gdGhpcy5tYXBwaW5nW2RyaXZlcktleV07XG4gICAgY29uc3QgYXJjaGl2ZVBhdGggPSBwYXRoLnJlc29sdmUoYXJjaGl2ZXNSb290LCBgJHtpbmRleH0uemlwYCk7XG4gICAgbG9nLmRlYnVnKGBSZXRyaWV2aW5nICcke3VybH0nIHRvICcke2FyY2hpdmVQYXRofSdgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV0LmRvd25sb2FkRmlsZSh1cmwsIGFyY2hpdmVQYXRoLCB7XG4gICAgICAgIGlzTWV0ZXJlZDogZmFsc2UsXG4gICAgICAgIHRpbWVvdXQ6IFRJTUVPVVRfTVNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGBDYW5ub3QgZG93bmxvYWQgY2hyb21lZHJpdmVyIGFyY2hpdmUuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gO1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghYXdhaXQgaXNDcmNPayhhcmNoaXZlUGF0aCwgZXRhZykpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGBUaGUgY2hlY2tzdW0gZm9yIHRoZSBkb3dubG9hZGVkIGNocm9tZWRyaXZlciAnJHtkcml2ZXJLZXl9JyBkaWQgbm90IG1hdGNoYDtcbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvcihtc2cpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBmaWxlTmFtZSA9IGAke3BhdGgucGFyc2UodXJsKS5uYW1lfV92JHt2ZXJzaW9ufWAgK1xuICAgICAgKHN5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnKTtcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY2hyb21lZHJpdmVyRGlyLCBmaWxlTmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudW56aXBEcml2ZXIoYXJjaGl2ZVBhdGgsIHRhcmdldFBhdGgpO1xuICAgICAgYXdhaXQgZnMuY2htb2QodGFyZ2V0UGF0aCwgMG83NTUpO1xuICAgICAgbG9nLmRlYnVnKGBQZXJtaXNzaW9ucyBvZiB0aGUgZmlsZSAnJHt0YXJnZXRQYXRofScgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gNzU1YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuZXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gU3luY09wdGlvbnNcbiAgICogQHByb3BlcnR5IHtBcnJheTxTdHJpbmc+fSB2ZXJzaW9ucyAtIFRoZSBsaXN0IG9mIGNocm9tZWRyaXZlclxuICAgKiB2ZXJzaW9ucyB0byBzeW5jLiBJZiBlbXB0eSAodGhlIGRlZmF1bHQgdmFsdWUpIHRoZW4gYWxsIGF2YWlsYWJsZVxuICAgKiBjaHJvbWVkcml2ZXJzIGFyZSBnb2luZyB0byBiZSBkb3dubG9hZGVkIGFuZCBleHRyYWN0ZWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSBtaW5Ccm93c2VyVmVyc2lvbiAtIFRoZSBtaW51bXVtIHN1cHBvcnRlZFxuICAgKiBDaHJvbWUgdmVyc2lvbiB0aGF0IGRvd25sb2FkZWQgY2hyb21lZHJpdmVycyBzaG91bGQgc3VwcG9ydC4gQ2FuIG1hdGNoXG4gICAqIG11bHRpcGxlIGRyaXZlcnMuXG4gICAqIEBwcm9wZXJ0eSB7P09TSW5mb30gb3NJbmZvIC0gU3lzdGVtIGluZm9ybWF0aW9uIHVzZWQgdG8gZmlsdGVyIG91dFxuICAgKiB0aGUgbGlzdCBvZiB0aGUgcmV0cmlldmVkIGRyaXZlcnMuIElmIG5vdCBwcm92aWRlZCB0aGVuIHRoZSBzY3JpcHRcbiAgICogd2lsbCB0cnkgdG8gcmV0cmlldmUgaXQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgY2hyb21lZHJpdmVycyBmcm9tIHRoZSByZW1vdGUgc3RvcmFnZVxuICAgKiB0byB0aGUgbG9jYWwgZmlsZSBzeXN0ZW1cbiAgICpcbiAgICogQHBhcmFtIHs/U3luY09wdGlvbnN9IG9wdHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIHByb2JsZW0gd2hpbGUgcmV0cmlldmluZ1xuICAgKiB0aGUgZHJpdmVyc1xuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nfSBUaGUgbGlzdCBvZiBzdWNjZXNzZnVsbHkgc3luY2hyb25pemVkIGRyaXZlciBrZXlzXG4gICAqL1xuICBhc3luYyBzeW5jRHJpdmVycyAob3B0cyA9IHt9KSB7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLm1hcHBpbmcpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJldHJpZXZlTWFwcGluZyghIW9wdHMubWluQnJvd3NlclZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMubWFwcGluZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJldHJpZXZlIGNocm9tZWRyaXZlcnMgbWFwcGluZyBmcm9tIEdvb2dsZSBzdG9yYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJpdmVyc1RvU3luYyA9IHRoaXMuc2VsZWN0TWF0Y2hpbmdEcml2ZXJzKG9wdHMub3NJbmZvID8/IGF3YWl0IGdldE9zSW5mbygpLCBvcHRzKTtcbiAgICBpZiAoXy5pc0VtcHR5KGRyaXZlcnNUb1N5bmMpKSB7XG4gICAgICBsb2cuZGVidWcoYFRoZXJlIGFyZSBubyBkcml2ZXJzIHRvIHN5bmMuIEV4aXRpbmdgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBHb3QgJHt1dGlsLnBsdXJhbGl6ZSgnZHJpdmVyJywgZHJpdmVyc1RvU3luYy5sZW5ndGgsIHRydWUpfSB0byBzeW5jOiBgICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRyaXZlcnNUb1N5bmMsIG51bGwsIDIpKTtcblxuICAgIGNvbnN0IHN5bmNocm9uaXplZERyaXZlcnMgPSBbXTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgIGNvbnN0IGFyY2hpdmVzUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IFtpZHgsIGRyaXZlcktleV0gb2YgZHJpdmVyc1RvU3luYy5lbnRyaWVzKCkpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmIChhd2FpdCB0aGlzLnJldHJpZXZlRHJpdmVyKGlkeCwgZHJpdmVyS2V5LCBhcmNoaXZlc1Jvb3QsICFfLmlzRW1wdHkob3B0cykpKSB7XG4gICAgICAgICAgICBzeW5jaHJvbml6ZWREcml2ZXJzLnB1c2goZHJpdmVyS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCkpO1xuXG4gICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggJSBNQVhfUEFSQUxMRUxfRE9XTkxPQURTID09PSAwKSB7XG4gICAgICAgICAgYXdhaXQgQi5hbGwocHJvbWlzZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBCLmFsbChwcm9taXNlcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGZzLnJpbXJhZihhcmNoaXZlc1Jvb3QpO1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eShzeW5jaHJvbml6ZWREcml2ZXJzKSkge1xuICAgICAgbG9nLmluZm8oYFN1Y2Nlc3NmdWxseSBzeW5jaHJvbml6ZWQgYCArXG4gICAgICAgIGAke3V0aWwucGx1cmFsaXplKCdjaHJvbWVkcml2ZXInLCBzeW5jaHJvbml6ZWREcml2ZXJzLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGBObyBjaHJvbWVkcml2ZXJzIHdlcmUgc3luY2hyb25pemVkYCk7XG4gICAgfVxuICAgIHJldHVybiBzeW5jaHJvbml6ZWREcml2ZXJzO1xuICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgQ2hyb21lZHJpdmVyU3RvcmFnZUNsaWVu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
@@ -30,17 +30,8 @@ var _axios = _interopRequireDefault(require("axios"));
30
30
 
31
31
  var _teen_process = require("teen_process");
32
32
 
33
- const rootDir = _path.default.basename(__dirname) === 'lib' ? _path.default.resolve(__dirname, process.env.NO_PRECOMPILE ? '..' : '../..') : __dirname;
33
+ var _fs2 = _interopRequireDefault(require("fs"));
34
34
 
35
- const CHROMEDRIVER_CHROME_MAPPING = require(_path.default.resolve(rootDir, 'config', 'mapping.json'));
36
-
37
- exports.CHROMEDRIVER_CHROME_MAPPING = CHROMEDRIVER_CHROME_MAPPING;
38
- const CD_VER = process.env.npm_config_chromedriver_version || process.env.CHROMEDRIVER_VERSION || getMostRecentChromedriver();
39
- exports.CD_VER = CD_VER;
40
-
41
- const CD_BASE_DIR = _path.default.resolve(__dirname, '..', '..', 'chromedriver');
42
-
43
- exports.CD_BASE_DIR = CD_BASE_DIR;
44
35
  const CD_CDN = process.env.npm_config_chromedriver_cdnurl || process.env.CHROMEDRIVER_CDNURL || 'https://chromedriver.storage.googleapis.com';
45
36
  exports.CD_CDN = CD_CDN;
46
37
  const OS = {
@@ -57,6 +48,35 @@ const M1_ARCH_SUFFIX = '_m1';
57
48
  exports.M1_ARCH_SUFFIX = M1_ARCH_SUFFIX;
58
49
  const CD_EXECUTABLE_PREFIX = 'chromedriver';
59
50
 
51
+ const getModuleRoot = _lodash.default.memoize(function getModuleRoot() {
52
+ let currentDir = _path.default.dirname(_path.default.resolve(__filename));
53
+
54
+ let isAtFsRoot = false;
55
+
56
+ while (!isAtFsRoot) {
57
+ const manifestPath = _path.default.join(currentDir, 'package.json');
58
+
59
+ try {
60
+ if (_fs2.default.existsSync(manifestPath) && JSON.parse(_fs2.default.readFileSync(manifestPath, 'utf8')).name === 'appium-chromedriver') {
61
+ return currentDir;
62
+ }
63
+ } catch (ign) {}
64
+
65
+ currentDir = _path.default.dirname(currentDir);
66
+ isAtFsRoot = currentDir.length <= _path.default.dirname(currentDir).length;
67
+ }
68
+
69
+ throw new Error('Cannot find the root folder of the appium-chromedriver Node.js module');
70
+ });
71
+
72
+ const CHROMEDRIVER_CHROME_MAPPING = require(_path.default.join(getModuleRoot(), 'config', 'mapping.json'));
73
+
74
+ exports.CHROMEDRIVER_CHROME_MAPPING = CHROMEDRIVER_CHROME_MAPPING;
75
+
76
+ const CD_BASE_DIR = _path.default.join(getModuleRoot(), 'chromedriver');
77
+
78
+ exports.CD_BASE_DIR = CD_BASE_DIR;
79
+
60
80
  function getMostRecentChromedriver(mapping = CHROMEDRIVER_CHROME_MAPPING) {
61
81
  if (_lodash.default.isEmpty(mapping)) {
62
82
  throw new Error('Unable to get most recent Chromedriver version from empty mapping');
@@ -65,6 +85,9 @@ function getMostRecentChromedriver(mapping = CHROMEDRIVER_CHROME_MAPPING) {
65
85
  return _lodash.default.last(_lodash.default.keys(mapping).sort(_compareVersions.compareVersions));
66
86
  }
67
87
 
88
+ const CD_VER = process.env.npm_config_chromedriver_version || process.env.CHROMEDRIVER_VERSION || getMostRecentChromedriver();
89
+ exports.CD_VER = CD_VER;
90
+
68
91
  async function getChromeVersion(adb, bundleId) {
69
92
  const {
70
93
  versionName
@@ -130,7 +153,5 @@ const getBaseDriverInstance = _lodash.default.memoize(() => new _driver.BaseDriv
130
153
 
131
154
  function generateLogPrefix(obj, sessionId = null) {
132
155
  return getBaseDriverInstance().helpers.generateDriverLogPrefix(obj, sessionId);
133
- }require('source-map-support').install();
134
-
135
-
136
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsicm9vdERpciIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIkNIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyIsInJlcXVpcmUiLCJDRF9WRVIiLCJucG1fY29uZmlnX2Nocm9tZWRyaXZlcl92ZXJzaW9uIiwiQ0hST01FRFJJVkVSX1ZFUlNJT04iLCJnZXRNb3N0UmVjZW50Q2hyb21lZHJpdmVyIiwiQ0RfQkFTRV9ESVIiLCJDRF9DRE4iLCJucG1fY29uZmlnX2Nocm9tZWRyaXZlcl9jZG51cmwiLCJDSFJPTUVEUklWRVJfQ0ROVVJMIiwiT1MiLCJsaW51eCIsIndpbmRvd3MiLCJtYWMiLCJYNjQiLCJYODYiLCJNMV9BUkNIX1NVRkZJWCIsIkNEX0VYRUNVVEFCTEVfUFJFRklYIiwibWFwcGluZyIsIl8iLCJpc0VtcHR5IiwiRXJyb3IiLCJsYXN0Iiwia2V5cyIsInNvcnQiLCJjb21wYXJlVmVyc2lvbnMiLCJnZXRDaHJvbWVWZXJzaW9uIiwiYWRiIiwiYnVuZGxlSWQiLCJ2ZXJzaW9uTmFtZSIsImdldFBhY2thZ2VJbmZvIiwiZ2V0Q2hyb21lZHJpdmVyRGlyIiwib3NOYW1lIiwiZ2V0T3NOYW1lIiwiZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCIsInBhdGhTdWZmaXgiLCJwYXRocyIsImZzIiwiZ2xvYiIsImN3ZCIsImFic29sdXRlIiwibm9jYXNlIiwibm9kaXIiLCJzdHJpY3QiLCJmaXJzdCIsInJldHJpZXZlRGF0YSIsInVybCIsImhlYWRlcnMiLCJvcHRzIiwidGltZW91dCIsInJlc3BvbnNlVHlwZSIsImF4aW9zIiwiZGF0YSIsIm1lbW9pemUiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJpc01hYyIsImdldE9zSW5mbyIsIm5hbWUiLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSIsImV4ZWMiLCJnZXRCYXNlRHJpdmVySW5zdGFuY2UiLCJCYXNlRHJpdmVyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJvYmoiLCJzZXNzaW9uSWQiLCJoZWxwZXJzIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuXG5cbmNvbnN0IHJvb3REaXIgPSBwYXRoLmJhc2VuYW1lKF9fZGlybmFtZSkgPT09ICdsaWInXG4gID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKVxuICA6IF9fZGlybmFtZTtcbi8vIENocm9tZWRyaXZlciB2ZXJzaW9uOiBtaW5pbXVtIENocm9tZSB2ZXJzaW9uXG5jb25zdCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShyb290RGlyLCAnY29uZmlnJywgJ21hcHBpbmcuanNvbicpKTtcblxuY29uc3QgQ0RfVkVSID0gcHJvY2Vzcy5lbnYubnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfdmVyc2lvblxuICB8fCBwcm9jZXNzLmVudi5DSFJPTUVEUklWRVJfVkVSU0lPTlxuICB8fCBnZXRNb3N0UmVjZW50Q2hyb21lZHJpdmVyKCk7XG5jb25zdCBDRF9CQVNFX0RJUiA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICdjaHJvbWVkcml2ZXInKTtcbmNvbnN0IENEX0NETiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfY2hyb21lZHJpdmVyX2NkbnVybFxuICB8fCBwcm9jZXNzLmVudi5DSFJPTUVEUklWRVJfQ0ROVVJMXG4gIHx8ICdodHRwczovL2Nocm9tZWRyaXZlci5zdG9yYWdlLmdvb2dsZWFwaXMuY29tJztcbmNvbnN0IE9TID0ge1xuICBsaW51eDogJ2xpbnV4JyxcbiAgd2luZG93czogJ3dpbicsXG4gIG1hYzogJ21hYydcbn07XG5jb25zdCBYNjQgPSAnNjQnO1xuY29uc3QgWDg2ID0gJzMyJztcbmNvbnN0IE0xX0FSQ0hfU1VGRklYID0gJ19tMSc7XG5jb25zdCBDRF9FWEVDVVRBQkxFX1BSRUZJWCA9ICdjaHJvbWVkcml2ZXInO1xuXG5cbmZ1bmN0aW9uIGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIgKG1hcHBpbmcgPSBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcpIHtcbiAgaWYgKF8uaXNFbXB0eShtYXBwaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBtb3N0IHJlY2VudCBDaHJvbWVkcml2ZXIgdmVyc2lvbiBmcm9tIGVtcHR5IG1hcHBpbmcnKTtcbiAgfVxuICByZXR1cm4gXy5sYXN0KF8ua2V5cyhtYXBwaW5nKS5zb3J0KGNvbXBhcmVWZXJzaW9ucykpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVWZXJzaW9uIChhZGIsIGJ1bmRsZUlkKSB7XG4gIGNvbnN0IHt2ZXJzaW9uTmFtZX0gPSBhd2FpdCBhZGIuZ2V0UGFja2FnZUluZm8oYnVuZGxlSWQpO1xuICByZXR1cm4gdmVyc2lvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIGdldENocm9tZWRyaXZlckRpciAob3NOYW1lID0gZ2V0T3NOYW1lKCkpIHtcbiAgcmV0dXJuIHBhdGgucmVzb2x2ZShDRF9CQVNFX0RJUiwgb3NOYW1lKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCAob3NOYW1lID0gZ2V0T3NOYW1lKCkpIHtcbiAgY29uc3Qgcm9vdERpciA9IGdldENocm9tZWRyaXZlckRpcihvc05hbWUpO1xuICBjb25zdCBwYXRoU3VmZml4ID0gb3NOYW1lID09PSBPUy53aW5kb3dzID8gJy5leGUnIDogJyc7XG4gIGNvbnN0IHBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHtDRF9FWEVDVVRBQkxFX1BSRUZJWH0qJHtwYXRoU3VmZml4fWAsIHtcbiAgICBjd2Q6IHJvb3REaXIsXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgbm9jYXNlOiB0cnVlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIHN0cmljdDogZmFsc2UsXG4gIH0pO1xuICByZXR1cm4gXy5pc0VtcHR5KHBhdGhzKVxuICAgID8gcGF0aC5yZXNvbHZlKHJvb3REaXIsIGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSR7cGF0aFN1ZmZpeH1gKVxuICAgIDogXy5maXJzdChwYXRocyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlRGF0YSAodXJsLCBoZWFkZXJzLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIHJlc3BvbnNlVHlwZSA9ICd0ZXh0JyxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgIHVybCxcbiAgICBoZWFkZXJzLFxuICAgIHRpbWVvdXQsXG4gICAgcmVzcG9uc2VUeXBlLFxuICB9KSkuZGF0YTtcbn1cblxuY29uc3QgZ2V0T3NOYW1lID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldE9zTmFtZSAoKSB7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gT1Mud2luZG93cztcbiAgfVxuICBpZiAoc3lzdGVtLmlzTWFjKCkpIHtcbiAgICByZXR1cm4gT1MubWFjO1xuICB9XG4gIHJldHVybiBPUy5saW51eDtcbn0pO1xuXG5jb25zdCBnZXRPc0luZm8gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0T3NJbmZvICgpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBnZXRPc05hbWUoKSxcbiAgICBhcmNoOiBhd2FpdCBzeXN0ZW0uYXJjaCgpLFxuICAgIGhhcmR3YXJlTmFtZTogc3lzdGVtLmlzV2luZG93cygpID8gbnVsbCA6IF8udHJpbShhd2FpdCBleGVjKCd1bmFtZScsIFsnLW0nXSkpLFxuICB9O1xufSk7XG5cbmNvbnN0IGdldEJhc2VEcml2ZXJJbnN0YW5jZSA9IF8ubWVtb2l6ZSgoKSA9PiBuZXcgQmFzZURyaXZlcih7fSwgZmFsc2UpKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgbG9nIHByZWZpeCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIGxvZyBvd25lciBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmc/fSBzZXNzaW9uSWQgT3B0aW9uYWwgc2Vzc2lvbiBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUxvZ1ByZWZpeCAob2JqLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIHJldHVybiBnZXRCYXNlRHJpdmVySW5zdGFuY2UoKS5oZWxwZXJzLmdlbmVyYXRlRHJpdmVyTG9nUHJlZml4KG9iaiwgc2Vzc2lvbklkKTtcbn1cblxuXG5leHBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIGdldE9zTmFtZSxcbiAgQ0RfQkFTRV9ESVIsIENEX0NETiwgQ0RfVkVSLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIsXG4gIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLCBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLCBnZW5lcmF0ZUxvZ1ByZWZpeCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztB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
156
+ }
157
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDRF9DRE4iLCJwcm9jZXNzIiwiZW52IiwibnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfY2RudXJsIiwiQ0hST01FRFJJVkVSX0NETlVSTCIsIk9TIiwibGludXgiLCJ3aW5kb3dzIiwibWFjIiwiWDY0IiwiWDg2IiwiTTFfQVJDSF9TVUZGSVgiLCJDRF9FWEVDVVRBQkxFX1BSRUZJWCIsImdldE1vZHVsZVJvb3QiLCJfIiwibWVtb2l6ZSIsImN1cnJlbnREaXIiLCJwYXRoIiwiZGlybmFtZSIsInJlc29sdmUiLCJfX2ZpbGVuYW1lIiwiaXNBdEZzUm9vdCIsIm1hbmlmZXN0UGF0aCIsImpvaW4iLCJfZnMiLCJleGlzdHNTeW5jIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGVTeW5jIiwibmFtZSIsImlnbiIsImxlbmd0aCIsIkVycm9yIiwiQ0hST01FRFJJVkVSX0NIUk9NRV9NQVBQSU5HIiwicmVxdWlyZSIsIkNEX0JBU0VfRElSIiwiZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciIsIm1hcHBpbmciLCJpc0VtcHR5IiwibGFzdCIsImtleXMiLCJzb3J0IiwiY29tcGFyZVZlcnNpb25zIiwiQ0RfVkVSIiwibnBtX2NvbmZpZ19jaHJvbWVkcml2ZXJfdmVyc2lvbiIsIkNIUk9NRURSSVZFUl9WRVJTSU9OIiwiZ2V0Q2hyb21lVmVyc2lvbiIsImFkYiIsImJ1bmRsZUlkIiwidmVyc2lvbk5hbWUiLCJnZXRQYWNrYWdlSW5mbyIsImdldENocm9tZWRyaXZlckRpciIsIm9zTmFtZSIsImdldE9zTmFtZSIsImdldENocm9tZWRyaXZlckJpbmFyeVBhdGgiLCJyb290RGlyIiwicGF0aFN1ZmZpeCIsInBhdGhzIiwiZnMiLCJnbG9iIiwiY3dkIiwiYWJzb2x1dGUiLCJub2Nhc2UiLCJub2RpciIsInN0cmljdCIsImZpcnN0IiwicmV0cmlldmVEYXRhIiwidXJsIiwiaGVhZGVycyIsIm9wdHMiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwiYXhpb3MiLCJkYXRhIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwiaXNNYWMiLCJnZXRPc0luZm8iLCJhcmNoIiwiaGFyZHdhcmVOYW1lIiwidHJpbSIsImV4ZWMiLCJnZXRCYXNlRHJpdmVySW5zdGFuY2UiLCJCYXNlRHJpdmVyIiwiZ2VuZXJhdGVMb2dQcmVmaXgiLCJvYmoiLCJzZXNzaW9uSWQiLCJoZWxwZXJzIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHN5c3RlbSwgZnMgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJ2NvbXBhcmUtdmVyc2lvbnMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5cbmNvbnN0IENEX0NETiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfY2hyb21lZHJpdmVyX2NkbnVybFxuICB8fCBwcm9jZXNzLmVudi5DSFJPTUVEUklWRVJfQ0ROVVJMXG4gIHx8ICdodHRwczovL2Nocm9tZWRyaXZlci5zdG9yYWdlLmdvb2dsZWFwaXMuY29tJztcbmNvbnN0IE9TID0ge1xuICBsaW51eDogJ2xpbnV4JyxcbiAgd2luZG93czogJ3dpbicsXG4gIG1hYzogJ21hYydcbn07XG5jb25zdCBYNjQgPSAnNjQnO1xuY29uc3QgWDg2ID0gJzMyJztcbmNvbnN0IE0xX0FSQ0hfU1VGRklYID0gJ19tMSc7XG5jb25zdCBDRF9FWEVDVVRBQkxFX1BSRUZJWCA9ICdjaHJvbWVkcml2ZXInO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHBhdGggdG8gdGhlIGN1cnJlbnQgbW9kdWxlJ3Mgcm9vdCBmb2xkZXJcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIG1vZHVsZSByb290XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGN1cnJlbnQgbW9kdWxlIHJvb3QgZm9sZGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmNvbnN0IGdldE1vZHVsZVJvb3QgPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0TW9kdWxlUm9vdCAoKSB7XG4gIGxldCBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZShfX2ZpbGVuYW1lKSk7XG4gIGxldCBpc0F0RnNSb290ID0gZmFsc2U7XG4gIHdoaWxlICghaXNBdEZzUm9vdCkge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChfZnMuZXhpc3RzU3luYyhtYW5pZmVzdFBhdGgpICYmXG4gICAgICAgICAgSlNPTi5wYXJzZShfZnMucmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgJ3V0ZjgnKSkubmFtZSA9PT0gJ2FwcGl1bS1jaHJvbWVkcml2ZXInKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgIGlzQXRGc1Jvb3QgPSBjdXJyZW50RGlyLmxlbmd0aCA8PSBwYXRoLmRpcm5hbWUoY3VycmVudERpcikubGVuZ3RoO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSBhcHBpdW0tY2hyb21lZHJpdmVyIE5vZGUuanMgbW9kdWxlJyk7XG59KTtcblxuLy8gQ2hyb21lZHJpdmVyIHZlcnNpb246IG1pbmltdW0gQ2hyb21lIHZlcnNpb25cbmNvbnN0IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORyA9IHJlcXVpcmUocGF0aC5qb2luKGdldE1vZHVsZVJvb3QoKSwgJ2NvbmZpZycsICdtYXBwaW5nLmpzb24nKSk7XG5jb25zdCBDRF9CQVNFX0RJUiA9IHBhdGguam9pbihnZXRNb2R1bGVSb290KCksICdjaHJvbWVkcml2ZXInKTtcblxuZnVuY3Rpb24gZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlciAobWFwcGluZyA9IENIUk9NRURSSVZFUl9DSFJPTUVfTUFQUElORykge1xuICBpZiAoXy5pc0VtcHR5KG1hcHBpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IG1vc3QgcmVjZW50IENocm9tZWRyaXZlciB2ZXJzaW9uIGZyb20gZW1wdHkgbWFwcGluZycpO1xuICB9XG4gIHJldHVybiBfLmxhc3QoXy5rZXlzKG1hcHBpbmcpLnNvcnQoY29tcGFyZVZlcnNpb25zKSk7XG59XG5cbmNvbnN0IENEX1ZFUiA9IHByb2Nlc3MuZW52Lm5wbV9jb25maWdfY2hyb21lZHJpdmVyX3ZlcnNpb25cbiAgfHwgcHJvY2Vzcy5lbnYuQ0hST01FRFJJVkVSX1ZFUlNJT05cbiAgfHwgZ2V0TW9zdFJlY2VudENocm9tZWRyaXZlcigpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVWZXJzaW9uIChhZGIsIGJ1bmRsZUlkKSB7XG4gIGNvbnN0IHt2ZXJzaW9uTmFtZX0gPSBhd2FpdCBhZGIuZ2V0UGFja2FnZUluZm8oYnVuZGxlSWQpO1xuICByZXR1cm4gdmVyc2lvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIGdldENocm9tZWRyaXZlckRpciAob3NOYW1lID0gZ2V0T3NOYW1lKCkpIHtcbiAgcmV0dXJuIHBhdGgucmVzb2x2ZShDRF9CQVNFX0RJUiwgb3NOYW1lKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyQmluYXJ5UGF0aCAob3NOYW1lID0gZ2V0T3NOYW1lKCkpIHtcbiAgY29uc3Qgcm9vdERpciA9IGdldENocm9tZWRyaXZlckRpcihvc05hbWUpO1xuICBjb25zdCBwYXRoU3VmZml4ID0gb3NOYW1lID09PSBPUy53aW5kb3dzID8gJy5leGUnIDogJyc7XG4gIGNvbnN0IHBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHtDRF9FWEVDVVRBQkxFX1BSRUZJWH0qJHtwYXRoU3VmZml4fWAsIHtcbiAgICBjd2Q6IHJvb3REaXIsXG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgbm9jYXNlOiB0cnVlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIHN0cmljdDogZmFsc2UsXG4gIH0pO1xuICByZXR1cm4gXy5pc0VtcHR5KHBhdGhzKVxuICAgID8gcGF0aC5yZXNvbHZlKHJvb3REaXIsIGAke0NEX0VYRUNVVEFCTEVfUFJFRklYfSR7cGF0aFN1ZmZpeH1gKVxuICAgIDogXy5maXJzdChwYXRocyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlRGF0YSAodXJsLCBoZWFkZXJzLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIHJlc3BvbnNlVHlwZSA9ICd0ZXh0JyxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiAoYXdhaXQgYXhpb3Moe1xuICAgIHVybCxcbiAgICBoZWFkZXJzLFxuICAgIHRpbWVvdXQsXG4gICAgcmVzcG9uc2VUeXBlLFxuICB9KSkuZGF0YTtcbn1cblxuY29uc3QgZ2V0T3NOYW1lID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldE9zTmFtZSAoKSB7XG4gIGlmIChzeXN0ZW0uaXNXaW5kb3dzKCkpIHtcbiAgICByZXR1cm4gT1Mud2luZG93cztcbiAgfVxuICBpZiAoc3lzdGVtLmlzTWFjKCkpIHtcbiAgICByZXR1cm4gT1MubWFjO1xuICB9XG4gIHJldHVybiBPUy5saW51eDtcbn0pO1xuXG5jb25zdCBnZXRPc0luZm8gPSBfLm1lbW9pemUoYXN5bmMgZnVuY3Rpb24gZ2V0T3NJbmZvICgpIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBnZXRPc05hbWUoKSxcbiAgICBhcmNoOiBhd2FpdCBzeXN0ZW0uYXJjaCgpLFxuICAgIGhhcmR3YXJlTmFtZTogc3lzdGVtLmlzV2luZG93cygpID8gbnVsbCA6IF8udHJpbShhd2FpdCBleGVjKCd1bmFtZScsIFsnLW0nXSkpLFxuICB9O1xufSk7XG5cbmNvbnN0IGdldEJhc2VEcml2ZXJJbnN0YW5jZSA9IF8ubWVtb2l6ZSgoKSA9PiBuZXcgQmFzZURyaXZlcih7fSwgZmFsc2UpKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgbG9nIHByZWZpeCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqIGxvZyBvd25lciBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmc/fSBzZXNzaW9uSWQgT3B0aW9uYWwgc2Vzc2lvbiBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUxvZ1ByZWZpeCAob2JqLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gIHJldHVybiBnZXRCYXNlRHJpdmVySW5zdGFuY2UoKS5oZWxwZXJzLmdlbmVyYXRlRHJpdmVyTG9nUHJlZml4KG9iaiwgc2Vzc2lvbklkKTtcbn1cblxuXG5leHBvcnQge1xuICBnZXRDaHJvbWVWZXJzaW9uLCBnZXRDaHJvbWVkcml2ZXJEaXIsIGdldENocm9tZWRyaXZlckJpbmFyeVBhdGgsIGdldE9zTmFtZSxcbiAgQ0RfQkFTRV9ESVIsIENEX0NETiwgQ0RfVkVSLCBDSFJPTUVEUklWRVJfQ0hST01FX01BUFBJTkcsIGdldE1vc3RSZWNlbnRDaHJvbWVkcml2ZXIsXG4gIHJldHJpZXZlRGF0YSwgZ2V0T3NJbmZvLCBPUywgWDY0LCBYODYsIE0xX0FSQ0hfU1VGRklYLCBnZW5lcmF0ZUxvZ1ByZWZpeCxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDQyxHQUFSLENBQVlDLDhCQUFaLElBQ1ZGLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRSxtQkFERixJQUVWLDZDQUZMOztBQUdBLE1BQU1DLEVBQUUsR0FBRztFQUNUQyxLQUFLLEVBQUUsT0FERTtFQUVUQyxPQUFPLEVBQUUsS0FGQTtFQUdUQyxHQUFHLEVBQUU7QUFISSxDQUFYOztBQUtBLE1BQU1DLEdBQUcsR0FBRyxJQUFaOztBQUNBLE1BQU1DLEdBQUcsR0FBRyxJQUFaOztBQUNBLE1BQU1DLGNBQWMsR0FBRyxLQUF2Qjs7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxjQUE3Qjs7QUFRQSxNQUFNQyxhQUFhLEdBQUdDLGVBQUEsQ0FBRUMsT0FBRixDQUFVLFNBQVNGLGFBQVQsR0FBMEI7RUFDeEQsSUFBSUcsVUFBVSxHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUQsYUFBQSxDQUFLRSxPQUFMLENBQWFDLFVBQWIsQ0FBYixDQUFqQjs7RUFDQSxJQUFJQyxVQUFVLEdBQUcsS0FBakI7O0VBQ0EsT0FBTyxDQUFDQSxVQUFSLEVBQW9CO0lBQ2xCLE1BQU1DLFlBQVksR0FBR0wsYUFBQSxDQUFLTSxJQUFMLENBQVVQLFVBQVYsRUFBc0IsY0FBdEIsQ0FBckI7O0lBQ0EsSUFBSTtNQUNGLElBQUlRLFlBQUEsQ0FBSUMsVUFBSixDQUFlSCxZQUFmLEtBQ0FJLElBQUksQ0FBQ0MsS0FBTCxDQUFXSCxZQUFBLENBQUlJLFlBQUosQ0FBaUJOLFlBQWpCLEVBQStCLE1BQS9CLENBQVgsRUFBbURPLElBQW5ELEtBQTRELHFCQURoRSxFQUN1RjtRQUNyRixPQUFPYixVQUFQO01BQ0Q7SUFDRixDQUxELENBS0UsT0FBT2MsR0FBUCxFQUFZLENBQUU7O0lBQ2hCZCxVQUFVLEdBQUdDLGFBQUEsQ0FBS0MsT0FBTCxDQUFhRixVQUFiLENBQWI7SUFDQUssVUFBVSxHQUFHTCxVQUFVLENBQUNlLE1BQVgsSUFBcUJkLGFBQUEsQ0FBS0MsT0FBTCxDQUFhRixVQUFiLEVBQXlCZSxNQUEzRDtFQUNEOztFQUNELE1BQU0sSUFBSUMsS0FBSixDQUFVLHVFQUFWLENBQU47QUFDRCxDQWZxQixDQUF0Qjs7QUFrQkEsTUFBTUMsMkJBQTJCLEdBQUdDLE9BQU8sQ0FBQ2pCLGFBQUEsQ0FBS00sSUFBTCxDQUFVVixhQUFhLEVBQXZCLEVBQTJCLFFBQTNCLEVBQXFDLGNBQXJDLENBQUQsQ0FBM0M7Ozs7QUFDQSxNQUFNc0IsV0FBVyxHQUFHbEIsYUFBQSxDQUFLTSxJQUFMLENBQVVWLGFBQWEsRUFBdkIsRUFBMkIsY0FBM0IsQ0FBcEI7Ozs7QUFFQSxTQUFTdUIseUJBQVQsQ0FBb0NDLE9BQU8sR0FBR0osMkJBQTlDLEVBQTJFO0VBQ3pFLElBQUluQixlQUFBLENBQUV3QixPQUFGLENBQVVELE9BQVYsQ0FBSixFQUF3QjtJQUN0QixNQUFNLElBQUlMLEtBQUosQ0FBVSxtRUFBVixDQUFOO0VBQ0Q7O0VBQ0QsT0FBT2xCLGVBQUEsQ0FBRXlCLElBQUYsQ0FBT3pCLGVBQUEsQ0FBRTBCLElBQUYsQ0FBT0gsT0FBUCxFQUFnQkksSUFBaEIsQ0FBcUJDLGdDQUFyQixDQUFQLENBQVA7QUFDRDs7QUFFRCxNQUFNQyxNQUFNLEdBQUcxQyxPQUFPLENBQUNDLEdBQVIsQ0FBWTBDLCtCQUFaLElBQ1YzQyxPQUFPLENBQUNDLEdBQVIsQ0FBWTJDLG9CQURGLElBRVZULHlCQUF5QixFQUY5Qjs7O0FBSUEsZUFBZVUsZ0JBQWYsQ0FBaUNDLEdBQWpDLEVBQXNDQyxRQUF0QyxFQUFnRDtFQUM5QyxNQUFNO0lBQUNDO0VBQUQsSUFBZ0IsTUFBTUYsR0FBRyxDQUFDRyxjQUFKLENBQW1CRixRQUFuQixDQUE1QjtFQUNBLE9BQU9DLFdBQVA7QUFDRDs7QUFFRCxTQUFTRSxrQkFBVCxDQUE2QkMsTUFBTSxHQUFHQyxTQUFTLEVBQS9DLEVBQW1EO0VBQ2pELE9BQU9wQyxhQUFBLENBQUtFLE9BQUwsQ0FBYWdCLFdBQWIsRUFBMEJpQixNQUExQixDQUFQO0FBQ0Q7O0FBRUQsZUFBZUUseUJBQWYsQ0FBMENGLE1BQU0sR0FBR0MsU0FBUyxFQUE1RCxFQUFnRTtFQUM5RCxNQUFNRSxPQUFPLEdBQUdKLGtCQUFrQixDQUFDQyxNQUFELENBQWxDO0VBQ0EsTUFBTUksVUFBVSxHQUFHSixNQUFNLEtBQUsvQyxFQUFFLENBQUNFLE9BQWQsR0FBd0IsTUFBeEIsR0FBaUMsRUFBcEQ7RUFDQSxNQUFNa0QsS0FBSyxHQUFHLE1BQU1DLFdBQUEsQ0FBR0MsSUFBSCxDQUFTLEdBQUUvQyxvQkFBcUIsSUFBRzRDLFVBQVcsRUFBOUMsRUFBaUQ7SUFDbkVJLEdBQUcsRUFBRUwsT0FEOEQ7SUFFbkVNLFFBQVEsRUFBRSxJQUZ5RDtJQUduRUMsTUFBTSxFQUFFLElBSDJEO0lBSW5FQyxLQUFLLEVBQUUsSUFKNEQ7SUFLbkVDLE1BQU0sRUFBRTtFQUwyRCxDQUFqRCxDQUFwQjtFQU9BLE9BQU9sRCxlQUFBLENBQUV3QixPQUFGLENBQVVtQixLQUFWLElBQ0h4QyxhQUFBLENBQUtFLE9BQUwsQ0FBYW9DLE9BQWIsRUFBdUIsR0FBRTNDLG9CQUFxQixHQUFFNEMsVUFBVyxFQUEzRCxDQURHLEdBRUgxQyxlQUFBLENBQUVtRCxLQUFGLENBQVFSLEtBQVIsQ0FGSjtBQUdEOztBQUVELGVBQWVTLFlBQWYsQ0FBNkJDLEdBQTdCLEVBQWtDQyxPQUFsQyxFQUEyQ0MsSUFBSSxHQUFHLEVBQWxELEVBQXNEO0VBQ3BELE1BQU07SUFDSkMsT0FBTyxHQUFHLElBRE47SUFFSkMsWUFBWSxHQUFHO0VBRlgsSUFHRkYsSUFISjtFQUlBLE9BQU8sQ0FBQyxNQUFNLElBQUFHLGNBQUEsRUFBTTtJQUNsQkwsR0FEa0I7SUFFbEJDLE9BRmtCO0lBR2xCRSxPQUhrQjtJQUlsQkM7RUFKa0IsQ0FBTixDQUFQLEVBS0hFLElBTEo7QUFNRDs7QUFFRCxNQUFNcEIsU0FBUyxHQUFHdkMsZUFBQSxDQUFFQyxPQUFGLENBQVUsU0FBU3NDLFNBQVQsR0FBc0I7RUFDaEQsSUFBSXFCLGVBQUEsQ0FBT0MsU0FBUCxFQUFKLEVBQXdCO0lBQ3RCLE9BQU90RSxFQUFFLENBQUNFLE9BQVY7RUFDRDs7RUFDRCxJQUFJbUUsZUFBQSxDQUFPRSxLQUFQLEVBQUosRUFBb0I7SUFDbEIsT0FBT3ZFLEVBQUUsQ0FBQ0csR0FBVjtFQUNEOztFQUNELE9BQU9ILEVBQUUsQ0FBQ0MsS0FBVjtBQUNELENBUmlCLENBQWxCOzs7O0FBVUEsTUFBTXVFLFNBQVMsR0FBRy9ELGVBQUEsQ0FBRUMsT0FBRixDQUFVLGVBQWU4RCxTQUFmLEdBQTRCO0VBQ3RELE9BQU87SUFDTGhELElBQUksRUFBRXdCLFNBQVMsRUFEVjtJQUVMeUIsSUFBSSxFQUFFLE1BQU1KLGVBQUEsQ0FBT0ksSUFBUCxFQUZQO0lBR0xDLFlBQVksRUFBRUwsZUFBQSxDQUFPQyxTQUFQLEtBQXFCLElBQXJCLEdBQTRCN0QsZUFBQSxDQUFFa0UsSUFBRixDQUFPLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxPQUFMLEVBQWMsQ0FBQyxJQUFELENBQWQsQ0FBYjtFQUhyQyxDQUFQO0FBS0QsQ0FOaUIsQ0FBbEI7Ozs7QUFRQSxNQUFNQyxxQkFBcUIsR0FBR3BFLGVBQUEsQ0FBRUMsT0FBRixDQUFVLE1BQU0sSUFBSW9FLGtCQUFKLENBQWUsRUFBZixFQUFtQixLQUFuQixDQUFoQixDQUE5Qjs7QUFTQSxTQUFTQyxpQkFBVCxDQUE0QkMsR0FBNUIsRUFBaUNDLFNBQVMsR0FBRyxJQUE3QyxFQUFtRDtFQUNqRCxPQUFPSixxQkFBcUIsR0FBR0ssT0FBeEIsQ0FBZ0NDLHVCQUFoQyxDQUF3REgsR0FBeEQsRUFBNkRDLFNBQTdELENBQVA7QUFDRCJ9
@@ -1,4 +1,5 @@
1
1
  {
2
+ "105.0.5195.52": "105.0.5195.52",
2
3
  "104.0.5112.79": "104.0.5112.79",
3
4
  "103.0.5060.134": "103.0.5060.134",
4
5
  "103.0.5060.53": "103.0.5060.53",
package/lib/utils.js CHANGED
@@ -5,18 +5,8 @@ import path from 'path';
5
5
  import { compareVersions } from 'compare-versions';
6
6
  import axios from 'axios';
7
7
  import { exec } from 'teen_process';
8
+ import _fs from 'fs';
8
9
 
9
-
10
- const rootDir = path.basename(__dirname) === 'lib'
11
- ? path.resolve(__dirname, process.env.NO_PRECOMPILE ? '..' : '../..')
12
- : __dirname;
13
- // Chromedriver version: minimum Chrome version
14
- const CHROMEDRIVER_CHROME_MAPPING = require(path.resolve(rootDir, 'config', 'mapping.json'));
15
-
16
- const CD_VER = process.env.npm_config_chromedriver_version
17
- || process.env.CHROMEDRIVER_VERSION
18
- || getMostRecentChromedriver();
19
- const CD_BASE_DIR = path.resolve(__dirname, '..', '..', 'chromedriver');
20
10
  const CD_CDN = process.env.npm_config_chromedriver_cdnurl
21
11
  || process.env.CHROMEDRIVER_CDNURL
22
12
  || 'https://chromedriver.storage.googleapis.com';
@@ -30,6 +20,32 @@ const X86 = '32';
30
20
  const M1_ARCH_SUFFIX = '_m1';
31
21
  const CD_EXECUTABLE_PREFIX = 'chromedriver';
32
22
 
23
+ /**
24
+ * Calculates the path to the current module's root folder
25
+ *
26
+ * @returns {string} The full path to module root
27
+ * @throws {Error} If the current module root folder cannot be determined
28
+ */
29
+ const getModuleRoot = _.memoize(function getModuleRoot () {
30
+ let currentDir = path.dirname(path.resolve(__filename));
31
+ let isAtFsRoot = false;
32
+ while (!isAtFsRoot) {
33
+ const manifestPath = path.join(currentDir, 'package.json');
34
+ try {
35
+ if (_fs.existsSync(manifestPath) &&
36
+ JSON.parse(_fs.readFileSync(manifestPath, 'utf8')).name === 'appium-chromedriver') {
37
+ return currentDir;
38
+ }
39
+ } catch (ign) {}
40
+ currentDir = path.dirname(currentDir);
41
+ isAtFsRoot = currentDir.length <= path.dirname(currentDir).length;
42
+ }
43
+ throw new Error('Cannot find the root folder of the appium-chromedriver Node.js module');
44
+ });
45
+
46
+ // Chromedriver version: minimum Chrome version
47
+ const CHROMEDRIVER_CHROME_MAPPING = require(path.join(getModuleRoot(), 'config', 'mapping.json'));
48
+ const CD_BASE_DIR = path.join(getModuleRoot(), 'chromedriver');
33
49
 
34
50
  function getMostRecentChromedriver (mapping = CHROMEDRIVER_CHROME_MAPPING) {
35
51
  if (_.isEmpty(mapping)) {
@@ -38,6 +54,10 @@ function getMostRecentChromedriver (mapping = CHROMEDRIVER_CHROME_MAPPING) {
38
54
  return _.last(_.keys(mapping).sort(compareVersions));
39
55
  }
40
56
 
57
+ const CD_VER = process.env.npm_config_chromedriver_version
58
+ || process.env.CHROMEDRIVER_VERSION
59
+ || getMostRecentChromedriver();
60
+
41
61
  async function getChromeVersion (adb, bundleId) {
42
62
  const {versionName} = await adb.getPackageInfo(bundleId);
43
63
  return versionName;
package/package.json CHANGED
@@ -6,8 +6,8 @@
6
6
  "chrome",
7
7
  "android"
8
8
  ],
9
- "version": "5.1.7",
10
- "author": "appium",
9
+ "version": "5.2.2",
10
+ "author": "Appium Contributors",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
13
13
  "type": "git",
@@ -18,7 +18,17 @@
18
18
  },
19
19
  "engines": {
20
20
  "node": ">=14",
21
- "npm": ">=6"
21
+ "npm": ">=8"
22
+ },
23
+ "lint-staged": {
24
+ "*.js": [
25
+ "eslint --fix"
26
+ ]
27
+ },
28
+ "prettier": {
29
+ "bracketSpacing": false,
30
+ "printWidth": 100,
31
+ "singleQuote": true
22
32
  },
23
33
  "main": "./build/index.js",
24
34
  "directories": {
@@ -49,39 +59,46 @@
49
59
  },
50
60
  "pre-commit": [
51
61
  "precommit-msg",
52
- "precommit-test"
62
+ "precommit-lint"
53
63
  ],
54
64
  "scripts": {
55
- "clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
65
+ "build": "rimraf build && babel --out-dir=build/lib lib && babel --out-dir=build index.js",
66
+ "dev": "npm run build -- --watch",
67
+ "lint": "eslint .",
68
+ "lint:fix": "npm run lint -- --fix",
56
69
  "postinstall": "node install-npm.js",
57
- "prepublishOnly": "gulp prepublish",
58
- "test": "gulp once",
59
- "watch": "gulp watch",
60
- "build": "gulp transpile",
61
- "coverage": "gulp coveralls",
62
- "e2e-test": "gulp e2e-test",
63
- "chromedriver": "node install-npm.js",
64
- "chromedriver_all": "node install-npm.js --all",
65
70
  "precommit-msg": "echo 'Pre-commit checks...' && exit 0",
66
- "precommit-test": "REPORTER=dot gulp once",
67
- "lint": "gulp lint",
68
- "lint:fix": "gulp lint --fix"
71
+ "precommit-lint": "lint-staged",
72
+ "prepare": "npm run build",
73
+ "test": "mocha --exit --timeout 1m \"./test/unit/**/*-specs.js\"",
74
+ "e2e-test": "mocha --exit --timeout 10m \"./test/functional/**/*-specs.js\""
69
75
  },
70
76
  "peerDependencies": {
71
77
  "appium": "^2.0.0-beta.40"
72
78
  },
73
79
  "devDependencies": {
74
- "@appium/gulp-plugins": "^7.0.0",
75
80
  "@appium/eslint-config-appium": "^6.0.0",
76
- "@appium/test-support": "^1.0.0",
81
+ "@appium/test-support": "^2.0.0",
82
+ "@babel/cli": "^7.18.10",
83
+ "@babel/core": "^7.18.10",
84
+ "@babel/eslint-parser": "^7.18.9",
85
+ "@babel/plugin-transform-runtime": "^7.18.10",
86
+ "@babel/preset-env": "^7.18.10",
87
+ "@babel/register": "^7.18.9",
77
88
  "@semantic-release/git": "^10.0.1",
78
- "appium": "^2.0.0-beta.40",
89
+ "babel-plugin-source-map-support": "^2.2.0",
79
90
  "chai": "^4.1.2",
80
91
  "chai-as-promised": "^7.1.1",
92
+ "eslint": "^7.32.0",
81
93
  "eslint-config-prettier": "^8.5.0",
82
- "gulp": "^4.0.0",
94
+ "eslint-plugin-import": "^2.26.0",
95
+ "eslint-plugin-mocha": "^9.0.0",
96
+ "eslint-plugin-promise": "^6.0.0",
97
+ "lint-staged": "^13.0.3",
83
98
  "mocha": "^10.0.0",
84
99
  "pre-commit": "^1.1.3",
100
+ "prettier": "^2.7.1",
101
+ "rimraf": "^3.0.2",
85
102
  "semantic-release": "^19.0.2",
86
103
  "sinon": "^14.0.0"
87
104
  }