appium-adb 8.14.0 → 8.16.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.
@@ -25,6 +25,8 @@ var _helpers = require("../helpers.js");
25
25
 
26
26
  var _asyncLock = _interopRequireDefault(require("async-lock"));
27
27
 
28
+ var _bluebird = _interopRequireDefault(require("bluebird"));
29
+
28
30
  const BASE_APK = 'base-master.apk';
29
31
 
30
32
  const LANGUAGE_APK = lang => `base-${lang}.apk`;
@@ -34,6 +36,7 @@ const APKS_CACHE = new _lruCache.default({
34
36
  dispose: (apksHash, extractedFilesRoot) => _appiumSupport.fs.rimraf(extractedFilesRoot)
35
37
  });
36
38
  const APKS_CACHE_GUARD = new _asyncLock.default();
39
+ const BUNDLETOOL_TIMEOUT_MS = 4 * 60 * 1000;
37
40
  process.on('exit', () => {
38
41
  if (APKS_CACHE.itemCount === 0) {
39
42
  return;
@@ -94,6 +97,15 @@ let apksUtilsMethods = {};
94
97
  apksUtilsMethods.execBundletool = async function execBundletool(args, errorMsg) {
95
98
  await this.initBundletool();
96
99
  args = ['-jar', this.binaries.bundletool, ...args];
100
+ const env = process.env;
101
+
102
+ if (this.adbPort) {
103
+ env.ANDROID_ADB_SERVER_PORT = `${this.adbPort}`;
104
+ }
105
+
106
+ if (this.adbHost) {
107
+ env.ANDROID_ADB_SERVER_HOST = this.adbHost;
108
+ }
97
109
 
98
110
  _logger.default.debug(`Executing bundletool with arguments: ${JSON.stringify(args)}`);
99
111
 
@@ -102,7 +114,10 @@ apksUtilsMethods.execBundletool = async function execBundletool(args, errorMsg)
102
114
  try {
103
115
  ({
104
116
  stdout
105
- } = await (0, _teen_process.exec)(await (0, _helpers.getJavaForOs)(), args));
117
+ } = await (0, _teen_process.exec)(await (0, _helpers.getJavaForOs)(), args, {
118
+ env,
119
+ timeout: BUNDLETOOL_TIMEOUT_MS
120
+ }));
106
121
 
107
122
  _logger.default.debug(`Command stdout: ${_lodash.default.truncate(stdout, {
108
123
  length: 300
@@ -140,39 +155,27 @@ apksUtilsMethods.installMultipleApks = async function installMultipleApks(apkPat
140
155
  };
141
156
 
142
157
  apksUtilsMethods.installApks = async function installApks(apks, options = {}) {
143
- options = _lodash.default.cloneDeep(options);
144
-
145
- _lodash.default.defaults(options, {
146
- timeout: this.adbExecTimeout === _helpers.DEFAULT_ADB_EXEC_TIMEOUT ? _helpers.APKS_INSTALL_TIMEOUT : this.adbExecTimeout,
147
- timeoutCapName: 'androidInstallTimeout'
148
- });
149
-
150
- Object.assign(options, {
151
- replace: true
152
- });
153
- const tmpRoot = await _appiumSupport.tempDir.openDir();
154
-
155
- try {
156
- const specPath = await this.getDeviceSpec(_path.default.resolve(tmpRoot, 'deviceSpec.json'));
157
- const args = ['extract-apks', '--apks', apks, '--output-dir', tmpRoot, '--device-spec', specPath];
158
-
159
- _logger.default.debug(`Extracting the apk files from '${apks}'`);
160
-
161
- await this.execBundletool(args, `Cannot extract the application bundle at '${apks}'`);
162
- const apkPathsToInstall = (await _appiumSupport.fs.readdir(tmpRoot)).filter(name => name.endsWith(_helpers.APK_EXTENSION)).map(name => _path.default.resolve(tmpRoot, name));
158
+ const {
159
+ grantPermissions,
160
+ allowTestPackages,
161
+ timeout
162
+ } = options;
163
+ const args = ['install-apks', '--adb', this.executable.path, '--apks', apks, '--timeout-millis', timeout || _helpers.APKS_INSTALL_TIMEOUT, '--device-id', this.curDeviceId];
164
+
165
+ if (allowTestPackages) {
166
+ args.push('--allow-test-only');
167
+ }
163
168
 
164
- _logger.default.debug('Got the following apk files to install: ' + JSON.stringify(apkPathsToInstall.map(x => _path.default.basename(x))));
169
+ const tasks = [this.execBundletool(args, `Cannot install '${_path.default.basename(apks)}' to the device ${this.curDeviceId}`)];
165
170
 
166
- const output = await this.installMultipleApks(apkPathsToInstall, options);
167
- const truncatedOutput = !_lodash.default.isString(output) || output.length <= 300 ? output : `${output.substr(0, 150)}...${output.substr(output.length - 150)}`;
171
+ if (grantPermissions) {
172
+ tasks.push(this.getApkInfo(apks));
173
+ }
168
174
 
169
- _logger.default.debug(`Install command stdout: ${truncatedOutput}`);
175
+ const [, apkInfo] = await _bluebird.default.all(tasks);
170
176
 
171
- if (_lodash.default.includes(output, 'INSTALL_FAILED')) {
172
- throw new Error(output);
173
- }
174
- } finally {
175
- await _appiumSupport.fs.rimraf(tmpRoot);
177
+ if (grantPermissions && apkInfo) {
178
+ await this.grantAllPermissions(apkInfo.name);
176
179
  }
177
180
  };
178
181
 
@@ -214,4 +217,4 @@ var _default = apksUtilsMethods;
214
217
  exports.default = _default;require('source-map-support').install();
215
218
 
216
219
 
217
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGtzLXV0aWxzLmpzIl0sIm5hbWVzIjpbIkJBU0VfQVBLIiwiTEFOR1VBR0VfQVBLIiwibGFuZyIsIkFQS1NfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiYXBrc0hhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFQS1NfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJwcm9jZXNzIiwib24iLCJpdGVtQ291bnQiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiYXBrc1V0aWxzTWV0aG9kcyIsImV4ZWNCdW5kbGV0b29sIiwiYXJncyIsImVycm9yTXNnIiwiaW5pdEJ1bmRsZXRvb2wiLCJiaW5hcmllcyIsImJ1bmRsZXRvb2wiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Rkb3V0IiwidHJ1bmNhdGUiLCJzdGRlcnIiLCJnZXREZXZpY2VTcGVjIiwic3BlY0xvY2F0aW9uIiwiZXhlY3V0YWJsZSIsImN1ckRldmljZUlkIiwiaW5zdGFsbE11bHRpcGxlQXBrcyIsImFwa1BhdGhzVG9JbnN0YWxsIiwib3B0aW9ucyIsImluc3RhbGxBcmdzIiwiZ2V0QXBpTGV2ZWwiLCJhZGJFeGVjIiwidGltZW91dCIsInRpbWVvdXRDYXBOYW1lIiwiaW5zdGFsbEFwa3MiLCJjbG9uZURlZXAiLCJkZWZhdWx0cyIsImFkYkV4ZWNUaW1lb3V0IiwiREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIiwiQVBLU19JTlNUQUxMX1RJTUVPVVQiLCJPYmplY3QiLCJhc3NpZ24iLCJyZXBsYWNlIiwic3BlY1BhdGgiLCJyZWFkZGlyIiwiZmlsdGVyIiwibmFtZSIsImVuZHNXaXRoIiwiQVBLX0VYVEVOU0lPTiIsIm1hcCIsIngiLCJiYXNlbmFtZSIsIm91dHB1dCIsInRydW5jYXRlZE91dHB1dCIsImlzU3RyaW5nIiwic3Vic3RyIiwiaW5jbHVkZXMiLCJleHRyYWN0QmFzZUFwayIsImV4dHJhY3RMYW5ndWFnZUFwayIsImxhbmd1YWdlIiwiaW5mbyIsImRlZmF1bHRMYW5ndWFnZXMiLCJpZ24iLCJpc1Rlc3RQYWNrYWdlT25seUVycm9yIiwidGVzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsaUJBQWpCOztBQUNBLE1BQU1DLFlBQVksR0FBSUMsSUFBRCxJQUFXLFFBQU9BLElBQUssTUFBNUM7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFDekJDLEVBQUFBLEdBQUcsRUFBRSxFQURvQjtBQUV6QkMsRUFBQUEsT0FBTyxFQUFFLENBQUNDLFFBQUQsRUFBV0Msa0JBQVgsS0FBa0NDLGtCQUFHQyxNQUFILENBQVVGLGtCQUFWO0FBRmxCLENBQVIsQ0FBbkI7QUFJQSxNQUFNRyxnQkFBZ0IsR0FBRyxJQUFJQyxrQkFBSixFQUF6QjtBQUVBQyxPQUFPLENBQUNDLEVBQVIsQ0FBVyxNQUFYLEVBQW1CLE1BQU07QUFDdkIsTUFBSVgsVUFBVSxDQUFDWSxTQUFYLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCO0FBQ0Q7O0FBRUQsUUFBTUMsS0FBSyxHQUFHYixVQUFVLENBQUNjLE1BQVgsRUFBZDs7QUFDQUMsa0JBQUlDLEtBQUosQ0FBVyx5QkFBd0JILEtBQUssQ0FBQ0ksTUFBTyxnQkFBdEMsR0FDUkMsb0JBQUtDLFNBQUwsQ0FBZSxTQUFm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QyxDQUFQO0FBQ0QsQ0FGRDs7ZUFJZTFDLGdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGdldEphdmFGb3JPcywgdW56aXBGaWxlLCBidWlsZEluc3RhbGxBcmdzLFxuICBBUEtTX0lOU1RBTExfVElNRU9VVCwgQVBLX0VYVEVOU0lPTixcbiAgREVGQVVMVF9BREJfRVhFQ19USU1FT1VUIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuXG5jb25zdCBCQVNFX0FQSyA9ICdiYXNlLW1hc3Rlci5hcGsnO1xuY29uc3QgTEFOR1VBR0VfQVBLID0gKGxhbmcpID0+IGBiYXNlLSR7bGFuZ30uYXBrYDtcbmNvbnN0IEFQS1NfQ0FDSEUgPSBuZXcgTFJVKHtcbiAgbWF4OiAxMCxcbiAgZGlzcG9zZTogKGFwa3NIYXNoLCBleHRyYWN0ZWRGaWxlc1Jvb3QpID0+IGZzLnJpbXJhZihleHRyYWN0ZWRGaWxlc1Jvb3QpLFxufSk7XG5jb25zdCBBUEtTX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoQVBLU19DQUNIRS5pdGVtQ291bnQgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRocyA9IEFQS1NfQ0FDSEUudmFsdWVzKCk7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBjbGVhbnVwIG9mICR7cGF0aHMubGVuZ3RofSBjYWNoZWQgLmFwa3MgYCArXG4gICAgdXRpbC5wbHVyYWxpemUoJ3BhY2thZ2UnLCBwYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRpY3VsYXIgYXBrcyBwYWNrYWdlIGludG8gYSB0ZW1wb3JhcnkgZm9sZGVyLFxuICogZmluZHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gdGhpcyBhcGsuXG4gKiBUaGUgcmVzdWx0aW5nIHRlbXBvcmFyeSBwYXRoLCB3aGVyZSB0aGUgLmFwa3MgZmlsZSBoYXMgYmVlbiBleHRyYWN0ZWQsXG4gKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBpbnRlcm5hbCBMUlUgY2FjaGUgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PFN0cmluZz59IGRzdFBhdGggLSBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZmlsZSxcbiAqIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGV4dHJhY3RlZCwgd2hlcmUgZWFjaCBwYXRoIGNvbXBvbmVudCBpcyBhbiBhcnJheSBpdGVtXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGV4dHJhY3RlZCBmaWxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHJlcXVlc3RlZCBpdGVtIGRvZXMgbm90IGV4aXN0IGluIHRoZSBleHRyYWN0ZWQgYXJjaGl2ZSBvciB0aGUgcHJvdmlkZXNcbiAqIGFwa3MgZmlsZSBpcyBub3QgYSB2YWxpZCBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEZyb21BcGtzIChhcGtzLCBkc3RQYXRoKSB7XG4gIGlmICghXy5pc0FycmF5KGRzdFBhdGgpKSB7XG4gICAgZHN0UGF0aCA9IFtkc3RQYXRoXTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBBUEtTX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBrcywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgaGFzIGJlZW4gcmVwbGFjZWQsXG4gICAgLy8gc28gd2UgbmVlZCB0byBrZWVwIHRoZSBoYXNoIHN1bXMgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgcGF0aHNcbiAgICAvLyBhcyBjYWNoaW5nIGtleXNcbiAgICBjb25zdCBhcGtzSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBrcyk7XG4gICAgbG9nLmRlYnVnKGBDYWxjdWxhdGVkICcke2Fwa3N9JyBoYXNoOiAke2Fwa3NIYXNofWApO1xuXG4gICAgaWYgKEFQS1NfQ0FDSEUuaGFzKGFwa3NIYXNoKSkge1xuICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShBUEtTX0NBQ0hFLmdldChhcGtzSGFzaCksIC4uLmRzdFBhdGgpO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICAgIH1cbiAgICAgIEFQS1NfQ0FDSEUuZGVsKGFwa3NIYXNoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgbG9nLmRlYnVnKGBVbnBhY2tpbmcgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke2Fwa3N9JyB0byAnJHt0bXBSb290fSdgKTtcbiAgICBhd2FpdCB1bnppcEZpbGUoYXBrcywgdG1wUm9vdCk7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAuLi5kc3RQYXRoKTtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RzdFBhdGguam9pbihwYXRoLnNlcCl9IGNhbm5vdCBiZSBmb3VuZCBpbiAnJHthcGtzfScgYnVuZGxlLiBgICtcbiAgICAgICAgYERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBhIHZhbGlkIGFwcGxpY2F0aW9uIGJ1bmRsZT9gKTtcbiAgICB9XG4gICAgQVBLU19DQUNIRS5zZXQoYXBrc0hhc2gsIHRtcFJvb3QpO1xuICAgIHJldHVybiByZXN1bHRQYXRoO1xuICB9KTtcbn1cblxubGV0IGFwa3NVdGlsc01ldGhvZHMgPSB7fTtcblxuLyoqXG4gKiBFeGVjdXRlcyBidW5kbGV0b29sIHV0aWxpdHkgd2l0aCBnaXZlbiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBzdGRvdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGFyZ3MgLSB0aGUgbGlzdCBvZiBidW5kbGV0b29sIGFyZ3VtZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIC0gVGhlIGN1c3RvbWl6ZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhY3R1YWwgY29tbWFuZCBzdGRvdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGV0b29sIGphciBkb2VzIG5vdCBleGlzdCBpbiBQQVRIIG9yIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZVxuICogZXhlY3V0aW5nIGl0XG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXhlY0J1bmRsZXRvb2wgPSBhc3luYyBmdW5jdGlvbiBleGVjQnVuZGxldG9vbCAoYXJncywgZXJyb3JNc2cpIHtcbiAgYXdhaXQgdGhpcy5pbml0QnVuZGxldG9vbCgpO1xuICBhcmdzID0gW1xuICAgICctamFyJywgdGhpcy5iaW5hcmllcy5idW5kbGV0b29sLFxuICAgIC4uLmFyZ3NcbiAgXTtcbiAgbG9nLmRlYnVnKGBFeGVjdXRpbmcgYnVuZGxldG9vbCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgbGV0IHN0ZG91dDtcbiAgdHJ5IHtcbiAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKGF3YWl0IGdldEphdmFGb3JPcygpLCBhcmdzKSk7XG4gICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtfLnRydW5jYXRlKHN0ZG91dCwge2xlbmd0aDogMzAwfSl9YCk7XG4gICAgcmV0dXJuIHN0ZG91dDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlLnN0ZG91dCkge1xuICAgICAgbG9nLmRlYnVnKGBDb21tYW5kIHN0ZG91dDogJHtlLnN0ZG91dH1gKTtcbiAgICB9XG4gICAgaWYgKGUuc3RkZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3RkZXJyOiAke2Uuc3RkZXJyfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JNc2d9LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWNMb2NhdGlvbiAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGdlbmVyYXRlZCBkZXZpY2Ugc3BlYyBsb2NhdGlvblxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHNhbWUgYHNwZWNMb2NhdGlvbmAgdmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlldmUgdGhlIHNwZWMgZm9yIHRoZSBjdXJyZW50IGRldmljZVxuICovXG5hcGtzVXRpbHNNZXRob2RzLmdldERldmljZVNwZWMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VTcGVjIChzcGVjTG9jYXRpb24pIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnZ2V0LWRldmljZS1zcGVjJyxcbiAgICAnLS1hZGInLCB0aGlzLmV4ZWN1dGFibGUucGF0aCxcbiAgICAnLS1kZXZpY2UtaWQnLCB0aGlzLmN1ckRldmljZUlkLFxuICAgICctLW91dHB1dCcsIHNwZWNMb2NhdGlvbixcbiAgXTtcbiAgbG9nLmRlYnVnKGBHZXR0aW5nIHRoZSBzcGVjIGZvciB0aGUgZGV2aWNlICcke3RoaXMuY3VyRGV2aWNlSWR9J2ApO1xuICBhd2FpdCB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsICdDYW5ub3QgcmV0cmlldmUgdGhlIGRldmljZSBzcGVjJyk7XG4gIHJldHVybiBzcGVjTG9jYXRpb247XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFsyMDAwMF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVvdXRDYXBOYW1lIFthbmRyb2lkSW5zdGFsbFRpbWVvdXRdIC0gVGhlIHRpbWVvdXQgb3B0aW9uIG5hbWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzIGNhbiBpbmNyZWFzZSB0aGUgdGltZW91dC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcGtzIGludG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcGtQYXRoc1RvSW5zdGFsbCAtIFRoZSBmdWxsIHBhdGhzIHRvIGluc3RhbGwgYXBrc1xuICogQHBhcmFtIHs/aW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnN9IG9wdGlvbnMgLSBJbnN0YWxsYXRpb24gb3B0aW9uc1xuICovXG5hcGtzVXRpbHNNZXRob2RzLmluc3RhbGxNdWx0aXBsZUFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsTXVsdGlwbGVBcGtzIChhcGtQYXRoc1RvSW5zdGFsbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluc3RhbGxBcmdzID0gYnVpbGRJbnN0YWxsQXJncyhhd2FpdCB0aGlzLmdldEFwaUxldmVsKCksIG9wdGlvbnMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGJFeGVjKFsnaW5zdGFsbC1tdWx0aXBsZScsIC4uLmluc3RhbGxBcmdzLCAuLi5hcGtQYXRoc1RvSW5zdGFsbF0sIHtcbiAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQsXG4gICAgdGltZW91dENhcE5hbWU6IG9wdGlvbnMudGltZW91dENhcE5hbWUsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gLmFwa3MgcGFja2FnZSBpbnRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGtzIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwa3MgZmlsZVxuICogQHBhcmFtIHs/aW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnN9IG9wdGlvbnMgLSBJbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSAuYXBrcyBidW5kbGUgY2Fubm90IGJlIGluc3RhbGxlZFxuICovXG5hcGtzVXRpbHNNZXRob2RzLmluc3RhbGxBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwa3MgKGFwa3MsIG9wdGlvbnMgPSB7fSkge1xuICBvcHRpb25zID0gXy5jbG9uZURlZXAob3B0aW9ucyk7XG4gIF8uZGVmYXVsdHMob3B0aW9ucywge1xuICAgIHRpbWVvdXQ6IHRoaXMuYWRiRXhlY1RpbWVvdXQgPT09IERFRkFVTFRfQURCX0VYRUNfVElNRU9VVCA/IEFQS1NfSU5TVEFMTF9USU1FT1VUIDogdGhpcy5hZGJFeGVjVGltZW91dCxcbiAgICB0aW1lb3V0Q2FwTmFtZTogJ2FuZHJvaWRJbnN0YWxsVGltZW91dCcsXG4gIH0pO1xuICBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHtyZXBsYWNlOiB0cnVlfSk7XG5cbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICB0cnkge1xuICAgIGNvbnN0IHNwZWNQYXRoID0gYXdhaXQgdGhpcy5nZXREZXZpY2VTcGVjKHBhdGgucmVzb2x2ZSh0bXBSb290LCAnZGV2aWNlU3BlYy5qc29uJykpO1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAnZXh0cmFjdC1hcGtzJyxcbiAgICAgICctLWFwa3MnLCBhcGtzLFxuICAgICAgJy0tb3V0cHV0LWRpcicsIHRtcFJvb3QsXG4gICAgICAnLS1kZXZpY2Utc3BlYycsIHNwZWNQYXRoLFxuICAgIF07XG4gICAgbG9nLmRlYnVnKGBFeHRyYWN0aW5nIHRoZSBhcGsgZmlsZXMgZnJvbSAnJHthcGtzfSdgKTtcbiAgICBhd2FpdCB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsIGBDYW5ub3QgZXh0cmFjdCB0aGUgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke2Fwa3N9J2ApO1xuICAgIGNvbnN0IGFwa1BhdGhzVG9JbnN0YWxsID0gKGF3YWl0IGZzLnJlYWRkaXIodG1wUm9vdCkpXG4gICAgICAuZmlsdGVyKChuYW1lKSA9PiBuYW1lLmVuZHNXaXRoKEFQS19FWFRFTlNJT04pKVxuICAgICAgLm1hcCgobmFtZSkgPT4gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIG5hbWUpKTtcbiAgICBsb2cuZGVidWcoJ0dvdCB0aGUgZm9sbG93aW5nIGFwayBmaWxlcyB0byBpbnN0YWxsOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGFwa1BhdGhzVG9JbnN0YWxsLm1hcCgoeCkgPT4gcGF0aC5iYXNlbmFtZSh4KSkpKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrUGF0aHNUb0luc3RhbGwsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHRydW5jYXRlZE91dHB1dCA9ICghXy5pc1N0cmluZyhvdXRwdXQpIHx8IG91dHB1dC5sZW5ndGggPD0gMzAwKSA/XG4gICAgICBvdXRwdXQgOiBgJHtvdXRwdXQuc3Vic3RyKDAsIDE1MCl9Li4uJHtvdXRwdXQuc3Vic3RyKG91dHB1dC5sZW5ndGggLSAxNTApfWA7XG4gICAgbG9nLmRlYnVnKGBJbnN0YWxsIGNvbW1hbmQgc3Rkb3V0OiAke3RydW5jYXRlZE91dHB1dH1gKTtcbiAgICBpZiAoXy5pbmNsdWRlcyhvdXRwdXQsICdJTlNUQUxMX0ZBSUxFRCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0KTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIG1hc3RlciAuYXBrIGZpbGUgaW5zaWRlIHRoZSBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBtYXN0ZXIgYnVuZGxlIC5hcGtcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdEJhc2VBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0QmFzZUFwayAoYXBrcykge1xuICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgQkFTRV9BUEtdKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwaywgd2hpY2ggY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGluIHRoZSAuYXBrcyBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIGFiYnJldmlhdGlvbi4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXNcbiAqIGdvaW5nIHRvIGJlIHNlbGVjdGVkIGlmIGl0IGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxhbmd1YWdlIC5hcGsgb3IgdGhlIG1hc3RlciAuYXBrXG4gKiBpZiBsYW5ndWFnZSBzcGxpdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhlIGJ1bmRsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdExhbmd1YWdlQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdExhbmd1YWdlQXBrIChhcGtzLCBsYW5ndWFnZSA9IG51bGwpIHtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBMQU5HVUFHRV9BUEsobGFuZ3VhZ2UpXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBsb2cuaW5mbyhgQXNzdW1pbmcgdGhhdCBzcGxpdHRpbmcgYnkgbGFuZ3VhZ2UgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSAnJHthcGtzfScgYnVuZGxlIGAgK1xuICAgICAgICBgYW5kIHJldHVybmluZyB0aGUgbWFpbiBhcGsgaW5zdGVhZGApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBrcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmYXVsdExhbmd1YWdlcyA9IFsnZW4nLCAnZW5fdXMnXTtcbiAgZm9yIChjb25zdCBsYW5nIG9mIGRlZmF1bHRMYW5ndWFnZXMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIExBTkdVQUdFX0FQSyhsYW5nKV0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGxvZy5pbmZvKGBDYW5ub3QgZmluZCBhbnkgc3BsaXQgYXBrIGZvciB0aGUgZGVmYXVsdCBsYW5ndWFnZXMgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0TGFuZ3VhZ2VzKX0uIGAgK1xuICAgIGBSZXR1cm5pbmcgdGhlIG1haW4gYXBrIGluc3RlYWQuYCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwa3MpO1xufTtcblxuYXBrc1V0aWxzTWV0aG9kcy5pc1Rlc3RQYWNrYWdlT25seUVycm9yID0gZnVuY3Rpb24gKG91dHB1dCkge1xuICByZXR1cm4gL1xcW0lOU1RBTExfRkFJTEVEX1RFU1RfT05MWVxcXS8udGVzdChvdXRwdXQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBrc1V0aWxzTWV0aG9kcztcbiJdLCJmaWxlIjoibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
220
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGtzLXV0aWxzLmpzIl0sIm5hbWVzIjpbIkJBU0VfQVBLIiwiTEFOR1VBR0VfQVBLIiwibGFuZyIsIkFQS1NfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiYXBrc0hhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFQS1NfQ0FDSEVfR1VBUkQiLCJBc3luY0xvY2siLCJCVU5ETEVUT09MX1RJTUVPVVRfTVMiLCJwcm9jZXNzIiwib24iLCJpdGVtQ291bnQiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdEZyb21BcGtzIiwiYXBrcyIsImRzdFBhdGgiLCJfIiwiaXNBcnJheSIsImFjcXVpcmUiLCJoYXNoIiwiaGFzIiwicmVzdWx0UGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZXhpc3RzIiwiZGVsIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiRXJyb3IiLCJqb2luIiwic2VwIiwic2V0IiwiYXBrc1V0aWxzTWV0aG9kcyIsImV4ZWNCdW5kbGV0b29sIiwiYXJncyIsImVycm9yTXNnIiwiaW5pdEJ1bmRsZXRvb2wiLCJiaW5hcmllcyIsImJ1bmRsZXRvb2wiLCJlbnYiLCJhZGJQb3J0IiwiQU5EUk9JRF9BREJfU0VSVkVSX1BPUlQiLCJhZGJIb3N0IiwiQU5EUk9JRF9BREJfU0VSVkVSX0hPU1QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Rkb3V0IiwidGltZW91dCIsInRydW5jYXRlIiwic3RkZXJyIiwiZ2V0RGV2aWNlU3BlYyIsInNwZWNMb2NhdGlvbiIsImV4ZWN1dGFibGUiLCJjdXJEZXZpY2VJZCIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJhcGtQYXRoc1RvSW5zdGFsbCIsIm9wdGlvbnMiLCJpbnN0YWxsQXJncyIsImdldEFwaUxldmVsIiwiYWRiRXhlYyIsInRpbWVvdXRDYXBOYW1lIiwiaW5zdGFsbEFwa3MiLCJncmFudFBlcm1pc3Npb25zIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJBUEtTX0lOU1RBTExfVElNRU9VVCIsInB1c2giLCJ0YXNrcyIsImJhc2VuYW1lIiwiZ2V0QXBrSW5mbyIsImFwa0luZm8iLCJCIiwiYWxsIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsIm5hbWUiLCJleHRyYWN0QmFzZUFwayIsImV4dHJhY3RMYW5ndWFnZUFwayIsImxhbmd1YWdlIiwiaW5mbyIsImRlZmF1bHRMYW5ndWFnZXMiLCJpZ24iLCJpc1Rlc3RQYWNrYWdlT25seUVycm9yIiwib3V0cHV0IiwidGVzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsaUJBQWpCOztBQUNBLE1BQU1DLFlBQVksR0FBSUMsSUFBRCxJQUFXLFFBQU9BLElBQUssTUFBNUM7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFDekJDLEVBQUFBLEdBQUcsRUFBRSxFQURvQjtBQUV6QkMsRUFBQUEsT0FBTyxFQUFFLENBQUNDLFFBQUQsRUFBV0Msa0JBQVgsS0FBa0NDLGtCQUFHQyxNQUFILENBQVVGLGtCQUFWO0FBRmxCLENBQVIsQ0FBbkI7QUFJQSxNQUFNRyxnQkFBZ0IsR0FBRyxJQUFJQyxrQkFBSixFQUF6QjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLElBQUksRUFBSixHQUFTLElBQXZDO0FBRUFDLE9BQU8sQ0FBQ0MsRUFBUixDQUFXLE1BQVgsRUFBbUIsTUFBTTtBQUN2QixNQUFJWixVQUFVLENBQUNhLFNBQVgsS0FBeUIsQ0FBN0IsRUFBZ0M7QUFDOUI7QUFDRDs7QUFFRCxRQUFNQyxLQUFLLEdBQUdkLFVBQVUsQ0FBQ2UsTUFBWCxFQUFkOztBQUNBQyxrQkFBSUMsS0FBSixDQUFXLHlCQUF3Qkgs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LE9BQUssTUFBTTlGLElBQVgsSUFBbUI4RixnQkFBbkIsRUFBcUM7QUFDbkMsUUFBSTtBQUNGLGFBQU8sTUFBTW5FLGVBQWUsQ0FBQ0MsSUFBRCxFQUFPLENBQUMsUUFBRCxFQUFXN0IsWUFBWSxDQUFDQyxJQUFELENBQXZCLENBQVAsQ0FBNUI7QUFDRCxLQUZELENBRUUsT0FBTytGLEdBQVAsRUFBWSxDQUFFO0FBQ2pCOztBQUVEOUUsa0JBQUk0RSxJQUFKLENBQVUsdURBQXNEakMsSUFBSSxDQUFDQyxTQUFMLENBQWVpQyxnQkFBZixDQUFpQyxJQUF4RixHQUNOLGlDQURIOztBQUVBLFNBQU8sTUFBTSxLQUFLSixjQUFMLENBQW9COUQsSUFBcEIsQ0FBYjtBQUNELENBdEJEOztBQXdCQW9CLGdCQUFnQixDQUFDZ0Qsc0JBQWpCLEdBQTBDLFVBQVVDLE1BQVYsRUFBa0I7QUFDMUQsU0FBTywrQkFBK0JDLElBQS9CLENBQW9DRCxNQUFwQyxDQUFQO0FBQ0QsQ0FGRDs7ZUFJZWpELGdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGdldEphdmFGb3JPcywgdW56aXBGaWxlLCBidWlsZEluc3RhbGxBcmdzLCBBUEtTX0lOU1RBTExfVElNRU9VVFxufSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IEJBU0VfQVBLID0gJ2Jhc2UtbWFzdGVyLmFwayc7XG5jb25zdCBMQU5HVUFHRV9BUEsgPSAobGFuZykgPT4gYGJhc2UtJHtsYW5nfS5hcGtgO1xuY29uc3QgQVBLU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwLFxuICBkaXNwb3NlOiAoYXBrc0hhc2gsIGV4dHJhY3RlZEZpbGVzUm9vdCkgPT4gZnMucmltcmFmKGV4dHJhY3RlZEZpbGVzUm9vdCksXG59KTtcbmNvbnN0IEFQS1NfQ0FDSEVfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBCVU5ETEVUT09MX1RJTUVPVVRfTVMgPSA0ICogNjAgKiAxMDAwO1xuXG5wcm9jZXNzLm9uKCdleGl0JywgKCkgPT4ge1xuICBpZiAoQVBLU19DQUNIRS5pdGVtQ291bnQgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRocyA9IEFQS1NfQ0FDSEUudmFsdWVzKCk7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBjbGVhbnVwIG9mICR7cGF0aHMubGVuZ3RofSBjYWNoZWQgLmFwa3MgYCArXG4gICAgdXRpbC5wbHVyYWxpemUoJ3BhY2thZ2UnLCBwYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHBhcnRpY3VsYXIgYXBrcyBwYWNrYWdlIGludG8gYSB0ZW1wb3JhcnkgZm9sZGVyLFxuICogZmluZHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSBjb250YWluZWQgaW4gdGhpcyBhcGsuXG4gKiBUaGUgcmVzdWx0aW5nIHRlbXBvcmFyeSBwYXRoLCB3aGVyZSB0aGUgLmFwa3MgZmlsZSBoYXMgYmVlbiBleHRyYWN0ZWQsXG4gKiB3aWxsIGJlIHN0b3JlZCBpbnRvIHRoZSBpbnRlcm5hbCBMUlUgY2FjaGUgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7c3RyaW5nfEFycmF5PFN0cmluZz59IGRzdFBhdGggLSBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZmlsZSxcbiAqIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGV4dHJhY3RlZCwgd2hlcmUgZWFjaCBwYXRoIGNvbXBvbmVudCBpcyBhbiBhcnJheSBpdGVtXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBGdWxsIHBhdGggdG8gdGhlIGV4dHJhY3RlZCBmaWxlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHJlcXVlc3RlZCBpdGVtIGRvZXMgbm90IGV4aXN0IGluIHRoZSBleHRyYWN0ZWQgYXJjaGl2ZSBvciB0aGUgcHJvdmlkZXNcbiAqIGFwa3MgZmlsZSBpcyBub3QgYSB2YWxpZCBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEZyb21BcGtzIChhcGtzLCBkc3RQYXRoKSB7XG4gIGlmICghXy5pc0FycmF5KGRzdFBhdGgpKSB7XG4gICAgZHN0UGF0aCA9IFtkc3RQYXRoXTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBBUEtTX0NBQ0hFX0dVQVJELmFjcXVpcmUoYXBrcywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgaGFzIGJlZW4gcmVwbGFjZWQsXG4gICAgLy8gc28gd2UgbmVlZCB0byBrZWVwIHRoZSBoYXNoIHN1bXMgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZpbGUgcGF0aHNcbiAgICAvLyBhcyBjYWNoaW5nIGtleXNcbiAgICBjb25zdCBhcGtzSGFzaCA9IGF3YWl0IGZzLmhhc2goYXBrcyk7XG4gICAgbG9nLmRlYnVnKGBDYWxjdWxhdGVkICcke2Fwa3N9JyBoYXNoOiAke2Fwa3NIYXNofWApO1xuXG4gICAgaWYgKEFQS1NfQ0FDSEUuaGFzKGFwa3NIYXNoKSkge1xuICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShBUEtTX0NBQ0hFLmdldChhcGtzSGFzaCksIC4uLmRzdFBhdGgpO1xuICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICAgIH1cbiAgICAgIEFQS1NfQ0FDSEUuZGVsKGFwa3NIYXNoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgbG9nLmRlYnVnKGBVbnBhY2tpbmcgYXBwbGljYXRpb24gYnVuZGxlIGF0ICcke2Fwa3N9JyB0byAnJHt0bXBSb290fSdgKTtcbiAgICBhd2FpdCB1bnppcEZpbGUoYXBrcywgdG1wUm9vdCk7XG4gICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCAuLi5kc3RQYXRoKTtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RzdFBhdGguam9pbihwYXRoLnNlcCl9IGNhbm5vdCBiZSBmb3VuZCBpbiAnJHthcGtzfScgYnVuZGxlLiBgICtcbiAgICAgICAgYERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBhIHZhbGlkIGFwcGxpY2F0aW9uIGJ1bmRsZT9gKTtcbiAgICB9XG4gICAgQVBLU19DQUNIRS5zZXQoYXBrc0hhc2gsIHRtcFJvb3QpO1xuICAgIHJldHVybiByZXN1bHRQYXRoO1xuICB9KTtcbn1cblxubGV0IGFwa3NVdGlsc01ldGhvZHMgPSB7fTtcblxuLyoqXG4gKiBFeGVjdXRlcyBidW5kbGV0b29sIHV0aWxpdHkgd2l0aCBnaXZlbiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGFjdHVhbCBzdGRvdXRcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IGFyZ3MgLSB0aGUgbGlzdCBvZiBidW5kbGV0b29sIGFyZ3VtZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIC0gVGhlIGN1c3RvbWl6ZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBhY3R1YWwgY29tbWFuZCBzdGRvdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBidW5kbGV0b29sIGphciBkb2VzIG5vdCBleGlzdCBpbiBQQVRIIG9yIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZVxuICogZXhlY3V0aW5nIGl0XG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXhlY0J1bmRsZXRvb2wgPSBhc3luYyBmdW5jdGlvbiBleGVjQnVuZGxldG9vbCAoYXJncywgZXJyb3JNc2cpIHtcbiAgYXdhaXQgdGhpcy5pbml0QnVuZGxldG9vbCgpO1xuICBhcmdzID0gW1xuICAgICctamFyJywgdGhpcy5iaW5hcmllcy5idW5kbGV0b29sLFxuICAgIC4uLmFyZ3NcbiAgXTtcbiAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG4gIGlmICh0aGlzLmFkYlBvcnQpIHtcbiAgICBlbnYuQU5EUk9JRF9BREJfU0VSVkVSX1BPUlQgPSBgJHt0aGlzLmFkYlBvcnR9YDtcbiAgfVxuICBpZiAodGhpcy5hZGJIb3N0KSB7XG4gICAgZW52LkFORFJPSURfQURCX1NFUlZFUl9IT1NUID0gdGhpcy5hZGJIb3N0O1xuICB9XG4gIGxvZy5kZWJ1ZyhgRXhlY3V0aW5nIGJ1bmRsZXRvb2wgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhhd2FpdCBnZXRKYXZhRm9yT3MoKSwgYXJncywge1xuICAgICAgZW52LFxuICAgICAgdGltZW91dDogQlVORExFVE9PTF9USU1FT1VUX01TLFxuICAgIH0pKTtcbiAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICByZXR1cm4gc3Rkb3V0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuc3Rkb3V0KSB7XG4gICAgICBsb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke2Uuc3Rkb3V0fWApO1xuICAgIH1cbiAgICBpZiAoZS5zdGRlcnIpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBzdGRlcnI6ICR7ZS5zdGRlcnJ9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1zZ30uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY0xvY2F0aW9uIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgZ2VuZXJhdGVkIGRldmljZSBzcGVjIGxvY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2FtZSBgc3BlY0xvY2F0aW9uYCB2YWx1ZVxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXRyaWV2ZSB0aGUgc3BlYyBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZ2V0RGV2aWNlU3BlYyA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVNwZWMgKHNwZWNMb2NhdGlvbikge1xuICBjb25zdCBhcmdzID0gW1xuICAgICdnZXQtZGV2aWNlLXNwZWMnLFxuICAgICctLWFkYicsIHRoaXMuZXhlY3V0YWJsZS5wYXRoLFxuICAgICctLWRldmljZS1pZCcsIHRoaXMuY3VyRGV2aWNlSWQsXG4gICAgJy0tb3V0cHV0Jywgc3BlY0xvY2F0aW9uLFxuICBdO1xuICBsb2cuZGVidWcoYEdldHRpbmcgdGhlIHNwZWMgZm9yIHRoZSBkZXZpY2UgJyR7dGhpcy5jdXJEZXZpY2VJZH0nYCk7XG4gIGF3YWl0IHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGV2aWNlIHNwZWMnKTtcbiAgcmV0dXJuIHNwZWNMb2NhdGlvbjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzIwMDAwXSAtIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWxcbiAqIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZW91dENhcE5hbWUgW2FuZHJvaWRJbnN0YWxsVGltZW91dF0gLSBUaGUgdGltZW91dCBvcHRpb24gbmFtZVxuICogdXNlcnMgY2FuIGluY3JlYXNlIHRoZSB0aW1lb3V0LlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb25cbiAqIGlzIGNvbXBsZXRlZCB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBrcyBpbnRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXBrUGF0aHNUb0luc3RhbGwgLSBUaGUgZnVsbCBwYXRocyB0byBpbnN0YWxsIGFwa3NcbiAqIEBwYXJhbSB7P2luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRpb25zIC0gSW5zdGFsbGF0aW9uIG9wdGlvbnNcbiAqL1xuYXBrc1V0aWxzTWV0aG9kcy5pbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE11bHRpcGxlQXBrcyAoYXBrUGF0aHNUb0luc3RhbGwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbnN0YWxsQXJncyA9IGJ1aWxkSW5zdGFsbEFyZ3MoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpLCBvcHRpb25zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2luc3RhbGwtbXVsdGlwbGUnLCAuLi5pbnN0YWxsQXJncywgLi4uYXBrUGF0aHNUb0luc3RhbGxdLCB7XG4gICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0LFxuICAgIHRpbWVvdXRDYXBOYW1lOiBvcHRpb25zLnRpbWVvdXRDYXBOYW1lLFxuICB9KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbEFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFsxMjAwMDBdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbFxuICogdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lb3V0Q2FwTmFtZSBbYW5kcm9pZEluc3RhbGxUaW1lb3V0XSAtIFRoZSB0aW1lb3V0IG9wdGlvbiBuYW1lXG4gKiB1c2VycyBjYW4gaW5jcmVhc2UgdGhlIHRpbWVvdXQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb25cbiAqIGlzIGNvbXBsZXRlZCB1bmRlciBBbmRyb2lkIDYrLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIC5hcGtzIHBhY2thZ2UgaW50byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBrcyAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIC5hcGtzIGZpbGVcbiAqIEBwYXJhbSB7P0luc3RhbGxBcGtzT3B0aW9uc30gb3B0aW9ucyAtIEluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIC5hcGtzIGJ1bmRsZSBjYW5ub3QgYmUgaW5zdGFsbGVkXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuaW5zdGFsbEFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBrcyAoYXBrcywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBncmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIHRpbWVvdXQsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2luc3RhbGwtYXBrcycsXG4gICAgJy0tYWRiJywgdGhpcy5leGVjdXRhYmxlLnBhdGgsXG4gICAgJy0tYXBrcycsIGFwa3MsXG4gICAgJy0tdGltZW91dC1taWxsaXMnLCB0aW1lb3V0IHx8IEFQS1NfSU5TVEFMTF9USU1FT1VULFxuICAgICctLWRldmljZS1pZCcsIHRoaXMuY3VyRGV2aWNlSWQsXG4gIF07XG4gIGlmIChhbGxvd1Rlc3RQYWNrYWdlcykge1xuICAgIGFyZ3MucHVzaCgnLS1hbGxvdy10ZXN0LW9ubHknKTtcbiAgfVxuICBjb25zdCB0YXNrcyA9IFtcbiAgICB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsIGBDYW5ub3QgaW5zdGFsbCAnJHtwYXRoLmJhc2VuYW1lKGFwa3MpfScgdG8gdGhlIGRldmljZSAke3RoaXMuY3VyRGV2aWNlSWR9YClcbiAgXTtcbiAgaWYgKGdyYW50UGVybWlzc2lvbnMpIHtcbiAgICB0YXNrcy5wdXNoKHRoaXMuZ2V0QXBrSW5mbyhhcGtzKSk7XG4gIH1cbiAgY29uc3QgWywgYXBrSW5mb10gPSBhd2FpdCBCLmFsbCh0YXNrcyk7XG4gIGlmIChncmFudFBlcm1pc3Npb25zICYmIGFwa0luZm8pIHtcbiAgICAvLyBUT0RPOiBTaW1wbGlmeSBpdCBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2J1bmRsZXRvb2wvaXNzdWVzLzI0NiBpcyBpbXBsZW1lbnRlZFxuICAgIGF3YWl0IHRoaXMuZ3JhbnRBbGxQZXJtaXNzaW9ucyhhcGtJbmZvLm5hbWUpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIG1hc3RlciAuYXBrIGZpbGUgaW5zaWRlIHRoZSBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBtYXN0ZXIgYnVuZGxlIC5hcGtcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdEJhc2VBcGsgPSBhc3luYyBmdW5jdGlvbiBleHRyYWN0QmFzZUFwayAoYXBrcykge1xuICByZXR1cm4gYXdhaXQgZXh0cmFjdEZyb21BcGtzKGFwa3MsIFsnc3BsaXRzJywgQkFTRV9BUEtdKTtcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgYW5kIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgLmFwaywgd2hpY2ggY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGluIHRoZSAuYXBrcyBidW5kbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwa3MgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSAuYXBrcyBmaWxlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIGFiYnJldmlhdGlvbi4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaXNcbiAqIGdvaW5nIHRvIGJlIHNlbGVjdGVkIGlmIGl0IGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxhbmd1YWdlIC5hcGsgb3IgdGhlIG1hc3RlciAuYXBrXG4gKiBpZiBsYW5ndWFnZSBzcGxpdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhlIGJ1bmRsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZXh0cmFjdGluZy9maW5kaW5nIHRoZSBmaWxlXG4gKi9cbmFwa3NVdGlsc01ldGhvZHMuZXh0cmFjdExhbmd1YWdlQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdExhbmd1YWdlQXBrIChhcGtzLCBsYW5ndWFnZSA9IG51bGwpIHtcbiAgaWYgKGxhbmd1YWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleHRyYWN0RnJvbUFwa3MoYXBrcywgWydzcGxpdHMnLCBMQU5HVUFHRV9BUEsobGFuZ3VhZ2UpXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBsb2cuaW5mbyhgQXNzdW1pbmcgdGhhdCBzcGxpdHRpbmcgYnkgbGFuZ3VhZ2UgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSAnJHthcGtzfScgYnVuZGxlIGAgK1xuICAgICAgICBgYW5kIHJldHVybmluZyB0aGUgbWFpbiBhcGsgaW5zdGVhZGApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBrcyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmYXVsdExhbmd1YWdlcyA9IFsnZW4nLCAnZW5fdXMnXTtcbiAgZm9yIChjb25zdCBsYW5nIG9mIGRlZmF1bHRMYW5ndWFnZXMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGV4dHJhY3RGcm9tQXBrcyhhcGtzLCBbJ3NwbGl0cycsIExBTkdVQUdFX0FQSyhsYW5nKV0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuXG4gIGxvZy5pbmZvKGBDYW5ub3QgZmluZCBhbnkgc3BsaXQgYXBrIGZvciB0aGUgZGVmYXVsdCBsYW5ndWFnZXMgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0TGFuZ3VhZ2VzKX0uIGAgK1xuICAgIGBSZXR1cm5pbmcgdGhlIG1haW4gYXBrIGluc3RlYWQuYCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwa3MpO1xufTtcblxuYXBrc1V0aWxzTWV0aG9kcy5pc1Rlc3RQYWNrYWdlT25seUVycm9yID0gZnVuY3Rpb24gKG91dHB1dCkge1xuICByZXR1cm4gL1xcW0lOU1RBTExfRkFJTEVEX1RFU1RfT05MWVxcXS8udGVzdChvdXRwdXQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBrc1V0aWxzTWV0aG9kcztcbiJdLCJmaWxlIjoibGliL3Rvb2xzL2Fwa3MtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
@@ -33,9 +31,17 @@ var _adbEmuCommands = _interopRequireDefault(require("./adb-emu-commands.js"));
33
31
 
34
32
  var _settingsClientCommands = _interopRequireDefault(require("./settings-client-commands"));
35
33
 
36
- Object.assign(_adbCommands.default, _androidManifest.default, _systemCalls.default, _adbEmuCommands.default, _apkSigning.default, _apkUtils.default, _apksUtils.default, _settingsClientCommands.default);
34
+ var _lockmgmt = _interopRequireDefault(require("./lockmgmt"));
35
+
36
+ var _keyboardCommands = _interopRequireDefault(require("./keyboard-commands"));
37
+
38
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
+
40
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
+
42
+ Object.assign(_adbCommands.default, _androidManifest.default, _systemCalls.default, _adbEmuCommands.default, _apkSigning.default, _apkUtils.default, _apksUtils.default, _settingsClientCommands.default, _lockmgmt.default, _keyboardCommands.default);
37
43
  var _default = _adbCommands.default;
38
44
  exports.default = _default;require('source-map-support').install();
39
45
 
40
46
 
41
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9pbmRleC5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJtZXRob2RzIiwibWFuaWZlc3RNZXRob2RzIiwic3lzdGVtQ2FsbE1ldGhvZHMiLCJlbXVNZXRob2RzIiwiYXBrU2lnbmluZ01ldGhvZHMiLCJhcGtVdGlsc01ldGhvZHMiLCJhcGtzVXRpbHNNZXRob2RzIiwic2V0dGluZ3NDbGllbnRDb21tYW5kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBQSxNQUFNLENBQUNDLE1BQVAsQ0FDSUMsb0JBREosRUFFSUMsd0JBRkosRUFHSUMsb0JBSEosRUFJSUMsdUJBSkosRUFLSUMsbUJBTEosRUFNSUMsaUJBTkosRUFPSUMsa0JBUEosRUFRSUMsK0JBUko7ZUFXZVAsb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWV0aG9kcyBmcm9tICcuL2FkYi1jb21tYW5kcy5qcyc7XG5pbXBvcnQgbWFuaWZlc3RNZXRob2RzIGZyb20gJy4vYW5kcm9pZC1tYW5pZmVzdC5qcyc7XG5pbXBvcnQgc3lzdGVtQ2FsbE1ldGhvZHMsIHsgZ2V0QW5kcm9pZEJpbmFyeVBhdGggfSBmcm9tICcuL3N5c3RlbS1jYWxscy5qcyc7XG5pbXBvcnQgYXBrU2lnbmluZ01ldGhvZHMgZnJvbSAnLi9hcGstc2lnbmluZy5qcyc7XG5pbXBvcnQgYXBrVXRpbHNNZXRob2RzIGZyb20gJy4vYXBrLXV0aWxzLmpzJztcbmltcG9ydCBhcGtzVXRpbHNNZXRob2RzIGZyb20gJy4vYXBrcy11dGlscy5qcyc7XG5pbXBvcnQgZW11TWV0aG9kcyBmcm9tICcuL2FkYi1lbXUtY29tbWFuZHMuanMnO1xuaW1wb3J0IHNldHRpbmdzQ2xpZW50Q29tbWFuZHMgZnJvbSAnLi9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMnO1xuXG5PYmplY3QuYXNzaWduKFxuICAgIG1ldGhvZHMsXG4gICAgbWFuaWZlc3RNZXRob2RzLFxuICAgIHN5c3RlbUNhbGxNZXRob2RzLFxuICAgIGVtdU1ldGhvZHMsXG4gICAgYXBrU2lnbmluZ01ldGhvZHMsXG4gICAgYXBrVXRpbHNNZXRob2RzLFxuICAgIGFwa3NVdGlsc01ldGhvZHMsXG4gICAgc2V0dGluZ3NDbGllbnRDb21tYW5kcyxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZHM7XG5leHBvcnQgeyBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9O1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
47
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9pbmRleC5qcyJdLCJuYW1lcyI6WyJPYmplY3QiLCJhc3NpZ24iLCJtZXRob2RzIiwibWFuaWZlc3RNZXRob2RzIiwic3lzdGVtQ2FsbE1ldGhvZHMiLCJlbXVNZXRob2RzIiwiYXBrU2lnbmluZ01ldGhvZHMiLCJhcGtVdGlsc01ldGhvZHMiLCJhcGtzVXRpbHNNZXRob2RzIiwic2V0dGluZ3NDbGllbnRDb21tYW5kcyIsImxvY2tNYW5hZ2VtZW50Q29tbWFuZHMiLCJrZXlib2FyZENvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsTUFBTSxDQUFDQyxNQUFQLENBQ0lDLG9CQURKLEVBRUlDLHdCQUZKLEVBR0lDLG9CQUhKLEVBSUlDLHVCQUpKLEVBS0lDLG1CQUxKLEVBTUlDLGlCQU5KLEVBT0lDLGtCQVBKLEVBUUlDLCtCQVJKLEVBU0lDLGlCQVRKLEVBVUlDLHlCQVZKO2VBYWVULG9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1ldGhvZHMgZnJvbSAnLi9hZGItY29tbWFuZHMuanMnO1xuaW1wb3J0IG1hbmlmZXN0TWV0aG9kcyBmcm9tICcuL2FuZHJvaWQtbWFuaWZlc3QuanMnO1xuaW1wb3J0IHN5c3RlbUNhbGxNZXRob2RzLCB7IGdldEFuZHJvaWRCaW5hcnlQYXRoIH0gZnJvbSAnLi9zeXN0ZW0tY2FsbHMuanMnO1xuaW1wb3J0IGFwa1NpZ25pbmdNZXRob2RzIGZyb20gJy4vYXBrLXNpZ25pbmcuanMnO1xuaW1wb3J0IGFwa1V0aWxzTWV0aG9kcyBmcm9tICcuL2Fway11dGlscy5qcyc7XG5pbXBvcnQgYXBrc1V0aWxzTWV0aG9kcyBmcm9tICcuL2Fwa3MtdXRpbHMuanMnO1xuaW1wb3J0IGVtdU1ldGhvZHMgZnJvbSAnLi9hZGItZW11LWNvbW1hbmRzLmpzJztcbmltcG9ydCBzZXR0aW5nc0NsaWVudENvbW1hbmRzIGZyb20gJy4vc2V0dGluZ3MtY2xpZW50LWNvbW1hbmRzJztcbmltcG9ydCBsb2NrTWFuYWdlbWVudENvbW1hbmRzIGZyb20gJy4vbG9ja21nbXQnO1xuaW1wb3J0IGtleWJvYXJkQ29tbWFuZHMgZnJvbSAnLi9rZXlib2FyZC1jb21tYW5kcyc7XG5cbk9iamVjdC5hc3NpZ24oXG4gICAgbWV0aG9kcyxcbiAgICBtYW5pZmVzdE1ldGhvZHMsXG4gICAgc3lzdGVtQ2FsbE1ldGhvZHMsXG4gICAgZW11TWV0aG9kcyxcbiAgICBhcGtTaWduaW5nTWV0aG9kcyxcbiAgICBhcGtVdGlsc01ldGhvZHMsXG4gICAgYXBrc1V0aWxzTWV0aG9kcyxcbiAgICBzZXR0aW5nc0NsaWVudENvbW1hbmRzLFxuICAgIGxvY2tNYW5hZ2VtZW50Q29tbWFuZHMsXG4gICAga2V5Ym9hcmRDb21tYW5kcyxcbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZHM7XG5leHBvcnQgeyBnZXRBbmRyb2lkQmluYXJ5UGF0aCB9O1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _logger = _interopRequireDefault(require("../logger.js"));
13
+
14
+ var _asyncbox = require("asyncbox");
15
+
16
+ const KEYCODE_ESC = 111;
17
+ const KEYCODE_BACK = 4;
18
+ const keyboardCommands = {};
19
+
20
+ keyboardCommands.hideKeyboard = async function hideKeyboard(timeoutMs = 1000) {
21
+ let {
22
+ isKeyboardShown,
23
+ canCloseKeyboard
24
+ } = await this.isSoftKeyboardPresent();
25
+
26
+ if (!isKeyboardShown) {
27
+ _logger.default.info('Keyboard has no UI; no closing necessary');
28
+
29
+ return false;
30
+ }
31
+
32
+ for (const keyCode of [KEYCODE_ESC, KEYCODE_BACK]) {
33
+ if (canCloseKeyboard) {
34
+ await this.keyevent(keyCode);
35
+ }
36
+
37
+ try {
38
+ return await (0, _asyncbox.waitForCondition)(async () => {
39
+ ({
40
+ isKeyboardShown
41
+ } = await this.isSoftKeyboardPresent());
42
+ return !isKeyboardShown;
43
+ }, {
44
+ waitMs: timeoutMs,
45
+ intervalMs: 500
46
+ });
47
+ } catch (ign) {}
48
+ }
49
+
50
+ throw new Error(`The software keyboard cannot be hidden`);
51
+ };
52
+
53
+ keyboardCommands.isSoftKeyboardPresent = async function isSoftKeyboardPresent() {
54
+ try {
55
+ const stdout = await this.shell(['dumpsys', 'input_method']);
56
+ const inputShownMatch = /mInputShown=(\w+)/.exec(stdout);
57
+ const inputViewShownMatch = /mIsInputViewShown=(\w+)/.exec(stdout);
58
+ return {
59
+ isKeyboardShown: !!(inputShownMatch && inputShownMatch[1] === 'true'),
60
+ canCloseKeyboard: !!(inputViewShownMatch && inputViewShownMatch[1] === 'true')
61
+ };
62
+ } catch (e) {
63
+ throw new Error(`Error finding softkeyboard. Original error: ${e.message}`);
64
+ }
65
+ };
66
+
67
+ var _default = keyboardCommands;
68
+ exports.default = _default;require('source-map-support').install();
69
+
70
+
71
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9rZXlib2FyZC1jb21tYW5kcy5qcyJdLCJuYW1lcyI6WyJLRVlDT0RFX0VTQyIsIktFWUNPREVfQkFDSyIsImtleWJvYXJkQ29tbWFuZHMiLCJoaWRlS2V5Ym9hcmQiLCJ0aW1lb3V0TXMiLCJpc0tleWJvYXJkU2hvd24iLCJjYW5DbG9zZUtleWJvYXJkIiwiaXNTb2Z0S2V5Ym9hcmRQcmVzZW50IiwibG9nIiwiaW5mbyIsImtleUNvZGUiLCJrZXlldmVudCIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJFcnJvciIsInN0ZG91dCIsInNoZWxsIiwiaW5wdXRTaG93bk1hdGNoIiwiZXhlYyIsImlucHV0Vmlld1Nob3duTWF0Y2giLCJlIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsR0FBcEI7QUFDQSxNQUFNQyxZQUFZLEdBQUcsQ0FBckI7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBRyxFQUF6Qjs7QUFXQUEsZ0JBQWdCLENBQUNDLFlBQWpCLEdBQWdDLGVBQWVBLFlBQWYsQ0FBNkJDLFNBQVMsR0FBRyxJQUF6QyxFQUErQztBQUM3RSxNQUFJO0FBQUNDLElBQUFBLGVBQUQ7QUFBa0JDLElBQUFBO0FBQWxCLE1BQXNDLE1BQU0sS0FBS0MscUJBQUwsRUFBaEQ7O0FBQ0EsTUFBSSxDQUFDRixlQUFMLEVBQXNCO0FBQ3BCRyxvQkFBSUMsSUFBSixDQUFTLDBDQUFUOztBQUNBLFdBQU8sS0FBUDtBQUNEOztBQUVELE9BQUssTUFBTUMsT0FBWCxJQUFzQixDQUFDVixXQUFELEVBQWNDLFlBQWQsQ0FBdEIsRUFBbUQ7QUFDakQsUUFBSUssZ0JBQUosRUFBc0I7QUFDcEIsWUFBTSxLQUFLSyxRQUFMLENBQWNELE9BQWQsQ0FBTjtBQUNEOztBQUNELFFBQUk7QUFDRixhQUFPLE1BQU0sZ0NBQWlCLFlBQVk7QUFDeEMsU0FBQztBQUFDTCxVQUFBQTtBQUFELFlBQW9CLE1BQU0sS0FBS0UscUJBQUwsRUFBM0I7QUFDQSxlQUFPLENBQUNGLGVBQVI7QUFDRCxPQUhZLEVBR1Y7QUFBQ08sUUFBQUEsTUFBTSxFQUFFUixTQUFUO0FBQW9CUyxRQUFBQSxVQUFVLEVBQUU7QUFBaEMsT0FIVSxDQUFiO0FBSUQsS0FMRCxDQUtFLE9BQU9DLEdBQVAsRUFBWSxDQUFFO0FBQ2pCOztBQUNELFFBQU0sSUFBSUMsS0FBSixDQUFXLHdDQUFYLENBQU47QUFDRCxDQW5CRDs7QUFnQ0FiLGdCQUFnQixDQUFDSyxxQkFBakIsR0FBeUMsZUFBZUEscUJBQWYsR0FBd0M7QUFDL0UsTUFBSTtBQUNGLFVBQU1TLE1BQU0sR0FBRyxNQUFNLEtBQUtDLEtBQUwsQ0FBVyxDQUFDLFNBQUQsRUFBWSxjQUFaLENBQVgsQ0FBckI7QUFDQSxVQUFNQyxlQUFlLEdBQUcsb0JBQW9CQyxJQUFwQixDQUF5QkgsTUFBekIsQ0FBeEI7QUFDQSxVQUFNSSxtQkFBbUIsR0FBRywwQkFBMEJELElBQTFCLENBQStCSCxNQUEvQixDQUE1QjtBQUNBLFdBQU87QUFDTFgsTUFBQUEsZUFBZSxFQUFFLENBQUMsRUFBRWEsZUFBZSxJQUFJQSxlQUFlLENBQUMsQ0FBRCxDQUFmLEtBQXVCLE1BQTVDLENBRGI7QUFFTFosTUFBQUEsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFYyxtQkFBbUIsSUFBSUEsbUJBQW1CLENBQUMsQ0FBRCxDQUFuQixLQUEyQixNQUFwRDtBQUZkLEtBQVA7QUFJRCxHQVJELENBUUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1YsVUFBTSxJQUFJTixLQUFKLENBQVcsK0NBQThDTSxDQUFDLENBQUNDLE9BQVEsRUFBbkUsQ0FBTjtBQUNEO0FBQ0YsQ0FaRDs7ZUFjZXBCLGdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgS0VZQ09ERV9FU0MgPSAxMTE7XG5jb25zdCBLRVlDT0RFX0JBQ0sgPSA0O1xuXG5jb25zdCBrZXlib2FyZENvbW1hbmRzID0ge307XG5cbi8qKlxuICogSGlkZXMgc29mdHdhcmUga2V5Ym9hcmQgaWYgaXQgaXMgdmlzaWJsZS5cbiAqIE5vb3AgaWYgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgaGlkZGVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0TXMgWzEwMDBdIEZvciBob3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpXG4gKiB1bnRpbCB0aGUga2V5Ym9hcmQgaXMgYWN0dWFsbHkgaGlkZGVuLlxuICogQHJldHVybnMge2Jvb2xlYW59IGBmYWxzZWAgaWYgdGhlIGtleWJvYXJkIHdhcyBhbHJlYWR5IGhpZGRlblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuLlxuICovXG5rZXlib2FyZENvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAodGltZW91dE1zID0gMTAwMCkge1xuICBsZXQge2lzS2V5Ym9hcmRTaG93biwgY2FuQ2xvc2VLZXlib2FyZH0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpO1xuICBpZiAoIWlzS2V5Ym9hcmRTaG93bikge1xuICAgIGxvZy5pbmZvKCdLZXlib2FyZCBoYXMgbm8gVUk7IG5vIGNsb3NpbmcgbmVjZXNzYXJ5Jyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRyeSBFU0MgdGhlbiBCQUNLIGlmIHRoZSBmaXJzdCBvbmUgZmFpbHNcbiAgZm9yIChjb25zdCBrZXlDb2RlIG9mIFtLRVlDT0RFX0VTQywgS0VZQ09ERV9CQUNLXSkge1xuICAgIGlmIChjYW5DbG9zZUtleWJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLmtleWV2ZW50KGtleUNvZGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAoe2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmlzU29mdEtleWJvYXJkUHJlc2VudCgpKTtcbiAgICAgICAgcmV0dXJuICFpc0tleWJvYXJkU2hvd247XG4gICAgICB9LCB7d2FpdE1zOiB0aW1lb3V0TXMsIGludGVydmFsTXM6IDUwMH0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzb2Z0d2FyZSBrZXlib2FyZCBjYW5ub3QgYmUgaGlkZGVuYCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEtleWJvYXJkU3RhdGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNLZXlib2FyZFNob3duIC0gV2hldGhlciBzb2Z0IGtleWJvYXJkIGlzIGN1cnJlbnRseSB2aXNpYmxlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjYW5DbG9zZUtleWJvYXJkIC0gV2hldGhlciB0aGUga2V5Ym9hcmQgY2FuIGJlIGNsb3NlZC5cbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBzdGF0ZSBvZiB0aGUgc29mdHdhcmUga2V5Ym9hcmQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge0tleWJvYXJkU3RhdGV9IFRoZSBrZXlib2FyZCBzdGF0ZS5cbiAqL1xua2V5Ym9hcmRDb21tYW5kcy5pc1NvZnRLZXlib2FyZFByZXNlbnQgPSBhc3luYyBmdW5jdGlvbiBpc1NvZnRLZXlib2FyZFByZXNlbnQgKCkge1xuICB0cnkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuc2hlbGwoWydkdW1wc3lzJywgJ2lucHV0X21ldGhvZCddKTtcbiAgICBjb25zdCBpbnB1dFNob3duTWF0Y2ggPSAvbUlucHV0U2hvd249KFxcdyspLy5leGVjKHN0ZG91dCk7XG4gICAgY29uc3QgaW5wdXRWaWV3U2hvd25NYXRjaCA9IC9tSXNJbnB1dFZpZXdTaG93bj0oXFx3KykvLmV4ZWMoc3Rkb3V0KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNLZXlib2FyZFNob3duOiAhIShpbnB1dFNob3duTWF0Y2ggJiYgaW5wdXRTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgICAgY2FuQ2xvc2VLZXlib2FyZDogISEoaW5wdXRWaWV3U2hvd25NYXRjaCAmJiBpbnB1dFZpZXdTaG93bk1hdGNoWzFdID09PSAndHJ1ZScpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpbmRpbmcgc29mdGtleWJvYXJkLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleWJvYXJkQ29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9rZXlib2FyZC1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _logger = _interopRequireDefault(require("../logger.js"));
13
+
14
+ var _path = _interopRequireDefault(require("path"));
15
+
16
+ var _lodash = _interopRequireDefault(require("lodash"));
17
+
18
+ var _appiumSupport = require("appium-support");
19
+
20
+ var _helpers = require("../helpers.js");
21
+
22
+ var _bluebird = _interopRequireDefault(require("bluebird"));
23
+
24
+ const lockManagementMethods = {};
25
+ const CREDENTIAL_CANNOT_BE_NULL_OR_EMPTY_ERROR = `Credential can't be null or empty`;
26
+ const CREDENTIAL_DID_NOT_MATCH_ERROR = `didn't match`;
27
+ const SUPPORTED_LOCK_CREDENTIAL_TYPES = ['password', 'pin', 'pattern'];
28
+ const KEYCODE_POWER = 26;
29
+ const KEYCODE_WAKEUP = 224;
30
+ const HIDE_KEYBOARD_WAIT_TIME = 100;
31
+
32
+ function buildCommand(verb, oldCredential = null, ...args) {
33
+ const cmd = ['locksettings', verb];
34
+
35
+ if (!_lodash.default.isEmpty(oldCredential)) {
36
+ cmd.push('--old', oldCredential);
37
+ }
38
+
39
+ if (!_lodash.default.isEmpty(args)) {
40
+ cmd.push(...args);
41
+ }
42
+
43
+ return cmd;
44
+ }
45
+
46
+ async function swipeUp(adb) {
47
+ const output = await adb.shell(['dumpsys', 'window']);
48
+ const dimensionsMatch = /init=(\d+)x(\d+)/.exec(output);
49
+
50
+ if (!dimensionsMatch) {
51
+ throw new Error('Cannot retrieve the display size');
52
+ }
53
+
54
+ const displayWidth = parseInt(dimensionsMatch[1], 10);
55
+ const displayHeight = parseInt(dimensionsMatch[2], 10);
56
+ const x0 = displayWidth / 2;
57
+ const y0 = displayHeight / 5 * 4;
58
+ const x1 = x0;
59
+ const y1 = displayHeight / 5;
60
+ await adb.shell(['input', 'touchscreen', 'swipe', ...[x0, y0, x1, y1].map(c => Math.trunc(c))]);
61
+ }
62
+
63
+ lockManagementMethods.isLockManagementSupported = async function isLockManagementSupported() {
64
+ if (!_lodash.default.isBoolean(this._isLockManagementSupported)) {
65
+ const passFlag = '__PASS__';
66
+ let output = '';
67
+
68
+ try {
69
+ output = await this.shell([`locksettings help && echo ${passFlag}`]);
70
+ } catch (ign) {}
71
+
72
+ this._isLockManagementSupported = _lodash.default.includes(output, passFlag);
73
+
74
+ _logger.default.debug(`Extended lock settings management is ` + `${this._isLockManagementSupported ? '' : 'not '}supported`);
75
+ }
76
+
77
+ return this._isLockManagementSupported;
78
+ };
79
+
80
+ lockManagementMethods.verifyLockCredential = async function verifyLockCredential(credential = null) {
81
+ try {
82
+ const {
83
+ stdout,
84
+ stderr
85
+ } = await this.shell(buildCommand('verify', credential), {
86
+ outputFormat: this.EXEC_OUTPUT_FORMAT.FULL
87
+ });
88
+
89
+ if (_lodash.default.includes(stdout, 'verified successfully')) {
90
+ return true;
91
+ }
92
+
93
+ if ([`didn't match`, CREDENTIAL_CANNOT_BE_NULL_OR_EMPTY_ERROR].some(x => _lodash.default.includes(stderr || stdout, x))) {
94
+ return false;
95
+ }
96
+
97
+ throw new Error(stderr || stdout);
98
+ } catch (e) {
99
+ throw new Error(`Device lock credential verification failed. ` + `Original error: ${e.stderr || e.stdout || e.message}`);
100
+ }
101
+ };
102
+
103
+ lockManagementMethods.clearLockCredential = async function clearLockCredential(credential = null) {
104
+ try {
105
+ const {
106
+ stdout,
107
+ stderr
108
+ } = await this.shell(buildCommand('clear', credential), {
109
+ outputFormat: this.EXEC_OUTPUT_FORMAT.FULL
110
+ });
111
+
112
+ if (!['user has no password', 'Lock credential cleared'].some(x => _lodash.default.includes(stderr || stdout, x))) {
113
+ throw new Error(stderr || stdout);
114
+ }
115
+ } catch (e) {
116
+ throw new Error(`Cannot clear device lock credential. ` + `Original error: ${e.stderr || e.stdout || e.message}`);
117
+ }
118
+ };
119
+
120
+ lockManagementMethods.isLockEnabled = async function isLockEnabled() {
121
+ try {
122
+ const {
123
+ stdout,
124
+ stderr
125
+ } = await this.shell(buildCommand('get-disabled'), {
126
+ outputFormat: this.EXEC_OUTPUT_FORMAT.FULL
127
+ });
128
+
129
+ if (/\bfalse\b/.test(stdout) || [CREDENTIAL_DID_NOT_MATCH_ERROR, CREDENTIAL_CANNOT_BE_NULL_OR_EMPTY_ERROR].some(x => _lodash.default.includes(stderr || stdout, x))) {
130
+ return true;
131
+ }
132
+
133
+ if (/\btrue\b/.test(stdout)) {
134
+ return false;
135
+ }
136
+
137
+ throw new Error(stderr || stdout);
138
+ } catch (e) {
139
+ throw new Error(`Cannot check if device lock is enabled. Original error: ${e.message}`);
140
+ }
141
+ };
142
+
143
+ lockManagementMethods.setLockCredential = async function setLockCredential(credentialType, credential, oldCredential = null) {
144
+ if (!SUPPORTED_LOCK_CREDENTIAL_TYPES.includes(credentialType)) {
145
+ throw new Error(`Device lock credential type '${credentialType}' is unknown. ` + `Only the following credential types are supported: ${SUPPORTED_LOCK_CREDENTIAL_TYPES}`);
146
+ }
147
+
148
+ if (_lodash.default.isEmpty(credential) && !_lodash.default.isInteger(credential)) {
149
+ throw new Error('Device lock credential cannot be empty');
150
+ }
151
+
152
+ const cmd = buildCommand(`set-${credentialType}`, oldCredential, credential);
153
+
154
+ try {
155
+ const {
156
+ stdout,
157
+ stderr
158
+ } = await this.shell(cmd, {
159
+ outputFormat: this.EXEC_OUTPUT_FORMAT.FULL
160
+ });
161
+
162
+ if (!_lodash.default.includes(stdout, 'set to')) {
163
+ throw new Error(stderr || stdout);
164
+ }
165
+ } catch (e) {
166
+ throw new Error(`Setting of device lock ${credentialType} credential failed. ` + `Original error: ${e.stderr || e.stdout || e.message}`);
167
+ }
168
+ };
169
+
170
+ lockManagementMethods.isScreenLocked = async function isScreenLocked() {
171
+ const stdout = await this.shell(['dumpsys', 'window']);
172
+
173
+ if (process.env.APPIUM_LOG_DUMPSYS) {
174
+ const dumpsysFile = _path.default.resolve(process.cwd(), 'dumpsys.log');
175
+
176
+ _logger.default.debug(`Writing dumpsys output to ${dumpsysFile}`);
177
+
178
+ await _appiumSupport.fs.writeFile(dumpsysFile, stdout);
179
+ }
180
+
181
+ return (0, _helpers.isShowingLockscreen)(stdout) || (0, _helpers.isCurrentFocusOnKeyguard)(stdout) || !(0, _helpers.isScreenOnFully)(stdout);
182
+ };
183
+
184
+ lockManagementMethods.dismissKeyguard = async function dismissKeyguard() {
185
+ _logger.default.info('Waking up the device to dismiss the keyguard');
186
+
187
+ await this.cycleWakeUp();
188
+
189
+ if ((await this.getApiLevel()) > 21) {
190
+ await this.shell(['wm', 'dismiss-keyguard']);
191
+ return;
192
+ }
193
+
194
+ const stdout = await this.shell(['dumpsys', 'window', 'windows']);
195
+
196
+ if (!(0, _helpers.isCurrentFocusOnKeyguard)(stdout)) {
197
+ _logger.default.debug('The keyguard seems to be inactive');
198
+
199
+ return;
200
+ }
201
+
202
+ _logger.default.debug('Swiping up to dismiss the keyguard');
203
+
204
+ if (await this.hideKeyboard()) {
205
+ await _bluebird.default.delay(HIDE_KEYBOARD_WAIT_TIME);
206
+ }
207
+
208
+ _logger.default.debug('Dismissing notifications from the unlock view');
209
+
210
+ await this.shell(['service', 'call', 'notification', '1']);
211
+ await this.back();
212
+ await swipeUp(this);
213
+ };
214
+
215
+ lockManagementMethods.cycleWakeUp = async function cycleWakeUp() {
216
+ await this.keyevent(KEYCODE_POWER);
217
+ await this.keyevent(KEYCODE_WAKEUP);
218
+ };
219
+
220
+ var _default = lockManagementMethods;
221
+ exports.default = _default;require('source-map-support').install();
222
+
223
+
224
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9sb2NrbWdtdC5qcyJdLCJuYW1lcyI6WyJsb2NrTWFuYWdlbWVudE1ldGhvZHMiLCJDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SIiwiQ1JFREVOVElBTF9ESURfTk9UX01BVENIX0VSUk9SIiwiU1VQUE9SVEVEX0xPQ0tfQ1JFREVOVElBTF9UWVBFUyIsIktFWUNPREVfUE9XRVIiLCJLRVlDT0RFX1dBS0VVUCIsIkhJREVfS0VZQk9BUkRfV0FJVF9USU1FIiwiYnVpbGRDb21tYW5kIiwidmVyYiIsIm9sZENyZWRlbnRpYWwiLCJhcmdzIiwiY21kIiwiXyIsImlzRW1wdHkiLCJwdXNoIiwic3dpcGVVcCIsImFkYiIsIm91dHB1dCIsInNoZWxsIiwiZGltZW5zaW9uc01hdGNoIiwiZXhlYyIsIkVycm9yIiwiZGlzcGxheVdpZHRoIiwicGFyc2VJbnQiLCJkaXNwbGF5SGVpZ2h0IiwieDAiLCJ5MCIsIngxIiwieTEiLCJtYXAiLCJjIiwiTWF0aCIsInRydW5jIiwiaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCIsImlzQm9vbGVhbiIsIl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwicGFzc0ZsYWciLCJpZ24iLCJpbmNsdWRlcyIsImxvZyIsImRlYnVnIiwidmVyaWZ5TG9ja0NyZWRlbnRpYWwiLCJjcmVkZW50aWFsIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0Rm9ybWF0IiwiRVhFQ19PVVRQVVRfRk9STUFUIiwiRlVMTCIsInNvbWUiLCJ4IiwiZSIsIm1lc3NhZ2UiLCJjbGVhckxvY2tDcmVkZW50aWFsIiwiaXNMb2NrRW5hYmxlZCIsInRlc3QiLCJzZXRMb2NrQ3JlZGVudGlhbCIsImNyZWRlbnRpYWxUeXBlIiwiaXNJbnRlZ2VyIiwiaXNTY3JlZW5Mb2NrZWQiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX0xPR19EVU1QU1lTIiwiZHVtcHN5c0ZpbGUiLCJwYXRoIiwicmVzb2x2ZSIsImN3ZCIsImZzIiwid3JpdGVGaWxlIiwiZGlzbWlzc0tleWd1YXJkIiwiaW5mbyIsImN5Y2xlV2FrZVVwIiwiZ2V0QXBpTGV2ZWwiLCJoaWRlS2V5Ym9hcmQiLCJCIiwiZGVsYXkiLCJiYWNrIiwia2V5ZXZlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsRUFBOUI7QUFFQSxNQUFNQyx3Q0FBd0MsR0FBSSxtQ0FBbEQ7QUFDQSxNQUFNQyw4QkFBOEIsR0FBSSxjQUF4QztBQUNBLE1BQU1DLCtCQUErQixHQUFHLENBQUMsVUFBRCxFQUFhLEtBQWIsRUFBb0IsU0FBcEIsQ0FBeEM7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsR0FBdkI7QUFDQSxNQUFNQyx1QkFBdUIsR0FBRyxHQUFoQzs7QUFFQSxTQUFTQyxZQUFULENBQXVCQyxJQUF2QixFQUE2QkMsYUFBYSxHQUFHLElBQTdDLEVBQW1ELEdBQUdDLElBQXRELEVBQTREO0FBQzFELFFBQU1DLEdBQUcsR0FBRyxDQUFDLGNBQUQsRUFBaUJILElBQWpCLENBQVo7O0FBQ0EsTUFBSSxDQUFDSSxnQkFBRUMsT0FBRixDQUFVSixhQUFWLENBQUwsRUFBK0I7QUFDN0JFLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLE9BQVQsRUFBa0JMLGFBQWxCO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDRyxnQkFBRUMsT0FBRixDQUFVSCxJQUFWLENBQUwsRUFBc0I7QUFDcEJDLElBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTLEdBQUdKLElBQVo7QUFDRDs7QUFDRCxTQUFPQyxHQUFQO0FBQ0Q7O0FBRUQsZUFBZUksT0FBZixDQUF3QkMsR0FBeEIsRUFBNkI7QUFDM0IsUUFBTUMsTUFBTSxHQUFHLE1BQU1ELEdBQUcsQ0FBQ0UsS0FBSixDQUFVLENBQUMsU0FBRCxFQUFZLFFBQVosQ0FBVixDQUFyQjtBQUNBLFFBQU1DLGVBQWUsR0FBRyxtQkFB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OztBQUdBLFFBQU0sS0FBS0MsV0FBTCxFQUFOOztBQUVBLE1BQUksT0FBTSxLQUFLQyxXQUFMLEVBQU4sSUFBMkIsRUFBL0IsRUFBbUM7QUFDakMsVUFBTSxLQUFLckQsS0FBTCxDQUFXLENBQUMsSUFBRCxFQUFPLGtCQUFQLENBQVgsQ0FBTjtBQUNBO0FBQ0Q7O0FBRUQsUUFBTXlCLE1BQU0sR0FBRyxNQUFNLEtBQUt6QixLQUFMLENBQVcsQ0FBQyxTQUFELEVBQVksUUFBWixFQUFzQixTQUF0QixDQUFYLENBQXJCOztBQUNBLE1BQUksQ0FBQyx1Q0FBeUJ5QixNQUF6QixDQUFMLEVBQXVDO0FBQ3JDSixvQkFBSUMsS0FBSixDQUFVLG1DQUFWOztBQUNBO0FBQ0Q7O0FBRURELGtCQUFJQyxLQUFKLENBQVUsb0NBQVY7O0FBQ0EsTUFBSSxNQUFNLEtBQUtnQyxZQUFMLEVBQVYsRUFBK0I7QUFDN0IsVUFBTUMsa0JBQUVDLEtBQUYsQ0FBUXBFLHVCQUFSLENBQU47QUFDRDs7QUFDRGlDLGtCQUFJQyxLQUFKLENBQVUsK0NBQVY7O0FBQ0EsUUFBTSxLQUFLdEIsS0FBTCxDQUFXLENBQUMsU0FBRCxFQUFZLE1BQVosRUFBb0IsY0FBcEIsRUFBb0MsR0FBcEMsQ0FBWCxDQUFOO0FBQ0EsUUFBTSxLQUFLeUQsSUFBTCxFQUFOO0FBQ0EsUUFBTTVELE9BQU8sQ0FBQyxJQUFELENBQWI7QUFDRCxDQXpCRDs7QUErQkFmLHFCQUFxQixDQUFDc0UsV0FBdEIsR0FBb0MsZUFBZUEsV0FBZixHQUE4QjtBQUNoRSxRQUFNLEtBQUtNLFFBQUwsQ0FBY3hFLGFBQWQsQ0FBTjtBQUNBLFFBQU0sS0FBS3dFLFFBQUwsQ0FBY3ZFLGNBQWQsQ0FBTjtBQUNELENBSEQ7O2VBS2VMLHFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQge1xuICBpc1Nob3dpbmdMb2Nrc2NyZWVuLCBpc0N1cnJlbnRGb2N1c09uS2V5Z3VhcmQsIGlzU2NyZWVuT25GdWxseSxcbn0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbmNvbnN0IGxvY2tNYW5hZ2VtZW50TWV0aG9kcyA9IHt9O1xuXG5jb25zdCBDUkVERU5USUFMX0NBTk5PVF9CRV9OVUxMX09SX0VNUFRZX0VSUk9SID0gYENyZWRlbnRpYWwgY2FuJ3QgYmUgbnVsbCBvciBlbXB0eWA7XG5jb25zdCBDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IgPSBgZGlkbid0IG1hdGNoYDtcbmNvbnN0IFNVUFBPUlRFRF9MT0NLX0NSRURFTlRJQUxfVFlQRVMgPSBbJ3Bhc3N3b3JkJywgJ3BpbicsICdwYXR0ZXJuJ107XG5jb25zdCBLRVlDT0RFX1BPV0VSID0gMjY7XG5jb25zdCBLRVlDT0RFX1dBS0VVUCA9IDIyNDsgLy8gd29ya3Mgb3ZlciBBUEkgTGV2ZWwgMjBcbmNvbnN0IEhJREVfS0VZQk9BUkRfV0FJVF9USU1FID0gMTAwO1xuXG5mdW5jdGlvbiBidWlsZENvbW1hbmQgKHZlcmIsIG9sZENyZWRlbnRpYWwgPSBudWxsLCAuLi5hcmdzKSB7XG4gIGNvbnN0IGNtZCA9IFsnbG9ja3NldHRpbmdzJywgdmVyYl07XG4gIGlmICghXy5pc0VtcHR5KG9sZENyZWRlbnRpYWwpKSB7XG4gICAgY21kLnB1c2goJy0tb2xkJywgb2xkQ3JlZGVudGlhbCk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncykpIHtcbiAgICBjbWQucHVzaCguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gY21kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzd2lwZVVwIChhZGIpIHtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLnNoZWxsKFsnZHVtcHN5cycsICd3aW5kb3cnXSk7XG4gIGNvbnN0IGRpbWVuc2lvbnNNYXRjaCA9IC9pbml0PShcXGQrKXgoXFxkKykvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFkaW1lbnNpb25zTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSB0aGUgZGlzcGxheSBzaXplJyk7XG4gIH1cbiAgY29uc3QgZGlzcGxheVdpZHRoID0gcGFyc2VJbnQoZGltZW5zaW9uc01hdGNoWzFdLCAxMCk7XG4gIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSBwYXJzZUludChkaW1lbnNpb25zTWF0Y2hbMl0sIDEwKTtcbiAgY29uc3QgeDAgPSBkaXNwbGF5V2lkdGggLyAyO1xuICBjb25zdCB5MCA9IGRpc3BsYXlIZWlnaHQgLyA1ICogNDtcbiAgY29uc3QgeDEgPSB4MDtcbiAgY29uc3QgeTEgPSBkaXNwbGF5SGVpZ2h0IC8gNTtcbiAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAnaW5wdXQnLCAndG91Y2hzY3JlZW4nLCAnc3dpcGUnLFxuICAgIC4uLihbeDAsIHkwLCB4MSwgeTFdLm1hcCgoYykgPT4gTWF0aC50cnVuYyhjKSkpXG4gIF0pO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBsb2NrIHNldHRpbmdzIG1hbmFnZW1lbnQgd2l0aCBgbG9ja3NldHRpbmdzYFxuICogY29tbWFuZCBsaW5lIHRvb2wuIFRoaXMgdG9vbCBoYXMgYmVlbiBhZGRlZCB0byBBbmRyb2lkIHRvb2xzZXQgc2luY2UgIEFQSSAyNyBPcmVvXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuIFRoZSByZXN1bHQgaXMgY2FjaGVkIHBlciBBREIgaW5zdGFuY2VcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPSBhc3luYyBmdW5jdGlvbiBpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkICgpIHtcbiAgaWYgKCFfLmlzQm9vbGVhbih0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkKSkge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW2Bsb2Nrc2V0dGluZ3MgaGVscCAmJiBlY2hvICR7cGFzc0ZsYWd9YF0pO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICB0aGlzLl9pc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkID0gXy5pbmNsdWRlcyhvdXRwdXQsIHBhc3NGbGFnKTtcbiAgICBsb2cuZGVidWcoYEV4dGVuZGVkIGxvY2sgc2V0dGluZ3MgbWFuYWdlbWVudCBpcyBgICtcbiAgICAgIGAke3RoaXMuX2lzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQgPyAnJyA6ICdub3QgJ31zdXBwb3J0ZWRgKTtcbiAgfVxuICByZXR1cm4gdGhpcy5faXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY3JlZGVudGlhbCBpcyBtYXRjaGVzIHRvIHRoZSBjdXJyZW50bHkgc2V0IG9uZS5cbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGNyZWRlbnRpYWwgW251bGxdIFRoZSBjcmVkZW50aWFsIHZhbHVlLiBJdCBjb3VsZCBiZSBlaXRoZXJcbiAqIHBpbiwgcGFzc3dvcmQgb3IgYSBwYXR0ZXJuLiBBIHBhdHRlcm4gaXMgc3BlY2lmaWVkIGJ5IGEgbm9uLXNlcGFyYXRlZCBsaXN0XG4gKiBvZiBudW1iZXJzIHRoYXQgaW5kZXggdGhlIGNlbGwgb24gdGhlIHBhdHRlcm4gaW4gYSAxLWJhc2VkIG1hbm5lciBpbiBsZWZ0XG4gKiB0byByaWdodCBhbmQgdG9wIHRvIGJvdHRvbSBvcmRlciwgaS5lLiB0aGUgdG9wLWxlZnQgY2VsbCBpcyBpbmRleGVkIHdpdGggMSxcbiAqIHdoZXJlYXMgdGhlIGJvdHRvbS1yaWdodCBjZWxsIGlzIGluZGV4ZWQgd2l0aCA5LiBFeGFtcGxlOiAxMjM0LlxuICogbnVsbC9lbXB0eSB2YWx1ZSBhc3N1bWVzIHRoZSBkZXZpY2UgaGFzIG5vIGxvY2sgY3VycmVudGx5IHNldC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGdpdmVuIGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgZGV2aWNlJ3Mgb25lXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHZlcmlmaWNhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy52ZXJpZnlMb2NrQ3JlZGVudGlhbCA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgndmVyaWZ5JywgY3JlZGVudGlhbCksIHtcbiAgICAgIG91dHB1dEZvcm1hdDogdGhpcy5FWEVDX09VVFBVVF9GT1JNQVQuRlVMTFxuICAgIH0pO1xuICAgIGlmIChfLmluY2x1ZGVzKHN0ZG91dCwgJ3ZlcmlmaWVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFtgZGlkbid0IG1hdGNoYCwgQ1JFREVOVElBTF9DQU5OT1RfQkVfTlVMTF9PUl9FTVBUWV9FUlJPUl1cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB2ZXJpZmljYXRpb24gZmFpbGVkLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLnN0ZG91dCB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYXJzIGN1cnJlbnQgbG9jayBjcmVkZW50aWFscy4gVXN1YWxseSBpdCB0YWtlcyBzZXZlcmFsIHNlY29uZHMgZm9yIGEgZGV2aWNlIHRvXG4gKiBzeW5jIHRoZSBjcmVkZW50aWFsIHN0YXRlIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMuXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBjcmVkZW50aWFsIFtudWxsXSBUaGUgY3JlZGVudGlhbCB2YWx1ZS4gSXQgY291bGQgYmUgZWl0aGVyXG4gKiBwaW4sIHBhc3N3b3JkIG9yIGEgcGF0dGVybi4gQSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBieSBhIG5vbi1zZXBhcmF0ZWQgbGlzdFxuICogb2YgbnVtYmVycyB0aGF0IGluZGV4IHRoZSBjZWxsIG9uIHRoZSBwYXR0ZXJuIGluIGEgMS1iYXNlZCBtYW5uZXIgaW4gbGVmdFxuICogdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20gb3JkZXIsIGkuZS4gdGhlIHRvcC1sZWZ0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDEsXG4gKiB3aGVyZWFzIHRoZSBib3R0b20tcmlnaHQgY2VsbCBpcyBpbmRleGVkIHdpdGggOS4gRXhhbXBsZTogMTIzNC5cbiAqIG51bGwvZW1wdHkgdmFsdWUgYXNzdW1lcyB0aGUgZGV2aWNlIGhhcyBubyBsb2NrIGN1cnJlbnRseSBzZXQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlcmF0aW9uIGZhY2VzIGFuIHVuZXhwZWN0ZWQgZXJyb3JcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmNsZWFyTG9ja0NyZWRlbnRpYWwgPSBhc3luYyBmdW5jdGlvbiBjbGVhckxvY2tDcmVkZW50aWFsIChjcmVkZW50aWFsID0gbnVsbCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCB0aGlzLnNoZWxsKGJ1aWxkQ29tbWFuZCgnY2xlYXInLCBjcmVkZW50aWFsKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKCFbJ3VzZXIgaGFzIG5vIHBhc3N3b3JkJywgJ0xvY2sgY3JlZGVudGlhbCBjbGVhcmVkJ11cbiAgICAgICAgLnNvbWUoKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RkZXJyIHx8IHN0ZG91dCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgZGV2aWNlIGxvY2sgY3JlZGVudGlhbC4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5zdGRvdXQgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgbG9ja2VkIHdpdGggYSBjcmVkZW50aWFsIChlaXRoZXIgcGluIG9yIGEgcGFzc3dvcmRcbiAqIG9yIGEgcGF0dGVybikuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZFxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZXJhdGlvbiBmYWNlcyBhbiB1bmV4cGVjdGVkIGVycm9yXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc0xvY2tFbmFibGVkID0gYXN5bmMgZnVuY3Rpb24gaXNMb2NrRW5hYmxlZCAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoYnVpbGRDb21tYW5kKCdnZXQtZGlzYWJsZWQnKSwge1xuICAgICAgb3V0cHV0Rm9ybWF0OiB0aGlzLkVYRUNfT1VUUFVUX0ZPUk1BVC5GVUxMXG4gICAgfSk7XG4gICAgaWYgKC9cXGJmYWxzZVxcYi8udGVzdChzdGRvdXQpXG4gICAgICAgIHx8IFtDUkVERU5USUFMX0RJRF9OT1RfTUFUQ0hfRVJST1IsIENSRURFTlRJQUxfQ0FOTk9UX0JFX05VTExfT1JfRU1QVFlfRVJST1JdLnNvbWUoXG4gICAgICAgICAgKHgpID0+IF8uaW5jbHVkZXMoc3RkZXJyIHx8IHN0ZG91dCwgeCkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKC9cXGJ0cnVlXFxiLy50ZXN0KHN0ZG91dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBzdGRvdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2hlY2sgaWYgZGV2aWNlIGxvY2sgaXMgZW5hYmxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGRldmljZSBsb2NrLlxuICpcbiAqIEBwYXJhbSB7IXN0cmluZ30gY3JlZGVudGlhbFR5cGUgT25lIG9mOiBwYXNzd29yZCwgcGluLCBwYXR0ZXJuLlxuICogQHBhcmFtIHshc3RyaW5nfSBjcmVkZW50aWFsIEEgbm9uLWVtcHR5IGNyZWRlbnRpYWwgdmFsdWUgdG8gYmUgc2V0LlxuICogTWFrZSBzdXJlIHlvdXIgbmV3IGNyZWRlbnRpYWwgbWF0Y2hlcyB0byB0aGUgYWN0dWFsIHN5c3RlbSBzZWN1cml0eSByZXF1aXJlbWVudHMsXG4gKiBlLmcuIGEgbWluaW11bSBwYXNzd29yZCBsZW5ndGguIEEgcGF0dGVybiBpcyBzcGVjaWZpZWQgYnkgYSBub24tc2VwYXJhdGVkIGxpc3RcbiAqIG9mIG51bWJlcnMgdGhhdCBpbmRleCB0aGUgY2VsbCBvbiB0aGUgcGF0dGVybiBpbiBhIDEtYmFzZWQgbWFubmVyIGluIGxlZnRcbiAqIHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tIG9yZGVyLCBpLmUuIHRoZSB0b3AtbGVmdCBjZWxsIGlzIGluZGV4ZWQgd2l0aCAxLFxuICogd2hlcmVhcyB0aGUgYm90dG9tLXJpZ2h0IGNlbGwgaXMgaW5kZXhlZCB3aXRoIDkuIEV4YW1wbGU6IDEyMzQuXG4gKiBAcGFyYW0gez9zdHJpbmd9IG9sZENyZWRlbnRpYWwgW251bGxdIEFuIG9sZCBjcmVkZW50aWFsIHN0cmluZy5cbiAqIEl0IGlzIG9ubHkgcmVxdWlyZWQgdG8gYmUgc2V0IGluIGNhc2UgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBjdXJyZW50XG4gKiBjcmVkZW50aWFsIHJhdGhlciB0aGFuIHRvIHNldCBhIG5ldyBvbmUuIFNldHRpbmcgaXQgdG8gYSB3cm9uZyB2YWx1ZSB3aWxsXG4gKiBtYWtlIHRoaXMgbWV0aG9kIHRvIGZhaWwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHZlcmlmeWluZyBpbnB1dCBhcmd1bWVudHMgb3Igc2V0dGluZ1xuICogdGhlIGNyZWRlbnRpYWxcbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLnNldExvY2tDcmVkZW50aWFsID0gYXN5bmMgZnVuY3Rpb24gc2V0TG9ja0NyZWRlbnRpYWwgKFxuICBjcmVkZW50aWFsVHlwZSwgY3JlZGVudGlhbCwgb2xkQ3JlZGVudGlhbCA9IG51bGwpIHtcbiAgaWYgKCFTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTLmluY2x1ZGVzKGNyZWRlbnRpYWxUeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGV2aWNlIGxvY2sgY3JlZGVudGlhbCB0eXBlICcke2NyZWRlbnRpYWxUeXBlfScgaXMgdW5rbm93bi4gYCArXG4gICAgICBgT25seSB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWwgdHlwZXMgYXJlIHN1cHBvcnRlZDogJHtTVVBQT1JURURfTE9DS19DUkVERU5USUFMX1RZUEVTfWApO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoY3JlZGVudGlhbCkgJiYgIV8uaXNJbnRlZ2VyKGNyZWRlbnRpYWwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgbG9jayBjcmVkZW50aWFsIGNhbm5vdCBiZSBlbXB0eScpO1xuICB9XG4gIGNvbnN0IGNtZCA9IGJ1aWxkQ29tbWFuZChgc2V0LSR7Y3JlZGVudGlhbFR5cGV9YCwgb2xkQ3JlZGVudGlhbCwgY3JlZGVudGlhbCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IHRoaXMuc2hlbGwoY21kLCB7XG4gICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMuRVhFQ19PVVRQVVRfRk9STUFULkZVTExcbiAgICB9KTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoc3Rkb3V0LCAnc2V0IHRvJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzdGRlcnIgfHwgc3Rkb3V0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgb2YgZGV2aWNlIGxvY2sgJHtjcmVkZW50aWFsVHlwZX0gY3JlZGVudGlhbCBmYWlsZWQuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgc2NyZWVuIGxvY2sgc3RhdGUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRldmljZSBpcyBsb2NrZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5pc1NjcmVlbkxvY2tlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzU2NyZWVuTG9ja2VkICgpIHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93J10pO1xuICBpZiAocHJvY2Vzcy5lbnYuQVBQSVVNX0xPR19EVU1QU1lTKSB7XG4gICAgLy8gb3B0aW9uYWwgZGVidWdnaW5nXG4gICAgLy8gaWYgdGhlIG1ldGhvZCBpcyBub3Qgd29ya2luZywgdHVybiBpdCBvbiBhbmQgc2VuZCB1cyB0aGUgb3V0cHV0XG4gICAgY29uc3QgZHVtcHN5c0ZpbGUgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2R1bXBzeXMubG9nJyk7XG4gICAgbG9nLmRlYnVnKGBXcml0aW5nIGR1bXBzeXMgb3V0cHV0IHRvICR7ZHVtcHN5c0ZpbGV9YCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGR1bXBzeXNGaWxlLCBzdGRvdXQpO1xuICB9XG4gIHJldHVybiBpc1Nob3dpbmdMb2Nrc2NyZWVuKHN0ZG91dCkgfHwgaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkgfHwgIWlzU2NyZWVuT25GdWxseShzdGRvdXQpO1xufTtcblxuLyoqXG4gKiBEaXNtaXNzZXMga2V5Z3VhcmQgb3ZlcmxheS5cbiAqL1xubG9ja01hbmFnZW1lbnRNZXRob2RzLmRpc21pc3NLZXlndWFyZCA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NLZXlndWFyZCAoKSB7XG4gIGxvZy5pbmZvKCdXYWtpbmcgdXAgdGhlIGRldmljZSB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICAvLyBTY3JlZW4gb2ZmIG9uY2UgdG8gZm9yY2UgcHJlLWlucHV0dGVkIHRleHQgZmllbGQgY2xlYW4gYWZ0ZXIgd2FrZS11cFxuICAvLyBKdXN0IHNjcmVlbiBvbiBpZiB0aGUgc2NyZWVuIGRlZmF1bHRzIG9mZlxuICBhd2FpdCB0aGlzLmN5Y2xlV2FrZVVwKCk7XG5cbiAgaWYgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+IDIxKSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3dtJywgJ2Rpc21pc3Mta2V5Z3VhcmQnXSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5zaGVsbChbJ2R1bXBzeXMnLCAnd2luZG93JywgJ3dpbmRvd3MnXSk7XG4gIGlmICghaXNDdXJyZW50Rm9jdXNPbktleWd1YXJkKHN0ZG91dCkpIHtcbiAgICBsb2cuZGVidWcoJ1RoZSBrZXlndWFyZCBzZWVtcyB0byBiZSBpbmFjdGl2ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3dpcGluZyB1cCB0byBkaXNtaXNzIHRoZSBrZXlndWFyZCcpO1xuICBpZiAoYXdhaXQgdGhpcy5oaWRlS2V5Ym9hcmQoKSkge1xuICAgIGF3YWl0IEIuZGVsYXkoSElERV9LRVlCT0FSRF9XQUlUX1RJTUUpO1xuICB9XG4gIGxvZy5kZWJ1ZygnRGlzbWlzc2luZyBub3RpZmljYXRpb25zIGZyb20gdGhlIHVubG9jayB2aWV3Jyk7XG4gIGF3YWl0IHRoaXMuc2hlbGwoWydzZXJ2aWNlJywgJ2NhbGwnLCAnbm90aWZpY2F0aW9uJywgJzEnXSk7XG4gIGF3YWl0IHRoaXMuYmFjaygpO1xuICBhd2FpdCBzd2lwZVVwKHRoaXMpO1xufTtcblxuLyoqXG4gKiBQcmVzc2VzIHRoZSBjb3JyZXNwb25kaW5nIGtleSBjb21iaW5hdGlvbiB0byBtYWtlIHN1cmUgdGhlIGRldmljZSdzIHNjcmVlblxuICogaXMgbm90IHR1cm5lZCBvZmYgYW5kIGlzIGxvY2tlZCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuXG4gKi9cbmxvY2tNYW5hZ2VtZW50TWV0aG9kcy5jeWNsZVdha2VVcCA9IGFzeW5jIGZ1bmN0aW9uIGN5Y2xlV2FrZVVwICgpIHtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1BPV0VSKTtcbiAgYXdhaXQgdGhpcy5rZXlldmVudChLRVlDT0RFX1dBS0VVUCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2NrTWFuYWdlbWVudE1ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9sb2NrbWdtdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9