appium-uiautomator2-driver 2.7.1 → 2.9.0

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.
Files changed (40) hide show
  1. package/README.md +10 -6
  2. package/build/index.js +1 -4
  3. package/build/lib/commands/actions.js +3 -12
  4. package/build/lib/commands/actions.js.map +1 -1
  5. package/build/lib/commands/alert.js +3 -9
  6. package/build/lib/commands/alert.js.map +1 -1
  7. package/build/lib/commands/battery.js +3 -5
  8. package/build/lib/commands/battery.js.map +1 -1
  9. package/build/lib/commands/element.js +3 -36
  10. package/build/lib/commands/element.js.map +1 -1
  11. package/build/lib/commands/find.js +2 -9
  12. package/build/lib/commands/find.js.map +1 -1
  13. package/build/lib/commands/general.js +5 -36
  14. package/build/lib/commands/general.js.map +1 -1
  15. package/build/lib/commands/gestures.js +1 -15
  16. package/build/lib/commands/gestures.js.map +1 -1
  17. package/build/lib/commands/index.js +3 -15
  18. package/build/lib/commands/index.js.map +1 -1
  19. package/build/lib/commands/screenshot.js +1 -8
  20. package/build/lib/commands/screenshot.js.map +1 -1
  21. package/build/lib/commands/touch.js +2 -8
  22. package/build/lib/commands/touch.js.map +1 -1
  23. package/build/lib/commands/viewport.js +3 -9
  24. package/build/lib/commands/viewport.js.map +1 -1
  25. package/build/lib/css-converter.js +1 -42
  26. package/build/lib/css-converter.js.map +1 -1
  27. package/build/lib/desired-caps.js +1 -4
  28. package/build/lib/desired-caps.js.map +1 -1
  29. package/build/lib/driver.js +24 -102
  30. package/build/lib/driver.js.map +1 -1
  31. package/build/lib/extensions.js +1 -3
  32. package/build/lib/extensions.js.map +1 -1
  33. package/build/lib/helpers.js +1 -15
  34. package/build/lib/helpers.js.map +1 -1
  35. package/build/lib/logger.js +1 -5
  36. package/build/lib/logger.js.map +1 -1
  37. package/build/lib/uiautomator2.js +1 -70
  38. package/build/lib/uiautomator2.js.map +1 -1
  39. package/npm-shrinkwrap.json +262 -279
  40. package/package.json +3 -3
@@ -1,17 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.helpers = exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _cssConverter = _interopRequireDefault(require("../css-converter"));
13
-
14
10
  const helpers = {};
11
+
15
12
  exports.helpers = helpers;
16
13
  const MAGIC_FIRST_VIS_CHILD_SEL = /\/\*\[@firstVisible ?= ?('|")true\1\]/;
17
14
  const MAGIC_SCROLLABLE_SEL = /\/\/\*\[@scrollable ?= ?('|")true\1\]/;
@@ -22,20 +19,16 @@ helpers.doFindElementOrEls = async function (params) {
22
19
  let elementId = params.context;
23
20
  return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});
24
21
  }
25
-
26
22
  if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {
27
23
  params.strategy = '-android uiautomator';
28
24
  params.selector = MAGIC_SCROLLABLE_BY;
29
25
  }
30
-
31
26
  if (params.strategy === 'css selector') {
32
27
  params.strategy = '-android uiautomator';
33
28
  params.selector = new _cssConverter.default(params.selector, this.opts.appPackage).toUiAutomatorSelector();
34
29
  }
35
-
36
30
  return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);
37
31
  };
38
-
39
32
  var _default = helpers;
40
33
  exports.default = _default;
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCIsIk1BR0lDX1NDUk9MTEFCTEVfU0VMIiwiTUFHSUNfU0NST0xMQUJMRV9CWSIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsInN0cmF0ZWd5IiwidGVzdCIsInNlbGVjdG9yIiwiZWxlbWVudElkIiwiY29udGV4dCIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiQ3NzQ29udmVydGVyIiwib3B0cyIsImFwcFBhY2thZ2UiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJtdWx0aXBsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9maW5kLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NDb252ZXJ0ZXIgZnJvbSAnLi4vY3NzLWNvbnZlcnRlcic7XG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuLy8gd2Ugb3ZlcnJpZGUgdGhlIHhwYXRoIHNlYXJjaCBmb3IgdGhpcyBmaXJzdC12aXNpYmxlLWNoaWxkIHNlbGVjdG9yLCB3aGljaFxuLy8gbG9va3MgbGlrZSAvKltAZmlyc3RWaXNpYmxlPVwidHJ1ZVwiXVxuY29uc3QgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCA9IC9cXC9cXCpcXFtAZmlyc3RWaXNpYmxlID89ID8oJ3xcIil0cnVlXFwxXFxdLztcblxuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9TRUwgPSAvXFwvXFwvXFwqXFxbQHNjcm9sbGFibGUgPz0gPygnfFwiKXRydWVcXDFcXF0vO1xuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9CWSA9ICduZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgZnVuY3Rpb25hbGl0eSBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZXIsXG4gKiB0aGlzLmVsZW1lbnQgaW5pdGlhbGl6ZWQgaW4gZmluZC5qcyBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZS5cbiAqL1xuaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICd4cGF0aCcgJiYgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTC50ZXN0KHBhcmFtcy5zZWxlY3RvcikpIHtcbiAgICBsZXQgZWxlbWVudElkID0gcGFyYW1zLmNvbnRleHQ7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9lbGVtZW50LyR7ZWxlbWVudElkfS9maXJzdF92aXNpYmxlYCwgJ0dFVCcsIHt9KTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAneHBhdGgnICYmIE1BR0lDX1NDUk9MTEFCTEVfU0VMLnRlc3QocGFyYW1zLnNlbGVjdG9yKSkge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gTUFHSUNfU0NST0xMQUJMRV9CWTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAnY3NzIHNlbGVjdG9yJykge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gbmV3IENzc0NvbnZlcnRlcihwYXJhbXMuc2VsZWN0b3IsIHRoaXMub3B0cy5hcHBQYWNrYWdlKVxuICAgICAgLnRvVWlBdXRvbWF0b3JTZWxlY3RvcigpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50JHtwYXJhbXMubXVsdGlwbGUgPyAncycgOiAnJ31gLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5leHBvcnQgeyBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLE9BQU8sR0FBRyxFQUFoQjs7QUFJQSxNQUFNQyx5QkFBeUIsR0FBRyx1Q0FBbEM7QUFFQSxNQUFNQyxvQkFBb0IsR0FBRyx1Q0FBN0I7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxtQ0FBNUI7O0FBTUFILE9BQU8sQ0FBQ0ksa0JBQVIsR0FBNkIsZ0JBQWdCQyxNQUFoQixFQUF3QjtFQUNuRCxJQUFJQSxNQUFNLENBQUNDLFFBQVAsS0FBb0IsT0FBcEIsSUFBK0JMLHlCQUF5QixDQUFDTSxJQUExQixDQUErQkYsTUFBTSxDQUFDRyxRQUF0QyxDQUFuQyxFQUFvRjtJQUNsRixJQUFJQyxTQUFTLEdBQUdKLE1BQU0sQ0FBQ0ssT0FBdkI7SUFDQSxPQUFPLE1BQU0sS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQW1DLG1CQUFrQkosU0FBVSxnQkFBL0QsRUFBZ0YsS0FBaEYsRUFBdUYsRUFBdkYsQ0FBYjtFQUNEOztFQUNELElBQUlKLE1BQU0sQ0FBQ0MsUUFBUCxLQUFvQixPQUFwQixJQUErQkosb0JBQW9CLENBQUNLLElBQXJCLENBQTBCRixNQUFNLENBQUNHLFFBQWpDLENBQW5DLEVBQStFO0lBQzdFSCxNQUFNLENBQUNDLFFBQVAsR0FBa0Isc0JBQWxCO0lBQ0FELE1BQU0sQ0FBQ0csUUFBUCxHQUFrQkwsbUJBQWxCO0VBQ0Q7O0VBQ0QsSUFBSUUsTUFBTSxDQUFDQyxRQUFQLEtBQW9CLGNBQXhCLEVBQXdDO0lBQ3RDRCxNQUFNLENBQUNDLFFBQVAsR0FBa0Isc0JBQWxCO0lBQ0FELE1BQU0sQ0FBQ0csUUFBUCxHQUFrQixJQUFJTSxxQkFBSixDQUFpQlQsTUFBTSxDQUFDRyxRQUF4QixFQUFrQyxLQUFLTyxJQUFMLENBQVVDLFVBQTVDLEVBQ2ZDLHFCQURlLEVBQWxCO0VBRUQ7O0VBQ0QsT0FBTyxNQUFNLEtBQUtOLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFtQyxXQUFVUixNQUFNLENBQUNhLFFBQVAsR0FBa0IsR0FBbEIsR0FBd0IsRUFBRyxFQUF4RSxFQUEyRSxNQUEzRSxFQUFtRmIsTUFBbkYsQ0FBYjtBQUNELENBZkQ7O2VBa0JlTCxPIn0=
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCIsIk1BR0lDX1NDUk9MTEFCTEVfU0VMIiwiTUFHSUNfU0NST0xMQUJMRV9CWSIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsInN0cmF0ZWd5IiwidGVzdCIsInNlbGVjdG9yIiwiZWxlbWVudElkIiwiY29udGV4dCIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiQ3NzQ29udmVydGVyIiwib3B0cyIsImFwcFBhY2thZ2UiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJtdWx0aXBsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9maW5kLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NDb252ZXJ0ZXIgZnJvbSAnLi4vY3NzLWNvbnZlcnRlcic7XG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuLy8gd2Ugb3ZlcnJpZGUgdGhlIHhwYXRoIHNlYXJjaCBmb3IgdGhpcyBmaXJzdC12aXNpYmxlLWNoaWxkIHNlbGVjdG9yLCB3aGljaFxuLy8gbG9va3MgbGlrZSAvKltAZmlyc3RWaXNpYmxlPVwidHJ1ZVwiXVxuY29uc3QgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCA9IC9cXC9cXCpcXFtAZmlyc3RWaXNpYmxlID89ID8oJ3xcIil0cnVlXFwxXFxdLztcblxuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9TRUwgPSAvXFwvXFwvXFwqXFxbQHNjcm9sbGFibGUgPz0gPygnfFwiKXRydWVcXDFcXF0vO1xuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9CWSA9ICduZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgZnVuY3Rpb25hbGl0eSBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZXIsXG4gKiB0aGlzLmVsZW1lbnQgaW5pdGlhbGl6ZWQgaW4gZmluZC5qcyBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZS5cbiAqL1xuaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICd4cGF0aCcgJiYgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTC50ZXN0KHBhcmFtcy5zZWxlY3RvcikpIHtcbiAgICBsZXQgZWxlbWVudElkID0gcGFyYW1zLmNvbnRleHQ7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9lbGVtZW50LyR7ZWxlbWVudElkfS9maXJzdF92aXNpYmxlYCwgJ0dFVCcsIHt9KTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAneHBhdGgnICYmIE1BR0lDX1NDUk9MTEFCTEVfU0VMLnRlc3QocGFyYW1zLnNlbGVjdG9yKSkge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gTUFHSUNfU0NST0xMQUJMRV9CWTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAnY3NzIHNlbGVjdG9yJykge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gbmV3IENzc0NvbnZlcnRlcihwYXJhbXMuc2VsZWN0b3IsIHRoaXMub3B0cy5hcHBQYWNrYWdlKVxuICAgICAgLnRvVWlBdXRvbWF0b3JTZWxlY3RvcigpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50JHtwYXJhbXMubXVsdGlwbGUgPyAncycgOiAnJ31gLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5leHBvcnQgeyBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBRUEsTUFBTUEsT0FBTyxHQUFHLENBQUMsQ0FBQzs7QUFBQztBQUluQixNQUFNQyx5QkFBeUIsR0FBRyx1Q0FBdUM7QUFFekUsTUFBTUMsb0JBQW9CLEdBQUcsdUNBQXVDO0FBQ3BFLE1BQU1DLG1CQUFtQixHQUFHLG1DQUFtQzs7QUFNL0RILE9BQU8sQ0FBQ0ksa0JBQWtCLEdBQUcsZ0JBQWdCQyxNQUFNLEVBQUU7RUFDbkQsSUFBSUEsTUFBTSxDQUFDQyxRQUFRLEtBQUssT0FBTyxJQUFJTCx5QkFBeUIsQ0FBQ00sSUFBSSxDQUFDRixNQUFNLENBQUNHLFFBQVEsQ0FBQyxFQUFFO0lBQ2xGLElBQUlDLFNBQVMsR0FBR0osTUFBTSxDQUFDSyxPQUFPO0lBQzlCLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsbUJBQWtCSixTQUFVLGdCQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3pHO0VBQ0EsSUFBSUosTUFBTSxDQUFDQyxRQUFRLEtBQUssT0FBTyxJQUFJSixvQkFBb0IsQ0FBQ0ssSUFBSSxDQUFDRixNQUFNLENBQUNHLFFBQVEsQ0FBQyxFQUFFO0lBQzdFSCxNQUFNLENBQUNDLFFBQVEsR0FBRyxzQkFBc0I7SUFDeENELE1BQU0sQ0FBQ0csUUFBUSxHQUFHTCxtQkFBbUI7RUFDdkM7RUFDQSxJQUFJRSxNQUFNLENBQUNDLFFBQVEsS0FBSyxjQUFjLEVBQUU7SUFDdENELE1BQU0sQ0FBQ0MsUUFBUSxHQUFHLHNCQUFzQjtJQUN4Q0QsTUFBTSxDQUFDRyxRQUFRLEdBQUcsSUFBSU0scUJBQVksQ0FBQ1QsTUFBTSxDQUFDRyxRQUFRLEVBQUUsSUFBSSxDQUFDTyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUN0RUMscUJBQXFCLEVBQUU7RUFDNUI7RUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDTixZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLFdBQVVSLE1BQU0sQ0FBQ2EsUUFBUSxHQUFHLEdBQUcsR0FBRyxFQUFHLEVBQUMsRUFBRSxNQUFNLEVBQUViLE1BQU0sQ0FBQztBQUN6RyxDQUFDO0FBQUMsZUFHYUwsT0FBTztBQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","names":["helpers","MAGIC_FIRST_VIS_CHILD_SEL","MAGIC_SCROLLABLE_SEL","MAGIC_SCROLLABLE_BY","doFindElementOrEls","params","strategy","test","selector","elementId","context","uiautomator2","jwproxy","command","CssConverter","opts","appPackage","toUiAutomatorSelector","multiple"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import CssConverter from '../css-converter';\n\nconst helpers = {};\n\n// we override the xpath search for this first-visible-child selector, which\n// looks like /*[@firstVisible=\"true\"]\nconst MAGIC_FIRST_VIS_CHILD_SEL = /\\/\\*\\[@firstVisible ?= ?('|\")true\\1\\]/;\n\nconst MAGIC_SCROLLABLE_SEL = /\\/\\/\\*\\[@scrollable ?= ?('|\")true\\1\\]/;\nconst MAGIC_SCROLLABLE_BY = 'new UiSelector().scrollable(true)';\n\n/**\n * Overriding helpers.doFindElementOrEls functionality of appium-android-driver,\n * this.element initialized in find.js of appium-android-drive.\n */\nhelpers.doFindElementOrEls = async function (params) {\n if (params.strategy === 'xpath' && MAGIC_FIRST_VIS_CHILD_SEL.test(params.selector)) {\n let elementId = params.context;\n return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});\n }\n if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {\n params.strategy = '-android uiautomator';\n params.selector = MAGIC_SCROLLABLE_BY;\n }\n if (params.strategy === 'css selector') {\n params.strategy = '-android uiautomator';\n params.selector = new CssConverter(params.selector, this.opts.appPackage)\n .toUiAutomatorSelector();\n }\n return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);\n};\n\nexport { helpers };\nexport default helpers;\n"],"mappings":";;;;;;;;;;;AAAA;;AAEA,MAAMA,OAAO,GAAG,EAAhB;;AAIA,MAAMC,yBAAyB,GAAG,uCAAlC;AAEA,MAAMC,oBAAoB,GAAG,uCAA7B;AACA,MAAMC,mBAAmB,GAAG,mCAA5B;;AAMAH,OAAO,CAACI,kBAAR,GAA6B,gBAAgBC,MAAhB,EAAwB;EACnD,IAAIA,MAAM,CAACC,QAAP,KAAoB,OAApB,IAA+BL,yBAAyB,CAACM,IAA1B,CAA+BF,MAAM,CAACG,QAAtC,CAAnC,EAAoF;IAClF,IAAIC,SAAS,GAAGJ,MAAM,CAACK,OAAvB;IACA,OAAO,MAAM,KAAKC,YAAL,CAAkBC,OAAlB,CAA0BC,OAA1B,CAAmC,mBAAkBJ,SAAU,gBAA/D,EAAgF,KAAhF,EAAuF,EAAvF,CAAb;EACD;;EACD,IAAIJ,MAAM,CAACC,QAAP,KAAoB,OAApB,IAA+BJ,oBAAoB,CAACK,IAArB,CAA0BF,MAAM,CAACG,QAAjC,CAAnC,EAA+E;IAC7EH,MAAM,CAACC,QAAP,GAAkB,sBAAlB;IACAD,MAAM,CAACG,QAAP,GAAkBL,mBAAlB;EACD;;EACD,IAAIE,MAAM,CAACC,QAAP,KAAoB,cAAxB,EAAwC;IACtCD,MAAM,CAACC,QAAP,GAAkB,sBAAlB;IACAD,MAAM,CAACG,QAAP,GAAkB,IAAIM,qBAAJ,CAAiBT,MAAM,CAACG,QAAxB,EAAkC,KAAKO,IAAL,CAAUC,UAA5C,EACfC,qBADe,EAAlB;EAED;;EACD,OAAO,MAAM,KAAKN,YAAL,CAAkBC,OAAlB,CAA0BC,OAA1B,CAAmC,WAAUR,MAAM,CAACa,QAAP,GAAkB,GAAlB,GAAwB,EAAG,EAAxE,EAA2E,MAA3E,EAAmFb,MAAnF,CAAb;AACD,CAfD;;eAkBeL,O"}
1
+ {"version":3,"file":"find.js","names":["helpers","MAGIC_FIRST_VIS_CHILD_SEL","MAGIC_SCROLLABLE_SEL","MAGIC_SCROLLABLE_BY","doFindElementOrEls","params","strategy","test","selector","elementId","context","uiautomator2","jwproxy","command","CssConverter","opts","appPackage","toUiAutomatorSelector","multiple"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import CssConverter from '../css-converter';\n\nconst helpers = {};\n\n// we override the xpath search for this first-visible-child selector, which\n// looks like /*[@firstVisible=\"true\"]\nconst MAGIC_FIRST_VIS_CHILD_SEL = /\\/\\*\\[@firstVisible ?= ?('|\")true\\1\\]/;\n\nconst MAGIC_SCROLLABLE_SEL = /\\/\\/\\*\\[@scrollable ?= ?('|\")true\\1\\]/;\nconst MAGIC_SCROLLABLE_BY = 'new UiSelector().scrollable(true)';\n\n/**\n * Overriding helpers.doFindElementOrEls functionality of appium-android-driver,\n * this.element initialized in find.js of appium-android-drive.\n */\nhelpers.doFindElementOrEls = async function (params) {\n if (params.strategy === 'xpath' && MAGIC_FIRST_VIS_CHILD_SEL.test(params.selector)) {\n let elementId = params.context;\n return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});\n }\n if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {\n params.strategy = '-android uiautomator';\n params.selector = MAGIC_SCROLLABLE_BY;\n }\n if (params.strategy === 'css selector') {\n params.strategy = '-android uiautomator';\n params.selector = new CssConverter(params.selector, this.opts.appPackage)\n .toUiAutomatorSelector();\n }\n return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);\n};\n\nexport { helpers };\nexport default helpers;\n"],"mappings":";;;;;;;;AAAA;AAEA,MAAMA,OAAO,GAAG,CAAC,CAAC;;AAAC;AAInB,MAAMC,yBAAyB,GAAG,uCAAuC;AAEzE,MAAMC,oBAAoB,GAAG,uCAAuC;AACpE,MAAMC,mBAAmB,GAAG,mCAAmC;;AAM/DH,OAAO,CAACI,kBAAkB,GAAG,gBAAgBC,MAAM,EAAE;EACnD,IAAIA,MAAM,CAACC,QAAQ,KAAK,OAAO,IAAIL,yBAAyB,CAACM,IAAI,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;IAClF,IAAIC,SAAS,GAAGJ,MAAM,CAACK,OAAO;IAC9B,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,mBAAkBJ,SAAU,gBAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EACzG;EACA,IAAIJ,MAAM,CAACC,QAAQ,KAAK,OAAO,IAAIJ,oBAAoB,CAACK,IAAI,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;IAC7EH,MAAM,CAACC,QAAQ,GAAG,sBAAsB;IACxCD,MAAM,CAACG,QAAQ,GAAGL,mBAAmB;EACvC;EACA,IAAIE,MAAM,CAACC,QAAQ,KAAK,cAAc,EAAE;IACtCD,MAAM,CAACC,QAAQ,GAAG,sBAAsB;IACxCD,MAAM,CAACG,QAAQ,GAAG,IAAIM,qBAAY,CAACT,MAAM,CAACG,QAAQ,EAAE,IAAI,CAACO,IAAI,CAACC,UAAU,CAAC,CACtEC,qBAAqB,EAAE;EAC5B;EACA,OAAO,MAAM,IAAI,CAACN,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,WAAUR,MAAM,CAACa,QAAQ,GAAG,GAAG,GAAG,EAAG,EAAC,EAAE,MAAM,EAAEb,MAAM,CAAC;AACzG,CAAC;AAAC,eAGaL,OAAO;AAAA"}
@@ -1,32 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
10
  var _bluebird = _interopRequireDefault(require("bluebird"));
15
-
16
11
  var _driver = require("appium/driver");
17
-
18
12
  var _support = require("appium/support");
19
-
20
13
  var _extensions = require("../extensions");
21
-
22
14
  let extensions = {},
23
- commands = {},
24
- helpers = {};
25
-
15
+ commands = {},
16
+ helpers = {};
26
17
  commands.getPageSource = async function () {
27
18
  return await this.uiautomator2.jwproxy.command('/source', 'GET', {});
28
19
  };
29
-
30
20
  commands.getClipboard = async function () {
31
21
  return (await this.adb.getApiLevel()) < 29 ? await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}) : await this.adb.getClipboard();
32
22
  };
@@ -43,7 +33,6 @@ commands.keyevent = async function (keycode, metastate) {
43
33
  commands.back = async function () {
44
34
  await this.adb.keyevent(4);
45
35
  };
46
-
47
36
  commands.getStrings = async function (language) {
48
37
  if (!language) {
49
38
  language = await this.adb.getDeviceLanguage();
@@ -52,25 +41,19 @@ commands.getStrings = async function (language) {
52
41
 
53
42
  const preprocessStringsMap = function (mapping) {
54
43
  const result = {};
55
-
56
44
  for (const [key, value] of _lodash.default.toPairs(mapping)) {
57
45
  result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
58
46
  }
59
-
60
47
  return result;
61
48
  };
62
-
63
49
  if (this.apkStrings[language]) {
64
50
  return preprocessStringsMap(this.apkStrings[language]);
65
51
  }
66
-
67
52
  if (!this.opts.app && !this.opts.appPackage) {
68
53
  this.log.errorAndThrow("One of 'app' or 'appPackage' capabilities should must be specified");
69
54
  }
70
-
71
55
  let app = this.opts.app;
72
56
  const tmpRoot = await _support.tempDir.openDir();
73
-
74
57
  try {
75
58
  if (!app) {
76
59
  try {
@@ -79,11 +62,9 @@ commands.getStrings = async function (language) {
79
62
  this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);
80
63
  }
81
64
  }
82
-
83
65
  if (!(await _support.fs.exists(app))) {
84
66
  this.log.errorAndThrow(`The app at '${app}' does not exist`);
85
67
  }
86
-
87
68
  try {
88
69
  const {
89
70
  apkStrings
@@ -97,7 +78,6 @@ commands.getStrings = async function (language) {
97
78
  await _support.fs.rimraf(tmpRoot);
98
79
  }
99
80
  };
100
-
101
81
  commands.getDisplayDensity = async function getDisplayDensity() {
102
82
  return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});
103
83
  };
@@ -118,7 +98,6 @@ commands.getWindowRect = async function () {
118
98
  y: 0
119
99
  };
120
100
  };
121
-
122
101
  extensions.executeMobile = async function (mobileCommand, opts = {}) {
123
102
  const mobileCommandsMapping = {
124
103
  shell: 'mobileShell',
@@ -176,14 +155,11 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
176
155
  isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
177
156
  stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording'
178
157
  };
179
-
180
158
  if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
181
159
  throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
182
160
  }
183
-
184
161
  return await this[mobileCommandsMapping[mobileCommand]](opts);
185
162
  };
186
-
187
163
  commands.mobileViewportScreenshot = async function () {
188
164
  return await this.getViewportScreenshot();
189
165
  };
@@ -191,7 +167,6 @@ commands.mobileViewportScreenshot = async function () {
191
167
  commands.mobileViewPortRect = async function mobileViewPortRect() {
192
168
  return await this.getViewPortRect();
193
169
  };
194
-
195
170
  commands.setUrl = async function (url) {
196
171
  await this.adb.startUri(url, this.opts.appPackage);
197
172
  };
@@ -206,22 +181,20 @@ commands.mobileDeepLink = async function (opts = {}) {
206
181
  waitForLaunch
207
182
  });
208
183
  };
209
-
210
184
  commands.openNotifications = async function () {
211
185
  return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});
212
186
  };
213
-
214
187
  commands.updateSettings = async function (settings) {
215
188
  await this.settings.update(settings);
216
189
  await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {
217
190
  settings
218
191
  });
219
192
  };
220
-
221
193
  commands.getSettings = async function () {
222
194
  const driverSettings = this.settings.getSettings();
223
195
  const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');
224
- return { ...driverSettings,
196
+ return {
197
+ ...driverSettings,
225
198
  ...serverSettings
226
199
  };
227
200
  };
@@ -245,11 +218,9 @@ commands.mobileType = async function mobileType(opts = {}) {
245
218
  const {
246
219
  text
247
220
  } = opts;
248
-
249
221
  if (_lodash.default.isUndefined(text)) {
250
222
  this.log.errorAndThrow(`The 'text' argument is mandatory`);
251
223
  }
252
-
253
224
  return await this.adb.typeUnicode(text);
254
225
  };
255
226
 
@@ -257,12 +228,10 @@ commands.mobileInstallMultipleApks = async function (opts = {}) {
257
228
  if (!_lodash.default.isArray(opts.apks) || _lodash.default.isEmpty(opts.apks)) {
258
229
  throw new _driver.errors.InvalidArgumentError('No apks are given to install');
259
230
  }
260
-
261
231
  const apks = await _bluebird.default.all(opts.apks.map(app => this.helpers.configureApp(app, [_extensions.APK_EXTENSION])));
262
232
  await this.adb.installMultipleApks(apks, opts.options);
263
233
  };
264
-
265
234
  Object.assign(extensions, commands, helpers);
266
235
  var _default = extensions;
267
236
  exports.default = _default;
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7RUFDekMsT0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2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
237
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ2ZDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDYkMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQkQsUUFBUSxDQUFDRSxhQUFhLEdBQUcsa0JBQWtCO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUss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
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","names":["extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","configureApp","APK_EXTENSION","options","Object","assign"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { fs, tempDir } from 'appium/support';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"general.js","names":["extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","configureApp","APK_EXTENSION","options","Object","assign"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { fs, tempDir } from 'appium/support';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}