appium-xcuitest-driver 4.19.1 → 4.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [4.20.1](https://github.com/appium/appium-xcuitest-driver/compare/v4.20.0...v4.20.1) (2023-03-29)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Add missing --name option to removeProfile ([#1530](https://github.com/appium/appium-xcuitest-driver/issues/1530)) ([a930762](https://github.com/appium/appium-xcuitest-driver/commit/a930762933a7008caab4fe1549e64e4d340b6ede))
7
+
8
+ ## [4.20.0](https://github.com/appium/appium-xcuitest-driver/compare/v4.19.1...v4.20.0) (2023-03-28)
9
+
10
+
11
+ ### Features
12
+
13
+ * Add command for mobileRemoveCertificate for real devices ([#1529](https://github.com/appium/appium-xcuitest-driver/issues/1529)) ([2255f31](https://github.com/appium/appium-xcuitest-driver/commit/2255f3129d952c804dde3c1328aaacceb1e7df79))
14
+
1
15
  ## [4.19.1](https://github.com/appium/appium-xcuitest-driver/compare/v4.19.0...v4.19.1) (2023-03-12)
2
16
 
3
17
 
@@ -337,17 +337,26 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate(opts
337
337
  await _support.fs.rimraf(tmpRoot);
338
338
  }
339
339
  };
340
- commands.mobileListCertificates = async function mobileListCertificates() {
340
+ commands.mobileRemoveCertificate = async function mobileRemoveCertificate(opts = {}) {
341
+ const {
342
+ name
343
+ } = opts;
341
344
  if (!this.isRealDevice()) {
342
345
  throw new _driver.errors.NotImplementedError('This extension is only supported on real devices');
343
346
  }
344
347
  const client = new _pyIosDeviceClient.default(this.opts.udid);
345
- if (await client.assertExists(false)) {
346
- return await client.listProfiles();
348
+ await client.assertExists(true);
349
+ return await client.removeProfile(name);
350
+ };
351
+ commands.mobileListCertificates = async function mobileListCertificates() {
352
+ if (!this.isRealDevice()) {
353
+ throw new _driver.errors.NotImplementedError('This extension is only supported on real devices');
347
354
  }
348
- throw new Error('pyidevice is not installed on your system, command cannot be executed.');
355
+ const client = new _pyIosDeviceClient.default(this.opts.udid);
356
+ await client.assertExists(true);
357
+ return await client.listProfiles();
349
358
  };
350
359
  Object.assign(extensions, commands);
351
360
  var _default = extensions;
352
361
  exports.default = _default;
353
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl9hc3luY2JveCIsIl9ibHVlYmlyZCIsIl9vcyIsIl9wYXRoIiwiX2h0dHAiLCJfdGVlbl9wcm9jZXNzIiwiX3BvcnRzY2FubmVyIiwiX3B5SW9zRGV2aWNlQ2xpZW50IiwiX2RyaXZlciIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImV4cG9ydHMiLCJDT05GSUdfRVhURU5TSU9OIiwiSE9TVF9QT1JUX1JBTkdFIiwiVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCIsIlNldHRpbmdzIiwiR2VuZXJhbCIsInR5cGUiLCJ2YWx1ZSIsIlByb2ZpbGUiLCJBYm91dCIsIkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzIiwiQnV0dG9uIiwiSW5zdGFsbCIsIkFsbG93IiwiRG9uZSIsIlJldHVybl90b19TZXR0aW5ncyIsIkFsZXJ0IiwiZXh0cmFjdENvbW1vbk5hbWUiLCJjZXJ0QnVmZmVyIiwidGVtcENlcnQiLCJ0ZW1wRGlyIiwib3BlbiIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwid3JpdGVGaWxlIiwicGF0aCIsInN0ZG91dCIsImV4ZWMiLCJwYXJzZUNvbW1vbk5hbWUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJyaW1yYWYiLCJMSUJSRV9TU0xfUEFUVEVSTiIsIk9QRU5fU1NMX1BBVFRFUk4iLCJzdHJpbmdDZXJ0aWZpY2F0ZSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsInIiLCJtYXRjaCIsInRvTW9iaWxlQ29uZmlnIiwiY29tbW9uTmFtZSIsImdldFVVSUQiLCJ1dGlsIiwidXVpZFY0IiwidG9VcHBlckNhc2UiLCJjb250ZW50VXVpZCIsIlBheWxvYWRDb250ZW50IiwiUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWUiLCJQYXlsb2FkRGVzY3JpcHRpb24iLCJQYXlsb2FkRGlzcGxheU5hbWUiLCJQYXlsb2FkSWRlbnRpZmllciIsIlBheWxvYWRUeXBlIiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIm9zIiwiaG9zdG5hbWUiLCJzcGxpdCIsIlBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZCIsImNsaWNrRWxlbWVudCIsImRyaXZlciIsImxvY2F0b3IiLCJvcHRpb25zIiwiZWxlbWVudCIsInRpbWVvdXQiLCJza2lwSWZJbnZpc2libGUiLCJsb29rdXBEZWxheSIsInJldHJ5SW50ZXJ2YWwiLCJmaW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMiLCJKU09OIiwic3RyaW5naWZ5IiwibmF0aXZlQ2xpY2siLCJpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUiLCJCIiwiZGVsYXkiLCJ0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyIsIm5hbWUiLCJzd2l0Y2hMb2NhdG9yIiwicmV0cnkiLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsInBvc3RBY2NlcHRBbGVydCIsImluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUiLCJhY3RpdmF0ZUFwcCIsImlzQ2VydEZvdW5kIiwic3dpcGVOdW0iLCJtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUiLCJvcHRzIiwiY29udGVudCIsImlzUm9vdCIsIl8iLCJpc0VtcHR5IiwiaXNTaW11bGF0b3IiLCJtZXRob2ROYW1lIiwiZGV2aWNlIiwic2ltY3RsIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwicmF3IiwiZSIsImxvZyIsImRlYnVnIiwiaW5mbyIsImNsaWVudCIsIlB5aWRldmljZSIsInVkaWQiLCJhc3NlcnRFeGlzdHMiLCJpbnN0YWxsUHJvZmlsZSIsInBheWxvYWQiLCJ0bXBSb290Iiwib3BlbkRpciIsInRtcFBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsImNvbmZpZ05hbWUiLCJjb25maWdQYXRoIiwicmVzb2x2ZSIsInRtcFNlcnZlciIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJyZXMiLCJjb25maWdGaWxlIiwicmVhZEZpbGUiLCJlbmQiLCJjbiIsIm1vYmlsZUNvbmZpZyIsInBsaXN0IiwidXBkYXRlUGxpc3RGaWxlIiwiaG9zdCIsImNlcnRVcmwiLCJsaXN0ZW4iLCJ3YWl0Rm9yQ29uZGl0aW9uIiwiY2hlY2tQb3J0U3RhdHVzIiwiaWduIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzUmVhbERldmljZSIsInByb3h5Q29tbWFuZCIsInVybCIsImlzV2ViQ29udGV4dCIsInNldFVybCIsIm9wZW5VcmwiLCJpc0NlcnRBbHJlYWR5SW5zdGFsbGVkIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiYnVuZGxlSWQiLCJ3YXJuIiwidG9Jbk1lbW9yeUJhc2U2NCIsImNsb3NlIiwibW9iaWxlTGlzdENlcnRpZmljYXRlcyIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJsaXN0UHJvZmlsZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvY2VydGlmaWNhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCBwbGlzdCwgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5LCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlLCBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4uL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5sZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBDT05GSUdfRVhURU5TSU9OID0gJ21vYmlsZWNvbmZpZyc7XG5jb25zdCBIT1NUX1BPUlRfUkFOR0UgPSBbMzgyMDAsIDM4Mjk5XTtcbmNvbnN0IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQgPSA1MDAwO1xuY29uc3QgU2V0dGluZ3MgPSB7XG4gIEdlbmVyYWw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdHZW5lcmFsJyxcbiAgfSxcbiAgUHJvZmlsZToge1xuICAgIHR5cGU6ICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgIHZhbHVlOiBgbmFtZSBCRUdJTlNXSVRIICdQcm9maWxlJ2AsXG4gIH0sXG4gIEFib3V0OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWJvdXQnLFxuICB9LFxuICBDZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0NlcnRpZmljYXRlIFRydXN0IFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBCdXR0b24gPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdJbnN0YWxsJyxcbiAgfSxcbiAgQWxsb3c6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdBbGxvdycsXG4gIH0sXG4gIERvbmU6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdEb25lJyxcbiAgfSxcbiAgUmV0dXJuX3RvX1NldHRpbmdzOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnUmV0dXJuIHRvIFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBBbGVydCA9IHtcbiAgSW5zdGFsbDoge1xuICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICB2YWx1ZTogJyoqL1hDVUlFbGVtZW50VHlwZUFueVtgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVBbGVydFxcJyBPUiB0eXBlID09IFxcJ1hDVUlFbGVtZW50VHlwZVNoZWV0XFwnYF0vKiovWENVSUVsZW1lbnRUeXBlQnV0dG9uW2BsYWJlbCA9PSBcXCdJbnN0YWxsXFwnYF0nLFxuICB9LFxufTtcblxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0Q29tbW9uTmFtZSAoY2VydEJ1ZmZlcikge1xuICBjb25zdCB0ZW1wQ2VydCA9IGF3YWl0IHRlbXBEaXIub3Blbih7XG4gICAgcHJlZml4OiAnY2VydCcsXG4gICAgc3VmZml4OiAnLmNlcidcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDZXJ0LnBhdGgsIGNlcnRCdWZmZXIpO1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnb3BlbnNzbCcsIFsneDUwOScsICctbm9vdXQnLCAnLXN1YmplY3QnLCAnLWluJywgdGVtcENlcnQucGF0aF0pO1xuICAgIHJldHVybiBwYXJzZUNvbW1vbk5hbWUoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgY29tbW9uIG5hbWUgdmFsdWUgZnJvbSB0aGUgY2VydGlmaWNhdGUuIElzIGl0IHZhbGlkIGFuZCBiYXNlNjQtZW5jb2RlZD8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodGVtcENlcnQucGF0aCk7XG4gIH1cbn1cblxuY29uc3QgTElCUkVfU1NMX1BBVFRFUk4gPSAvXFwvQ049KFteXFwvXSspLzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgT1BFTl9TU0xfUEFUVEVSTiA9IC8sXFxzQ05cXHM9XFxzKFteLF0rKS87XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uTmFtZSAoc3RyaW5nQ2VydGlmaWNhdGUpIHtcbiAgY29uc3QgcmVzdWx0ID0gW0xJQlJFX1NTTF9QQVRURVJOLCBPUEVOX1NTTF9QQVRURVJOXS5yZWR1Y2UoKGFjYywgcikgPT4ge1xuICAgIGlmIChhY2MpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gci5leGVjKHN0cmluZ0NlcnRpZmljYXRlKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIH0sIG51bGwpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gY29tbW9uIG5hbWUgdmFsdWUgaW4gJyR7c3RyaW5nQ2VydGlmaWNhdGV9JyBvdXRwdXRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBBcHBsZSdzIG92ZXItdGhlLWFpciBjb25maWd1cmF0aW9uIHByb2ZpbGVcbiAqIGZvciBjZXJ0aWZpY2F0ZSBkZXBsb3ltZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBQRU0gY2VydGlmaWNhdGUgY29udGVudC5cbiAqIFJlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvY29udGVudC9kb2N1bWVudGF0aW9uL05ldHdvcmtpbmdJbnRlcm5ldC9Db25jZXB0dWFsL2lQaG9uZU9UQUNvbmZpZ3VyYXRpb24vSW50cm9kdWN0aW9uL0ludHJvZHVjdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHN1Y2ggcHJvZmlsZXMuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNlcnRCdWZmZXIgLSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgUEVNIGNlcnRpZmljYXRlIGVuY29kZWQgaW50byBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbW9uTmFtZSAtIENlcnRpZmljYXRlJ3MgY29tbW9uIG5hbWVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBlbmNvZGVkIHN0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUsIHdoaWNoIGlzIHJlYWR5IHRvIGJlIHBhc3NlZFxuICogYXMgYW4gYXJndW1lbnQgdG8gcGxpc3QgYnVpbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmZ1bmN0aW9uIHRvTW9iaWxlQ29uZmlnIChjZXJ0QnVmZmVyLCBjb21tb25OYW1lKSB7XG4gIGNvbnN0IGdldFVVSUQgPSAoKSA9PiB1dGlsLnV1aWRWNCgpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGNvbnRlbnRVdWlkID0gZ2V0VVVJRCgpO1xuICByZXR1cm4ge1xuICAgIFBheWxvYWRDb250ZW50OiBbe1xuICAgICAgUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWU6IGAke2NvbW1vbk5hbWV9LmNlcmAsXG4gICAgICBQYXlsb2FkQ29udGVudDogY2VydEJ1ZmZlcixcbiAgICAgIFBheWxvYWREZXNjcmlwdGlvbjogJ0FkZHMgYSBDQSByb290IGNlcnRpZmljYXRlJyxcbiAgICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICAgIFBheWxvYWRJZGVudGlmaWVyOiBgY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QuJHtjb250ZW50VXVpZH1gLFxuICAgICAgUGF5bG9hZFR5cGU6ICdjb20uYXBwbGUuc2VjdXJpdHkucm9vdCcsXG4gICAgICBQYXlsb2FkVVVJRDogY29udGVudFV1aWQsXG4gICAgICBQYXlsb2FkVmVyc2lvbjogMVxuICAgIH1dLFxuICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICBQYXlsb2FkSWRlbnRpZmllcjogYCR7b3MuaG9zdG5hbWUoKS5zcGxpdCgnLicpWzBdfS4ke2dldFVVSUQoKX1gLFxuICAgIFBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZDogZmFsc2UsXG4gICAgUGF5bG9hZFR5cGU6ICdDb25maWd1cmF0aW9uJyxcbiAgICBQYXlsb2FkVVVJRDogZ2V0VVVJRCgpLFxuICAgIFBheWxvYWRWZXJzaW9uOiAxXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsaWNrRWxlbWVudCAoZHJpdmVyLCBsb2NhdG9yLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvb2t1cERlbGF5ID0gNTAwO1xuICB0cnkge1xuICAgIGVsZW1lbnQgPSBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgPCBsb29rdXBEZWxheSA/IDEgOiB0aW1lb3V0IC8gbG9va3VwRGVsYXksIGxvb2t1cERlbGF5LFxuICAgICAgKCkgPT4gZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhsb2NhdG9yLnR5cGUsIGxvY2F0b3IudmFsdWUsIGZhbHNlKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChza2lwSWZJbnZpc2libGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAke0pTT04uc3RyaW5naWZ5KGxvY2F0b3IpfSB3aXRoaW4gJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICBhd2FpdCBkcml2ZXIubmF0aXZlQ2xpY2soZWxlbWVudCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUgKGRyaXZlcikge1xuICAvLyBBY2NlcHQgU2FmYXJpIGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5BbGxvdywge1xuICAgIC8vIGNlcnRpZmljYXRlIGxvYWQgbWlnaHQgdGFrZSBzb21lIHRpbWUgb24gc2xvdyBtYWNoaW5lc1xuICAgIHRpbWVvdXQ6IDE1MDAwLFxuICB9KTtcbiAgLy8gV2FpdCB1bnRpbCBQcmVmZXJlbmNlcyBhcmUgb3BlbmVkXG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgLy8gR28gdGhyb3VnaCBQcmVmZXJlbmNlcyB3aXphcmRcbiAgaWYgKCFhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCwge1xuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gV2UgbmVlZCB0byBjbGljayBJbnN0YWxsIGJ1dHRvbiBvbiB0d28gZGlmZmVyZW50IHRhYnNcbiAgLy8gVGhlIHNlY29uZCBvbmUgY29uZmlybXMgdGhlIHByZXZpb3VzXG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsKTtcbiAgLy8gQWNjZXB0IGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEFsZXJ0Lkluc3RhbGwpO1xuICAvLyBGaW5pc2ggYWRkaW5nIGNlcnRpZmljYXRlXG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5Eb25lKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIChkcml2ZXIsIG5hbWUpIHtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuR2VuZXJhbCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkFib3V0KTtcbiAgY29uc3Qgc3dpdGNoTG9jYXRvciA9IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF0vKiovWENVSUVsZW1lbnRUeXBlU3dpdGNoYCxcbiAgfTtcbiAgYXdhaXQgcmV0cnkoNSwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gICAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3MsIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoc3dpdGNoTG9jYXRvci50eXBlLCBzd2l0Y2hMb2NhdG9yLnZhbHVlLCBmYWxzZSk7XG4gIH0pO1xuICAvLyBPbmx5IGNsaWNrIHRoZSBzd2l0Y2ggaWYgaXQgaXMgc2V0IHRvIE9mZlxuICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgIHR5cGU6IHN3aXRjaExvY2F0b3IudHlwZSxcbiAgICB2YWx1ZTogYCR7c3dpdGNoTG9jYXRvci52YWx1ZX1bXFxgdmFsdWUgPT0gJzAnXFxgXWBcbiAgfSwge1xuICAgIHRpbWVvdXQ6IDEwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIGF3YWl0IGRyaXZlci5wb3N0QWNjZXB0QWxlcnQoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlIChkcml2ZXIsIG5hbWUpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgZm9yIHRoZSBzZWNvbmQgYWxlcnRcbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcblxuICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIGF3YWl0IGRyaXZlci5hY3RpdmF0ZUFwcCgnY29tLmFwcGxlLlByZWZlcmVuY2VzJyk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgLy8gU2VsZWN0IHRoZSB0YXJnZXQgY2VydFxuICBsZXQgaXNDZXJ0Rm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgc3dpcGVOdW0gPSAwOyBzd2lwZU51bSA8IDU7ICsrc3dpcGVOdW0pIHtcbiAgICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF1gLFxuICAgIH0sIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgICB9KSkge1xuICAgICAgaXNDZXJ0Rm91bmQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgZHJpdmVyLm1vYmlsZVN3aXBlKHtcbiAgICAgIGVsZW1lbnQ6IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlVGFibGUnLCBmYWxzZSksXG4gICAgICBkaXJlY3Rpb246ICd1cCdcbiAgICB9KTtcbiAgfVxuICBpZiAoIWlzQ2VydEZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuYW1lfScgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBjZXJ0aWZpY2F0ZXMgbGlzdGApO1xuICB9XG5cbiAgLy8gSW5zdGFsbCBvcHRpb24gaXMgb25seSB2aXNpYmxlIGlmIHRoZSBjZXJ0IGlzIG5vdCBpbnN0YWxsZWQgeWV0XG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIC8vIENvbmZpcm0gdW50cnVzdGVkIGNlcnQgaW5zdGFsbFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBjb250ZW50IC0gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcHVibGljIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbW1vbk5hbWUgLSBDb21tb24gbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUuIElmIHRoaXMgaXMgbm90IHNldFxuICogdGhlbiB0aGUgc2NyaXB0IHdpbGwgdHJ5IHRvIHBhcnNlIGl0IGZyb20gdGhlIGdpdmVuIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBpc1Jvb3QgW3RydWVdIC0gVGhpcyBvcHRpb24gZGVmaW5lcyB3aGVyZSB0aGUgY2VydGlmaWNhdGUgc2hvdWxkIGJlXG4gKiBpbnN0YWxsZWQgdG86IGVpdGhlciBUcnVzdGVkIFJvb3QgU3RvcmUgKGB0cnVlYCwgdGhlIGRlZmF1bHQgb3B0aW9uKSBvclxuICogdGhlIEtleWNoYWluIChgZmFsc2VgKS4gT24gZW52aXJvbm1lbnRzIG90aGVyIHRoYW4gWGNvZGUgMTEuNCsgU2ltdWxhdG9yIHRoaXNcbiAqIG9wdGlvbiBpcyBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgYSBjdXN0b20gY2VydGlmaWNhdGUgb250byB0aGUgZGV2aWNlLlxuICogU2luY2UgWGNvZGUgU0RLIDExLjQgQXBwbGUgaGFzIGFkZGVkIGEgZGVkaWNhdGVkIHNpbWN0bCBzdWJjb21tYW5kIHRvIHF1aWNrbHkgaGFuZGxlXG4gKiBjZXJ0aWZpY2F0ZXMgb24gU2ltdWxhdG9yIG92ZXIgQ0xJLlxuICogT24gcmVhbCBkZXZpY2VzIG9yIHNpbXVsYXRvcnMgYmVmb3JlIFhjb2RlIDExLjQgU0RLXG4gKiBBcHBsZSBwcm92aWRlcyBubyBvZmZpY2lhbCB3YXkgdG8gZG8gaXQgdmlhIHRoZSBjb21tYW5kIGxpbmUuXG4gKiBJbiBzdWNoIGNhc2UgKGFuZCBhbHNvIGFzIGEgZmFsbGJhY2sgaWYgQ0xJIHNldHVwIGZhaWxzKVxuICogdGhpcyBtZXRob2QgdHJpZXMgdG8gd3JhcCB0aGUgY2VydGlmaWNhdGUgaW50byAubW9iaWxlY29uZmlnIGZvcm1hdFxuICogYW5kIHRoZW4gZGVwbG95cyB0aGUgd3JhcHBlZCBmaWxlIHRvIHRoZSBpbnRlcm5hbCBIVFRQIHNlcnZlcixcbiAqIHNvIG9uZSBjYW4gb3BlbiBpdCB2aWEgbW9iaWxlIFNhZmFyaS5cbiAqIFRoZW4gdGhlIGFsZ29yaXRobSBnb2VzIHRocm91Z2ggdGhlIHByb2ZpbGUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBieVxuICogY2xpY2tpbmcgdGhlIG5lY2Vzc2FyeSBidXR0b25zIHVzaW5nIFdlYkRyaXZlckFnZW50LlxuICpcbiAqIEBwYXJhbSB7Q2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGdlbmVyYXRlZCAubW9iaWxlY29uZmlnIGZpbGUgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZy4gVGhpcyBjb25maWcgbWlnaHQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKiBJZiB0aGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB2aWEgQ0xJIHRoZW4gbm90aGluZyBpcyByZXR1cm5lZC5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbENlcnRpZmljYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnQsXG4gICAgY29tbW9uTmFtZSxcbiAgICBpc1Jvb3QgPSB0cnVlLFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNFbXB0eShjb250ZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2VydGlmaWNhdGUgY29udGVudCBzaG91bGQgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpc1Jvb3QgPyAnYWRkUm9vdENlcnRpZmljYXRlJyA6ICdhZGRDZXJ0aWZpY2F0ZSc7XG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bFttZXRob2ROYW1lXShcbiAgICAgICAgQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCksIHtyYXc6IHRydWV9XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBpbnN0YWxsZWQgdmlhIENMSS4gYCArXG4gICAgICAgIGBGYWxsaW5nIGJhY2sgdG8gVUktYmFzZWQgZGVwbG95bWVudGApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUHlpZGV2aWNlKHRoaXMub3B0cy51ZGlkKTtcbiAgICBpZiAoYXdhaXQgY2xpZW50LmFzc2VydEV4aXN0cyhmYWxzZSkpIHtcbiAgICAgIGF3YWl0IGNsaWVudC5pbnN0YWxsUHJvZmlsZSh7cGF5bG9hZDogQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ3B5aWRldmljZSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLiAnICtcbiAgICAgICAgJ0ZhbGxpbmcgYmFjayB0byB0aGUgKHNsb3cpIFVJLWJhc2VkIGluc3RhbGxhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKEhPU1RfUE9SVF9SQU5HRVswXSwgSE9TVF9QT1JUX1JBTkdFWzFdKTtcbiAgY29uc3QgY29uZmlnTmFtZSA9IGBhcHBpdW0uJHtDT05GSUdfRVhURU5TSU9OfWA7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgY29uZmlnTmFtZSk7XG4gIGNvbnN0IHRtcFNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIGZ1bmN0aW9uIChfLCByZXMpIHtcbiAgICBjb25zdCBjb25maWdGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoY29uZmlnUGF0aCk7XG4gICAgcmVzLmVuZChjb25maWdGaWxlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2VydEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKTtcbiAgICBjb25zdCBjbiA9IGNvbW1vbk5hbWUgfHwgYXdhaXQgZXh0cmFjdENvbW1vbk5hbWUoY2VydEJ1ZmZlcik7XG4gICAgY29uc3QgbW9iaWxlQ29uZmlnID0gdG9Nb2JpbGVDb25maWcoY2VydEJ1ZmZlciwgY24pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoY29uZmlnUGF0aCwgbW9iaWxlQ29uZmlnLCBmYWxzZSwgZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RvcmUgdGhlIGdlbmVyYXRlZCBjb25maWcgYXMgJyR7Y29uZmlnUGF0aH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBvcy5ob3N0bmFtZSgpO1xuICAgICAgY29uc3QgY2VydFVybCA9IGBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9LyR7Y29uZmlnTmFtZX1gO1xuICAgICAgYXdhaXQgdG1wU2VydmVyLmxpc3Rlbih0bXBQb3J0KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyh0bXBQb3J0LCBob3N0KSkgPT09ICdvcGVuJztcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB3YWl0TXM6IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSB0ZW1wb3Jhcnkgd2ViIHNlcnZlciBpcyBydW5uaW5nIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH1gKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgY2Fubm90IGJlIHN0YXJ0ZWQgYXQgaHR0cDovLyR7aG9zdH06JHt0bXBQb3J0fS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy91cmwnLCAnUE9TVCcsIHt1cmw6IGNlcnRVcmx9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb21tYW5kIGFib3ZlIGRvZXMgbm90IGFsd2F5cyB3b3JrIG9uIHJlYWwgZGV2aWNlc1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRVcmwoY2VydFVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybChjZXJ0VXJsKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSBmYWxzZTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlKHRoaXMsIGNuKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrRWxlbWVudCh0aGlzLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgICAgICAgICBhd2FpdCB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyh0aGlzLCBjbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUodGhpcykpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgQnV0dG9uLlJldHVybl90b19TZXR0aW5ncyk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBJdCBsb29rcyBsaWtlIHRoZSAnJHtjbn0nIGNlcnRpZmljYXRlIGhhcyBiZWVuIGFscmVhZHkgYWRkZWQgdG8gdGhlIENBIHJvb3RgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCByZXN0b3JlIHRoZSBhcHBsaWNhdGlvbiAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQoY29uZmlnUGF0aCkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdG1wU2VydmVyLmNsb3NlKCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG4vKipcbiAqIExpc3RzIGluc3RhbGxlZCBjZXJ0aWZpY2F0ZXMgZm9yIHJlYWwgZGV2aWNlcyBvbmx5XG4gKiBpZiBbcHktaW9zLWRldmljZV0oaHR0cHM6Ly9naXRodWIuY29tL1l1ZUNoZW4tQy9weS1pb3MtZGV2aWNlKSB0b29sXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIHNlcnZlciBtYWNoaW5lLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgbWFwIG9mIGNlcnRpZmljYXRlcyBpbnN0YWxsZWQgb24gdGhlIHJlYWwgZGV2aWNlXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXR0ZW1wdGluZyB0byBsaXN0IGNlcnRpZmljYXRlcyBmb3Igc2ltdWxhdGVkIGRldmljZSBvciBpZiBweS1pb3MtZGV2aWNlXG4gKiBpcyBub3QgaW5zdGFsbGVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUxpc3RDZXJ0aWZpY2F0ZXMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVMaXN0Q2VydGlmaWNhdGVzICgpIHtcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdUaGlzIGV4dGVuc2lvbiBpcyBvbmx5IHN1cHBvcnRlZCBvbiByZWFsIGRldmljZXMnKTtcbiAgfVxuICBjb25zdCBjbGllbnQgPSBuZXcgUHlpZGV2aWNlKHRoaXMub3B0cy51ZGlkKTtcbiAgaWYgKGF3YWl0IGNsaWVudC5hc3NlcnRFeGlzdHMoZmFsc2UpKSB7XG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5saXN0UHJvZmlsZXMoKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3B5aWRldmljZSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLCBjb21tYW5kIGNhbm5vdCBiZSBleGVjdXRlZC4nKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIHBhcnNlQ29tbW9uTmFtZSB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0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
362
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsIl9hc3luY2JveCIsIl9ibHVlYmlyZCIsIl9vcyIsIl9wYXRoIiwiX2h0dHAiLCJfdGVlbl9wcm9jZXNzIiwiX3BvcnRzY2FubmVyIiwiX3B5SW9zRGV2aWNlQ2xpZW50IiwiX2RyaXZlciIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImV4cG9ydHMiLCJDT05GSUdfRVhURU5TSU9OIiwiSE9TVF9QT1JUX1JBTkdFIiwiVE1QU0VSVkVSX1NUQVJUVVBfVElNRU9VVCIsIlNldHRpbmdzIiwiR2VuZXJhbCIsInR5cGUiLCJ2YWx1ZSIsIlByb2ZpbGUiLCJBYm91dCIsIkNlcnRpZmljYXRlX1RydXN0X1NldHRpbmdzIiwiQnV0dG9uIiwiSW5zdGFsbCIsIkFsbG93IiwiRG9uZSIsIlJldHVybl90b19TZXR0aW5ncyIsIkFsZXJ0IiwiZXh0cmFjdENvbW1vbk5hbWUiLCJjZXJ0QnVmZmVyIiwidGVtcENlcnQiLCJ0ZW1wRGlyIiwib3BlbiIsInByZWZpeCIsInN1ZmZpeCIsImZzIiwid3JpdGVGaWxlIiwicGF0aCIsInN0ZG91dCIsImV4ZWMiLCJwYXJzZUNvbW1vbk5hbWUiLCJlcnIiLCJFcnJvciIsIm1lc3NhZ2UiLCJyaW1yYWYiLCJMSUJSRV9TU0xfUEFUVEVSTiIsIk9QRU5fU1NMX1BBVFRFUk4iLCJzdHJpbmdDZXJ0aWZpY2F0ZSIsInJlc3VsdCIsInJlZHVjZSIsImFjYyIsInIiLCJtYXRjaCIsInRvTW9iaWxlQ29uZmlnIiwiY29tbW9uTmFtZSIsImdldFVVSUQiLCJ1dGlsIiwidXVpZFY0IiwidG9VcHBlckNhc2UiLCJjb250ZW50VXVpZCIsIlBheWxvYWRDb250ZW50IiwiUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWUiLCJQYXlsb2FkRGVzY3JpcHRpb24iLCJQYXlsb2FkRGlzcGxheU5hbWUiLCJQYXlsb2FkSWRlbnRpZmllciIsIlBheWxvYWRUeXBlIiwiUGF5bG9hZFVVSUQiLCJQYXlsb2FkVmVyc2lvbiIsIm9zIiwiaG9zdG5hbWUiLCJzcGxpdCIsIlBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZCIsImNsaWNrRWxlbWVudCIsImRyaXZlciIsImxvY2F0b3IiLCJvcHRpb25zIiwiZWxlbWVudCIsInRpbWVvdXQiLCJza2lwSWZJbnZpc2libGUiLCJsb29rdXBEZWxheSIsInJldHJ5SW50ZXJ2YWwiLCJmaW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMiLCJKU09OIiwic3RyaW5naWZ5IiwibmF0aXZlQ2xpY2siLCJpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUiLCJCIiwiZGVsYXkiLCJ0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyIsIm5hbWUiLCJzd2l0Y2hMb2NhdG9yIiwicmV0cnkiLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsInBvc3RBY2NlcHRBbGVydCIsImluc3RhbGxQb3N0MTIyQ2VydGlmaWNhdGUiLCJhY3RpdmF0ZUFwcCIsImlzQ2VydEZvdW5kIiwic3dpcGVOdW0iLCJtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUiLCJvcHRzIiwiY29udGVudCIsImlzUm9vdCIsIl8iLCJpc0VtcHR5IiwiaXNTaW11bGF0b3IiLCJtZXRob2ROYW1lIiwiZGV2aWNlIiwic2ltY3RsIiwiQnVmZmVyIiwiZnJvbSIsInRvU3RyaW5nIiwicmF3IiwiZSIsImxvZyIsImRlYnVnIiwiaW5mbyIsImNsaWVudCIsIlB5aWRldmljZSIsInVkaWQiLCJhc3NlcnRFeGlzdHMiLCJpbnN0YWxsUHJvZmlsZSIsInBheWxvYWQiLCJ0bXBSb290Iiwib3BlbkRpciIsInRtcFBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsImNvbmZpZ05hbWUiLCJjb25maWdQYXRoIiwicmVzb2x2ZSIsInRtcFNlcnZlciIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJyZXMiLCJjb25maWdGaWxlIiwicmVhZEZpbGUiLCJlbmQiLCJjbiIsIm1vYmlsZUNvbmZpZyIsInBsaXN0IiwidXBkYXRlUGxpc3RGaWxlIiwiaG9zdCIsImNlcnRVcmwiLCJsaXN0ZW4iLCJ3YWl0Rm9yQ29uZGl0aW9uIiwiY2hlY2tQb3J0U3RhdHVzIiwiaWduIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImlzUmVhbERldmljZSIsInByb3h5Q29tbWFuZCIsInVybCIsImlzV2ViQ29udGV4dCIsInNldFVybCIsIm9wZW5VcmwiLCJpc0NlcnRBbHJlYWR5SW5zdGFsbGVkIiwiY29tcGFyZVZlcnNpb25zIiwicGxhdGZvcm1WZXJzaW9uIiwiYnVuZGxlSWQiLCJ3YXJuIiwidG9Jbk1lbW9yeUJhc2U2NCIsImNsb3NlIiwibW9iaWxlUmVtb3ZlQ2VydGlmaWNhdGUiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwicmVtb3ZlUHJvZmlsZSIsIm1vYmlsZUxpc3RDZXJ0aWZpY2F0ZXMiLCJsaXN0UHJvZmlsZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJfZGVmYXVsdCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvY2VydGlmaWNhdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCBwbGlzdCwgdGVtcERpciwgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHJldHJ5SW50ZXJ2YWwsIHJldHJ5LCB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlLCBjaGVja1BvcnRTdGF0dXMgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4uL3B5LWlvcy1kZXZpY2UtY2xpZW50JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5sZXQgZXh0ZW5zaW9ucyA9IHt9LCBjb21tYW5kcyA9IHt9O1xuXG5jb25zdCBDT05GSUdfRVhURU5TSU9OID0gJ21vYmlsZWNvbmZpZyc7XG5jb25zdCBIT1NUX1BPUlRfUkFOR0UgPSBbMzgyMDAsIDM4Mjk5XTtcbmNvbnN0IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQgPSA1MDAwO1xuY29uc3QgU2V0dGluZ3MgPSB7XG4gIEdlbmVyYWw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdHZW5lcmFsJyxcbiAgfSxcbiAgUHJvZmlsZToge1xuICAgIHR5cGU6ICctaW9zIHByZWRpY2F0ZSBzdHJpbmcnLFxuICAgIHZhbHVlOiBgbmFtZSBCRUdJTlNXSVRIICdQcm9maWxlJ2AsXG4gIH0sXG4gIEFib3V0OiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnQWJvdXQnLFxuICB9LFxuICBDZXJ0aWZpY2F0ZV9UcnVzdF9TZXR0aW5nczoge1xuICAgIHR5cGU6ICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICB2YWx1ZTogJ0NlcnRpZmljYXRlIFRydXN0IFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBCdXR0b24gPSB7XG4gIEluc3RhbGw6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdJbnN0YWxsJyxcbiAgfSxcbiAgQWxsb3c6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdBbGxvdycsXG4gIH0sXG4gIERvbmU6IHtcbiAgICB0eXBlOiAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgdmFsdWU6ICdEb25lJyxcbiAgfSxcbiAgUmV0dXJuX3RvX1NldHRpbmdzOiB7XG4gICAgdHlwZTogJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIHZhbHVlOiAnUmV0dXJuIHRvIFNldHRpbmdzJyxcbiAgfSxcbn07XG5jb25zdCBBbGVydCA9IHtcbiAgSW5zdGFsbDoge1xuICAgIHR5cGU6ICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICB2YWx1ZTogJyoqL1hDVUlFbGVtZW50VHlwZUFueVtgdHlwZSA9PSBcXCdYQ1VJRWxlbWVudFR5cGVBbGVydFxcJyBPUiB0eXBlID09IFxcJ1hDVUlFbGVtZW50VHlwZVNoZWV0XFwnYF0vKiovWENVSUVsZW1lbnRUeXBlQnV0dG9uW2BsYWJlbCA9PSBcXCdJbnN0YWxsXFwnYF0nLFxuICB9LFxufTtcblxuXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0Q29tbW9uTmFtZSAoY2VydEJ1ZmZlcikge1xuICBjb25zdCB0ZW1wQ2VydCA9IGF3YWl0IHRlbXBEaXIub3Blbih7XG4gICAgcHJlZml4OiAnY2VydCcsXG4gICAgc3VmZml4OiAnLmNlcidcbiAgfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDZXJ0LnBhdGgsIGNlcnRCdWZmZXIpO1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygnb3BlbnNzbCcsIFsneDUwOScsICctbm9vdXQnLCAnLXN1YmplY3QnLCAnLWluJywgdGVtcENlcnQucGF0aF0pO1xuICAgIHJldHVybiBwYXJzZUNvbW1vbk5hbWUoc3Rkb3V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgY29tbW9uIG5hbWUgdmFsdWUgZnJvbSB0aGUgY2VydGlmaWNhdGUuIElzIGl0IHZhbGlkIGFuZCBiYXNlNjQtZW5jb2RlZD8gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodGVtcENlcnQucGF0aCk7XG4gIH1cbn1cblxuY29uc3QgTElCUkVfU1NMX1BBVFRFUk4gPSAvXFwvQ049KFteXFwvXSspLzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuY29uc3QgT1BFTl9TU0xfUEFUVEVSTiA9IC8sXFxzQ05cXHM9XFxzKFteLF0rKS87XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uTmFtZSAoc3RyaW5nQ2VydGlmaWNhdGUpIHtcbiAgY29uc3QgcmVzdWx0ID0gW0xJQlJFX1NTTF9QQVRURVJOLCBPUEVOX1NTTF9QQVRURVJOXS5yZWR1Y2UoKGFjYywgcikgPT4ge1xuICAgIGlmIChhY2MpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gci5leGVjKHN0cmluZ0NlcnRpZmljYXRlKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIH0sIG51bGwpO1xuICBpZiAoIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gY29tbW9uIG5hbWUgdmFsdWUgaW4gJyR7c3RyaW5nQ2VydGlmaWNhdGV9JyBvdXRwdXRgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBBcHBsZSdzIG92ZXItdGhlLWFpciBjb25maWd1cmF0aW9uIHByb2ZpbGVcbiAqIGZvciBjZXJ0aWZpY2F0ZSBkZXBsb3ltZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBQRU0gY2VydGlmaWNhdGUgY29udGVudC5cbiAqIFJlYWQgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvY29udGVudC9kb2N1bWVudGF0aW9uL05ldHdvcmtpbmdJbnRlcm5ldC9Db25jZXB0dWFsL2lQaG9uZU9UQUNvbmZpZ3VyYXRpb24vSW50cm9kdWN0aW9uL0ludHJvZHVjdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHN1Y2ggcHJvZmlsZXMuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNlcnRCdWZmZXIgLSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgUEVNIGNlcnRpZmljYXRlIGVuY29kZWQgaW50byBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbW9uTmFtZSAtIENlcnRpZmljYXRlJ3MgY29tbW9uIG5hbWVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBlbmNvZGVkIHN0cnVjdHVyZSBvZiB0aGUgZ2l2ZW4gY2VydGlmaWNhdGUsIHdoaWNoIGlzIHJlYWR5IHRvIGJlIHBhc3NlZFxuICogYXMgYW4gYXJndW1lbnQgdG8gcGxpc3QgYnVpbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmZ1bmN0aW9uIHRvTW9iaWxlQ29uZmlnIChjZXJ0QnVmZmVyLCBjb21tb25OYW1lKSB7XG4gIGNvbnN0IGdldFVVSUQgPSAoKSA9PiB1dGlsLnV1aWRWNCgpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IGNvbnRlbnRVdWlkID0gZ2V0VVVJRCgpO1xuICByZXR1cm4ge1xuICAgIFBheWxvYWRDb250ZW50OiBbe1xuICAgICAgUGF5bG9hZENlcnRpZmljYXRlRmlsZU5hbWU6IGAke2NvbW1vbk5hbWV9LmNlcmAsXG4gICAgICBQYXlsb2FkQ29udGVudDogY2VydEJ1ZmZlcixcbiAgICAgIFBheWxvYWREZXNjcmlwdGlvbjogJ0FkZHMgYSBDQSByb290IGNlcnRpZmljYXRlJyxcbiAgICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICAgIFBheWxvYWRJZGVudGlmaWVyOiBgY29tLmFwcGxlLnNlY3VyaXR5LnJvb3QuJHtjb250ZW50VXVpZH1gLFxuICAgICAgUGF5bG9hZFR5cGU6ICdjb20uYXBwbGUuc2VjdXJpdHkucm9vdCcsXG4gICAgICBQYXlsb2FkVVVJRDogY29udGVudFV1aWQsXG4gICAgICBQYXlsb2FkVmVyc2lvbjogMVxuICAgIH1dLFxuICAgIFBheWxvYWREaXNwbGF5TmFtZTogY29tbW9uTmFtZSxcbiAgICBQYXlsb2FkSWRlbnRpZmllcjogYCR7b3MuaG9zdG5hbWUoKS5zcGxpdCgnLicpWzBdfS4ke2dldFVVSUQoKX1gLFxuICAgIFBheWxvYWRSZW1vdmFsRGlzYWxsb3dlZDogZmFsc2UsXG4gICAgUGF5bG9hZFR5cGU6ICdDb25maWd1cmF0aW9uJyxcbiAgICBQYXlsb2FkVVVJRDogZ2V0VVVJRCgpLFxuICAgIFBheWxvYWRWZXJzaW9uOiAxXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsaWNrRWxlbWVudCAoZHJpdmVyLCBsb2NhdG9yLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGVsZW1lbnQgPSBudWxsO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGxvb2t1cERlbGF5ID0gNTAwO1xuICB0cnkge1xuICAgIGVsZW1lbnQgPSBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgPCBsb29rdXBEZWxheSA/IDEgOiB0aW1lb3V0IC8gbG9va3VwRGVsYXksIGxvb2t1cERlbGF5LFxuICAgICAgKCkgPT4gZHJpdmVyLmZpbmROYXRpdmVFbGVtZW50T3JFbGVtZW50cyhsb2NhdG9yLnR5cGUsIGxvY2F0b3IudmFsdWUsIGZhbHNlKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChza2lwSWZJbnZpc2libGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCAke0pTT04uc3RyaW5naWZ5KGxvY2F0b3IpfSB3aXRoaW4gJHt0aW1lb3V0fW1zIHRpbWVvdXRgKTtcbiAgfVxuICBhd2FpdCBkcml2ZXIubmF0aXZlQ2xpY2soZWxlbWVudCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUgKGRyaXZlcikge1xuICAvLyBBY2NlcHQgU2FmYXJpIGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5BbGxvdywge1xuICAgIC8vIGNlcnRpZmljYXRlIGxvYWQgbWlnaHQgdGFrZSBzb21lIHRpbWUgb24gc2xvdyBtYWNoaW5lc1xuICAgIHRpbWVvdXQ6IDE1MDAwLFxuICB9KTtcbiAgLy8gV2FpdCB1bnRpbCBQcmVmZXJlbmNlcyBhcmUgb3BlbmVkXG4gIGF3YWl0IEIuZGVsYXkoMjAwMCk7XG5cbiAgLy8gR28gdGhyb3VnaCBQcmVmZXJlbmNlcyB3aXphcmRcbiAgaWYgKCFhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCwge1xuICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgfSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gV2UgbmVlZCB0byBjbGljayBJbnN0YWxsIGJ1dHRvbiBvbiB0d28gZGlmZmVyZW50IHRhYnNcbiAgLy8gVGhlIHNlY29uZCBvbmUgY29uZmlybXMgdGhlIHByZXZpb3VzXG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5JbnN0YWxsKTtcbiAgLy8gQWNjZXB0IGFsZXJ0XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEFsZXJ0Lkluc3RhbGwpO1xuICAvLyBGaW5pc2ggYWRkaW5nIGNlcnRpZmljYXRlXG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIEJ1dHRvbi5Eb25lKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRydXN0Q2VydGlmaWNhdGVJblByZWZlcmVuY2VzIChkcml2ZXIsIG5hbWUpIHtcbiAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuR2VuZXJhbCk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkFib3V0KTtcbiAgY29uc3Qgc3dpdGNoTG9jYXRvciA9IHtcbiAgICB0eXBlOiAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF0vKiovWENVSUVsZW1lbnRUeXBlU3dpdGNoYCxcbiAgfTtcbiAgYXdhaXQgcmV0cnkoNSwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRyaXZlci5tb2JpbGVTd2lwZSh7XG4gICAgICBlbGVtZW50OiBhd2FpdCBkcml2ZXIuZmluZE5hdGl2ZUVsZW1lbnRPckVsZW1lbnRzKCdjbGFzcyBuYW1lJywgJ1hDVUlFbGVtZW50VHlwZVRhYmxlJywgZmFsc2UpLFxuICAgICAgZGlyZWN0aW9uOiAndXAnXG4gICAgfSk7XG4gICAgYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgU2V0dGluZ3MuQ2VydGlmaWNhdGVfVHJ1c3RfU2V0dGluZ3MsIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoc3dpdGNoTG9jYXRvci50eXBlLCBzd2l0Y2hMb2NhdG9yLnZhbHVlLCBmYWxzZSk7XG4gIH0pO1xuICAvLyBPbmx5IGNsaWNrIHRoZSBzd2l0Y2ggaWYgaXQgaXMgc2V0IHRvIE9mZlxuICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgIHR5cGU6IHN3aXRjaExvY2F0b3IudHlwZSxcbiAgICB2YWx1ZTogYCR7c3dpdGNoTG9jYXRvci52YWx1ZX1bXFxgdmFsdWUgPT0gJzAnXFxgXWBcbiAgfSwge1xuICAgIHRpbWVvdXQ6IDEwMDAsXG4gICAgc2tpcElmSW52aXNpYmxlOiB0cnVlLFxuICB9KSkge1xuICAgIGF3YWl0IGRyaXZlci5wb3N0QWNjZXB0QWxlcnQoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlIChkcml2ZXIsIG5hbWUpIHtcbiAgLy8gQWNjZXB0IFNhZmFyaSBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uQWxsb3csIHtcbiAgICAvLyBjZXJ0aWZpY2F0ZSBsb2FkIG1pZ2h0IHRha2Ugc29tZSB0aW1lIG9uIHNsb3cgbWFjaGluZXNcbiAgICB0aW1lb3V0OiAxNTAwMCxcbiAgfSk7XG4gIC8vIFdhaXQgZm9yIHRoZSBzZWNvbmQgYWxlcnRcbiAgYXdhaXQgQi5kZWxheSgyMDAwKTtcblxuICBhd2FpdCBkcml2ZXIucG9zdEFjY2VwdEFsZXJ0KCk7XG4gIGF3YWl0IGRyaXZlci5hY3RpdmF0ZUFwcCgnY29tLmFwcGxlLlByZWZlcmVuY2VzJyk7XG4gIGF3YWl0IGNsaWNrRWxlbWVudChkcml2ZXIsIFNldHRpbmdzLkdlbmVyYWwpO1xuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgLy8gU2VsZWN0IHRoZSB0YXJnZXQgY2VydFxuICBsZXQgaXNDZXJ0Rm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgc3dpcGVOdW0gPSAwOyBzd2lwZU51bSA8IDU7ICsrc3dpcGVOdW0pIHtcbiAgICBpZiAoYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwge1xuICAgICAgdHlwZTogJy1pb3MgY2xhc3MgY2hhaW4nLFxuICAgICAgdmFsdWU6IGAqKi9YQ1VJRWxlbWVudFR5cGVDZWxsW1xcYGxhYmVsID09ICcke25hbWV9J1xcYF1gLFxuICAgIH0sIHtcbiAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIHNraXBJZkludmlzaWJsZTogdHJ1ZSxcbiAgICB9KSkge1xuICAgICAgaXNDZXJ0Rm91bmQgPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgYXdhaXQgZHJpdmVyLm1vYmlsZVN3aXBlKHtcbiAgICAgIGVsZW1lbnQ6IGF3YWl0IGRyaXZlci5maW5kTmF0aXZlRWxlbWVudE9yRWxlbWVudHMoJ2NsYXNzIG5hbWUnLCAnWENVSUVsZW1lbnRUeXBlVGFibGUnLCBmYWxzZSksXG4gICAgICBkaXJlY3Rpb246ICd1cCdcbiAgICB9KTtcbiAgfVxuICBpZiAoIWlzQ2VydEZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtuYW1lfScgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBjZXJ0aWZpY2F0ZXMgbGlzdGApO1xuICB9XG5cbiAgLy8gSW5zdGFsbCBvcHRpb24gaXMgb25seSB2aXNpYmxlIGlmIHRoZSBjZXJ0IGlzIG5vdCBpbnN0YWxsZWQgeWV0XG4gIGlmICghYXdhaXQgY2xpY2tFbGVtZW50KGRyaXZlciwgQnV0dG9uLkluc3RhbGwsIHtcbiAgICBza2lwSWZJbnZpc2libGU6IHRydWUsXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IEIuZGVsYXkoMTUwMCk7XG4gIC8vIENvbmZpcm0gdW50cnVzdGVkIGNlcnQgaW5zdGFsbFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uSW5zdGFsbCk7XG4gIC8vIEFjY2VwdCBhbGVydFxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBBbGVydC5JbnN0YWxsKTtcbiAgLy8gRmluaXNoIGFkZGluZyBjZXJ0aWZpY2F0ZVxuICBhd2FpdCBjbGlja0VsZW1lbnQoZHJpdmVyLCBCdXR0b24uRG9uZSk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBjb250ZW50IC0gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcHVibGljIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGNvbW1vbk5hbWUgLSBDb21tb24gbmFtZSBvZiB0aGUgY2VydGlmaWNhdGUuIElmIHRoaXMgaXMgbm90IHNldFxuICogdGhlbiB0aGUgc2NyaXB0IHdpbGwgdHJ5IHRvIHBhcnNlIGl0IGZyb20gdGhlIGdpdmVuIGNlcnRpZmljYXRlIGNvbnRlbnQuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBpc1Jvb3QgW3RydWVdIC0gVGhpcyBvcHRpb24gZGVmaW5lcyB3aGVyZSB0aGUgY2VydGlmaWNhdGUgc2hvdWxkIGJlXG4gKiBpbnN0YWxsZWQgdG86IGVpdGhlciBUcnVzdGVkIFJvb3QgU3RvcmUgKGB0cnVlYCwgdGhlIGRlZmF1bHQgb3B0aW9uKSBvclxuICogdGhlIEtleWNoYWluIChgZmFsc2VgKS4gT24gZW52aXJvbm1lbnRzIG90aGVyIHRoYW4gWGNvZGUgMTEuNCsgU2ltdWxhdG9yIHRoaXNcbiAqIG9wdGlvbiBpcyBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgYSBjdXN0b20gY2VydGlmaWNhdGUgb250byB0aGUgZGV2aWNlLlxuICogU2luY2UgWGNvZGUgU0RLIDExLjQgQXBwbGUgaGFzIGFkZGVkIGEgZGVkaWNhdGVkIHNpbWN0bCBzdWJjb21tYW5kIHRvIHF1aWNrbHkgaGFuZGxlXG4gKiBjZXJ0aWZpY2F0ZXMgb24gU2ltdWxhdG9yIG92ZXIgQ0xJLlxuICogT24gcmVhbCBkZXZpY2VzIG9yIHNpbXVsYXRvcnMgYmVmb3JlIFhjb2RlIDExLjQgU0RLXG4gKiBBcHBsZSBwcm92aWRlcyBubyBvZmZpY2lhbCB3YXkgdG8gZG8gaXQgdmlhIHRoZSBjb21tYW5kIGxpbmUuXG4gKiBJbiBzdWNoIGNhc2UgKGFuZCBhbHNvIGFzIGEgZmFsbGJhY2sgaWYgQ0xJIHNldHVwIGZhaWxzKVxuICogdGhpcyBtZXRob2QgdHJpZXMgdG8gd3JhcCB0aGUgY2VydGlmaWNhdGUgaW50byAubW9iaWxlY29uZmlnIGZvcm1hdFxuICogYW5kIHRoZW4gZGVwbG95cyB0aGUgd3JhcHBlZCBmaWxlIHRvIHRoZSBpbnRlcm5hbCBIVFRQIHNlcnZlcixcbiAqIHNvIG9uZSBjYW4gb3BlbiBpdCB2aWEgbW9iaWxlIFNhZmFyaS5cbiAqIFRoZW4gdGhlIGFsZ29yaXRobSBnb2VzIHRocm91Z2ggdGhlIHByb2ZpbGUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBieVxuICogY2xpY2tpbmcgdGhlIG5lY2Vzc2FyeSBidXR0b25zIHVzaW5nIFdlYkRyaXZlckFnZW50LlxuICpcbiAqIEBwYXJhbSB7Q2VydGlmaWNhdGVJbnN0YWxsYXRpb25PcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGdlbmVyYXRlZCAubW9iaWxlY29uZmlnIGZpbGUgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZy4gVGhpcyBjb25maWcgbWlnaHQgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gKiBJZiB0aGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldCB2aWEgQ0xJIHRoZW4gbm90aGluZyBpcyByZXR1cm5lZC5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbENlcnRpZmljYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRlbnQsXG4gICAgY29tbW9uTmFtZSxcbiAgICBpc1Jvb3QgPSB0cnVlLFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNFbXB0eShjb250ZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2VydGlmaWNhdGUgY29udGVudCBzaG91bGQgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBpc1Jvb3QgPyAnYWRkUm9vdENlcnRpZmljYXRlJyA6ICdhZGRDZXJ0aWZpY2F0ZSc7XG4gICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnNpbWN0bFttZXRob2ROYW1lXShcbiAgICAgICAgQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCksIHtyYXc6IHRydWV9XG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVGhlIGNlcnRpZmljYXRlIGNhbm5vdCBiZSBpbnN0YWxsZWQgdmlhIENMSS4gYCArXG4gICAgICAgIGBGYWxsaW5nIGJhY2sgdG8gVUktYmFzZWQgZGVwbG95bWVudGApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgUHlpZGV2aWNlKHRoaXMub3B0cy51ZGlkKTtcbiAgICBpZiAoYXdhaXQgY2xpZW50LmFzc2VydEV4aXN0cyhmYWxzZSkpIHtcbiAgICAgIGF3YWl0IGNsaWVudC5pbnN0YWxsUHJvZmlsZSh7cGF5bG9hZDogQnVmZmVyLmZyb20oY29udGVudCwgJ2Jhc2U2NCcpfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ3B5aWRldmljZSBpcyBub3QgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLiAnICtcbiAgICAgICAgJ0ZhbGxpbmcgYmFjayB0byB0aGUgKHNsb3cpIFVJLWJhc2VkIGluc3RhbGxhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKEhPU1RfUE9SVF9SQU5HRVswXSwgSE9TVF9QT1JUX1JBTkdFWzFdKTtcbiAgY29uc3QgY29uZmlnTmFtZSA9IGBhcHBpdW0uJHtDT05GSUdfRVhURU5TSU9OfWA7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLnJlc29sdmUodG1wUm9vdCwgY29uZmlnTmFtZSk7XG4gIGNvbnN0IHRtcFNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIGZ1bmN0aW9uIChfLCByZXMpIHtcbiAgICBjb25zdCBjb25maWdGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoY29uZmlnUGF0aCk7XG4gICAgcmVzLmVuZChjb25maWdGaWxlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2VydEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGNvbnRlbnQsICdiYXNlNjQnKTtcbiAgICBjb25zdCBjbiA9IGNvbW1vbk5hbWUgfHwgYXdhaXQgZXh0cmFjdENvbW1vbk5hbWUoY2VydEJ1ZmZlcik7XG4gICAgY29uc3QgbW9iaWxlQ29uZmlnID0gdG9Nb2JpbGVDb25maWcoY2VydEJ1ZmZlciwgY24pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoY29uZmlnUGF0aCwgbW9iaWxlQ29uZmlnLCBmYWxzZSwgZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc3RvcmUgdGhlIGdlbmVyYXRlZCBjb25maWcgYXMgJyR7Y29uZmlnUGF0aH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBvcy5ob3N0bmFtZSgpO1xuICAgICAgY29uc3QgY2VydFVybCA9IGBodHRwOi8vJHtob3N0fToke3RtcFBvcnR9LyR7Y29uZmlnTmFtZX1gO1xuICAgICAgYXdhaXQgdG1wU2VydmVyLmxpc3Rlbih0bXBQb3J0KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyh0bXBQb3J0LCBob3N0KSkgPT09ICdvcGVuJztcbiAgICAgICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICB3YWl0TXM6IFRNUFNFUlZFUl9TVEFSVFVQX1RJTUVPVVQsXG4gICAgICAgICAgaW50ZXJ2YWxNczogMzAwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFRoZSB0ZW1wb3Jhcnkgd2ViIHNlcnZlciBpcyBydW5uaW5nIGF0IGh0dHA6Ly8ke2hvc3R9OiR7dG1wUG9ydH1gKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdGVtcG9yYXJ5IHdlYiBzZXJ2ZXIgY2Fubm90IGJlIHN0YXJ0ZWQgYXQgaHR0cDovLyR7aG9zdH06JHt0bXBQb3J0fS5gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy91cmwnLCAnUE9TVCcsIHt1cmw6IGNlcnRVcmx9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjb21tYW5kIGFib3ZlIGRvZXMgbm90IGFsd2F5cyB3b3JrIG9uIHJlYWwgZGV2aWNlc1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRVcmwoY2VydFVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybChjZXJ0VXJsKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSBmYWxzZTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPj0nLCAnMTIuMicpKSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUG9zdDEyMkNlcnRpZmljYXRlKHRoaXMsIGNuKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrRWxlbWVudCh0aGlzLCBTZXR0aW5ncy5Qcm9maWxlKTtcbiAgICAgICAgICBhd2FpdCB0cnVzdENlcnRpZmljYXRlSW5QcmVmZXJlbmNlcyh0aGlzLCBjbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhd2FpdCBpbnN0YWxsUHJlMTIyQ2VydGlmaWNhdGUodGhpcykpIHtcbiAgICAgICAgICBhd2FpdCBjbGlja0VsZW1lbnQodGhpcywgQnV0dG9uLlJldHVybl90b19TZXR0aW5ncyk7XG4gICAgICAgICAgYXdhaXQgdHJ1c3RDZXJ0aWZpY2F0ZUluUHJlZmVyZW5jZXModGhpcywgY24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzQ2VydEFscmVhZHlJbnN0YWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDZXJ0QWxyZWFkeUluc3RhbGxlZCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBJdCBsb29rcyBsaWtlIHRoZSAnJHtjbn0nIGNlcnRpZmljYXRlIGhhcyBiZWVuIGFscmVhZHkgYWRkZWQgdG8gdGhlIENBIHJvb3RgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMub3B0cy5idW5kbGVJZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAodGhpcy5vcHRzLmJ1bmRsZUlkKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCByZXN0b3JlIHRoZSBhcHBsaWNhdGlvbiAnJHt0aGlzLm9wdHMuYnVuZGxlSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQoY29uZmlnUGF0aCkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgdG1wU2VydmVyLmNsb3NlKCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgaW5zdGFsbGVkIGNlcnRpZmljYXRlcyBmb3IgcmVhbCBkZXZpY2VzIG9ubHlcbiAqIGlmIFtweS1pb3MtZGV2aWNlXShodHRwczovL2dpdGh1Yi5jb20vWXVlQ2hlbi1DL3B5LWlvcy1kZXZpY2UpIHRvb2xcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyIG1hY2hpbmUuXG4gKlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBjZXJ0aWZpY2F0ZSB0byByZW1vdmVcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgc3RhdHVzIGFja25vd2xlZGdtZW50IGlmIHN1Y2Nlc3NmdWxseSByZW1vdmVkIGNlcnRpZmljYXRlIG9yICdOb25lJ1xuICogQHRocm93cyB7RXJyb3J9IElmIGF0dGVtcHRpbmcgdG8gcmVtb3RlIGNlcnRpZmljYXRlcyBmb3Igc2ltdWxhdGVkIGRldmljZSBvciBpZiBweS1pb3MtZGV2aWNlXG4gKiBpcyBub3QgaW5zdGFsbGVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVJlbW92ZUNlcnRpZmljYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUmVtb3ZlQ2VydGlmaWNhdGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmFtZVxuICB9ID0gb3B0cztcbiAgaWYgKCF0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCdUaGlzIGV4dGVuc2lvbiBpcyBvbmx5IHN1cHBvcnRlZCBvbiByZWFsIGRldmljZXMnKTtcbiAgfVxuICBjb25zdCBjbGllbnQgPSBuZXcgUHlpZGV2aWNlKHRoaXMub3B0cy51ZGlkKTtcbiAgYXdhaXQgY2xpZW50LmFzc2VydEV4aXN0cyh0cnVlKTtcbiAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZW1vdmVQcm9maWxlKG5hbWUpO1xufTtcblxuLyoqXG4gKiBMaXN0cyBpbnN0YWxsZWQgY2VydGlmaWNhdGVzIGZvciByZWFsIGRldmljZXMgb25seVxuICogaWYgW3B5LWlvcy1kZXZpY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZSkgdG9vbFxuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIgbWFjaGluZS5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIG1hcCBvZiBjZXJ0aWZpY2F0ZXMgaW5zdGFsbGVkIG9uIHRoZSByZWFsIGRldmljZVxuICogQHRocm93cyB7RXJyb3J9IElmIGF0dGVtcHRpbmcgdG8gbGlzdCBjZXJ0aWZpY2F0ZXMgZm9yIHNpbXVsYXRlZCBkZXZpY2Ugb3IgaWYgcHktaW9zLWRldmljZVxuICogaXMgbm90IGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5tb2JpbGVMaXN0Q2VydGlmaWNhdGVzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdENlcnRpZmljYXRlcyAoKSB7XG4gIGlmICghdGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcignVGhpcyBleHRlbnNpb24gaXMgb25seSBzdXBwb3J0ZWQgb24gcmVhbCBkZXZpY2VzJyk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gbmV3IFB5aWRldmljZSh0aGlzLm9wdHMudWRpZCk7XG4gIGF3YWl0IGNsaWVudC5hc3NlcnRFeGlzdHModHJ1ZSk7XG4gIHJldHVybiBhd2FpdCBjbGllbnQubGlzdFByb2ZpbGVzKCk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBwYXJzZUNvbW1vbk5hbWUgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFNBQUEs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
@@ -1 +1 @@
1
- {"version":3,"file":"certificate.js","names":["_lodash","_interopRequireDefault","require","_support","_asyncbox","_bluebird","_os","_path","_http","_teen_process","_portscanner","_pyIosDeviceClient","_driver","extensions","commands","exports","CONFIG_EXTENSION","HOST_PORT_RANGE","TMPSERVER_STARTUP_TIMEOUT","Settings","General","type","value","Profile","About","Certificate_Trust_Settings","Button","Install","Allow","Done","Return_to_Settings","Alert","extractCommonName","certBuffer","tempCert","tempDir","open","prefix","suffix","fs","writeFile","path","stdout","exec","parseCommonName","err","Error","message","rimraf","LIBRE_SSL_PATTERN","OPEN_SSL_PATTERN","stringCertificate","result","reduce","acc","r","match","toMobileConfig","commonName","getUUID","util","uuidV4","toUpperCase","contentUuid","PayloadContent","PayloadCertificateFileName","PayloadDescription","PayloadDisplayName","PayloadIdentifier","PayloadType","PayloadUUID","PayloadVersion","os","hostname","split","PayloadRemovalDisallowed","clickElement","driver","locator","options","element","timeout","skipIfInvisible","lookupDelay","retryInterval","findNativeElementOrElements","JSON","stringify","nativeClick","installPre122Certificate","B","delay","trustCertificateInPreferences","name","switchLocator","retry","mobileSwipe","direction","postAcceptAlert","installPost122Certificate","activateApp","isCertFound","swipeNum","mobileInstallCertificate","opts","content","isRoot","_","isEmpty","isSimulator","methodName","device","simctl","Buffer","from","toString","raw","e","log","debug","info","client","Pyidevice","udid","assertExists","installProfile","payload","tmpRoot","openDir","tmpPort","findAPortNotInUse","configName","configPath","resolve","tmpServer","http","createServer","res","configFile","readFile","end","cn","mobileConfig","plist","updatePlistFile","host","certUrl","listen","waitForCondition","checkPortStatus","ign","waitMs","intervalMs","isRealDevice","proxyCommand","url","isWebContext","setUrl","openUrl","isCertAlreadyInstalled","compareVersions","platformVersion","bundleId","warn","toInMemoryBase64","close","mobileListCertificates","errors","NotImplementedError","listProfiles","Object","assign","_default","default"],"sources":["../../../lib/commands/certificate.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs, plist, tempDir, util } from 'appium/support';\nimport { retryInterval, retry, waitForCondition } from 'asyncbox';\nimport B from 'bluebird';\nimport os from 'os';\nimport path from 'path';\nimport http from 'http';\nimport { exec } from 'teen_process';\nimport { findAPortNotInUse, checkPortStatus } from 'portscanner';\nimport Pyidevice from '../py-ios-device-client';\nimport { errors } from 'appium/driver';\n\nlet extensions = {}, commands = {};\n\nconst CONFIG_EXTENSION = 'mobileconfig';\nconst HOST_PORT_RANGE = [38200, 38299];\nconst TMPSERVER_STARTUP_TIMEOUT = 5000;\nconst Settings = {\n General: {\n type: 'accessibility id',\n value: 'General',\n },\n Profile: {\n type: '-ios predicate string',\n value: `name BEGINSWITH 'Profile'`,\n },\n About: {\n type: 'accessibility id',\n value: 'About',\n },\n Certificate_Trust_Settings: {\n type: 'accessibility id',\n value: 'Certificate Trust Settings',\n },\n};\nconst Button = {\n Install: {\n type: 'accessibility id',\n value: 'Install',\n },\n Allow: {\n type: 'accessibility id',\n value: 'Allow',\n },\n Done: {\n type: 'accessibility id',\n value: 'Done',\n },\n Return_to_Settings: {\n type: 'accessibility id',\n value: 'Return to Settings',\n },\n};\nconst Alert = {\n Install: {\n type: '-ios class chain',\n value: '**/XCUIElementTypeAny[`type == \\'XCUIElementTypeAlert\\' OR type == \\'XCUIElementTypeSheet\\'`]/**/XCUIElementTypeButton[`label == \\'Install\\'`]',\n },\n};\n\n\nasync function extractCommonName (certBuffer) {\n const tempCert = await tempDir.open({\n prefix: 'cert',\n suffix: '.cer'\n });\n try {\n await fs.writeFile(tempCert.path, certBuffer);\n const {stdout} = await exec('openssl', ['x509', '-noout', '-subject', '-in', tempCert.path]);\n return parseCommonName(stdout);\n } catch (err) {\n throw new Error(`Cannot parse common name value from the certificate. Is it valid and base64-encoded? ` +\n `Original error: ${err.message}`);\n } finally {\n await fs.rimraf(tempCert.path);\n }\n}\n\nconst LIBRE_SSL_PATTERN = /\\/CN=([^\\/]+)/; // eslint-disable-line no-useless-escape\nconst OPEN_SSL_PATTERN = /,\\sCN\\s=\\s([^,]+)/;\n\nfunction parseCommonName (stringCertificate) {\n const result = [LIBRE_SSL_PATTERN, OPEN_SSL_PATTERN].reduce((acc, r) => {\n if (acc) {\n return acc;\n }\n const match = r.exec(stringCertificate);\n return match && match[1];\n }, null);\n if (!result) {\n throw new Error(`There is no common name value in '${stringCertificate}' output`);\n }\n return result;\n}\n\n/**\n * Generates Apple's over-the-air configuration profile\n * for certificate deployment based on the given PEM certificate content.\n * Read https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/Introduction/Introduction.html\n * for more details on such profiles.\n *\n * @param {Buffer} certBuffer - The actual content of PEM certificate encoded into NodeJS buffer\n * @param {string} commonName - Certificate's common name\n * @returns {Object} The encoded structure of the given certificate, which is ready to be passed\n * as an argument to plist builder\n * @throws {Error} If the given certificate cannot be parsed\n */\nfunction toMobileConfig (certBuffer, commonName) {\n const getUUID = () => util.uuidV4().toUpperCase();\n const contentUuid = getUUID();\n return {\n PayloadContent: [{\n PayloadCertificateFileName: `${commonName}.cer`,\n PayloadContent: certBuffer,\n PayloadDescription: 'Adds a CA root certificate',\n PayloadDisplayName: commonName,\n PayloadIdentifier: `com.apple.security.root.${contentUuid}`,\n PayloadType: 'com.apple.security.root',\n PayloadUUID: contentUuid,\n PayloadVersion: 1\n }],\n PayloadDisplayName: commonName,\n PayloadIdentifier: `${os.hostname().split('.')[0]}.${getUUID()}`,\n PayloadRemovalDisallowed: false,\n PayloadType: 'Configuration',\n PayloadUUID: getUUID(),\n PayloadVersion: 1\n };\n}\n\nasync function clickElement (driver, locator, options = {}) {\n let element = null;\n const {\n timeout = 5000,\n skipIfInvisible = false\n } = options;\n const lookupDelay = 500;\n try {\n element = await retryInterval(timeout < lookupDelay ? 1 : timeout / lookupDelay, lookupDelay,\n () => driver.findNativeElementOrElements(locator.type, locator.value, false)\n );\n } catch (err) {\n if (skipIfInvisible) {\n return false;\n }\n throw new Error(`Cannot find ${JSON.stringify(locator)} within ${timeout}ms timeout`);\n }\n await driver.nativeClick(element);\n return true;\n}\n\nasync function installPre122Certificate (driver) {\n // Accept Safari alert\n await clickElement(driver, Button.Allow, {\n // certificate load might take some time on slow machines\n timeout: 15000,\n });\n // Wait until Preferences are opened\n await B.delay(2000);\n\n // Go through Preferences wizard\n if (!await clickElement(driver, Button.Install, {\n skipIfInvisible: true,\n })) {\n return false;\n }\n // We need to click Install button on two different tabs\n // The second one confirms the previous\n await B.delay(1500);\n await clickElement(driver, Button.Install);\n // Accept alert\n await clickElement(driver, Alert.Install);\n // Finish adding certificate\n await clickElement(driver, Button.Done);\n return true;\n}\n\nasync function trustCertificateInPreferences (driver, name) {\n await clickElement(driver, Settings.General);\n await clickElement(driver, Settings.About);\n const switchLocator = {\n type: '-ios class chain',\n value: `**/XCUIElementTypeCell[\\`label == '${name}'\\`]/**/XCUIElementTypeSwitch`,\n };\n await retry(5, async () => {\n await driver.mobileSwipe({\n element: await driver.findNativeElementOrElements('class name', 'XCUIElementTypeTable', false),\n direction: 'up'\n });\n await clickElement(driver, Settings.Certificate_Trust_Settings, {\n timeout: 500,\n });\n\n await driver.findNativeElementOrElements(switchLocator.type, switchLocator.value, false);\n });\n // Only click the switch if it is set to Off\n if (await clickElement(driver, {\n type: switchLocator.type,\n value: `${switchLocator.value}[\\`value == '0'\\`]`\n }, {\n timeout: 1000,\n skipIfInvisible: true,\n })) {\n await driver.postAcceptAlert();\n }\n}\n\nasync function installPost122Certificate (driver, name) {\n // Accept Safari alert\n await clickElement(driver, Button.Allow, {\n // certificate load might take some time on slow machines\n timeout: 15000,\n });\n // Wait for the second alert\n await B.delay(2000);\n\n await driver.postAcceptAlert();\n await driver.activateApp('com.apple.Preferences');\n await clickElement(driver, Settings.General);\n await clickElement(driver, Settings.Profile);\n // Select the target cert\n let isCertFound = false;\n for (let swipeNum = 0; swipeNum < 5; ++swipeNum) {\n if (await clickElement(driver, {\n type: '-ios class chain',\n value: `**/XCUIElementTypeCell[\\`label == '${name}'\\`]`,\n }, {\n timeout: 500,\n skipIfInvisible: true,\n })) {\n isCertFound = true;\n break;\n }\n\n await driver.mobileSwipe({\n element: await driver.findNativeElementOrElements('class name', 'XCUIElementTypeTable', false),\n direction: 'up'\n });\n }\n if (!isCertFound) {\n throw new Error(`'${name}' cannot be found in the certificates list`);\n }\n\n // Install option is only visible if the cert is not installed yet\n if (!await clickElement(driver, Button.Install, {\n skipIfInvisible: true,\n })) {\n return false;\n }\n await B.delay(1500);\n // Confirm untrusted cert install\n await clickElement(driver, Button.Install);\n // Accept alert\n await clickElement(driver, Alert.Install);\n // Finish adding certificate\n await clickElement(driver, Button.Done);\n\n return true;\n}\n\n/**\n * @typedef {Object} CertificateInstallationOptions\n *\n * @property {!string} content - Base64-encoded content of the public certificate\n * @property {?string} commonName - Common name of the certificate. If this is not set\n * then the script will try to parse it from the given certificate content.\n * @property {?boolean} isRoot [true] - This option defines where the certificate should be\n * installed to: either Trusted Root Store (`true`, the default option) or\n * the Keychain (`false`). On environments other than Xcode 11.4+ Simulator this\n * option is ignored.\n */\n\n/**\n * Installs a custom certificate onto the device.\n * Since Xcode SDK 11.4 Apple has added a dedicated simctl subcommand to quickly handle\n * certificates on Simulator over CLI.\n * On real devices or simulators before Xcode 11.4 SDK\n * Apple provides no official way to do it via the command line.\n * In such case (and also as a fallback if CLI setup fails)\n * this method tries to wrap the certificate into .mobileconfig format\n * and then deploys the wrapped file to the internal HTTP server,\n * so one can open it via mobile Safari.\n * Then the algorithm goes through the profile installation procedure by\n * clicking the necessary buttons using WebDriverAgent.\n *\n * @param {CertificateInstallationOptions} opts\n * @returns {?string} The content of the generated .mobileconfig file as\n * base64-encoded string. This config might be useful for debugging purposes.\n * If the certificate has been successfully set via CLI then nothing is returned.\n */\ncommands.mobileInstallCertificate = async function mobileInstallCertificate (opts = {}) {\n const {\n content,\n commonName,\n isRoot = true,\n } = opts;\n if (_.isEmpty(content)) {\n throw new Error('Certificate content should not be empty');\n }\n\n if (this.isSimulator()) {\n try {\n const methodName = isRoot ? 'addRootCertificate' : 'addCertificate';\n await this.opts.device.simctl[methodName](\n Buffer.from(content, 'base64').toString(), {raw: true}\n );\n return;\n } catch (e) {\n this.log.debug(e);\n this.log.info(`The certificate cannot be installed via CLI. ` +\n `Falling back to UI-based deployment`);\n }\n } else {\n const client = new Pyidevice(this.opts.udid);\n if (await client.assertExists(false)) {\n await client.installProfile({payload: Buffer.from(content, 'base64')});\n return;\n } else {\n this.log.info('pyidevice is not installed on your system. ' +\n 'Falling back to the (slow) UI-based installation');\n }\n }\n\n const tmpRoot = await tempDir.openDir();\n const tmpPort = await findAPortNotInUse(HOST_PORT_RANGE[0], HOST_PORT_RANGE[1]);\n const configName = `appium.${CONFIG_EXTENSION}`;\n const configPath = path.resolve(tmpRoot, configName);\n const tmpServer = http.createServer(async function (_, res) {\n const configFile = await fs.readFile(configPath);\n res.end(configFile);\n });\n try {\n const certBuffer = Buffer.from(content, 'base64');\n const cn = commonName || await extractCommonName(certBuffer);\n const mobileConfig = toMobileConfig(certBuffer, cn);\n try {\n await plist.updatePlistFile(configPath, mobileConfig, false, false);\n } catch (err) {\n throw new Error(`Cannot store the generated config as '${configPath}'. ` +\n `Original error: ${err.message}`);\n }\n\n try {\n const host = os.hostname();\n const certUrl = `http://${host}:${tmpPort}/${configName}`;\n await tmpServer.listen(tmpPort);\n try {\n await waitForCondition(async () => {\n try {\n return (await checkPortStatus(tmpPort, host)) === 'open';\n } catch (ign) {\n return false;\n }\n }, {\n waitMs: TMPSERVER_STARTUP_TIMEOUT,\n intervalMs: 300,\n });\n this.log.debug(`The temporary web server is running at http://${host}:${tmpPort}`);\n } catch (e) {\n throw new Error(`The temporary web server cannot be started at http://${host}:${tmpPort}.`);\n }\n if (this.isRealDevice()) {\n try {\n await this.proxyCommand('/url', 'POST', {url: certUrl});\n } catch (err) {\n if (this.isWebContext()) {\n // The command above does not always work on real devices\n await this.setUrl(certUrl);\n } else {\n throw err;\n }\n }\n } else {\n await this.opts.device.openUrl(certUrl);\n }\n\n let isCertAlreadyInstalled = false;\n if (util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {\n if (await installPost122Certificate(this, cn)) {\n await clickElement(this, Settings.Profile);\n await trustCertificateInPreferences(this, cn);\n } else {\n isCertAlreadyInstalled = true;\n }\n } else {\n if (await installPre122Certificate(this)) {\n await clickElement(this, Button.Return_to_Settings);\n await trustCertificateInPreferences(this, cn);\n } else {\n isCertAlreadyInstalled = true;\n }\n }\n if (isCertAlreadyInstalled) {\n this.log.info(`It looks like the '${cn}' certificate has been already added to the CA root`);\n }\n } finally {\n if (this.opts.bundleId) {\n try {\n await this.activateApp(this.opts.bundleId);\n } catch (e) {\n this.log.warn(`Cannot restore the application '${this.opts.bundleId}'. Original error: ${e.message}`);\n }\n }\n }\n\n return (await util.toInMemoryBase64(configPath)).toString();\n } finally {\n await tmpServer.close();\n await fs.rimraf(tmpRoot);\n }\n};\n\n/**\n * Lists installed certificates for real devices only\n * if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool\n * is available on the server machine.\n *\n * @returns {Object} Returns map of certificates installed on the real device\n * @throws {Error} If attempting to list certificates for simulated device or if py-ios-device\n * is not installed\n */\ncommands.mobileListCertificates = async function mobileListCertificates () {\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError('This extension is only supported on real devices');\n }\n const client = new Pyidevice(this.opts.udid);\n if (await client.assertExists(false)) {\n return await client.listProfiles();\n }\n throw new Error('pyidevice is not installed on your system, command cannot be executed.');\n};\n\nObject.assign(extensions, commands);\nexport { commands, parseCommonName };\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"certificate.js","names":["_lodash","_interopRequireDefault","require","_support","_asyncbox","_bluebird","_os","_path","_http","_teen_process","_portscanner","_pyIosDeviceClient","_driver","extensions","commands","exports","CONFIG_EXTENSION","HOST_PORT_RANGE","TMPSERVER_STARTUP_TIMEOUT","Settings","General","type","value","Profile","About","Certificate_Trust_Settings","Button","Install","Allow","Done","Return_to_Settings","Alert","extractCommonName","certBuffer","tempCert","tempDir","open","prefix","suffix","fs","writeFile","path","stdout","exec","parseCommonName","err","Error","message","rimraf","LIBRE_SSL_PATTERN","OPEN_SSL_PATTERN","stringCertificate","result","reduce","acc","r","match","toMobileConfig","commonName","getUUID","util","uuidV4","toUpperCase","contentUuid","PayloadContent","PayloadCertificateFileName","PayloadDescription","PayloadDisplayName","PayloadIdentifier","PayloadType","PayloadUUID","PayloadVersion","os","hostname","split","PayloadRemovalDisallowed","clickElement","driver","locator","options","element","timeout","skipIfInvisible","lookupDelay","retryInterval","findNativeElementOrElements","JSON","stringify","nativeClick","installPre122Certificate","B","delay","trustCertificateInPreferences","name","switchLocator","retry","mobileSwipe","direction","postAcceptAlert","installPost122Certificate","activateApp","isCertFound","swipeNum","mobileInstallCertificate","opts","content","isRoot","_","isEmpty","isSimulator","methodName","device","simctl","Buffer","from","toString","raw","e","log","debug","info","client","Pyidevice","udid","assertExists","installProfile","payload","tmpRoot","openDir","tmpPort","findAPortNotInUse","configName","configPath","resolve","tmpServer","http","createServer","res","configFile","readFile","end","cn","mobileConfig","plist","updatePlistFile","host","certUrl","listen","waitForCondition","checkPortStatus","ign","waitMs","intervalMs","isRealDevice","proxyCommand","url","isWebContext","setUrl","openUrl","isCertAlreadyInstalled","compareVersions","platformVersion","bundleId","warn","toInMemoryBase64","close","mobileRemoveCertificate","errors","NotImplementedError","removeProfile","mobileListCertificates","listProfiles","Object","assign","_default","default"],"sources":["../../../lib/commands/certificate.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs, plist, tempDir, util } from 'appium/support';\nimport { retryInterval, retry, waitForCondition } from 'asyncbox';\nimport B from 'bluebird';\nimport os from 'os';\nimport path from 'path';\nimport http from 'http';\nimport { exec } from 'teen_process';\nimport { findAPortNotInUse, checkPortStatus } from 'portscanner';\nimport Pyidevice from '../py-ios-device-client';\nimport { errors } from 'appium/driver';\n\nlet extensions = {}, commands = {};\n\nconst CONFIG_EXTENSION = 'mobileconfig';\nconst HOST_PORT_RANGE = [38200, 38299];\nconst TMPSERVER_STARTUP_TIMEOUT = 5000;\nconst Settings = {\n General: {\n type: 'accessibility id',\n value: 'General',\n },\n Profile: {\n type: '-ios predicate string',\n value: `name BEGINSWITH 'Profile'`,\n },\n About: {\n type: 'accessibility id',\n value: 'About',\n },\n Certificate_Trust_Settings: {\n type: 'accessibility id',\n value: 'Certificate Trust Settings',\n },\n};\nconst Button = {\n Install: {\n type: 'accessibility id',\n value: 'Install',\n },\n Allow: {\n type: 'accessibility id',\n value: 'Allow',\n },\n Done: {\n type: 'accessibility id',\n value: 'Done',\n },\n Return_to_Settings: {\n type: 'accessibility id',\n value: 'Return to Settings',\n },\n};\nconst Alert = {\n Install: {\n type: '-ios class chain',\n value: '**/XCUIElementTypeAny[`type == \\'XCUIElementTypeAlert\\' OR type == \\'XCUIElementTypeSheet\\'`]/**/XCUIElementTypeButton[`label == \\'Install\\'`]',\n },\n};\n\n\nasync function extractCommonName (certBuffer) {\n const tempCert = await tempDir.open({\n prefix: 'cert',\n suffix: '.cer'\n });\n try {\n await fs.writeFile(tempCert.path, certBuffer);\n const {stdout} = await exec('openssl', ['x509', '-noout', '-subject', '-in', tempCert.path]);\n return parseCommonName(stdout);\n } catch (err) {\n throw new Error(`Cannot parse common name value from the certificate. Is it valid and base64-encoded? ` +\n `Original error: ${err.message}`);\n } finally {\n await fs.rimraf(tempCert.path);\n }\n}\n\nconst LIBRE_SSL_PATTERN = /\\/CN=([^\\/]+)/; // eslint-disable-line no-useless-escape\nconst OPEN_SSL_PATTERN = /,\\sCN\\s=\\s([^,]+)/;\n\nfunction parseCommonName (stringCertificate) {\n const result = [LIBRE_SSL_PATTERN, OPEN_SSL_PATTERN].reduce((acc, r) => {\n if (acc) {\n return acc;\n }\n const match = r.exec(stringCertificate);\n return match && match[1];\n }, null);\n if (!result) {\n throw new Error(`There is no common name value in '${stringCertificate}' output`);\n }\n return result;\n}\n\n/**\n * Generates Apple's over-the-air configuration profile\n * for certificate deployment based on the given PEM certificate content.\n * Read https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/Introduction/Introduction.html\n * for more details on such profiles.\n *\n * @param {Buffer} certBuffer - The actual content of PEM certificate encoded into NodeJS buffer\n * @param {string} commonName - Certificate's common name\n * @returns {Object} The encoded structure of the given certificate, which is ready to be passed\n * as an argument to plist builder\n * @throws {Error} If the given certificate cannot be parsed\n */\nfunction toMobileConfig (certBuffer, commonName) {\n const getUUID = () => util.uuidV4().toUpperCase();\n const contentUuid = getUUID();\n return {\n PayloadContent: [{\n PayloadCertificateFileName: `${commonName}.cer`,\n PayloadContent: certBuffer,\n PayloadDescription: 'Adds a CA root certificate',\n PayloadDisplayName: commonName,\n PayloadIdentifier: `com.apple.security.root.${contentUuid}`,\n PayloadType: 'com.apple.security.root',\n PayloadUUID: contentUuid,\n PayloadVersion: 1\n }],\n PayloadDisplayName: commonName,\n PayloadIdentifier: `${os.hostname().split('.')[0]}.${getUUID()}`,\n PayloadRemovalDisallowed: false,\n PayloadType: 'Configuration',\n PayloadUUID: getUUID(),\n PayloadVersion: 1\n };\n}\n\nasync function clickElement (driver, locator, options = {}) {\n let element = null;\n const {\n timeout = 5000,\n skipIfInvisible = false\n } = options;\n const lookupDelay = 500;\n try {\n element = await retryInterval(timeout < lookupDelay ? 1 : timeout / lookupDelay, lookupDelay,\n () => driver.findNativeElementOrElements(locator.type, locator.value, false)\n );\n } catch (err) {\n if (skipIfInvisible) {\n return false;\n }\n throw new Error(`Cannot find ${JSON.stringify(locator)} within ${timeout}ms timeout`);\n }\n await driver.nativeClick(element);\n return true;\n}\n\nasync function installPre122Certificate (driver) {\n // Accept Safari alert\n await clickElement(driver, Button.Allow, {\n // certificate load might take some time on slow machines\n timeout: 15000,\n });\n // Wait until Preferences are opened\n await B.delay(2000);\n\n // Go through Preferences wizard\n if (!await clickElement(driver, Button.Install, {\n skipIfInvisible: true,\n })) {\n return false;\n }\n // We need to click Install button on two different tabs\n // The second one confirms the previous\n await B.delay(1500);\n await clickElement(driver, Button.Install);\n // Accept alert\n await clickElement(driver, Alert.Install);\n // Finish adding certificate\n await clickElement(driver, Button.Done);\n return true;\n}\n\nasync function trustCertificateInPreferences (driver, name) {\n await clickElement(driver, Settings.General);\n await clickElement(driver, Settings.About);\n const switchLocator = {\n type: '-ios class chain',\n value: `**/XCUIElementTypeCell[\\`label == '${name}'\\`]/**/XCUIElementTypeSwitch`,\n };\n await retry(5, async () => {\n await driver.mobileSwipe({\n element: await driver.findNativeElementOrElements('class name', 'XCUIElementTypeTable', false),\n direction: 'up'\n });\n await clickElement(driver, Settings.Certificate_Trust_Settings, {\n timeout: 500,\n });\n\n await driver.findNativeElementOrElements(switchLocator.type, switchLocator.value, false);\n });\n // Only click the switch if it is set to Off\n if (await clickElement(driver, {\n type: switchLocator.type,\n value: `${switchLocator.value}[\\`value == '0'\\`]`\n }, {\n timeout: 1000,\n skipIfInvisible: true,\n })) {\n await driver.postAcceptAlert();\n }\n}\n\nasync function installPost122Certificate (driver, name) {\n // Accept Safari alert\n await clickElement(driver, Button.Allow, {\n // certificate load might take some time on slow machines\n timeout: 15000,\n });\n // Wait for the second alert\n await B.delay(2000);\n\n await driver.postAcceptAlert();\n await driver.activateApp('com.apple.Preferences');\n await clickElement(driver, Settings.General);\n await clickElement(driver, Settings.Profile);\n // Select the target cert\n let isCertFound = false;\n for (let swipeNum = 0; swipeNum < 5; ++swipeNum) {\n if (await clickElement(driver, {\n type: '-ios class chain',\n value: `**/XCUIElementTypeCell[\\`label == '${name}'\\`]`,\n }, {\n timeout: 500,\n skipIfInvisible: true,\n })) {\n isCertFound = true;\n break;\n }\n\n await driver.mobileSwipe({\n element: await driver.findNativeElementOrElements('class name', 'XCUIElementTypeTable', false),\n direction: 'up'\n });\n }\n if (!isCertFound) {\n throw new Error(`'${name}' cannot be found in the certificates list`);\n }\n\n // Install option is only visible if the cert is not installed yet\n if (!await clickElement(driver, Button.Install, {\n skipIfInvisible: true,\n })) {\n return false;\n }\n await B.delay(1500);\n // Confirm untrusted cert install\n await clickElement(driver, Button.Install);\n // Accept alert\n await clickElement(driver, Alert.Install);\n // Finish adding certificate\n await clickElement(driver, Button.Done);\n\n return true;\n}\n\n/**\n * @typedef {Object} CertificateInstallationOptions\n *\n * @property {!string} content - Base64-encoded content of the public certificate\n * @property {?string} commonName - Common name of the certificate. If this is not set\n * then the script will try to parse it from the given certificate content.\n * @property {?boolean} isRoot [true] - This option defines where the certificate should be\n * installed to: either Trusted Root Store (`true`, the default option) or\n * the Keychain (`false`). On environments other than Xcode 11.4+ Simulator this\n * option is ignored.\n */\n\n/**\n * Installs a custom certificate onto the device.\n * Since Xcode SDK 11.4 Apple has added a dedicated simctl subcommand to quickly handle\n * certificates on Simulator over CLI.\n * On real devices or simulators before Xcode 11.4 SDK\n * Apple provides no official way to do it via the command line.\n * In such case (and also as a fallback if CLI setup fails)\n * this method tries to wrap the certificate into .mobileconfig format\n * and then deploys the wrapped file to the internal HTTP server,\n * so one can open it via mobile Safari.\n * Then the algorithm goes through the profile installation procedure by\n * clicking the necessary buttons using WebDriverAgent.\n *\n * @param {CertificateInstallationOptions} opts\n * @returns {?string} The content of the generated .mobileconfig file as\n * base64-encoded string. This config might be useful for debugging purposes.\n * If the certificate has been successfully set via CLI then nothing is returned.\n */\ncommands.mobileInstallCertificate = async function mobileInstallCertificate (opts = {}) {\n const {\n content,\n commonName,\n isRoot = true,\n } = opts;\n if (_.isEmpty(content)) {\n throw new Error('Certificate content should not be empty');\n }\n\n if (this.isSimulator()) {\n try {\n const methodName = isRoot ? 'addRootCertificate' : 'addCertificate';\n await this.opts.device.simctl[methodName](\n Buffer.from(content, 'base64').toString(), {raw: true}\n );\n return;\n } catch (e) {\n this.log.debug(e);\n this.log.info(`The certificate cannot be installed via CLI. ` +\n `Falling back to UI-based deployment`);\n }\n } else {\n const client = new Pyidevice(this.opts.udid);\n if (await client.assertExists(false)) {\n await client.installProfile({payload: Buffer.from(content, 'base64')});\n return;\n } else {\n this.log.info('pyidevice is not installed on your system. ' +\n 'Falling back to the (slow) UI-based installation');\n }\n }\n\n const tmpRoot = await tempDir.openDir();\n const tmpPort = await findAPortNotInUse(HOST_PORT_RANGE[0], HOST_PORT_RANGE[1]);\n const configName = `appium.${CONFIG_EXTENSION}`;\n const configPath = path.resolve(tmpRoot, configName);\n const tmpServer = http.createServer(async function (_, res) {\n const configFile = await fs.readFile(configPath);\n res.end(configFile);\n });\n try {\n const certBuffer = Buffer.from(content, 'base64');\n const cn = commonName || await extractCommonName(certBuffer);\n const mobileConfig = toMobileConfig(certBuffer, cn);\n try {\n await plist.updatePlistFile(configPath, mobileConfig, false, false);\n } catch (err) {\n throw new Error(`Cannot store the generated config as '${configPath}'. ` +\n `Original error: ${err.message}`);\n }\n\n try {\n const host = os.hostname();\n const certUrl = `http://${host}:${tmpPort}/${configName}`;\n await tmpServer.listen(tmpPort);\n try {\n await waitForCondition(async () => {\n try {\n return (await checkPortStatus(tmpPort, host)) === 'open';\n } catch (ign) {\n return false;\n }\n }, {\n waitMs: TMPSERVER_STARTUP_TIMEOUT,\n intervalMs: 300,\n });\n this.log.debug(`The temporary web server is running at http://${host}:${tmpPort}`);\n } catch (e) {\n throw new Error(`The temporary web server cannot be started at http://${host}:${tmpPort}.`);\n }\n if (this.isRealDevice()) {\n try {\n await this.proxyCommand('/url', 'POST', {url: certUrl});\n } catch (err) {\n if (this.isWebContext()) {\n // The command above does not always work on real devices\n await this.setUrl(certUrl);\n } else {\n throw err;\n }\n }\n } else {\n await this.opts.device.openUrl(certUrl);\n }\n\n let isCertAlreadyInstalled = false;\n if (util.compareVersions(this.opts.platformVersion, '>=', '12.2')) {\n if (await installPost122Certificate(this, cn)) {\n await clickElement(this, Settings.Profile);\n await trustCertificateInPreferences(this, cn);\n } else {\n isCertAlreadyInstalled = true;\n }\n } else {\n if (await installPre122Certificate(this)) {\n await clickElement(this, Button.Return_to_Settings);\n await trustCertificateInPreferences(this, cn);\n } else {\n isCertAlreadyInstalled = true;\n }\n }\n if (isCertAlreadyInstalled) {\n this.log.info(`It looks like the '${cn}' certificate has been already added to the CA root`);\n }\n } finally {\n if (this.opts.bundleId) {\n try {\n await this.activateApp(this.opts.bundleId);\n } catch (e) {\n this.log.warn(`Cannot restore the application '${this.opts.bundleId}'. Original error: ${e.message}`);\n }\n }\n }\n\n return (await util.toInMemoryBase64(configPath)).toString();\n } finally {\n await tmpServer.close();\n await fs.rimraf(tmpRoot);\n }\n};\n\n/**\n * Removes installed certificates for real devices only\n * if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool\n * is available on the server machine.\n *\n * @property {!string} name - Name of certificate to remove\n * @returns {Object} Returns status acknowledgment if successfully removed certificate or 'None'\n * @throws {Error} If attempting to remote certificates for simulated device or if py-ios-device\n * is not installed\n */\ncommands.mobileRemoveCertificate = async function mobileRemoveCertificate (opts = {}) {\n const {\n name\n } = opts;\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError('This extension is only supported on real devices');\n }\n const client = new Pyidevice(this.opts.udid);\n await client.assertExists(true);\n return await client.removeProfile(name);\n};\n\n/**\n * Lists installed certificates for real devices only\n * if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool\n * is available on the server machine.\n *\n * @returns {Object} Returns map of certificates installed on the real device\n * @throws {Error} If attempting to list certificates for simulated device or if py-ios-device\n * is not installed\n */\ncommands.mobileListCertificates = async function mobileListCertificates () {\n if (!this.isRealDevice()) {\n throw new errors.NotImplementedError('This extension is only supported on real devices');\n }\n const client = new Pyidevice(this.opts.udid);\n await client.assertExists(true);\n return await client.listProfiles();\n};\n\nObject.assign(extensions, commands);\nexport { commands, parseCommonName };\nexport default extensions;\n"],"mappings":"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"}
@@ -80,6 +80,7 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
80
80
  startPerfRecord: 'mobileStartPerfRecord',
81
81
  stopPerfRecord: 'mobileStopPerfRecord',
82
82
  installCertificate: 'mobileInstallCertificate',
83
+ removeCertificate: 'mobileRemoveCertificate',
83
84
  listCertificates: 'mobileListCertificates',
84
85
  startLogsBroadcast: 'mobileStartLogsBroadcast',
85
86
  stopLogsBroadcast: 'mobileStopLogsBroadcast',
@@ -133,4 +134,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
133
134
  };
134
135
  var _default = extensions;
135
136
  exports.default = _default;
136
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiX3N1cHBvcnQiLCJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImRyYWdGcm9tVG9XaXRoVmVsb2NpdHkiLCJmb3JjZVByZXNzIiwic2Nyb2xsVG9FbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwia2lsbEFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImxpc3RBcHBzIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0Iiwic3RhcnRQZXJmUmVjb3JkIiwic3RvcFBlcmZSZWNvcmQiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJsaXN0Q2VydGlmaWNhdGVzIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiYWN0aXZlQXBwSW5mbyIsImRldmljZVNjcmVlbkluZm8iLCJwcmVzc0J1dHRvbiIsImVucm9sbEJpb21ldHJpYyIsInNlbmRCaW9tZXRyaWNNYXRjaCIsImlzQmlvbWV0cmljRW5yb2xsZWQiLCJjbGVhcktleWNoYWlucyIsImdldFBlcm1pc3Npb24iLCJzZXRQZXJtaXNzaW9uIiwicmVzZXRQZXJtaXNzaW9uIiwiZ2V0QXBwZWFyYW5jZSIsInNldEFwcGVhcmFuY2UiLCJzaXJpQ29tbWFuZCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImRlbGV0ZUZvbGRlciIsInN0YXJ0QXVkaW9SZWNvcmRpbmciLCJzdG9wQXVkaW9SZWNvcmRpbmciLCJydW5YQ1Rlc3QiLCJpbnN0YWxsWENUZXN0QnVuZGxlIiwibGlzdFhDVGVzdEJ1bmRsZXMiLCJsaXN0WENUZXN0c0luVGVzdEJ1bmRsZSIsInB1c2hOb3RpZmljYXRpb24iLCJleHBlY3ROb3RpZmljYXRpb24iLCJwZXJmb3JtSW9IaWRFdmVudCIsImNvbmZpZ3VyZUxvY2FsaXphdGlvbiIsInJlc2V0TG9jYXRpb25TZXJ2aWNlIiwic3RhcnRQY2FwIiwic3RvcFBjYXAiLCJsaXN0Q29uZGl0aW9uSW5kdWNlcnMiLCJlbmFibGVDb25kaXRpb25JbmR1Y2VyIiwiZGlzYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJ1cGRhdGVTYWZhcmlQcmVmZXJlbmNlcyIsImRlZXBMaW5rIiwic2V0U2ltdWxhdGVkTG9jYXRpb24iLCJnZXRTaW11bGF0ZWRMb2NhdGlvbiIsInJlc2V0U2ltdWxhdGVkTG9jYXRpb24iLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsImpvaW4iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGVycm9ycywgZXJyb3JGcm9tQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGVcbn0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBleHRlbnNpb25zID0ge307XG5cbmV4dGVuc2lvbnMucmVjZWl2ZUFzeW5jUmVzcG9uc2UgPSBhc3luYyBmdW5jdGlvbiByZWNlaXZlQXN5bmNSZXNwb25zZSAoc3RhdHVzLCB2YWx1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgdGhpcy5sb2cuZGVidWcoYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMuYXN5bmNQcm9taXNlKSkge1xuICAgIHRoaXMubG9nLndhcm4oYFJlY2VpdmVkIGFzeW5jIHJlc3BvbnNlIHdoZW4gd2Ugd2VyZSBub3QgZXhwZWN0aW5nIG9uZSEgYCArXG4gICAgICBgUmVzcG9uc2Ugd2FzOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodXRpbC5oYXNWYWx1ZShzdGF0dXMpICYmIHN0YXR1cyAhPT0gMCkge1xuICAgIC8vIE1KU09OV1BcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbUNvZGUoc3RhdHVzLCB2YWx1ZS5tZXNzYWdlKSk7XG4gIH1cbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgdmFsdWUgJiYgXy5pc1N0cmluZyh2YWx1ZS5lcnJvcikpIHtcbiAgICAvLyBXM0NcbiAgICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVqZWN0KGVycm9yRnJvbVczQ0pzb25Db2RlKHZhbHVlLmVycm9yLCB2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5zdGFja3RyYWNlKSk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuYXN5bmNQcm9taXNlLnJlc29sdmUodmFsdWUpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUF0b20oJ2V4ZWN1dGVfc2NyaXB0JywgW3NjcmlwdCwgYXJnc10pO1xuICAgIHJldHVybiB0aGlzLmNhY2hlV2ViRWxlbWVudHMocmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlQXN5bmMgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXN5bmMgKHNjcmlwdCwgYXJncykge1xuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuXG4gIGFyZ3MgPSB0aGlzLmNvbnZlcnRFbGVtZW50c0ZvckF0b21zKGFyZ3MpO1xuICB0aGlzLmFzeW5jV2FpdE1zID0gdGhpcy5hc3luY1dhaXRNcyB8fCAwO1xuICBjb25zdCBwcm9taXNlID0gdGhpcy5yZW1vdGUuZXhlY3V0ZUF0b21Bc3luYygnZXhlY3V0ZV9hc3luY19zY3JpcHQnLCBbXG4gICAgc2NyaXB0LCBhcmdzLCB0aGlzLmFzeW5jV2FpdE1zXG4gIF0sIHRoaXMuY3VyV2ViRnJhbWVzKTtcbiAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhhd2FpdCB0aGlzLndhaXRGb3JBdG9tKHByb21pc2UpKTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBjb21tYW5kTWFwID0ge1xuICAgIC8vcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICB0YXA6ICdtb2JpbGVUYXAnLFxuICAgIHNjcm9sbDogJ21vYmlsZVNjcm9sbCcsXG4gICAgc2VsZWN0UGlja2VyV2hlZWxWYWx1ZTogJ21vYmlsZVNlbGVjdFBpY2tlcldoZWVsVmFsdWUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY4LXN3aXBlbGVmdD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzQtc3dpcGVyaWdodD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njctc3dpcGV1cD9sYW5ndWFnZT1vYmpjXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjQtc3dpcGVkb3duP2xhbmd1YWdlPW9iamNcbiAgICBzd2lwZTogJ21vYmlsZVN3aXBlJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2OS1waW5jaHdpdGhzY2FsZT9sYW5ndWFnZT1vYmpjXG4gICAgcGluY2g6ICdtb2JpbGVQaW5jaCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzMtZG91YmxldGFwP2xhbmd1YWdlPW9iamNcbiAgICBkb3VibGVUYXA6ICdtb2JpbGVEb3VibGVUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4Njc1LXR3b2ZpbmdlcnRhcD9sYW5ndWFnZT1vYmpjXG4gICAgdHdvRmluZ2VyVGFwOiAnbW9iaWxlVHdvRmluZ2VyVGFwJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MS10YXB3aXRobnVtYmVyb2Z0YXBzP2xhbmd1YWdlPW9iamNcbiAgICB0YXBXaXRoTnVtYmVyT2ZUYXBzOiAnbW9iaWxlVGFwV2l0aE51bWJlck9mVGFwcycsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjMtcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgdG91Y2hBbmRIb2xkOiAnbW9iaWxlVG91Y2hBbmRIb2xkJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3MC1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICBkcmFnRnJvbVRvRm9yRHVyYXRpb246ICdtb2JpbGVEcmFnRnJvbVRvRm9yRHVyYXRpb24nLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY1LXJvdGF0ZT9sYW5ndWFnZT1vYmpjXG4gICAgcm90YXRlRWxlbWVudDogJ21vYmlsZVJvdGF0ZUVsZW1lbnQnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpY29vcmRpbmF0ZS8zNTUxNjkyLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIGRyYWdGcm9tVG9XaXRoVmVsb2NpdHk6ICdtb2JpbGVEcmFnRnJvbVRvV2l0aFZlbG9jaXR5JyxcbiAgICBmb3JjZVByZXNzOiAnbW9iaWxlRm9yY2VQcmVzcycsXG4gICAgc2Nyb2xsVG9FbGVtZW50OiAnbW9iaWxlU2Nyb2xsVG9FbGVtZW50JyxcblxuICAgIC8vZW5kcmVnaW9uIGdlc3R1cmVzIHN1cHBvcnRcbiAgICBhbGVydDogJ21vYmlsZUhhbmRsZUFsZXJ0JyxcblxuICAgIHNldFBhc3RlYm9hcmQ6ICdtb2JpbGVTZXRQYXN0ZWJvYXJkJyxcbiAgICBnZXRQYXN0ZWJvYXJkOiAnbW9iaWxlR2V0UGFzdGVib2FyZCcsXG5cbiAgICBzb3VyY2U6ICdtb2JpbGVHZXRTb3VyY2UnLFxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgLy9yZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgbGF1bmNoQXBwOiAnbW9iaWxlTGF1bmNoQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGtpbGxBcHA6ICdtb2JpbGVLaWxsQXBwJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgbGlzdEFwcHM6ICdtb2JpbGVMaXN0QXBwcycsXG4gICAgLy9lbmRyZWdpb24gbXVsdGlwbGUgYXBwcyBtYW5hZ2VtZW50XG5cbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdnZXRWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ2dldFZpZXdwb3J0UmVjdCcsXG5cbiAgICBzdGFydFBlcmZSZWNvcmQ6ICdtb2JpbGVTdGFydFBlcmZSZWNvcmQnLFxuICAgIHN0b3BQZXJmUmVjb3JkOiAnbW9iaWxlU3RvcFBlcmZSZWNvcmQnLFxuXG4gICAgaW5zdGFsbENlcnRpZmljYXRlOiAnbW9iaWxlSW5zdGFsbENlcnRpZmljYXRlJyxcbiAgICBsaXN0Q2VydGlmaWNhdGVzOiAnbW9iaWxlTGlzdENlcnRpZmljYXRlcycsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG4gICAgZGV2aWNlSW5mbzogJ21vYmlsZUdldERldmljZUluZm8nLFxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcbiAgICBhY3RpdmVBcHBJbmZvOiAnbW9iaWxlR2V0QWN0aXZlQXBwSW5mbycsXG4gICAgZGV2aWNlU2NyZWVuSW5mbzogJ2dldFNjcmVlbkluZm8nLFxuXG4gICAgcHJlc3NCdXR0b246ICdtb2JpbGVQcmVzc0J1dHRvbicsXG5cbiAgICBlbnJvbGxCaW9tZXRyaWM6ICdtb2JpbGVFbnJvbGxCaW9tZXRyaWMnLFxuICAgIHNlbmRCaW9tZXRyaWNNYXRjaDogJ21vYmlsZVNlbmRCaW9tZXRyaWNNYXRjaCcsXG4gICAgaXNCaW9tZXRyaWNFbnJvbGxlZDogJ21vYmlsZUlzQmlvbWV0cmljRW5yb2xsZWQnLFxuXG4gICAgY2xlYXJLZXljaGFpbnM6ICdtb2JpbGVDbGVhcktleWNoYWlucycsXG5cbiAgICBnZXRQZXJtaXNzaW9uOiAnbW9iaWxlR2V0UGVybWlzc2lvbicsXG4gICAgc2V0UGVybWlzc2lvbjogJ21vYmlsZVNldFBlcm1pc3Npb25zJyxcbiAgICByZXNldFBlcm1pc3Npb246ICdtb2JpbGVSZXNldFBlcm1pc3Npb24nLFxuXG4gICAgZ2V0QXBwZWFyYW5jZTogJ21vYmlsZUdldEFwcGVhcmFuY2UnLFxuICAgIHNldEFwcGVhcmFuY2U6ICdtb2JpbGVTZXRBcHBlYXJhbmNlJyxcblxuICAgIHNpcmlDb21tYW5kOiAnbW9iaWxlU2lyaUNvbW1hbmQnLFxuXG4gICAgcHVzaEZpbGU6ICdtb2JpbGVQdXNoRmlsZScsXG4gICAgcHVsbEZpbGU6ICdtb2JpbGVQdWxsRmlsZScsXG4gICAgcHVsbEZvbGRlcjogJ21vYmlsZVB1bGxGb2xkZXInLFxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcbiAgICBkZWxldGVGb2xkZXI6ICdtb2JpbGVEZWxldGVGb2xkZXInLFxuXG4gICAgc3RhcnRBdWRpb1JlY29yZGluZzogJ3N0YXJ0QXVkaW9SZWNvcmRpbmcnLFxuICAgIHN0b3BBdWRpb1JlY29yZGluZzogJ3N0b3BBdWRpb1JlY29yZGluZycsXG5cbiAgICAvLyBYQ1Rlc3RcbiAgICBydW5YQ1Rlc3Q6ICdtb2JpbGVSdW5YQ1Rlc3QnLFxuICAgIGluc3RhbGxYQ1Rlc3RCdW5kbGU6ICdtb2JpbGVJbnN0YWxsWENUZXN0QnVuZGxlJyxcbiAgICBsaXN0WENUZXN0QnVuZGxlczogJ21vYmlsZUxpc3RYQ1Rlc3RCdW5kbGVzJyxcbiAgICBsaXN0WENUZXN0c0luVGVzdEJ1bmRsZTogJ21vYmlsZUxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlJyxcblxuICAgIHB1c2hOb3RpZmljYXRpb246ICdtb2JpbGVQdXNoTm90aWZpY2F0aW9uJyxcbiAgICBleHBlY3ROb3RpZmljYXRpb246ICdtb2JpbGVFeHBlY3ROb3RpZmljYXRpb24nLFxuXG4gICAgcGVyZm9ybUlvSGlkRXZlbnQ6ICdtb2JpbGVQZXJmb3JtSW9IaWRFdmVudCcsXG5cbiAgICBjb25maWd1cmVMb2NhbGl6YXRpb246ICdtb2JpbGVDb25maWd1cmVMb2NhbGl6YXRpb24nLFxuXG4gICAgcmVzZXRMb2NhdGlvblNlcnZpY2U6ICdtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZScsXG5cbiAgICBzdGFydFBjYXA6ICdtb2JpbGVTdGFydFBjYXAnLFxuICAgIHN0b3BQY2FwOiAnbW9iaWxlU3RvcFBjYXAnLFxuICAgIGxpc3RDb25kaXRpb25JbmR1Y2VyczogJ21vYmlsZUxpc3RDb25kaXRpb25JbmR1Y2VycycsXG4gICAgZW5hYmxlQ29uZGl0aW9uSW5kdWNlcjogJ21vYmlsZUVuYWJsZUNvbmRpdGlvbkluZHVjZXInLFxuICAgIGRpc2FibGVDb25kaXRpb25JbmR1Y2VyOiAnbW9iaWxlRGlzYWJsZUNvbmRpdGlvbkluZHVjZXInLFxuXG4gICAgdXBkYXRlU2FmYXJpUHJlZmVyZW5jZXM6ICdtb2JpbGVVcGRhdGVTYWZhcmlQcmVmZXJlbmNlcycsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHNldFNpbXVsYXRlZExvY2F0aW9uOiAnbW9iaWxlU2V0U2ltdWxhdGVkTG9jYXRpb24nLFxuICAgIGdldFNpbXVsYXRlZExvY2F0aW9uOiAnbW9iaWxlR2V0U2ltdWxhdGVkTG9jYXRpb24nLFxuICAgIHJlc2V0U2ltdWxhdGVkTG9jYXRpb246ICdtb2JpbGVSZXNldFNpbXVsYXRlZExvY2F0aW9uJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKGNvbW1hbmRNYXAsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kICcke21vYmlsZUNvbW1hbmR9Jy4gT25seSAke18ua2V5cyhjb21tYW5kTWFwKS5qb2luKCcsICcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW2NvbW1hbmRNYXBbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFHQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFFQSxNQUFNRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRXJCQSxVQUFVLENBQUNDLG9CQUFvQixHQUFHLGVBQWVBLG9CQUFvQkEsQ0FBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7RUFDcEYsSUFBSSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBRSw0QkFBMkJDLElBQUksQ0FBQ0MsU0FBUyxDQUFDSixLQUFLLENBQUUsRUFBQyxDQUFDO0VBQ25FLElBQUksQ0FBQ0ssYUFBSSxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDQyxZQUFZLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUNOLEdBQUcsQ0FBQ08sSUFBSSxDQUFFLDBEQUF5RCxHQUNyRSxpQkFBZ0JMLElBQUksQ0FBQ0MsU0FBUyxDQUFDSixLQUFLLENBQUUsRUFBQyxDQUFDO0lBQzNDO0VBQ0Y7RUFFQSxJQUFJSyxhQUFJLENBQUNDLFFBQVEsQ0FBQ1AsTUFBTSxDQUFDLElBQUlBLE1BQU0sS0FB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
137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiX3N1cHBvcnQiLCJleHRlbnNpb25zIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJzdGF0dXMiLCJ2YWx1ZSIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInV0aWwiLCJoYXNWYWx1ZSIsImFzeW5jUHJvbWlzZSIsIndhcm4iLCJyZWplY3QiLCJlcnJvckZyb21Db2RlIiwibWVzc2FnZSIsIl8iLCJpc1N0cmluZyIsImVycm9yIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwicmVzb2x2ZSIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiY29udmVydEVsZW1lbnRzRm9yQXRvbXMiLCJyZXN1bHQiLCJleGVjdXRlQXRvbSIsImNhY2hlV2ViRWxlbWVudHMiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZXhlY3V0ZUFzeW5jIiwiYXN5bmNXYWl0TXMiLCJwcm9taXNlIiwicmVtb3RlIiwiZXhlY3V0ZUF0b21Bc3luYyIsImN1cldlYkZyYW1lcyIsIndhaXRGb3JBdG9tIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJjb21tYW5kTWFwIiwidGFwIiwic2Nyb2xsIiwic2VsZWN0UGlja2VyV2hlZWxWYWx1ZSIsInN3aXBlIiwicGluY2giLCJkb3VibGVUYXAiLCJ0d29GaW5nZXJUYXAiLCJ0YXBXaXRoTnVtYmVyT2ZUYXBzIiwidG91Y2hBbmRIb2xkIiwiZHJhZ0Zyb21Ub0ZvckR1cmF0aW9uIiwicm90YXRlRWxlbWVudCIsImRyYWdGcm9tVG9XaXRoVmVsb2NpdHkiLCJmb3JjZVByZXNzIiwic2Nyb2xsVG9FbGVtZW50IiwiYWxlcnQiLCJzZXRQYXN0ZWJvYXJkIiwiZ2V0UGFzdGVib2FyZCIsInNvdXJjZSIsImdldENvbnRleHRzIiwiaW5zdGFsbEFwcCIsImlzQXBwSW5zdGFsbGVkIiwicmVtb3ZlQXBwIiwibGF1bmNoQXBwIiwidGVybWluYXRlQXBwIiwia2lsbEFwcCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImxpc3RBcHBzIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0Iiwic3RhcnRQZXJmUmVjb3JkIiwic3RvcFBlcmZSZWNvcmQiLCJpbnN0YWxsQ2VydGlmaWNhdGUiLCJyZW1vdmVDZXJ0aWZpY2F0ZSIsImxpc3RDZXJ0aWZpY2F0ZXMiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJhY3RpdmVBcHBJbmZvIiwiZGV2aWNlU2NyZWVuSW5mbyIsInByZXNzQnV0dG9uIiwiZW5yb2xsQmlvbWV0cmljIiwic2VuZEJpb21ldHJpY01hdGNoIiwiaXNCaW9tZXRyaWNFbnJvbGxlZCIsImNsZWFyS2V5Y2hhaW5zIiwiZ2V0UGVybWlzc2lvbiIsInNldFBlcm1pc3Npb24iLCJyZXNldFBlcm1pc3Npb24iLCJnZXRBcHBlYXJhbmNlIiwic2V0QXBwZWFyYW5jZSIsInNpcmlDb21tYW5kIiwicHVzaEZpbGUiLCJwdWxsRmlsZSIsInB1bGxGb2xkZXIiLCJkZWxldGVGaWxlIiwiZGVsZXRlRm9sZGVyIiwic3RhcnRBdWRpb1JlY29yZGluZyIsInN0b3BBdWRpb1JlY29yZGluZyIsInJ1blhDVGVzdCIsImluc3RhbGxYQ1Rlc3RCdW5kbGUiLCJsaXN0WENUZXN0QnVuZGxlcyIsImxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlIiwicHVzaE5vdGlmaWNhdGlvbiIsImV4cGVjdE5vdGlmaWNhdGlvbiIsInBlcmZvcm1Jb0hpZEV2ZW50IiwiY29uZmlndXJlTG9jYWxpemF0aW9uIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJzdGFydFBjYXAiLCJzdG9wUGNhcCIsImxpc3RDb25kaXRpb25JbmR1Y2VycyIsImVuYWJsZUNvbmRpdGlvbkluZHVjZXIiLCJkaXNhYmxlQ29uZGl0aW9uSW5kdWNlciIsInVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzIiwiZGVlcExpbmsiLCJzZXRTaW11bGF0ZWRMb2NhdGlvbiIsImdldFNpbXVsYXRlZExvY2F0aW9uIiwicmVzZXRTaW11bGF0ZWRMb2NhdGlvbiIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIiwiam9pbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZXJyb3JzLCBlcnJvckZyb21Db2RlLCBlcnJvckZyb21XM0NKc29uQ29kZVxufSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5yZWNlaXZlQXN5bmNSZXNwb25zZSA9IGFzeW5jIGZ1bmN0aW9uIHJlY2VpdmVBc3luY1Jlc3BvbnNlIChzdGF0dXMsIHZhbHVlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICB0aGlzLmxvZy5kZWJ1ZyhgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2U6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy5hc3luY1Byb21pc2UpKSB7XG4gICAgdGhpcy5sb2cud2FybihgUmVjZWl2ZWQgYXN5bmMgcmVzcG9uc2Ugd2hlbiB3ZSB3ZXJlIG5vdCBleHBlY3Rpbmcgb25lISBgICtcbiAgICAgIGBSZXNwb25zZSB3YXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh1dGlsLmhhc1ZhbHVlKHN0YXR1cykgJiYgc3RhdHVzICE9PSAwKSB7XG4gICAgLy8gTUpTT05XUFxuICAgIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZWplY3QoZXJyb3JGcm9tQ29kZShzdGF0dXMsIHZhbHVlLm1lc3NhZ2UpKTtcbiAgfVxuICBpZiAoIXV0aWwuaGFzVmFsdWUoc3RhdHVzKSAmJiB2YWx1ZSAmJiBfLmlzU3RyaW5nKHZhbHVlLmVycm9yKSkge1xuICAgIC8vIFczQ1xuICAgIHJldHVybiB0aGlzLmFzeW5jUHJvbWlzZS5yZWplY3QoZXJyb3JGcm9tVzNDSnNvbkNvZGUodmFsdWUuZXJyb3IsIHZhbHVlLm1lc3NhZ2UsIHZhbHVlLnN0YWNrdHJhY2UpKTtcbiAgfVxuICByZXR1cm4gdGhpcy5hc3luY1Byb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKHNjcmlwdC5tYXRjaCgvXm1vYmlsZTovKSkge1xuICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC9ebW9iaWxlOi8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1vYmlsZShzY3JpcHQsIF8uaXNBcnJheShhcmdzKSA/IGFyZ3NbMF0gOiBhcmdzKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgYXJncyA9IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJncyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQXRvbSgnZXhlY3V0ZV9zY3JpcHQnLCBbc2NyaXB0LCBhcmdzXSk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVXZWJFbGVtZW50cyhyZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVBc3luYyA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBc3luYyAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgYXJncyA9IHRoaXMuY29udmVydEVsZW1lbnRzRm9yQXRvbXMoYXJncyk7XG4gIHRoaXMuYXN5bmNXYWl0TXMgPSB0aGlzLmFzeW5jV2FpdE1zIHx8IDA7XG4gIGNvbnN0IHByb21pc2UgPSB0aGlzLnJlbW90ZS5leGVjdXRlQXRvbUFzeW5jKCdleGVjdXRlX2FzeW5jX3NjcmlwdCcsIFtcbiAgICBzY3JpcHQsIGFyZ3MsIHRoaXMuYXN5bmNXYWl0TXNcbiAgXSwgdGhpcy5jdXJXZWJGcmFtZXMpO1xuICByZXR1cm4gdGhpcy5jYWNoZVdlYkVsZW1lbnRzKGF3YWl0IHRoaXMud2FpdEZvckF0b20ocHJvbWlzZSkpO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlTW9iaWxlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1vYmlsZSAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGNvbW1hbmRNYXAgPSB7XG4gICAgLy9yZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIHRhcDogJ21vYmlsZVRhcCcsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICBzZWxlY3RQaWNrZXJXaGVlbFZhbHVlOiAnbW9iaWxlU2VsZWN0UGlja2VyV2hlZWxWYWx1ZScsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2Njgtc3dpcGVsZWZ0P2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3NC1zd2lwZXJpZ2h0P2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2Ny1zd2lwZXVwP2xhbmd1YWdlPW9iamNcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2NC1zd2lwZWRvd24/bGFuZ3VhZ2U9b2JqY1xuICAgIHN3aXBlOiAnbW9iaWxlU3dpcGUnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjY5LXBpbmNod2l0aHNjYWxlP2xhbmd1YWdlPW9iamNcbiAgICBwaW5jaDogJ21vYmlsZVBpbmNoJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY3My1kb3VibGV0YXA/bGFuZ3VhZ2U9b2JqY1xuICAgIGRvdWJsZVRhcDogJ21vYmlsZURvdWJsZVRhcCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NzUtdHdvZmluZ2VydGFwP2xhbmd1YWdlPW9iamNcbiAgICB0d29GaW5nZXJUYXA6ICdtb2JpbGVUd29GaW5nZXJUYXAnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjcxLXRhcHdpdGhudW1iZXJvZnRhcHM/bGFuZ3VhZ2U9b2JqY1xuICAgIHRhcFdpdGhOdW1iZXJPZlRhcHM6ICdtb2JpbGVUYXBXaXRoTnVtYmVyT2ZUYXBzJyxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWVsZW1lbnQvMTYxODY2My1wcmVzc2ZvcmR1cmF0aW9uP2xhbmd1YWdlPW9iamNcbiAgICB0b3VjaEFuZEhvbGQ6ICdtb2JpbGVUb3VjaEFuZEhvbGQnLFxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpZWxlbWVudC8xNjE4NjcwLXByZXNzZm9yZHVyYXRpb24/bGFuZ3VhZ2U9b2JqY1xuICAgIGRyYWdGcm9tVG9Gb3JEdXJhdGlvbjogJ21vYmlsZURyYWdGcm9tVG9Gb3JEdXJhdGlvbicsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWllbGVtZW50LzE2MTg2NjUtcm90YXRlP2xhbmd1YWdlPW9iamNcbiAgICByb3RhdGVFbGVtZW50OiAnbW9iaWxlUm90YXRlRWxlbWVudCcsXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24veGN0ZXN0L3hjdWljb29yZGluYXRlLzM1NTE2OTItcHJlc3Nmb3JkdXJhdGlvbj9sYW5ndWFnZT1vYmpjXG4gICAgZHJhZ0Zyb21Ub1dpdGhWZWxvY2l0eTogJ21vYmlsZURyYWdGcm9tVG9XaXRoVmVsb2NpdHknLFxuICAgIGZvcmNlUHJlc3M6ICdtb2JpbGVGb3JjZVByZXNzJyxcbiAgICBzY3JvbGxUb0VsZW1lbnQ6ICdtb2JpbGVTY3JvbGxUb0VsZW1lbnQnLFxuXG4gICAgLy9lbmRyZWdpb24gZ2VzdHVyZXMgc3VwcG9ydFxuICAgIGFsZXJ0OiAnbW9iaWxlSGFuZGxlQWxlcnQnLFxuXG4gICAgc2V0UGFzdGVib2FyZDogJ21vYmlsZVNldFBhc3RlYm9hcmQnLFxuICAgIGdldFBhc3RlYm9hcmQ6ICdtb2JpbGVHZXRQYXN0ZWJvYXJkJyxcblxuICAgIHNvdXJjZTogJ21vYmlsZUdldFNvdXJjZScsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICAvL3JlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICBsYXVuY2hBcHA6ICdtb2JpbGVMYXVuY2hBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAga2lsbEFwcDogJ21vYmlsZUtpbGxBcHAnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICBsaXN0QXBwczogJ21vYmlsZUxpc3RBcHBzJyxcbiAgICAvL2VuZHJlZ2lvbiBtdWx0aXBsZSBhcHBzIG1hbmFnZW1lbnRcblxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ2dldFZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnZ2V0Vmlld3BvcnRSZWN0JyxcblxuICAgIHN0YXJ0UGVyZlJlY29yZDogJ21vYmlsZVN0YXJ0UGVyZlJlY29yZCcsXG4gICAgc3RvcFBlcmZSZWNvcmQ6ICdtb2JpbGVTdG9wUGVyZlJlY29yZCcsXG5cbiAgICBpbnN0YWxsQ2VydGlmaWNhdGU6ICdtb2JpbGVJbnN0YWxsQ2VydGlmaWNhdGUnLFxuICAgIHJlbW92ZUNlcnRpZmljYXRlOiAnbW9iaWxlUmVtb3ZlQ2VydGlmaWNhdGUnLFxuICAgIGxpc3RDZXJ0aWZpY2F0ZXM6ICdtb2JpbGVMaXN0Q2VydGlmaWNhdGVzJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuICAgIGFjdGl2ZUFwcEluZm86ICdtb2JpbGVHZXRBY3RpdmVBcHBJbmZvJyxcbiAgICBkZXZpY2VTY3JlZW5JbmZvOiAnZ2V0U2NyZWVuSW5mbycsXG5cbiAgICBwcmVzc0J1dHRvbjogJ21vYmlsZVByZXNzQnV0dG9uJyxcblxuICAgIGVucm9sbEJpb21ldHJpYzogJ21vYmlsZUVucm9sbEJpb21ldHJpYycsXG4gICAgc2VuZEJpb21ldHJpY01hdGNoOiAnbW9iaWxlU2VuZEJpb21ldHJpY01hdGNoJyxcbiAgICBpc0Jpb21ldHJpY0Vucm9sbGVkOiAnbW9iaWxlSXNCaW9tZXRyaWNFbnJvbGxlZCcsXG5cbiAgICBjbGVhcktleWNoYWluczogJ21vYmlsZUNsZWFyS2V5Y2hhaW5zJyxcblxuICAgIGdldFBlcm1pc3Npb246ICdtb2JpbGVHZXRQZXJtaXNzaW9uJyxcbiAgICBzZXRQZXJtaXNzaW9uOiAnbW9iaWxlU2V0UGVybWlzc2lvbnMnLFxuICAgIHJlc2V0UGVybWlzc2lvbjogJ21vYmlsZVJlc2V0UGVybWlzc2lvbicsXG5cbiAgICBnZXRBcHBlYXJhbmNlOiAnbW9iaWxlR2V0QXBwZWFyYW5jZScsXG4gICAgc2V0QXBwZWFyYW5jZTogJ21vYmlsZVNldEFwcGVhcmFuY2UnLFxuXG4gICAgc2lyaUNvbW1hbmQ6ICdtb2JpbGVTaXJpQ29tbWFuZCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuICAgIGRlbGV0ZUZvbGRlcjogJ21vYmlsZURlbGV0ZUZvbGRlcicsXG5cbiAgICBzdGFydEF1ZGlvUmVjb3JkaW5nOiAnc3RhcnRBdWRpb1JlY29yZGluZycsXG4gICAgc3RvcEF1ZGlvUmVjb3JkaW5nOiAnc3RvcEF1ZGlvUmVjb3JkaW5nJyxcblxuICAgIC8vIFhDVGVzdFxuICAgIHJ1blhDVGVzdDogJ21vYmlsZVJ1blhDVGVzdCcsXG4gICAgaW5zdGFsbFhDVGVzdEJ1bmRsZTogJ21vYmlsZUluc3RhbGxYQ1Rlc3RCdW5kbGUnLFxuICAgIGxpc3RYQ1Rlc3RCdW5kbGVzOiAnbW9iaWxlTGlzdFhDVGVzdEJ1bmRsZXMnLFxuICAgIGxpc3RYQ1Rlc3RzSW5UZXN0QnVuZGxlOiAnbW9iaWxlTGlzdFhDVGVzdHNJblRlc3RCdW5kbGUnLFxuXG4gICAgcHVzaE5vdGlmaWNhdGlvbjogJ21vYmlsZVB1c2hOb3RpZmljYXRpb24nLFxuICAgIGV4cGVjdE5vdGlmaWNhdGlvbjogJ21vYmlsZUV4cGVjdE5vdGlmaWNhdGlvbicsXG5cbiAgICBwZXJmb3JtSW9IaWRFdmVudDogJ21vYmlsZVBlcmZvcm1Jb0hpZEV2ZW50JyxcblxuICAgIGNvbmZpZ3VyZUxvY2FsaXphdGlvbjogJ21vYmlsZUNvbmZpZ3VyZUxvY2FsaXphdGlvbicsXG5cbiAgICByZXNldExvY2F0aW9uU2VydmljZTogJ21vYmlsZVJlc2V0TG9jYXRpb25TZXJ2aWNlJyxcblxuICAgIHN0YXJ0UGNhcDogJ21vYmlsZVN0YXJ0UGNhcCcsXG4gICAgc3RvcFBjYXA6ICdtb2JpbGVTdG9wUGNhcCcsXG4gICAgbGlzdENvbmRpdGlvbkluZHVjZXJzOiAnbW9iaWxlTGlzdENvbmRpdGlvbkluZHVjZXJzJyxcbiAgICBlbmFibGVDb25kaXRpb25JbmR1Y2VyOiAnbW9iaWxlRW5hYmxlQ29uZGl0aW9uSW5kdWNlcicsXG4gICAgZGlzYWJsZUNvbmRpdGlvbkluZHVjZXI6ICdtb2JpbGVEaXNhYmxlQ29uZGl0aW9uSW5kdWNlcicsXG5cbiAgICB1cGRhdGVTYWZhcmlQcmVmZXJlbmNlczogJ21vYmlsZVVwZGF0ZVNhZmFyaVByZWZlcmVuY2VzJyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc2V0U2ltdWxhdGVkTG9jYXRpb246ICdtb2JpbGVTZXRTaW11bGF0ZWRMb2NhdGlvbicsXG4gICAgZ2V0U2ltdWxhdGVkTG9jYXRpb246ICdtb2JpbGVHZXRTaW11bGF0ZWRMb2NhdGlvbicsXG4gICAgcmVzZXRTaW11bGF0ZWRMb2NhdGlvbjogJ21vYmlsZVJlc2V0U2ltdWxhdGVkTG9jYXRpb24nLFxuICB9O1xuXG4gIGlmICghXy5oYXMoY29tbWFuZE1hcCwgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgJyR7bW9iaWxlQ29tbWFuZH0nLiBPbmx5ICR7Xy5rZXlzKGNvbW1hbmRNYXApLmpvaW4oJywgJyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbY29tbWFuZE1hcFttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUdBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUVBLE1BQU1HLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckJBLFVBQVUsQ0FBQ0Msb0JBQW9CLEdBQUcsZUFBZUEsb0JBQW9CQSxDQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRTtFQUNwRixJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLDRCQUEyQkMsSUFBSSxDQUFDQyxTQUFTLENBQUNKLEtBQUssQ0FBRSxFQUFDLENBQUM7RUFDbkUsSUFBSSxDQUFDSyxhQUFJLENBQUNDLFFBQVEsQ0FBQyxJQUFJLENBQUNDLFlBQVksQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQ04sR0FBRyxDQUFDTyxJQUFJLENBQUUsMERBQXlELEdBQ3JFLGlCQUFnQkwsSUFBSSxDQUFDQyxTQUFTLENBQUNKLEtBQUssQ0FBRSxFQUFDLENB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
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","_support","extensions","receiveAsyncResponse","status","value","log","debug","JSON","stringify","util","hasValue","asyncPromise","warn","reject","errorFromCode","message","_","isString","error","errorFromW3CJsonCode","stacktrace","resolve","execute","script","args","match","replace","trim","executeMobile","isArray","isWebContext","convertElementsForAtoms","result","executeAtom","cacheWebElements","errors","NotImplementedError","executeAsync","asyncWaitMs","promise","remote","executeAtomAsync","curWebFrames","waitForAtom","mobileCommand","opts","commandMap","tap","scroll","selectPickerWheelValue","swipe","pinch","doubleTap","twoFingerTap","tapWithNumberOfTaps","touchAndHold","dragFromToForDuration","rotateElement","dragFromToWithVelocity","forcePress","scrollToElement","alert","setPasteboard","getPasteboard","source","getContexts","installApp","isAppInstalled","removeApp","launchApp","terminateApp","killApp","queryAppState","activateApp","listApps","viewportScreenshot","viewportRect","startPerfRecord","stopPerfRecord","installCertificate","listCertificates","startLogsBroadcast","stopLogsBroadcast","batteryInfo","deviceInfo","getDeviceTime","activeAppInfo","deviceScreenInfo","pressButton","enrollBiometric","sendBiometricMatch","isBiometricEnrolled","clearKeychains","getPermission","setPermission","resetPermission","getAppearance","setAppearance","siriCommand","pushFile","pullFile","pullFolder","deleteFile","deleteFolder","startAudioRecording","stopAudioRecording","runXCTest","installXCTestBundle","listXCTestBundles","listXCTestsInTestBundle","pushNotification","expectNotification","performIoHidEvent","configureLocalization","resetLocationService","startPcap","stopPcap","listConditionInducers","enableConditionInducer","disableConditionInducer","updateSafariPreferences","deepLink","setSimulatedLocation","getSimulatedLocation","resetSimulatedLocation","has","UnknownCommandError","keys","join","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport {\n errors, errorFromCode, errorFromW3CJsonCode\n} from 'appium/driver';\nimport { util } from 'appium/support';\n\nconst extensions = {};\n\nextensions.receiveAsyncResponse = async function receiveAsyncResponse (status, value) { // eslint-disable-line require-await\n this.log.debug(`Received async response: ${JSON.stringify(value)}`);\n if (!util.hasValue(this.asyncPromise)) {\n this.log.warn(`Received async response when we were not expecting one! ` +\n `Response was: ${JSON.stringify(value)}`);\n return;\n }\n\n if (util.hasValue(status) && status !== 0) {\n // MJSONWP\n return this.asyncPromise.reject(errorFromCode(status, value.message));\n }\n if (!util.hasValue(status) && value && _.isString(value.error)) {\n // W3C\n return this.asyncPromise.reject(errorFromW3CJsonCode(value.error, value.message, value.stacktrace));\n }\n return this.asyncPromise.resolve(value);\n};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n } else if (this.isWebContext()) {\n args = this.convertElementsForAtoms(args);\n const result = await this.executeAtom('execute_script', [script, args]);\n return this.cacheWebElements(result);\n } else {\n throw new errors.NotImplementedError();\n }\n};\n\nextensions.executeAsync = async function executeAsync (script, args) {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n args = this.convertElementsForAtoms(args);\n this.asyncWaitMs = this.asyncWaitMs || 0;\n const promise = this.remote.executeAtomAsync('execute_async_script', [\n script, args, this.asyncWaitMs\n ], this.curWebFrames);\n return this.cacheWebElements(await this.waitForAtom(promise));\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const commandMap = {\n //region gestures support\n tap: 'mobileTap',\n scroll: 'mobileScroll',\n selectPickerWheelValue: 'mobileSelectPickerWheelValue',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618668-swipeleft?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618674-swiperight?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618667-swipeup?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618664-swipedown?language=objc\n swipe: 'mobileSwipe',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618669-pinchwithscale?language=objc\n pinch: 'mobilePinch',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618673-doubletap?language=objc\n doubleTap: 'mobileDoubleTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618675-twofingertap?language=objc\n twoFingerTap: 'mobileTwoFingerTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps?language=objc\n tapWithNumberOfTaps: 'mobileTapWithNumberOfTaps',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618663-pressforduration?language=objc\n touchAndHold: 'mobileTouchAndHold',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618670-pressforduration?language=objc\n dragFromToForDuration: 'mobileDragFromToForDuration',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc\n rotateElement: 'mobileRotateElement',\n // https://developer.apple.com/documentation/xctest/xcuicoordinate/3551692-pressforduration?language=objc\n dragFromToWithVelocity: 'mobileDragFromToWithVelocity',\n forcePress: 'mobileForcePress',\n scrollToElement: 'mobileScrollToElement',\n\n //endregion gestures support\n alert: 'mobileHandleAlert',\n\n setPasteboard: 'mobileSetPasteboard',\n getPasteboard: 'mobileGetPasteboard',\n\n source: 'mobileGetSource',\n getContexts: 'mobileGetContexts',\n\n //region multiple apps management\n installApp: 'mobileInstallApp',\n isAppInstalled: 'mobileIsAppInstalled',\n removeApp: 'mobileRemoveApp',\n launchApp: 'mobileLaunchApp',\n terminateApp: 'mobileTerminateApp',\n killApp: 'mobileKillApp',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n listApps: 'mobileListApps',\n //endregion multiple apps management\n\n viewportScreenshot: 'getViewportScreenshot',\n viewportRect: 'getViewportRect',\n\n startPerfRecord: 'mobileStartPerfRecord',\n stopPerfRecord: 'mobileStopPerfRecord',\n\n installCertificate: 'mobileInstallCertificate',\n listCertificates: 'mobileListCertificates',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n batteryInfo: 'mobileGetBatteryInfo',\n deviceInfo: 'mobileGetDeviceInfo',\n getDeviceTime: 'mobileGetDeviceTime',\n activeAppInfo: 'mobileGetActiveAppInfo',\n deviceScreenInfo: 'getScreenInfo',\n\n pressButton: 'mobilePressButton',\n\n enrollBiometric: 'mobileEnrollBiometric',\n sendBiometricMatch: 'mobileSendBiometricMatch',\n isBiometricEnrolled: 'mobileIsBiometricEnrolled',\n\n clearKeychains: 'mobileClearKeychains',\n\n getPermission: 'mobileGetPermission',\n setPermission: 'mobileSetPermissions',\n resetPermission: 'mobileResetPermission',\n\n getAppearance: 'mobileGetAppearance',\n setAppearance: 'mobileSetAppearance',\n\n siriCommand: 'mobileSiriCommand',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n deleteFolder: 'mobileDeleteFolder',\n\n startAudioRecording: 'startAudioRecording',\n stopAudioRecording: 'stopAudioRecording',\n\n // XCTest\n runXCTest: 'mobileRunXCTest',\n installXCTestBundle: 'mobileInstallXCTestBundle',\n listXCTestBundles: 'mobileListXCTestBundles',\n listXCTestsInTestBundle: 'mobileListXCTestsInTestBundle',\n\n pushNotification: 'mobilePushNotification',\n expectNotification: 'mobileExpectNotification',\n\n performIoHidEvent: 'mobilePerformIoHidEvent',\n\n configureLocalization: 'mobileConfigureLocalization',\n\n resetLocationService: 'mobileResetLocationService',\n\n startPcap: 'mobileStartPcap',\n stopPcap: 'mobileStopPcap',\n listConditionInducers: 'mobileListConditionInducers',\n enableConditionInducer: 'mobileEnableConditionInducer',\n disableConditionInducer: 'mobileDisableConditionInducer',\n\n updateSafariPreferences: 'mobileUpdateSafariPreferences',\n\n deepLink: 'mobileDeepLink',\n\n setSimulatedLocation: 'mobileSetSimulatedLocation',\n getSimulatedLocation: 'mobileGetSimulatedLocation',\n resetSimulatedLocation: 'mobileResetSimulatedLocation',\n };\n\n if (!_.has(commandMap, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_.keys(commandMap).join(', ')} commands are supported.`);\n }\n return await this[commandMap[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","_support","extensions","receiveAsyncResponse","status","value","log","debug","JSON","stringify","util","hasValue","asyncPromise","warn","reject","errorFromCode","message","_","isString","error","errorFromW3CJsonCode","stacktrace","resolve","execute","script","args","match","replace","trim","executeMobile","isArray","isWebContext","convertElementsForAtoms","result","executeAtom","cacheWebElements","errors","NotImplementedError","executeAsync","asyncWaitMs","promise","remote","executeAtomAsync","curWebFrames","waitForAtom","mobileCommand","opts","commandMap","tap","scroll","selectPickerWheelValue","swipe","pinch","doubleTap","twoFingerTap","tapWithNumberOfTaps","touchAndHold","dragFromToForDuration","rotateElement","dragFromToWithVelocity","forcePress","scrollToElement","alert","setPasteboard","getPasteboard","source","getContexts","installApp","isAppInstalled","removeApp","launchApp","terminateApp","killApp","queryAppState","activateApp","listApps","viewportScreenshot","viewportRect","startPerfRecord","stopPerfRecord","installCertificate","removeCertificate","listCertificates","startLogsBroadcast","stopLogsBroadcast","batteryInfo","deviceInfo","getDeviceTime","activeAppInfo","deviceScreenInfo","pressButton","enrollBiometric","sendBiometricMatch","isBiometricEnrolled","clearKeychains","getPermission","setPermission","resetPermission","getAppearance","setAppearance","siriCommand","pushFile","pullFile","pullFolder","deleteFile","deleteFolder","startAudioRecording","stopAudioRecording","runXCTest","installXCTestBundle","listXCTestBundles","listXCTestsInTestBundle","pushNotification","expectNotification","performIoHidEvent","configureLocalization","resetLocationService","startPcap","stopPcap","listConditionInducers","enableConditionInducer","disableConditionInducer","updateSafariPreferences","deepLink","setSimulatedLocation","getSimulatedLocation","resetSimulatedLocation","has","UnknownCommandError","keys","join","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport {\n errors, errorFromCode, errorFromW3CJsonCode\n} from 'appium/driver';\nimport { util } from 'appium/support';\n\nconst extensions = {};\n\nextensions.receiveAsyncResponse = async function receiveAsyncResponse (status, value) { // eslint-disable-line require-await\n this.log.debug(`Received async response: ${JSON.stringify(value)}`);\n if (!util.hasValue(this.asyncPromise)) {\n this.log.warn(`Received async response when we were not expecting one! ` +\n `Response was: ${JSON.stringify(value)}`);\n return;\n }\n\n if (util.hasValue(status) && status !== 0) {\n // MJSONWP\n return this.asyncPromise.reject(errorFromCode(status, value.message));\n }\n if (!util.hasValue(status) && value && _.isString(value.error)) {\n // W3C\n return this.asyncPromise.reject(errorFromW3CJsonCode(value.error, value.message, value.stacktrace));\n }\n return this.asyncPromise.resolve(value);\n};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n } else if (this.isWebContext()) {\n args = this.convertElementsForAtoms(args);\n const result = await this.executeAtom('execute_script', [script, args]);\n return this.cacheWebElements(result);\n } else {\n throw new errors.NotImplementedError();\n }\n};\n\nextensions.executeAsync = async function executeAsync (script, args) {\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n\n args = this.convertElementsForAtoms(args);\n this.asyncWaitMs = this.asyncWaitMs || 0;\n const promise = this.remote.executeAtomAsync('execute_async_script', [\n script, args, this.asyncWaitMs\n ], this.curWebFrames);\n return this.cacheWebElements(await this.waitForAtom(promise));\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const commandMap = {\n //region gestures support\n tap: 'mobileTap',\n scroll: 'mobileScroll',\n selectPickerWheelValue: 'mobileSelectPickerWheelValue',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618668-swipeleft?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618674-swiperight?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618667-swipeup?language=objc\n // https://developer.apple.com/documentation/xctest/xcuielement/1618664-swipedown?language=objc\n swipe: 'mobileSwipe',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618669-pinchwithscale?language=objc\n pinch: 'mobilePinch',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618673-doubletap?language=objc\n doubleTap: 'mobileDoubleTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618675-twofingertap?language=objc\n twoFingerTap: 'mobileTwoFingerTap',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618671-tapwithnumberoftaps?language=objc\n tapWithNumberOfTaps: 'mobileTapWithNumberOfTaps',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618663-pressforduration?language=objc\n touchAndHold: 'mobileTouchAndHold',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618670-pressforduration?language=objc\n dragFromToForDuration: 'mobileDragFromToForDuration',\n // https://developer.apple.com/documentation/xctest/xcuielement/1618665-rotate?language=objc\n rotateElement: 'mobileRotateElement',\n // https://developer.apple.com/documentation/xctest/xcuicoordinate/3551692-pressforduration?language=objc\n dragFromToWithVelocity: 'mobileDragFromToWithVelocity',\n forcePress: 'mobileForcePress',\n scrollToElement: 'mobileScrollToElement',\n\n //endregion gestures support\n alert: 'mobileHandleAlert',\n\n setPasteboard: 'mobileSetPasteboard',\n getPasteboard: 'mobileGetPasteboard',\n\n source: 'mobileGetSource',\n getContexts: 'mobileGetContexts',\n\n //region multiple apps management\n installApp: 'mobileInstallApp',\n isAppInstalled: 'mobileIsAppInstalled',\n removeApp: 'mobileRemoveApp',\n launchApp: 'mobileLaunchApp',\n terminateApp: 'mobileTerminateApp',\n killApp: 'mobileKillApp',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n listApps: 'mobileListApps',\n //endregion multiple apps management\n\n viewportScreenshot: 'getViewportScreenshot',\n viewportRect: 'getViewportRect',\n\n startPerfRecord: 'mobileStartPerfRecord',\n stopPerfRecord: 'mobileStopPerfRecord',\n\n installCertificate: 'mobileInstallCertificate',\n removeCertificate: 'mobileRemoveCertificate',\n listCertificates: 'mobileListCertificates',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n batteryInfo: 'mobileGetBatteryInfo',\n deviceInfo: 'mobileGetDeviceInfo',\n getDeviceTime: 'mobileGetDeviceTime',\n activeAppInfo: 'mobileGetActiveAppInfo',\n deviceScreenInfo: 'getScreenInfo',\n\n pressButton: 'mobilePressButton',\n\n enrollBiometric: 'mobileEnrollBiometric',\n sendBiometricMatch: 'mobileSendBiometricMatch',\n isBiometricEnrolled: 'mobileIsBiometricEnrolled',\n\n clearKeychains: 'mobileClearKeychains',\n\n getPermission: 'mobileGetPermission',\n setPermission: 'mobileSetPermissions',\n resetPermission: 'mobileResetPermission',\n\n getAppearance: 'mobileGetAppearance',\n setAppearance: 'mobileSetAppearance',\n\n siriCommand: 'mobileSiriCommand',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n deleteFolder: 'mobileDeleteFolder',\n\n startAudioRecording: 'startAudioRecording',\n stopAudioRecording: 'stopAudioRecording',\n\n // XCTest\n runXCTest: 'mobileRunXCTest',\n installXCTestBundle: 'mobileInstallXCTestBundle',\n listXCTestBundles: 'mobileListXCTestBundles',\n listXCTestsInTestBundle: 'mobileListXCTestsInTestBundle',\n\n pushNotification: 'mobilePushNotification',\n expectNotification: 'mobileExpectNotification',\n\n performIoHidEvent: 'mobilePerformIoHidEvent',\n\n configureLocalization: 'mobileConfigureLocalization',\n\n resetLocationService: 'mobileResetLocationService',\n\n startPcap: 'mobileStartPcap',\n stopPcap: 'mobileStopPcap',\n listConditionInducers: 'mobileListConditionInducers',\n enableConditionInducer: 'mobileEnableConditionInducer',\n disableConditionInducer: 'mobileDisableConditionInducer',\n\n updateSafariPreferences: 'mobileUpdateSafariPreferences',\n\n deepLink: 'mobileDeepLink',\n\n setSimulatedLocation: 'mobileSetSimulatedLocation',\n getSimulatedLocation: 'mobileGetSimulatedLocation',\n resetSimulatedLocation: 'mobileResetSimulatedLocation',\n };\n\n if (!_.has(commandMap, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command '${mobileCommand}'. Only ${_.keys(commandMap).join(', ')} commands are supported.`);\n }\n return await this[commandMap[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
@@ -94,7 +94,7 @@ class Pyidevice {
94
94
  }
95
95
  }
96
96
  async removeProfile(name) {
97
- await this.execute(['profiles', 'remove', name], {
97
+ await this.execute(['profiles', 'remove', '--name', name], {
98
98
  logStdout: true
99
99
  });
100
100
  }
@@ -120,4 +120,4 @@ class Pyidevice {
120
120
  exports.Pyidevice = Pyidevice;
121
121
  var _default = Pyidevice;
122
122
  exports.default = _default;
123
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVlbl9wcm9jZXNzIiwicmVxdWlyZSIsIl9zdXBwb3J0IiwiX2xvZ2dlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGF0aCIsIkJJTkFSWV9OQU1FIiwiUHlpZGV2aWNlIiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwiYmluYXJ5UGF0aCIsImFzc2VydEV4aXN0cyIsImlzU3RyaWN0IiwiZnMiLCJ3aGljaCIsImUiLCJFcnJvciIsImV4ZWN1dGUiLCJhcmdzIiwib3B0cyIsImN3ZCIsImZvcm1hdCIsImxvZ1N0ZG91dCIsImFzeW5jaHJvbm91cyIsImZpbmFsQXJncyIsInB1c2giLCJjbWRTdHIiLCJ1dGlsIiwicXVvdGUiLCJsb2ciLCJkZWJ1ZyIsInJlc3VsdCIsIlN1YlByb2Nlc3MiLCJzdGFydCIsImV4ZWMiLCJzdGRvdXQiLCJzdGRlcnIiLCJtZXNzYWdlIiwibGlzdFByb2ZpbGVzIiwiSlNPTiIsInBhcnNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwcm9maWxlUGF0aCIsInBheWxvYWQiLCJ0bXBSb290Iiwic3JjUGF0aCIsInRlbXBEaXIiLCJvcGVuRGlyIiwicGF0aCIsImpvaW4iLCJ3cml0ZUZpbGUiLCJyaW1yYWYiLCJyZW1vdmVQcm9maWxlIiwibmFtZSIsImxpc3RDcmFzaGVzIiwicmVwbGFjZSIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImV4cG9ydENyYXNoIiwiZHN0Rm9sZGVyIiwiY29sbGVjdFBjYXAiLCJkc3RGaWxlIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9weS1pb3MtZGV2aWNlLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjLCBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1l1ZUNoZW4tQy9weS1pb3MtZGV2aWNlXG5cbmNvbnN0IEJJTkFSWV9OQU1FID0gJ3B5aWRldmljZSc7XG5cbmNsYXNzIFB5aWRldmljZSB7XG4gIGNvbnN0cnVjdG9yICh1ZGlkKSB7XG4gICAgdGhpcy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLmJpbmFyeVBhdGggPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgYXNzZXJ0RXhpc3RzIChpc1N0cmljdCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5iaW5hcnlQYXRoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5iaW5hcnlQYXRoID0gYXdhaXQgZnMud2hpY2goQklOQVJZX05BTUUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtCSU5BUllfTkFNRX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBpbnN0YWxsZWQuIFZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZSBmb3IgYCArXG4gICAgICAgICAgYG1vcmUgZGV0YWlscy5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBleGVjdXRlIChhcmdzLCBvcHRzID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLmFzc2VydEV4aXN0cygpO1xuICAgIGNvbnN0IHtcbiAgICAgIGN3ZCxcbiAgICAgIGZvcm1hdCA9ICdqc29uJyxcbiAgICAgIGxvZ1N0ZG91dCA9IGZhbHNlLFxuICAgICAgYXN5bmNocm9ub3VzID0gZmFsc2UsXG4gICAgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBmaW5hbEFyZ3MgPSBbLi4uYXJncywgJy0tdWRpZCcsIHRoaXMudWRpZF07XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgZmluYWxBcmdzLnB1c2goJy0tZm9ybWF0JywgZm9ybWF0KTtcbiAgICB9XG4gICAgY29uc3QgY21kU3RyID0gdXRpbC5xdW90ZShbdGhpcy5iaW5hcnlQYXRoLCAuLi5maW5hbEFyZ3NdKTtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyAke2NtZFN0cn1gKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFzeW5jaHJvbm91cykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmJpbmFyeVBhdGgsIGZpbmFsQXJncywge2N3ZH0pO1xuICAgICAgICBhd2FpdCByZXN1bHQuc3RhcnQoMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjKHRoaXMuYmluYXJ5UGF0aCwgZmluYWxBcmdzLCB7Y3dkfSk7XG4gICAgICBpZiAobG9nU3Rkb3V0KSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBvdXRwdXQ6ICR7cmVzdWx0LnN0ZG91dH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjbWRTdHJ9JyBmYWlsZWQuIE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UHJvZmlsZXMgKCkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKFsncHJvZmlsZXMnLCAnbGlzdCddKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFByb2ZpbGUgKHtwcm9maWxlUGF0aCwgcGF5bG9hZH0gPSB7fSkge1xuICAgIGlmICghcHJvZmlsZVBhdGggJiYgIXBheWxvYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIHRoZSBmdWxsIHBhdGggdG8gdGhlIHByb2ZpbGUgb3IgaXRzIHBheWxvYWQgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGxldCB0bXBSb290O1xuICAgIGxldCBzcmNQYXRoID0gcHJvZmlsZVBhdGg7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghc3JjUGF0aCkge1xuICAgICAgICB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgICAgIHNyY1BhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgJ2NlcnQucGVtJyk7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBwYXlsb2FkLCAndXRmOCcpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlKFsncHJvZmlsZXMnLCAnaW5zdGFsbCcsICctLXBhdGgnLCBzcmNQYXRoXSwge1xuICAgICAgICBsb2dTdGRvdXQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodG1wUm9vdCkge1xuICAgICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUHJvZmlsZSAobmFtZSkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ3Byb2ZpbGVzJywgJ3JlbW92ZScsIG5hbWVdLCB7bG9nU3Rkb3V0OiB0cnVlfSk7XG4gIH1cblxuICBhc3luYyBsaXN0Q3Jhc2hlcyAoKSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoWydjcmFzaCcsICdsaXN0J10pO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0ZG91dC5yZXBsYWNlKC8nL2csICdcIicpKS5maWx0ZXIoKHgpID0+ICFbJy4nLCAnLi4nXS5pbmNsdWRlcyh4KSk7XG4gIH1cblxuICBhc3luYyBleHBvcnRDcmFzaCAobmFtZSwgZHN0Rm9sZGVyKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjdXRlKFsnY3Jhc2gnLCAnZXhwb3J0JywgJy0tbmFtZScsIG5hbWVdLCB7XG4gICAgICBsb2dTdGRvdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgdG9vbCBleHBvcnRzIGNyYXNoIHJlcG9ydHMgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJcbiAgICAgIGN3ZDogZHN0Rm9sZGVyXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb2xsZWN0UGNhcCAoZHN0RmlsZSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGUoWydwY2FwZCcsIGRzdEZpbGVdLCB7XG4gICAgICBmb3JtYXQ6IG51bGwsXG4gICAgICBhc3luY2hyb25vdXM6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgeyBQeWlkZXZpY2UgfTtcbmV4cG9ydCBkZWZhdWx0IFB5aWRldmljZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxhQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFJQSxNQUFNSyxXQUFXLEdBQUcsV0FBVztBQUUvQixNQUFNQyxTQUFTLENBQUM7RUFDZEMsV0FBV0EsQ0FBRUMsSUFBSSxFQUFFO0lBQ2pCLElBQUksQ0FBQ0EsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUk7RUFDeEI7RUFFQSxNQUFNQyxZQUFZQSxDQUFFQyxRQUFRLEdBQUcsSUFBSSxFQUFFO0lBQ25DLElBQUksSUFBSSxDQUFDRixVQUFVLEVBQUU7TUFDbkIsT0FBTyxJQUFJO0lBQ2I7SUFFQSxJQUFJO01BQ0YsSUFBSSxDQUFDQSxVQUFVLEdBQUcsTUFBTUcsV0FBRSxDQUFDQyxLQUFLLENBQUNSLFdBQVcsQ0FBQztNQUM3QyxPQUFPLElBQUk7SUFDYixDQUFDLENBQUMsT0FBT1MsQ0FBQyxFQUFFO01BQ1YsSUFBSUgsUUFBUSxFQUFFO1FBQ1osTUFBTSxJQUFJSSxLQUFLLENBQUUsR0FBRVYsV0FBWSxtQ0FBa0MsR0FDOUQseUZBQXdGLEdBQ3hGLGVBQWMsQ0FBQztNQUNwQjtNQUNBLE9BQU8sS0FBSztJQUNkO0VBQ0Y7RUFFQSxNQUFNVyxPQUFPQSxDQUFFQyxJQUFJLEVBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtJQUM5QixNQUFNLElBQUksQ0FBQ1IsWUFBWSxFQUFFO0lBQ3pCLE1BQU07TUFDSlMsR0FBRztNQUNIQyxNQUFNLEdBQUcsTUFBTTtNQUNmQyxTQUFTLEdBQUcsS0FBSztNQUNqQkMsWUFBWSxHQUFHO0lBQ2pCLENBQUMsR0FBR0osSUFBSTtJQUVSLE1BQU1LLFNBQVMsR0FBRyxDQUFDLEdBQUdOLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDVCxJQUFJLENBQUM7SUFDaEQsSUFBSVksTUFBTSxFQUFFO01BQ1ZHLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVUsRUFBRUosTUFBTSxDQUFDO0lBQ3BDO0lBQ0EsTUFBTUssTUFBTSxHQUFHQyxhQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQ2xCLFVBQVUsRUFBRSxHQUFHYyxTQUFTLENBQUMsQ0FBQztJQUMxREssZUFBRyxDQUFDQyxLQUFLLENBQUUsYUFBWUosTUFBTyxFQUFDLENBQUM7SUFDaEMsSUFBSTtNQUNGLElBQUlILFlBQVksRUFBRTtRQUNoQixNQUFNUSxNQUFNLEdBQUcsSUFBSUMsd0JBQVUsQ0FBQyxJQUFJLENBQUN0QixVQUFVLEVBQUVjLFNBQVMsRUFBRTtVQUFDSjtRQUFHLENBQUMsQ0FBQztRQUNoRSxNQUFNVyxNQUFNLENBQUNFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckIsT0FBT0YsTUFBTTtNQUNmO01BQ0EsTUFBTUEsTUFBTSxHQUFHLE1BQU0sSUFBQUcsa0JBQUksRUFBQyxJQUFJLENBQUN4QixVQUFVLEVBQUVjLFNBQVMsRUFBRTtRQUFDSjtNQUFHLENBQUMsQ0FBQztNQUM1RCxJQUFJRSxTQUFTLEVBQUU7UUFDYk8sZUFBRyxDQUFDQyxLQUFLLENBQUUsbUJBQWtCQyxNQUFNLENBQUNJLE1BQU8sRUFBQyxDQUFDO01BQy9DO01BQ0EsT0FBT0osTUFBTTtJQUNmLENBQUMsQ0FBQyxPQUFPaEIsQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJQyxLQUFLLENBQUUsSUFBR1UsTUFBTyw2QkFBNEJYLENBQUMsQ0FBQ3FCLE1BQU0sSUFBSXJCLENBQUMsQ0FBQ29CLE1BQU0sSUFBSXBCLENBQUMsQ0FBQ3NCLE9BQVEsRUFBQyxDQUFDO0lBQzdGO0VBQ0Y7RUFFQSxNQUFNQyxZQUFZQSxDQUFBLEVBQUk7SUFDcEIsTUFBTTtNQUFDSDtJQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQ2xCLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxPQUFPc0IsSUFBSSxDQUFDQyxLQUFLLENBQUNMLE1BQU0sQ0FBQztFQUMzQjtFQUVBLE1BQU1NLGNBQWNBLENBQUU7SUFBQ0MsV0FBVztJQUFFQztFQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNqRCxJQUFJLENBQUNELFdBQVcsSUFBSSxDQUFDQyxPQUFPLEVBQUU7TUFDNUIsTUFBTSxJQUFJM0IsS0FBSyxDQUFDLHFFQUFxRSxDQUFDO0lBQ3hGO0lBRUEsSUFBSTRCLE9BQU87SUFDWCxJQUFJQyxPQUFPLEdBQUdILFdBQVc7SUFDekIsSUFBSTtNQUNGLElBQUksQ0FBQ0csT0FBTyxFQUFFO1FBQ1pELE9BQU8sR0FBRyxNQUFNRSxnQkFBTyxDQUFDQyxPQUFPLEVBQUU7UUFDakNGLE9BQU8sR0FBR0csYUFBSSxDQUFDQyxJQUFJLENBQUNMLE9BQU8sRUFBRSxVQUFVLENBQUM7UUFDeEMsTUFBTS9CLFdBQUUsQ0FBQ3FDLFNBQVMsQ0FBQ0wsT0FBTyxFQUFFRixPQUFPLEVBQUUsTUFBTSxDQUFDO01BQzlDO01BQ0EsTUFBTSxJQUFJLENBQUMxQixPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRTRCLE9BQU8sQ0FBQyxFQUFFO1FBQzdEdkIsU0FBUyxFQUFFO01BQ2IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxTQUFTO01BQ1IsSUFBSXNCLE9BQU8sRUFBRTtRQUNYLE1BQU0vQixXQUFFLENBQUNzQyxNQUFNLENBQUNQLE9BQU8sQ0FBQztNQUMxQjtJQUNGO0VBQ0Y7RUFFQSxNQUFNUSxhQUFhQSxDQUFFQyxJQUFJLEVBQUU7SUFDekIsTUFBTSxJQUFJLENBQUNwQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFb0MsSUFBSSxDQUFDLEVBQUU7TUFBQy9CLFNBQVMsRUFBRTtJQUFJLENBQUMsQ0FBQztFQUNyRTtFQUVBLE1BQU1nQyxXQUFXQSxDQUFBLEVBQUk7SUFDbkIsTUFBTTtNQUFDbkI7SUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNsQixPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsT0FBT3NCLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxNQUFNLENBQUNvQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBRUMsQ0FBQyxJQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUNDLFFBQVEsQ0FBQ0QsQ0FBQyxDQUFDLENBQUM7RUFDdEY7RUFFQSxNQUFNRSxXQUFXQSxDQUFFTixJQUFJLEVBQUVPLFNBQVMsRUFBRTtJQUNsQyxNQUFNLElBQUksQ0FBQzNDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFb0MsSUFBSSxDQUFDLEVBQUU7TUFDdEQvQixTQUFTLEVBQUUsSUFBSTtNQUVmRixHQUFHLEVBQUV3QztJQUNQLENBQUMsQ0FBQztFQUNKO0VBRUEsTUFBTUMsV0FBV0EsQ0FBRUMsT0FBTyxFQUFFO0lBQzFCLE9BQU8sTUFBTSxJQUFJLENBQUM3QyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUU2QyxPQUFPLENBQUMsRUFBRTtNQUM1Q3pDLE1BQU0sRUFBRSxJQUFJO01BQ1pFLFlBQVksRUFBRTtJQUNoQixDQUFDLENBQUM7RUFDSjtBQUNGO0FBQUN3QyxPQUFBLENBQUF4RCxTQUFBLEdBQUFBLFNBQUE7QUFBQSxJQUFBeUQsUUFBQSxHQUdjekQsU0FBUztBQUFBd0QsT0FBQSxDQUFBRSxPQUFBLEdBQUFELFFBQUEifQ==
123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVlbl9wcm9jZXNzIiwicmVxdWlyZSIsIl9zdXBwb3J0IiwiX2xvZ2dlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGF0aCIsIkJJTkFSWV9OQU1FIiwiUHlpZGV2aWNlIiwiY29uc3RydWN0b3IiLCJ1ZGlkIiwiYmluYXJ5UGF0aCIsImFzc2VydEV4aXN0cyIsImlzU3RyaWN0IiwiZnMiLCJ3aGljaCIsImUiLCJFcnJvciIsImV4ZWN1dGUiLCJhcmdzIiwib3B0cyIsImN3ZCIsImZvcm1hdCIsImxvZ1N0ZG91dCIsImFzeW5jaHJvbm91cyIsImZpbmFsQXJncyIsInB1c2giLCJjbWRTdHIiLCJ1dGlsIiwicXVvdGUiLCJsb2ciLCJkZWJ1ZyIsInJlc3VsdCIsIlN1YlByb2Nlc3MiLCJzdGFydCIsImV4ZWMiLCJzdGRvdXQiLCJzdGRlcnIiLCJtZXNzYWdlIiwibGlzdFByb2ZpbGVzIiwiSlNPTiIsInBhcnNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwcm9maWxlUGF0aCIsInBheWxvYWQiLCJ0bXBSb290Iiwic3JjUGF0aCIsInRlbXBEaXIiLCJvcGVuRGlyIiwicGF0aCIsImpvaW4iLCJ3cml0ZUZpbGUiLCJyaW1yYWYiLCJyZW1vdmVQcm9maWxlIiwibmFtZSIsImxpc3RDcmFzaGVzIiwicmVwbGFjZSIsImZpbHRlciIsIngiLCJpbmNsdWRlcyIsImV4cG9ydENyYXNoIiwiZHN0Rm9sZGVyIiwiY29sbGVjdFBjYXAiLCJkc3RGaWxlIiwiZXhwb3J0cyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9weS1pb3MtZGV2aWNlLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjLCBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCB7IGZzLCB1dGlsLCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL1l1ZUNoZW4tQy9weS1pb3MtZGV2aWNlXG5cbmNvbnN0IEJJTkFSWV9OQU1FID0gJ3B5aWRldmljZSc7XG5cbmNsYXNzIFB5aWRldmljZSB7XG4gIGNvbnN0cnVjdG9yICh1ZGlkKSB7XG4gICAgdGhpcy51ZGlkID0gdWRpZDtcbiAgICB0aGlzLmJpbmFyeVBhdGggPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgYXNzZXJ0RXhpc3RzIChpc1N0cmljdCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5iaW5hcnlQYXRoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5iaW5hcnlQYXRoID0gYXdhaXQgZnMud2hpY2goQklOQVJZX05BTUUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtCSU5BUllfTkFNRX0gYmluYXJ5IGNhbm5vdCBiZSBmb3VuZCBpbiBQQVRILiBgICtcbiAgICAgICAgICBgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBpbnN0YWxsZWQuIFZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9ZdWVDaGVuLUMvcHktaW9zLWRldmljZSBmb3IgYCArXG4gICAgICAgICAgYG1vcmUgZGV0YWlscy5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBleGVjdXRlIChhcmdzLCBvcHRzID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLmFzc2VydEV4aXN0cygpO1xuICAgIGNvbnN0IHtcbiAgICAgIGN3ZCxcbiAgICAgIGZvcm1hdCA9ICdqc29uJyxcbiAgICAgIGxvZ1N0ZG91dCA9IGZhbHNlLFxuICAgICAgYXN5bmNocm9ub3VzID0gZmFsc2UsXG4gICAgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBmaW5hbEFyZ3MgPSBbLi4uYXJncywgJy0tdWRpZCcsIHRoaXMudWRpZF07XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgZmluYWxBcmdzLnB1c2goJy0tZm9ybWF0JywgZm9ybWF0KTtcbiAgICB9XG4gICAgY29uc3QgY21kU3RyID0gdXRpbC5xdW90ZShbdGhpcy5iaW5hcnlQYXRoLCAuLi5maW5hbEFyZ3NdKTtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyAke2NtZFN0cn1gKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFzeW5jaHJvbm91cykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmJpbmFyeVBhdGgsIGZpbmFsQXJncywge2N3ZH0pO1xuICAgICAgICBhd2FpdCByZXN1bHQuc3RhcnQoMCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjKHRoaXMuYmluYXJ5UGF0aCwgZmluYWxBcmdzLCB7Y3dkfSk7XG4gICAgICBpZiAobG9nU3Rkb3V0KSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ29tbWFuZCBvdXRwdXQ6ICR7cmVzdWx0LnN0ZG91dH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtjbWRTdHJ9JyBmYWlsZWQuIE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UHJvZmlsZXMgKCkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKFsncHJvZmlsZXMnLCAnbGlzdCddKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFByb2ZpbGUgKHtwcm9maWxlUGF0aCwgcGF5bG9hZH0gPSB7fSkge1xuICAgIGlmICghcHJvZmlsZVBhdGggJiYgIXBheWxvYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIHRoZSBmdWxsIHBhdGggdG8gdGhlIHByb2ZpbGUgb3IgaXRzIHBheWxvYWQgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGxldCB0bXBSb290O1xuICAgIGxldCBzcmNQYXRoID0gcHJvZmlsZVBhdGg7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghc3JjUGF0aCkge1xuICAgICAgICB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgICAgIHNyY1BhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgJ2NlcnQucGVtJyk7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShzcmNQYXRoLCBwYXlsb2FkLCAndXRmOCcpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5leGVjdXRlKFsncHJvZmlsZXMnLCAnaW5zdGFsbCcsICctLXBhdGgnLCBzcmNQYXRoXSwge1xuICAgICAgICBsb2dTdGRvdXQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodG1wUm9vdCkge1xuICAgICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUHJvZmlsZSAobmFtZSkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ3Byb2ZpbGVzJywgJ3JlbW92ZScsICctLW5hbWUnLCBuYW1lXSwge2xvZ1N0ZG91dDogdHJ1ZX0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdENyYXNoZXMgKCkge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgdGhpcy5leGVjdXRlKFsnY3Jhc2gnLCAnbGlzdCddKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdGRvdXQucmVwbGFjZSgvJy9nLCAnXCInKSkuZmlsdGVyKCh4KSA9PiAhWycuJywgJy4uJ10uaW5jbHVkZXMoeCkpO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0Q3Jhc2ggKG5hbWUsIGRzdEZvbGRlcikge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShbJ2NyYXNoJywgJ2V4cG9ydCcsICctLW5hbWUnLCBuYW1lXSwge1xuICAgICAgbG9nU3Rkb3V0OiB0cnVlLFxuICAgICAgLy8gVGhlIHRvb2wgZXhwb3J0cyBjcmFzaCByZXBvcnRzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyXG4gICAgICBjd2Q6IGRzdEZvbGRlclxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29sbGVjdFBjYXAgKGRzdEZpbGUpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlKFsncGNhcGQnLCBkc3RGaWxlXSwge1xuICAgICAgZm9ybWF0OiBudWxsLFxuICAgICAgYXN5bmNocm9ub3VzOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUHlpZGV2aWNlIH07XG5leHBvcnQgZGVmYXVsdCBQeWlkZXZpY2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsYUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBSUEsTUFBTUssV0FBVyxHQUFHLFdBQVc7QUFFL0IsTUFBTUMsU0FBUyxDQUFDO0VBQ2RDLFdBQVdBLENBQUVDLElBQUksRUFBRTtJQUNqQixJQUFJLENBQUNBLElBQUksR0FBR0EsSUFBSTtJQUNoQixJQUFJLENBQUNDLFVBQVUsR0FBRyxJQUFJO0VBQ3hCO0VBRUEsTUFBTUMsWUFBWUEsQ0FBRUMsUUFBUSxHQUFHLElBQUksRUFBRTtJQUNuQyxJQUFJLElBQUksQ0FBQ0YsVUFBVSxFQUFFO01BQ25CLE9BQU8sSUFBSTtJQUNiO0lBRUEsSUFBSTtNQUNGLElBQUksQ0FBQ0EsVUFBVSxHQUFHLE1BQU1HLFdBQUUsQ0FBQ0MsS0FBSyxDQUFDUixXQUFXLENBQUM7TUFDN0Ms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
@@ -1 +1 @@
1
- {"version":3,"file":"py-ios-device-client.js","names":["_teen_process","require","_support","_logger","_interopRequireDefault","_path","BINARY_NAME","Pyidevice","constructor","udid","binaryPath","assertExists","isStrict","fs","which","e","Error","execute","args","opts","cwd","format","logStdout","asynchronous","finalArgs","push","cmdStr","util","quote","log","debug","result","SubProcess","start","exec","stdout","stderr","message","listProfiles","JSON","parse","installProfile","profilePath","payload","tmpRoot","srcPath","tempDir","openDir","path","join","writeFile","rimraf","removeProfile","name","listCrashes","replace","filter","x","includes","exportCrash","dstFolder","collectPcap","dstFile","exports","_default","default"],"sources":["../../lib/py-ios-device-client.js"],"sourcesContent":["import { exec, SubProcess } from 'teen_process';\nimport { fs, util, tempDir } from 'appium/support';\nimport log from './logger';\nimport path from 'path';\n\n// https://github.com/YueChen-C/py-ios-device\n\nconst BINARY_NAME = 'pyidevice';\n\nclass Pyidevice {\n constructor (udid) {\n this.udid = udid;\n this.binaryPath = null;\n }\n\n async assertExists (isStrict = true) {\n if (this.binaryPath) {\n return true;\n }\n\n try {\n this.binaryPath = await fs.which(BINARY_NAME);\n return true;\n } catch (e) {\n if (isStrict) {\n throw new Error(`${BINARY_NAME} binary cannot be found in PATH. ` +\n `Please make sure it is installed. Visit https://github.com/YueChen-C/py-ios-device for ` +\n `more details.`);\n }\n return false;\n }\n }\n\n async execute (args, opts = {}) {\n await this.assertExists();\n const {\n cwd,\n format = 'json',\n logStdout = false,\n asynchronous = false,\n } = opts;\n\n const finalArgs = [...args, '--udid', this.udid];\n if (format) {\n finalArgs.push('--format', format);\n }\n const cmdStr = util.quote([this.binaryPath, ...finalArgs]);\n log.debug(`Executing ${cmdStr}`);\n try {\n if (asynchronous) {\n const result = new SubProcess(this.binaryPath, finalArgs, {cwd});\n await result.start(0);\n return result;\n }\n const result = await exec(this.binaryPath, finalArgs, {cwd});\n if (logStdout) {\n log.debug(`Command output: ${result.stdout}`);\n }\n return result;\n } catch (e) {\n throw new Error(`'${cmdStr}' failed. Original error: ${e.stderr || e.stdout || e.message}`);\n }\n }\n\n async listProfiles () {\n const {stdout} = await this.execute(['profiles', 'list']);\n return JSON.parse(stdout);\n }\n\n async installProfile ({profilePath, payload} = {}) {\n if (!profilePath && !payload) {\n throw new Error('Either the full path to the profile or its payload must be provided');\n }\n\n let tmpRoot;\n let srcPath = profilePath;\n try {\n if (!srcPath) {\n tmpRoot = await tempDir.openDir();\n srcPath = path.join(tmpRoot, 'cert.pem');\n await fs.writeFile(srcPath, payload, 'utf8');\n }\n await this.execute(['profiles', 'install', '--path', srcPath], {\n logStdout: true\n });\n } finally {\n if (tmpRoot) {\n await fs.rimraf(tmpRoot);\n }\n }\n }\n\n async removeProfile (name) {\n await this.execute(['profiles', 'remove', name], {logStdout: true});\n }\n\n async listCrashes () {\n const {stdout} = await this.execute(['crash', 'list']);\n return JSON.parse(stdout.replace(/'/g, '\"')).filter((x) => !['.', '..'].includes(x));\n }\n\n async exportCrash (name, dstFolder) {\n await this.execute(['crash', 'export', '--name', name], {\n logStdout: true,\n // The tool exports crash reports to the current working dir\n cwd: dstFolder\n });\n }\n\n async collectPcap (dstFile) {\n return await this.execute(['pcapd', dstFile], {\n format: null,\n asynchronous: true\n });\n }\n}\n\nexport { Pyidevice };\nexport default Pyidevice;\n"],"mappings":"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"}
1
+ {"version":3,"file":"py-ios-device-client.js","names":["_teen_process","require","_support","_logger","_interopRequireDefault","_path","BINARY_NAME","Pyidevice","constructor","udid","binaryPath","assertExists","isStrict","fs","which","e","Error","execute","args","opts","cwd","format","logStdout","asynchronous","finalArgs","push","cmdStr","util","quote","log","debug","result","SubProcess","start","exec","stdout","stderr","message","listProfiles","JSON","parse","installProfile","profilePath","payload","tmpRoot","srcPath","tempDir","openDir","path","join","writeFile","rimraf","removeProfile","name","listCrashes","replace","filter","x","includes","exportCrash","dstFolder","collectPcap","dstFile","exports","_default","default"],"sources":["../../lib/py-ios-device-client.js"],"sourcesContent":["import { exec, SubProcess } from 'teen_process';\nimport { fs, util, tempDir } from 'appium/support';\nimport log from './logger';\nimport path from 'path';\n\n// https://github.com/YueChen-C/py-ios-device\n\nconst BINARY_NAME = 'pyidevice';\n\nclass Pyidevice {\n constructor (udid) {\n this.udid = udid;\n this.binaryPath = null;\n }\n\n async assertExists (isStrict = true) {\n if (this.binaryPath) {\n return true;\n }\n\n try {\n this.binaryPath = await fs.which(BINARY_NAME);\n return true;\n } catch (e) {\n if (isStrict) {\n throw new Error(`${BINARY_NAME} binary cannot be found in PATH. ` +\n `Please make sure it is installed. Visit https://github.com/YueChen-C/py-ios-device for ` +\n `more details.`);\n }\n return false;\n }\n }\n\n async execute (args, opts = {}) {\n await this.assertExists();\n const {\n cwd,\n format = 'json',\n logStdout = false,\n asynchronous = false,\n } = opts;\n\n const finalArgs = [...args, '--udid', this.udid];\n if (format) {\n finalArgs.push('--format', format);\n }\n const cmdStr = util.quote([this.binaryPath, ...finalArgs]);\n log.debug(`Executing ${cmdStr}`);\n try {\n if (asynchronous) {\n const result = new SubProcess(this.binaryPath, finalArgs, {cwd});\n await result.start(0);\n return result;\n }\n const result = await exec(this.binaryPath, finalArgs, {cwd});\n if (logStdout) {\n log.debug(`Command output: ${result.stdout}`);\n }\n return result;\n } catch (e) {\n throw new Error(`'${cmdStr}' failed. Original error: ${e.stderr || e.stdout || e.message}`);\n }\n }\n\n async listProfiles () {\n const {stdout} = await this.execute(['profiles', 'list']);\n return JSON.parse(stdout);\n }\n\n async installProfile ({profilePath, payload} = {}) {\n if (!profilePath && !payload) {\n throw new Error('Either the full path to the profile or its payload must be provided');\n }\n\n let tmpRoot;\n let srcPath = profilePath;\n try {\n if (!srcPath) {\n tmpRoot = await tempDir.openDir();\n srcPath = path.join(tmpRoot, 'cert.pem');\n await fs.writeFile(srcPath, payload, 'utf8');\n }\n await this.execute(['profiles', 'install', '--path', srcPath], {\n logStdout: true\n });\n } finally {\n if (tmpRoot) {\n await fs.rimraf(tmpRoot);\n }\n }\n }\n\n async removeProfile (name) {\n await this.execute(['profiles', 'remove', '--name', name], {logStdout: true});\n }\n\n async listCrashes () {\n const {stdout} = await this.execute(['crash', 'list']);\n return JSON.parse(stdout.replace(/'/g, '\"')).filter((x) => !['.', '..'].includes(x));\n }\n\n async exportCrash (name, dstFolder) {\n await this.execute(['crash', 'export', '--name', name], {\n logStdout: true,\n // The tool exports crash reports to the current working dir\n cwd: dstFolder\n });\n }\n\n async collectPcap (dstFile) {\n return await this.execute(['pcapd', dstFile], {\n format: null,\n asynchronous: true\n });\n }\n}\n\nexport { Pyidevice };\nexport default Pyidevice;\n"],"mappings":"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"}
@@ -410,6 +410,28 @@ commands.mobileInstallCertificate = async function mobileInstallCertificate (opt
410
410
  }
411
411
  };
412
412
 
413
+ /**
414
+ * Removes installed certificates for real devices only
415
+ * if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool
416
+ * is available on the server machine.
417
+ *
418
+ * @property {!string} name - Name of certificate to remove
419
+ * @returns {Object} Returns status acknowledgment if successfully removed certificate or 'None'
420
+ * @throws {Error} If attempting to remote certificates for simulated device or if py-ios-device
421
+ * is not installed
422
+ */
423
+ commands.mobileRemoveCertificate = async function mobileRemoveCertificate (opts = {}) {
424
+ const {
425
+ name
426
+ } = opts;
427
+ if (!this.isRealDevice()) {
428
+ throw new errors.NotImplementedError('This extension is only supported on real devices');
429
+ }
430
+ const client = new Pyidevice(this.opts.udid);
431
+ await client.assertExists(true);
432
+ return await client.removeProfile(name);
433
+ };
434
+
413
435
  /**
414
436
  * Lists installed certificates for real devices only
415
437
  * if [py-ios-device](https://github.com/YueChen-C/py-ios-device) tool
@@ -424,10 +446,8 @@ commands.mobileListCertificates = async function mobileListCertificates () {
424
446
  throw new errors.NotImplementedError('This extension is only supported on real devices');
425
447
  }
426
448
  const client = new Pyidevice(this.opts.udid);
427
- if (await client.assertExists(false)) {
428
- return await client.listProfiles();
429
- }
430
- throw new Error('pyidevice is not installed on your system, command cannot be executed.');
449
+ await client.assertExists(true);
450
+ return await client.listProfiles();
431
451
  };
432
452
 
433
453
  Object.assign(extensions, commands);
@@ -109,6 +109,7 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
109
109
  stopPerfRecord: 'mobileStopPerfRecord',
110
110
 
111
111
  installCertificate: 'mobileInstallCertificate',
112
+ removeCertificate: 'mobileRemoveCertificate',
112
113
  listCertificates: 'mobileListCertificates',
113
114
 
114
115
  startLogsBroadcast: 'mobileStartLogsBroadcast',
@@ -91,7 +91,7 @@ class Pyidevice {
91
91
  }
92
92
 
93
93
  async removeProfile (name) {
94
- await this.execute(['profiles', 'remove', name], {logStdout: true});
94
+ await this.execute(['profiles', 'remove', '--name', name], {logStdout: true});
95
95
  }
96
96
 
97
97
  async listCrashes () {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "appium-xcuitest-driver",
3
- "version": "4.19.1",
3
+ "version": "4.20.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "appium-xcuitest-driver",
9
- "version": "4.19.1",
9
+ "version": "4.20.1",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@babel/runtime": "^7.0.0",
@@ -79,11 +79,11 @@
79
79
  }
80
80
  },
81
81
  "node_modules/@appium/base-driver": {
82
- "version": "9.3.3",
82
+ "version": "9.3.4",
83
83
  "license": "Apache-2.0",
84
84
  "dependencies": {
85
- "@appium/support": "^3.1.7",
86
- "@appium/types": "^0.10.1",
85
+ "@appium/support": "^3.1.8",
86
+ "@appium/types": "^0.10.2",
87
87
  "@colors/colors": "1.5.0",
88
88
  "@types/async-lock": "1.4.0",
89
89
  "@types/bluebird": "3.5.38",
@@ -104,7 +104,7 @@
104
104
  "morgan": "1.10.0",
105
105
  "serve-favicon": "2.5.0",
106
106
  "source-map-support": "0.5.21",
107
- "type-fest": "3.6.1",
107
+ "type-fest": "3.7.1",
108
108
  "validate.js": "0.13.1"
109
109
  },
110
110
  "engines": {
@@ -113,12 +113,12 @@
113
113
  }
114
114
  },
115
115
  "node_modules/@appium/base-plugin": {
116
- "version": "2.2.3",
116
+ "version": "2.2.4",
117
117
  "extraneous": true,
118
118
  "license": "Apache-2.0",
119
119
  "dependencies": {
120
- "@appium/base-driver": "^9.3.3",
121
- "@appium/support": "^3.1.7"
120
+ "@appium/base-driver": "^9.3.4",
121
+ "@appium/support": "^3.1.8"
122
122
  },
123
123
  "engines": {
124
124
  "node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -126,13 +126,13 @@
126
126
  }
127
127
  },
128
128
  "node_modules/@appium/docutils": {
129
- "version": "0.3.0",
129
+ "version": "0.3.1",
130
130
  "dev": true,
131
131
  "license": "Apache-2.0",
132
132
  "dependencies": {
133
- "@appium/support": "^3.1.7",
133
+ "@appium/support": "^3.1.8",
134
134
  "@appium/tsconfig": "^0.2.4",
135
- "@appium/typedoc-plugin-appium": "^0.5.1",
135
+ "@appium/typedoc-plugin-appium": "^0.5.2",
136
136
  "@sliphua/lilconfig-ts-loader": "3.2.2",
137
137
  "chalk": "4.1.2",
138
138
  "consola": "2.15.3",
@@ -148,8 +148,8 @@
148
148
  "semver": "7.3.8",
149
149
  "source-map-support": "0.5.21",
150
150
  "teen_process": "2.0.2",
151
- "type-fest": "3.6.1",
152
- "typedoc": "0.23.26",
151
+ "type-fest": "3.7.1",
152
+ "typedoc": "0.23.28",
153
153
  "typedoc-plugin-markdown": "3.14.0",
154
154
  "typedoc-plugin-resolve-crossmodule-references": "0.3.3",
155
155
  "typescript": "4.9.5",
@@ -179,13 +179,13 @@
179
179
  }
180
180
  },
181
181
  "node_modules/@appium/support": {
182
- "version": "3.1.7",
182
+ "version": "3.1.8",
183
183
  "license": "Apache-2.0",
184
184
  "dependencies": {
185
185
  "@appium/tsconfig": "^0.2.4",
186
- "@appium/types": "^0.10.1",
186
+ "@appium/types": "^0.10.2",
187
187
  "@colors/colors": "1.5.0",
188
- "@types/archiver": "5.3.1",
188
+ "@types/archiver": "5.3.2",
189
189
  "@types/base64-stream": "1.0.2",
190
190
  "@types/find-root": "1.1.2",
191
191
  "@types/glob": "8.1.0",
@@ -236,7 +236,7 @@
236
236
  "source-map-support": "0.5.21",
237
237
  "supports-color": "8.1.1",
238
238
  "teen_process": "2.0.2",
239
- "type-fest": "3.6.1",
239
+ "type-fest": "3.7.1",
240
240
  "uuid": "9.0.0",
241
241
  "which": "3.0.0",
242
242
  "yauzl": "2.10.0"
@@ -258,14 +258,14 @@
258
258
  }
259
259
  },
260
260
  "node_modules/@appium/typedoc-plugin-appium": {
261
- "version": "0.5.1",
261
+ "version": "0.5.2",
262
262
  "dev": true,
263
263
  "license": "Apache-2.0",
264
264
  "dependencies": {
265
265
  "handlebars": "4.7.7",
266
266
  "lodash": "4.17.21",
267
267
  "pluralize": "8.0.0",
268
- "type-fest": "3.6.1"
268
+ "type-fest": "3.7.1"
269
269
  },
270
270
  "engines": {
271
271
  "node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -280,7 +280,7 @@
280
280
  }
281
281
  },
282
282
  "node_modules/@appium/types": {
283
- "version": "0.10.1",
283
+ "version": "0.10.2",
284
284
  "license": "Apache-2.0",
285
285
  "dependencies": {
286
286
  "@appium/schema": "^0.2.6",
@@ -288,7 +288,7 @@
288
288
  "@types/express": "4.17.17",
289
289
  "@types/npmlog": "4.1.4",
290
290
  "@types/ws": "8.5.4",
291
- "type-fest": "3.6.1"
291
+ "type-fest": "3.7.1"
292
292
  },
293
293
  "engines": {
294
294
  "node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -814,10 +814,10 @@
814
814
  "license": "MIT"
815
815
  },
816
816
  "node_modules/@types/archiver": {
817
- "version": "5.3.1",
817
+ "version": "5.3.2",
818
818
  "license": "MIT",
819
819
  "dependencies": {
820
- "@types/glob": "*"
820
+ "@types/readdir-glob": "*"
821
821
  }
822
822
  },
823
823
  "node_modules/@types/argparse": {
@@ -940,7 +940,7 @@
940
940
  }
941
941
  },
942
942
  "node_modules/@types/node": {
943
- "version": "18.15.0",
943
+ "version": "18.15.11",
944
944
  "license": "MIT"
945
945
  },
946
946
  "node_modules/@types/normalize-package-data": {
@@ -970,6 +970,13 @@
970
970
  "version": "1.2.4",
971
971
  "license": "MIT"
972
972
  },
973
+ "node_modules/@types/readdir-glob": {
974
+ "version": "1.1.1",
975
+ "license": "MIT",
976
+ "dependencies": {
977
+ "@types/node": "*"
978
+ }
979
+ },
973
980
  "node_modules/@types/rimraf": {
974
981
  "version": "3.0.2",
975
982
  "license": "MIT",
@@ -1225,7 +1232,7 @@
1225
1232
  }
1226
1233
  },
1227
1234
  "node_modules/appium-xcode": {
1228
- "version": "5.0.1",
1235
+ "version": "5.0.2",
1229
1236
  "license": "Apache-2.0",
1230
1237
  "dependencies": {
1231
1238
  "@appium/support": "^3.0.0",
@@ -2420,7 +2427,7 @@
2420
2427
  }
2421
2428
  },
2422
2429
  "node_modules/graceful-fs": {
2423
- "version": "4.2.10",
2430
+ "version": "4.2.11",
2424
2431
  "license": "ISC"
2425
2432
  },
2426
2433
  "node_modules/handlebars": {
@@ -2849,17 +2856,6 @@
2849
2856
  "triple-beam": "^1.3.0"
2850
2857
  }
2851
2858
  },
2852
- "node_modules/longjohn": {
2853
- "version": "0.2.12",
2854
- "extraneous": true,
2855
- "license": "MIT",
2856
- "dependencies": {
2857
- "source-map-support": "0.3.2 - 1.0.0"
2858
- },
2859
- "engines": {
2860
- "node": ">= 0.9.3"
2861
- }
2862
- },
2863
2859
  "node_modules/lru-cache": {
2864
2860
  "version": "7.18.3",
2865
2861
  "license": "ISC",
@@ -2878,7 +2874,7 @@
2878
2874
  "license": "ISC"
2879
2875
  },
2880
2876
  "node_modules/marked": {
2881
- "version": "4.2.12",
2877
+ "version": "4.3.0",
2882
2878
  "dev": true,
2883
2879
  "license": "MIT",
2884
2880
  "bin": {
@@ -2996,7 +2992,7 @@
2996
2992
  }
2997
2993
  },
2998
2994
  "node_modules/mkdirp": {
2999
- "version": "2.1.5",
2995
+ "version": "2.1.6",
3000
2996
  "license": "MIT",
3001
2997
  "bin": {
3002
2998
  "mkdirp": "dist/cjs/src/bin.js"
@@ -3016,7 +3012,7 @@
3016
3012
  }
3017
3013
  },
3018
3014
  "node_modules/moment-timezone": {
3019
- "version": "0.5.41",
3015
+ "version": "0.5.42",
3020
3016
  "license": "MIT",
3021
3017
  "dependencies": {
3022
3018
  "moment": "^2.29.4"
@@ -3208,7 +3204,7 @@
3208
3204
  }
3209
3205
  },
3210
3206
  "node_modules/node-simctl/node_modules/glob": {
3211
- "version": "9.2.1",
3207
+ "version": "9.3.2",
3212
3208
  "license": "ISC",
3213
3209
  "dependencies": {
3214
3210
  "fs.realpath": "^1.0.0",
@@ -3231,7 +3227,7 @@
3231
3227
  }
3232
3228
  },
3233
3229
  "node_modules/node-simctl/node_modules/minimatch": {
3234
- "version": "7.4.2",
3230
+ "version": "7.4.3",
3235
3231
  "license": "ISC",
3236
3232
  "dependencies": {
3237
3233
  "brace-expansion": "^2.0.1"
@@ -3257,7 +3253,7 @@
3257
3253
  }
3258
3254
  },
3259
3255
  "node_modules/node-simctl/node_modules/rimraf": {
3260
- "version": "4.4.0",
3256
+ "version": "4.4.1",
3261
3257
  "license": "ISC",
3262
3258
  "dependencies": {
3263
3259
  "glob": "^9.2.0"
@@ -3542,14 +3538,14 @@
3542
3538
  "license": "MIT"
3543
3539
  },
3544
3540
  "node_modules/path-scurry": {
3545
- "version": "1.6.1",
3541
+ "version": "1.6.3",
3546
3542
  "license": "BlueOak-1.0.0",
3547
3543
  "dependencies": {
3548
3544
  "lru-cache": "^7.14.1",
3549
3545
  "minipass": "^4.0.2"
3550
3546
  },
3551
3547
  "engines": {
3552
- "node": ">=14"
3548
+ "node": ">=16 || 14 >=14.17"
3553
3549
  },
3554
3550
  "funding": {
3555
3551
  "url": "https://github.com/sponsors/isaacs"
@@ -3890,7 +3886,7 @@
3890
3886
  "license": "MIT"
3891
3887
  },
3892
3888
  "node_modules/safe-stable-stringify": {
3893
- "version": "2.4.2",
3889
+ "version": "2.4.3",
3894
3890
  "extraneous": true,
3895
3891
  "license": "MIT",
3896
3892
  "engines": {
@@ -4360,7 +4356,7 @@
4360
4356
  "license": "0BSD"
4361
4357
  },
4362
4358
  "node_modules/type-fest": {
4363
- "version": "3.6.1",
4359
+ "version": "3.7.1",
4364
4360
  "license": "(MIT OR CC0-1.0)",
4365
4361
  "engines": {
4366
4362
  "node": ">=14.16"
@@ -4381,7 +4377,7 @@
4381
4377
  }
4382
4378
  },
4383
4379
  "node_modules/typedoc": {
4384
- "version": "0.23.26",
4380
+ "version": "0.23.28",
4385
4381
  "dev": true,
4386
4382
  "license": "Apache-2.0",
4387
4383
  "dependencies": {
@@ -4397,7 +4393,7 @@
4397
4393
  "node": ">= 14.14"
4398
4394
  },
4399
4395
  "peerDependencies": {
4400
- "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x"
4396
+ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x"
4401
4397
  }
4402
4398
  },
4403
4399
  "node_modules/typedoc-plugin-markdown": {
@@ -4434,7 +4430,7 @@
4434
4430
  }
4435
4431
  },
4436
4432
  "node_modules/typedoc/node_modules/minimatch": {
4437
- "version": "7.4.2",
4433
+ "version": "7.4.3",
4438
4434
  "dev": true,
4439
4435
  "license": "ISC",
4440
4436
  "dependencies": {
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "xcuitest",
9
9
  "xctest"
10
10
  ],
11
- "version": "4.19.1",
11
+ "version": "4.20.1",
12
12
  "author": "Appium Contributors",
13
13
  "license": "Apache-2.0",
14
14
  "repository": {