appium-android-driver 5.0.5 → 5.0.8

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 +0 -1
  2. package/build/lib/commands/actions.js +16 -20
  3. package/build/lib/commands/app-management.js +10 -18
  4. package/build/lib/commands/context.js +43 -56
  5. package/build/lib/commands/coverage.js +2 -6
  6. package/build/lib/commands/element.js +3 -9
  7. package/build/lib/commands/emu-console.js +3 -5
  8. package/build/lib/commands/execute.js +3 -6
  9. package/build/lib/commands/file-actions.js +22 -29
  10. package/build/lib/commands/general.js +18 -30
  11. package/build/lib/commands/ime.js +8 -21
  12. package/build/lib/commands/network.js +14 -27
  13. package/build/lib/commands/performance.js +3 -6
  14. package/build/lib/commands/recordscreen.js +27 -38
  15. package/build/lib/commands/shell.js +6 -7
  16. package/build/lib/commands/streamscreen.js +29 -43
  17. package/build/lib/commands/system-bars.js +10 -16
  18. package/build/lib/commands/touch.js +4 -10
  19. package/build/lib/driver.js +36 -60
  20. package/build/lib/webview-helpers.js +3 -3
  21. package/lib/commands/actions.js +18 -19
  22. package/lib/commands/app-management.js +10 -11
  23. package/lib/commands/context.js +33 -34
  24. package/lib/commands/coverage.js +1 -4
  25. package/lib/commands/element.js +2 -3
  26. package/lib/commands/emu-console.js +2 -2
  27. package/lib/commands/execute.js +2 -3
  28. package/lib/commands/file-actions.js +31 -25
  29. package/lib/commands/general.js +16 -18
  30. package/lib/commands/ime.js +7 -8
  31. package/lib/commands/network.js +15 -16
  32. package/lib/commands/performance.js +2 -3
  33. package/lib/commands/recordscreen.js +23 -22
  34. package/lib/commands/shell.js +6 -6
  35. package/lib/commands/streamscreen.js +22 -23
  36. package/lib/commands/system-bars.js +11 -10
  37. package/lib/commands/touch.js +3 -4
  38. package/lib/driver.js +35 -36
  39. package/lib/webview-helpers.js +3 -1
  40. package/package.json +2 -2
@@ -13,8 +13,6 @@ var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
13
13
 
14
14
  var _asyncbox = require("asyncbox");
15
15
 
16
- var _logger = _interopRequireDefault(require("../logger"));
17
-
18
16
  var _support = require("@appium/support");
19
17
 
20
18
  let commands = {},
@@ -101,17 +99,13 @@ commands.clear = async function clear(elementId) {
101
99
  }
102
100
 
103
101
  await this.click(elementId);
104
-
105
- _logger.default.debug(`Sending up to ${length} clear characters to device`);
106
-
102
+ this.log.debug(`Sending up to ${length} clear characters to device`);
107
103
  return await (0, _asyncbox.retryInterval)(5, 500, async () => {
108
104
  let remainingLength = length;
109
105
 
110
106
  while (remainingLength > 0) {
111
107
  let lengthToSend = remainingLength < 50 ? remainingLength : 50;
112
-
113
- _logger.default.debug(`Sending ${lengthToSend} clear characters to device`);
114
-
108
+ this.log.debug(`Sending ${lengthToSend} clear characters to device`);
115
109
  await this.adb.clearTextField(lengthToSend);
116
110
  remainingLength -= lengthToSend;
117
111
  }
@@ -228,4 +222,4 @@ var _default = extensions;
228
222
  exports.default = _default;require('source-map-support').install();
229
223
 
230
224
 
231
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJwIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImdldE5hbWUiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJzZXRFbGVtZW50VmFsdWUiLCJrZXlzIiwicmVwbGFjZSIsInRleHQiLCJBcnJheSIsImpvaW4iLCJwYXJhbXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZG9TZXRFbGVtZW50VmFsdWUiLCJzZXRWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwiY2xpY2siLCJhZGIiLCJpbnB1dFRleHQiLCJnZXRUZXh0IiwiY2xlYXIiLCJsZW5ndGgiLCJsb2dnZXIiLCJkZWJ1ZyIsInJlbWFpbmluZ0xlbmd0aCIsImxlbmd0aFRvU2VuZCIsImNsZWFyVGV4dEZpZWxkIiwiZ2V0TG9jYXRpb24iLCJnZXRMb2NhdGlvbkluVmlldyIsImdldFNpemUiLCJnZXRFbGVtZW50UmVjdCIsInRvdWNoTG9uZ0NsaWNrIiwieCIsInkiLCJkdXJhdGlvbiIsImFuZHJvaWRIZWxwZXJzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiY29tcGxleFRhcCIsInRhcENvdW50IiwidG91Y2hDb3VudCIsInRhcCIsImNvdW50IiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJpIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFB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R087QUFDTCxZQUFNLEtBQUtwQyxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsT0FBMUIsRUFBbUM7QUFBQ2tDLFFBQUFBLENBQUQ7QUFBSUMsUUFBQUE7QUFBSixPQUFuQyxDQUFOO0FBQ0Q7QUFDRjtBQUNGLENBWkQ7O0FBY0FnQixNQUFNLENBQUNDLE1BQVAsQ0FBYzFELFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFuZHJvaWRIZWxwZXJzIGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUgKGF0dHJpYnV0ZSwgZWxlbWVudElkKSB7XG4gIGxldCBwID0ge2F0dHJpYnV0ZSwgZWxlbWVudElkfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0QXR0cmlidXRlJywgcCk7XG59O1xuXG5jb21tYW5kcy5nZXROYW1lID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZSAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnY2xhc3NOYW1lJywgZWxlbWVudElkKTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnREaXNwbGF5ZWQgPSBhc3luYyBmdW5jdGlvbiBlbGVtZW50RGlzcGxheWVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdkaXNwbGF5ZWQnLCBlbGVtZW50SWQpID09PSAndHJ1ZSc7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIGVsZW1lbnRFbmFibGVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdlbmFibGVkJywgZWxlbWVudElkKSA9PT0gJ3RydWUnO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gZWxlbWVudFNlbGVjdGVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkgPT09ICd0cnVlJztcbn07XG5cbmhlbHBlcnMuc2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gc2V0RWxlbWVudFZhbHVlIChrZXlzLCBlbGVtZW50SWQsIHJlcGxhY2UgPSBmYWxzZSkge1xuICBsZXQgdGV4dCA9IGtleXM7XG4gIGlmIChrZXlzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICB0ZXh0ID0ga2V5cy5qb2luKCcnKTtcbiAgfVxuXG4gIGxldCBwYXJhbXMgPSB7XG4gICAgZWxlbWVudElkLFxuICAgIHRleHQsXG4gICAgcmVwbGFjZSxcbiAgICB1bmljb2RlS2V5Ym9hcmQ6IHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmRcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1NldEVsZW1lbnRWYWx1ZShwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb1NldEVsZW1lbnRWYWx1ZSBmcm9tIHNldEVsZW1lbnRWYWx1ZSBpcyBmb3IgcmV1c2luZyBzZXRFbGVtZW50VmFsdWVcbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIGFuZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLlxuICogT3RoZXIgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBuZWVkIHRvIG92ZXJyaWRlIGRvU2V0RWxlbWVudFZhbHVlXG4gKiB0byBmYWNpbGl0YXRlIHNldEVsZW1lbnRWYWx1ZS5cbiAqL1xuaGVscGVycy5kb1NldEVsZW1lbnRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIGRvU2V0RWxlbWVudFZhbHVlIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6c2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFZhbHVlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0RWxlbWVudFZhbHVlKGtleXMsIGVsZW1lbnRJZCwgZmFsc2UpO1xufTtcblxuY29tbWFuZHMucmVwbGFjZVZhbHVlID0gYXN5bmMgZnVuY3Rpb24gcmVwbGFjZVZhbHVlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0RWxlbWVudFZhbHVlKGtleXMsIGVsZW1lbnRJZCwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZUltbWVkaWF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFZhbHVlSW1tZWRpYXRlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgbGV0IHRleHQgPSBrZXlzO1xuICBpZiAoa2V5cyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgdGV4dCA9IGtleXMuam9pbignJyk7XG4gIH1cblxuICAvLyBmaXJzdCwgbWFrZSBzdXJlIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBlbGVtZW50XG4gIGF3YWl0IHRoaXMuY2xpY2soZWxlbWVudElkKTtcblxuICAvLyB0aGVuIHNlbmQgdGhyb3VnaCBhZGJcbiAgYXdhaXQgdGhpcy5hZGIuaW5wdXRUZXh0KHRleHQpO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldFRleHQgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRUZXh0Jywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiBjbGVhciAoZWxlbWVudElkKSB7XG4gIGxldCB0ZXh0ID0gKGF3YWl0IHRoaXMuZ2V0VGV4dChlbGVtZW50SWQpKSB8fCAnJztcbiAgbGV0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgLy8gaWYgbGVuZ3RoIGlzIHplcm8gdGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOlxuICAgIC8vICAgMS4gdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZFxuICAgIC8vICAgMi4gaXQgaXMgYSBwYXNzd29yZCBmaWVsZFxuICAgIC8vIHNpbmNlIHRoZXJlIGlzIGxpdHRsZSBvdmVyaGVhZCB0byB0aGUgYWRiIGNhbGwsIGRlbGV0ZSAxMDAgZWxlbWVudHNcbiAgICAvLyBpZiB3ZSBnZXQgemVybywganVzdCBpbiBjYXNlIGl0IGlzICMyXG4gICAgbGVuZ3RoID0gMTAwO1xuICB9XG4gIGF3YWl0IHRoaXMuY2xpY2soZWxlbWVudElkKTtcbiAgbG9nZ2VyLmRlYnVnKGBTZW5kaW5nIHVwIHRvICR7bGVuZ3RofSBjbGVhciBjaGFyYWN0ZXJzIHRvIGRldmljZWApO1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVtYWluaW5nTGVuZ3RoID0gbGVuZ3RoO1xuICAgIHdoaWxlIChyZW1haW5pbmdMZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbGVuZ3RoVG9TZW5kID0gcmVtYWluaW5nTGVuZ3RoIDwgNTAgPyByZW1haW5pbmdMZW5ndGggOiA1MDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2VuZGluZyAke2xlbmd0aFRvU2VuZH0gY2xlYXIgY2hhcmFjdGVycyB0byBkZXZpY2VgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmNsZWFyVGV4dEZpZWxkKGxlbmd0aFRvU2VuZCk7XG4gICAgICByZW1haW5pbmdMZW5ndGggLT0gbGVuZ3RoVG9TZW5kO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb21tYW5kcy5jbGljayA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Y2xpY2snLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldExvY2F0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0TG9jYXRpb24nLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbkluVmlldyA9IGFzeW5jIGZ1bmN0aW9uIGdldExvY2F0aW9uSW5WaWV3IChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24oZWxlbWVudElkKTtcbn07XG5cbmNvbW1hbmRzLmdldFNpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRTaXplIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0U2l6ZScsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RWxlbWVudFJlY3QgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRSZWN0Jywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMudG91Y2hMb25nQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiB0b3VjaExvbmdDbGljayAoZWxlbWVudElkLCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeSwgZHVyYXRpb259O1xuICBhbmRyb2lkSGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyhwYXJhbXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDp0b3VjaExvbmdDbGljaycsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaERvd24gPSBhc3luYyBmdW5jdGlvbiB0b3VjaERvd24gKGVsZW1lbnRJZCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeX07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoRG93bicsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaFVwID0gYXN5bmMgZnVuY3Rpb24gdG91Y2hVcCAoZWxlbWVudElkLCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudElkLCB4LCB5fTtcbiAgYW5kcm9pZEhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMocGFyYW1zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6dG91Y2hVcCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaE1vdmUgPSBhc3luYyBmdW5jdGlvbiB0b3VjaE1vdmUgKGVsZW1lbnRJZCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeX07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoTW92ZScsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5jb21wbGV4VGFwID0gYXN5bmMgZnVuY3Rpb24gY29tcGxleFRhcCAodGFwQ291bnQsIHRvdWNoQ291bnQsIGR1cmF0aW9uLCB4LCB5KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjbGljaycsIHt4LCB5fSk7XG59O1xuXG5jb21tYW5kcy50YXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkID0gbnVsbCwgeCA9IG51bGwsIHkgPSBudWxsLCBjb3VudCA9IDEpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIXV0aWwuaGFzVmFsdWUoeCkgJiYgIXV0aWwuaGFzVmFsdWUoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBlbGVtZW50IHRvIHRhcCBvciBib3RoIGFic29sdXRlIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudElkKSkge1xuICAgICAgLy8gRklYTUU6IGJvb3RzdHJhcCBpZ25vcmVzIHJlbGF0aXZlIGNvb3JkaW5hdGVzXG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmNsaWNrJywge2VsZW1lbnRJZCwgeCwgeX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjbGljaycsIHt4LCB5fSk7XG4gICAgfVxuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
225
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJwIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImdldE5hbWUiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJzZXRFbGVtZW50VmFsdWUiLCJrZXlzIiwicmVwbGFjZSIsInRleHQiLCJBcnJheSIsImpvaW4iLCJwYXJhbXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZG9TZXRFbGVtZW50VmFsdWUiLCJzZXRWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwiY2xpY2siLCJhZGIiLCJpbnB1dFRleHQiLCJnZXRUZXh0IiwiY2xlYXIiLCJsZW5ndGgiLCJsb2ciLCJkZWJ1ZyIsInJlbWFpbmluZ0xlbmd0aCIsImxlbmd0aFRvU2VuZCIsImNsZWFyVGV4dEZpZWxkIiwiZ2V0TG9jYXRpb24iLCJnZXRMb2NhdGlvbkluVmlldyIsImdldFNpemUiLCJnZXRFbGVtZW50UmVjdCIsInRvdWNoTG9uZ0NsaWNrIiwieCIsInkiLCJkdXJhdGlvbiIsImFuZHJvaWRIZWxwZXJzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiY29tcGxleFRhcCIsInRhcENvdW50IiwidG91Y2hDb3VudCIsInRhcCIsImNvdW50IiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJpIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7Ozs7QUFF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S0FIRCxNQUdPO0FBQ0wsWUFBTSxLQUFLcEMsU0FBTCxDQUFlQyxVQUFmLENBQTBCLE9BQTFCLEVBQW1DO0FBQUNrQyxRQUFBQSxDQUFEO0FBQUlDLFFBQUFBO0FBQUosT0FBbkMsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixDQVpEOztBQWNBZ0IsTUFBTSxDQUFDQyxNQUFQLENBQWMxRCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0QXR0cmlidXRlID0gYXN5bmMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlIChhdHRyaWJ1dGUsIGVsZW1lbnRJZCkge1xuICBsZXQgcCA9IHthdHRyaWJ1dGUsIGVsZW1lbnRJZH07XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmdldEF0dHJpYnV0ZScsIHApO1xufTtcblxuY29tbWFuZHMuZ2V0TmFtZSA9IGFzeW5jIGZ1bmN0aW9uIGdldE5hbWUgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBdHRyaWJ1dGUoJ2NsYXNzTmFtZScsIGVsZW1lbnRJZCk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RGlzcGxheWVkID0gYXN5bmMgZnVuY3Rpb24gZWxlbWVudERpc3BsYXllZCAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzcGxheWVkJywgZWxlbWVudElkKSA9PT0gJ3RydWUnO1xufTtcblxuY29tbWFuZHMuZWxlbWVudEVuYWJsZWQgPSBhc3luYyBmdW5jdGlvbiBlbGVtZW50RW5hYmxlZCAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZW5hYmxlZCcsIGVsZW1lbnRJZCkgPT09ICd0cnVlJztcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnRTZWxlY3RlZCA9IGFzeW5jIGZ1bmN0aW9uIGVsZW1lbnRTZWxlY3RlZCAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCBlbGVtZW50SWQpID09PSAndHJ1ZSc7XG59O1xuXG5oZWxwZXJzLnNldEVsZW1lbnRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldEVsZW1lbnRWYWx1ZSAoa2V5cywgZWxlbWVudElkLCByZXBsYWNlID0gZmFsc2UpIHtcbiAgbGV0IHRleHQgPSBrZXlzO1xuICBpZiAoa2V5cyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgdGV4dCA9IGtleXMuam9pbignJyk7XG4gIH1cblxuICBsZXQgcGFyYW1zID0ge1xuICAgIGVsZW1lbnRJZCxcbiAgICB0ZXh0LFxuICAgIHJlcGxhY2UsXG4gICAgdW5pY29kZUtleWJvYXJkOiB0aGlzLm9wdHMudW5pY29kZUtleWJvYXJkXG4gIH07XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZG9TZXRFbGVtZW50VmFsdWUocGFyYW1zKTtcbn07XG5cbi8qKlxuICogUmVhc29uIGZvciBpc29sYXRpbmcgZG9TZXRFbGVtZW50VmFsdWUgZnJvbSBzZXRFbGVtZW50VmFsdWUgaXMgZm9yIHJldXNpbmcgc2V0RWxlbWVudFZhbHVlXG4gKiBhY3Jvc3MgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBhbmQgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi5cbiAqIE90aGVyIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgbmVlZCB0byBvdmVycmlkZSBkb1NldEVsZW1lbnRWYWx1ZVxuICogdG8gZmFjaWxpdGF0ZSBzZXRFbGVtZW50VmFsdWUuXG4gKi9cbmhlbHBlcnMuZG9TZXRFbGVtZW50VmFsdWUgPSBhc3luYyBmdW5jdGlvbiBkb1NldEVsZW1lbnRWYWx1ZSAocGFyYW1zKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnNldFRleHQnLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWUgPSBhc3luYyBmdW5jdGlvbiBzZXRWYWx1ZSAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnNldEVsZW1lbnRWYWx1ZShrZXlzLCBlbGVtZW50SWQsIGZhbHNlKTtcbn07XG5cbmNvbW1hbmRzLnJlcGxhY2VWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VWYWx1ZSAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnNldEVsZW1lbnRWYWx1ZShrZXlzLCBlbGVtZW50SWQsIHRydWUpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWVJbW1lZGlhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRWYWx1ZUltbWVkaWF0ZSAoa2V5cywgZWxlbWVudElkKSB7XG4gIGxldCB0ZXh0ID0ga2V5cztcbiAgaWYgKGtleXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHRleHQgPSBrZXlzLmpvaW4oJycpO1xuICB9XG5cbiAgLy8gZmlyc3QsIG1ha2Ugc3VyZSB3ZSBhcmUgZm9jdXNlZCBvbiB0aGUgZWxlbWVudFxuICBhd2FpdCB0aGlzLmNsaWNrKGVsZW1lbnRJZCk7XG5cbiAgLy8gdGhlbiBzZW5kIHRocm91Z2ggYWRiXG4gIGF3YWl0IHRoaXMuYWRiLmlucHV0VGV4dCh0ZXh0KTtcbn07XG5cbmNvbW1hbmRzLmdldFRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRUZXh0IChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0VGV4dCcsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmNsZWFyID0gYXN5bmMgZnVuY3Rpb24gY2xlYXIgKGVsZW1lbnRJZCkge1xuICBsZXQgdGV4dCA9IChhd2FpdCB0aGlzLmdldFRleHQoZWxlbWVudElkKSkgfHwgJyc7XG4gIGxldCBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIC8vIGlmIGxlbmd0aCBpcyB6ZXJvIHRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllczpcbiAgICAvLyAgIDEuIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGRcbiAgICAvLyAgIDIuIGl0IGlzIGEgcGFzc3dvcmQgZmllbGRcbiAgICAvLyBzaW5jZSB0aGVyZSBpcyBsaXR0bGUgb3ZlcmhlYWQgdG8gdGhlIGFkYiBjYWxsLCBkZWxldGUgMTAwIGVsZW1lbnRzXG4gICAgLy8gaWYgd2UgZ2V0IHplcm8sIGp1c3QgaW4gY2FzZSBpdCBpcyAjMlxuICAgIGxlbmd0aCA9IDEwMDtcbiAgfVxuICBhd2FpdCB0aGlzLmNsaWNrKGVsZW1lbnRJZCk7XG4gIHRoaXMubG9nLmRlYnVnKGBTZW5kaW5nIHVwIHRvICR7bGVuZ3RofSBjbGVhciBjaGFyYWN0ZXJzIHRvIGRldmljZWApO1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVtYWluaW5nTGVuZ3RoID0gbGVuZ3RoO1xuICAgIHdoaWxlIChyZW1haW5pbmdMZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbGVuZ3RoVG9TZW5kID0gcmVtYWluaW5nTGVuZ3RoIDwgNTAgPyByZW1haW5pbmdMZW5ndGggOiA1MDtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZW5kaW5nICR7bGVuZ3RoVG9TZW5kfSBjbGVhciBjaGFyYWN0ZXJzIHRvIGRldmljZWApO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuY2xlYXJUZXh0RmllbGQobGVuZ3RoVG9TZW5kKTtcbiAgICAgIHJlbWFpbmluZ0xlbmd0aCAtPSBsZW5ndGhUb1NlbmQ7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLmNsaWNrID0gYXN5bmMgZnVuY3Rpb24gY2xpY2sgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpjbGljaycsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldExvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0TG9jYXRpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRMb2NhdGlvbicsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldExvY2F0aW9uSW5WaWV3ID0gYXN5bmMgZnVuY3Rpb24gZ2V0TG9jYXRpb25JblZpZXcgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbihlbGVtZW50SWQpO1xufTtcblxuY29tbWFuZHMuZ2V0U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFNpemUgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRTaXplJywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFJlY3QgPSBhc3luYyBmdW5jdGlvbiBnZXRFbGVtZW50UmVjdCAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmdldFJlY3QnLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy50b3VjaExvbmdDbGljayA9IGFzeW5jIGZ1bmN0aW9uIHRvdWNoTG9uZ0NsaWNrIChlbGVtZW50SWQsIHgsIHksIGR1cmF0aW9uKSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudElkLCB4LCB5LCBkdXJhdGlvbn07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoTG9uZ0NsaWNrJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoRG93biA9IGFzeW5jIGZ1bmN0aW9uIHRvdWNoRG93biAoZWxlbWVudElkLCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudElkLCB4LCB5fTtcbiAgYW5kcm9pZEhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMocGFyYW1zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6dG91Y2hEb3duJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoVXAgPSBhc3luYyBmdW5jdGlvbiB0b3VjaFVwIChlbGVtZW50SWQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50SWQsIHgsIHl9O1xuICBhbmRyb2lkSGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyhwYXJhbXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDp0b3VjaFVwJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTW92ZSA9IGFzeW5jIGZ1bmN0aW9uIHRvdWNoTW92ZSAoZWxlbWVudElkLCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudElkLCB4LCB5fTtcbiAgYW5kcm9pZEhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMocGFyYW1zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6dG91Y2hNb3ZlJywgcGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmNvbXBsZXhUYXAgPSBhc3luYyBmdW5jdGlvbiBjb21wbGV4VGFwICh0YXBDb3VudCwgdG91Y2hDb3VudCwgZHVyYXRpb24sIHgsIHkpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NsaWNrJywge3gsIHl9KTtcbn07XG5cbmNvbW1hbmRzLnRhcCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQgPSBudWxsLCB4ID0gbnVsbCwgeSA9IG51bGwsIGNvdW50ID0gMSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoZWxlbWVudElkKSAmJiAhdXRpbC5oYXNWYWx1ZSh4KSAmJiAhdXRpbC5oYXNWYWx1ZSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIGVsZW1lbnQgdG8gdGFwIG9yIGJvdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIGRlZmluZWRgKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShlbGVtZW50SWQpKSB7XG4gICAgICAvLyBGSVhNRTogYm9vdHN0cmFwIGlnbm9yZXMgcmVsYXRpdmUgY29vcmRpbmF0ZXNcbiAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Y2xpY2snLCB7ZWxlbWVudElkLCB4LCB5fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NsaWNrJywge3gsIHl9KTtcbiAgICB9XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -9,7 +7,7 @@ exports.default = exports.commands = void 0;
9
7
 
10
8
  require("source-map-support/register");
11
9
 
12
- var _logger = _interopRequireDefault(require("../logger"));
10
+ var _baseDriver = require("@appium/base-driver");
13
11
 
14
12
  const EMU_CONSOLE_FEATURE = 'emulator_console';
15
13
  const commands = {};
@@ -25,7 +23,7 @@ commands.mobileExecEmuConsoleCommand = async function mobileExecEmuConsoleComman
25
23
  } = opts;
26
24
 
27
25
  if (!command) {
28
- _logger.default.errorAndThrow(`The 'command' argument is mandatory`);
26
+ throw new _baseDriver.errors.InvalidArgumentError(`The 'command' argument is mandatory`);
29
27
  }
30
28
 
31
29
  return await this.adb.execEmuConsoleCommand(command, {
@@ -39,4 +37,4 @@ var _default = commands;
39
37
  exports.default = _default;require('source-map-support').install();
40
38
 
41
39
 
42
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbXUtY29uc29sZS5qcyJdLCJuYW1lcyI6WyJFTVVfQ09OU09MRV9GRUFUVVJFIiwiY29tbWFuZHMiLCJtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQiLCJvcHRzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJjb21tYW5kIiwiZXhlY1RpbWVvdXQiLCJjb25uVGltZW91dCIsImluaXRUaW1lb3V0IiwibG9nIiwiZXJyb3JBbmRUaHJvdyIsImFkYiIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxtQkFBbUIsR0FBRyxrQkFBNUI7QUFFQSxNQUFNQyxRQUFRLEdBQUcsRUFBakI7OztBQXdCQUEsUUFBUSxDQUFDQywyQkFBVCxHQUF1QyxlQUFlQSwyQkFBZixDQUE0Q0MsSUFBSSxHQUFHLEVBQW5ELEVBQXVEO0FBQzVGLE9BQUtDLG9CQUFMLENBQTBCSixtQkFBMUI7QUFFQSxRQUFNO0FBQ0pLLElBQUFBLE9BREk7QUFFSkMsSUFBQUEsV0FGSTtBQUdKQyxJQUFBQSxXQUhJO0FBSUpDLElBQUFBO0FBSkksTUFLRkwsSUFMSjs7QUFPQSxNQUFJLENBQUNFLE9BQUwsRUFBYztBQUNaSSxvQkFBSUMsYUFBSixDQUFtQixxQ0FBbkI7QUFDRDs7QUFFRCxTQUFPLE1BQU0sS0FBS0MsR0FBTCxDQUFTQyxxQkFBVCxDQUErQlAsT0FBL0IsRUFBd0M7QUFDbkRDLElBQUFBLFdBRG1EO0FBRW5EQyxJQUFBQSxXQUZtRDtBQUduREMsSUFBQUE7QUFIbUQsR0FBeEMsQ0FBYjtBQUtELENBbkJEOztlQXNCZVAsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgRU1VX0NPTlNPTEVfRkVBVFVSRSA9ICdlbXVsYXRvcl9jb25zb2xlJztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFeGVjT3B0aW9uc1xuICogQHByb3BlcnR5IHshQXJyYXk8c3RyaW5nPnxzdHJpbmd9IGNvbW1hbmQgLSBUaGUgYWN0dWFsIGNvbW1hbmQgdG8gZXhlY3V0ZS4gU2VlXG4gKiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9zdHVkaW8vcnVuL2VtdWxhdG9yLWNvbnNvbGUgZm9yIG1vcmUgZGV0YWlsc1xuICogb24gYXZhaWxhYmxlIGNvbW1hbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXhlY1RpbWVvdXQgWzYwMDAwXSBBIHRpbWVvdXQgdXNlZCB0byB3YWl0IGZvciBhIHNlcnZlclxuICogcmVwbHkgdG8gdGhlIGdpdmVuIGNvbW1hbmQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29ublRpbWVvdXQgWzUwMDBdIENvbnNvbGUgY29ubmVjdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGluaXRUaW1lb3V0IFs1MDAwXSBUZWxuZXQgY29uc29sZSBpbml0aWFsaXphdGlvbiB0aW1lb3V0XG4gKiBpbiBtaWxsaXNlY29uZHMgKHRoZSB0aW1lIGJldHdlZW4gdGhlIGNvbm5lY3Rpb24gaGFwcGVucyBhbmQgdGhlIGNvbW1hbmQgcHJvbXB0XG4gKiBpcyBhdmFpbGFibGUpXG4gKi9cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQgdGhyb3VnaCBlbXVsYXRvciB0ZWxuZXQgY29uc29sZSBpbnRlcmZhY2UgYW5kIHJldHVybnMgaXRzIG91dHB1dC5cbiAqIFRoZSBgZW11bGF0b3JfY29uc29sZWAgc2VydmVyIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGlzIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge0V4ZWNPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tbWFuZCBvdXRwdXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY29ubmVjdGluZyB0byB0aGUgVGVsbmV0IGNvbnNvbGVcbiAqIG9yIGlmIHRoZSBnaXZlbiBjb21tYW5kIHJldHVybmVkIG5vbi1PSyByZXNwb25zZVxuICovXG5jb21tYW5kcy5tb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQgKG9wdHMgPSB7fSkge1xuICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKEVNVV9DT05TT0xFX0ZFQVRVUkUpO1xuXG4gIGNvbnN0IHtcbiAgICBjb21tYW5kLFxuICAgIGV4ZWNUaW1lb3V0LFxuICAgIGNvbm5UaW1lb3V0LFxuICAgIGluaXRUaW1lb3V0LFxuICB9ID0gb3B0cztcblxuICBpZiAoIWNvbW1hbmQpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlICdjb21tYW5kJyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5leGVjRW11Q29uc29sZUNvbW1hbmQoY29tbWFuZCwge1xuICAgIGV4ZWNUaW1lb3V0LFxuICAgIGNvbm5UaW1lb3V0LFxuICAgIGluaXRUaW1lb3V0LFxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2VtdS1jb25zb2xlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
40
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbXUtY29uc29sZS5qcyJdLCJuYW1lcyI6WyJFTVVfQ09OU09MRV9GRUFUVVJFIiwiY29tbWFuZHMiLCJtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQiLCJvcHRzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJjb21tYW5kIiwiZXhlY1RpbWVvdXQiLCJjb25uVGltZW91dCIsImluaXRUaW1lb3V0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJhZGIiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLG1CQUFtQixHQUFHLGtCQUE1QjtBQUVBLE1BQU1DLFFBQVEsR0FBRyxFQUFqQjs7O0FBd0JBQSxRQUFRLENBQUNDLDJCQUFULEdBQXVDLGVBQWVBLDJCQUFmLENBQTRDQyxJQUFJLEdBQUcsRUFBbkQsRUFBdUQ7QUFDNUYsT0FBS0Msb0JBQUwsQ0FBMEJKLG1CQUExQjtBQUVBLFFBQU07QUFDSkssSUFBQUEsT0FESTtBQUVKQyxJQUFBQSxXQUZJO0FBR0pDLElBQUFBLFdBSEk7QUFJSkMsSUFBQUE7QUFKSSxNQUtGTCxJQUxKOztBQU9BLE1BQUksQ0FBQ0UsT0FBTCxFQUFjO0FBQ1osVUFBTSxJQUFJSSxtQkFBT0Msb0JBQVgsQ0FBaUMscUNBQWpDLENBQU47QUFDRDs7QUFFRCxTQUFPLE1BQU0sS0FBS0MsR0FBTCxDQUFTQyxxQkFBVCxDQUErQlAsT0FBL0IsRUFBd0M7QUFDbkRDLElBQUFBLFdBRG1EO0FBRW5EQyxJQUFBQSxXQUZtRDtBQUduREMsSUFBQUE7QUFIbUQsR0FBeEMsQ0FBYjtBQUtELENBbkJEOztlQXNCZVAsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuXG5jb25zdCBFTVVfQ09OU09MRV9GRUFUVVJFID0gJ2VtdWxhdG9yX2NvbnNvbGUnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4ZWNPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFBcnJheTxzdHJpbmc+fHN0cmluZ30gY29tbWFuZCAtIFRoZSBhY3R1YWwgY29tbWFuZCB0byBleGVjdXRlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9ydW4vZW11bGF0b3ItY29uc29sZSBmb3IgbW9yZSBkZXRhaWxzXG4gKiBvbiBhdmFpbGFibGUgY29tbWFuZHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBleGVjVGltZW91dCBbNjAwMDBdIEEgdGltZW91dCB1c2VkIHRvIHdhaXQgZm9yIGEgc2VydmVyXG4gKiByZXBseSB0byB0aGUgZ2l2ZW4gY29tbWFuZCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25uVGltZW91dCBbNTAwMF0gQ29uc29sZSBjb25uZWN0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5pdFRpbWVvdXQgWzUwMDBdIFRlbG5ldCBjb25zb2xlIGluaXRpYWxpemF0aW9uIHRpbWVvdXRcbiAqIGluIG1pbGxpc2Vjb25kcyAodGhlIHRpbWUgYmV0d2VlbiB0aGUgY29ubmVjdGlvbiBoYXBwZW5zIGFuZCB0aGUgY29tbWFuZCBwcm9tcHRcbiAqIGlzIGF2YWlsYWJsZSlcbiAqL1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZCB0aHJvdWdoIGVtdWxhdG9yIHRlbG5ldCBjb25zb2xlIGludGVyZmFjZSBhbmQgcmV0dXJucyBpdHMgb3V0cHV0LlxuICogVGhlIGBlbXVsYXRvcl9jb25zb2xlYCBzZXJ2ZXIgZmVhdHVyZSBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoaXMgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7RXhlY09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21tYW5kIG91dHB1dFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBjb25uZWN0aW5nIHRvIHRoZSBUZWxuZXQgY29uc29sZVxuICogb3IgaWYgdGhlIGdpdmVuIGNvbW1hbmQgcmV0dXJuZWQgbm9uLU9LIHJlc3BvbnNlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCAob3B0cyA9IHt9KSB7XG4gIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoRU1VX0NPTlNPTEVfRkVBVFVSRSk7XG5cbiAgY29uc3Qge1xuICAgIGNvbW1hbmQsXG4gICAgZXhlY1RpbWVvdXQsXG4gICAgY29ublRpbWVvdXQsXG4gICAgaW5pdFRpbWVvdXQsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghY29tbWFuZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFRoZSAnY29tbWFuZCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZXhlY0VtdUNvbnNvbGVDb21tYW5kKGNvbW1hbmQsIHtcbiAgICBleGVjVGltZW91dCxcbiAgICBjb25uVGltZW91dCxcbiAgICBpbml0VGltZW91dCxcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9lbXUtY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -13,14 +13,11 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _baseDriver = require("@appium/base-driver");
15
15
 
16
- var _logger = _interopRequireDefault(require("../logger"));
17
-
18
- let extensions = {};
16
+ const extensions = {};
19
17
 
20
18
  extensions.execute = async function execute(script, args) {
21
19
  if (script.match(/^mobile:/)) {
22
- _logger.default.info(`Executing native command '${script}'`);
23
-
20
+ this.log.info(`Executing native command '${script}'`);
24
21
  script = script.replace(/^mobile:/, '').trim();
25
22
  return await this.executeMobile(script, _lodash.default.isArray(args) ? args[0] : args);
26
23
  }
@@ -73,4 +70,4 @@ var _default = extensions;
73
70
  exports.default = _default;require('source-map-support').install();
74
71
 
75
72
 
76
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJleGVjdXRlIiwic2NyaXB0IiwiYXJncyIsIm1hdGNoIiwibG9nZ2VyIiwiaW5mbyIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsIl8iLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImVuZHBvaW50IiwiY2hyb21lZHJpdmVyIiwiandwcm94eSIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJjb21tYW5kIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJtb2JpbGVDb21tYW5kc01hcHBpbmciLCJzaGVsbCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJzZW5zb3JTZXQiLCJnZXREZXZpY2VUaW1lIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJkZWxldGVGaWxlIiwiY2xlYXJBcHAiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsInN0YXJ0QWN0aXZpdHkiLCJicm9hZGNhc3QiLCJnZXRDb250ZXh0cyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjs7QUFFQUEsVUFBVSxDQUFDQyxPQUFYLEdBQXFCLGVBQWVBLE9BQWYsQ0FBd0JDLE1BQXhCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUN6RCxNQUFJRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxVQUFiLENBQUosRUFBOEI7QUFDNUJDLG9CQUFPQyxJQUFQLENBQWEsNkJBQTRCSixNQUFPLEdBQWhEOztBQUNBQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ssT0FBUCxDQUFlLFVBQWYsRUFBMkIsRUFBM0IsRUFBK0JDLElBQS9CLEVBQVQ7QUFDQSxXQUFPLE1BQU0sS0FBS0MsYUFBTCxDQUFtQlAsTUFBbkIsRUFBMkJRLGdCQUFFQyxPQUFGLENBQVVSLElBQVYsSUFBa0JBLElBQUksQ0FBQyxDQUFELENBQXRCLEdBQTRCQSxJQUF2RCxDQUFiO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDLEtBQUtTLFlBQUwsRUFBTCxFQUEwQjtBQUN4QixVQUFNLElBQUlDLG1CQUFPQyxtQkFBWCxFQUFOO0FBQ0Q7O0FBQ0QsUUFBTUMsUUFBUSxHQUFHLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxrQkFBMUIsS0FBaURDLHNCQUFVQyxPQUEzRCxHQUNiLFVBRGEsR0FFYixlQUZKO0FBR0EsU0FBTyxNQUFNLEtBQUtKLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCSSxPQUExQixDQUFrQ04sUUFBbEMsRUFBNEMsTUFBNUMsRUFBb0Q7QUFDL0RiLElBQUFBLE1BRCtEO0FBRS9EQyxJQUFBQTtBQUYrRCxHQUFwRCxDQUFiO0FBSUQsQ0FoQkQ7O0FBa0JBSCxVQUFVLENBQUNTLGFBQVgsR0FBMkIsZUFBZUEsYUFBZixDQUE4QmEsYUFBOUIsRUFBNkNDLElBQUksR0FBRyxFQUFwRCxFQUF3RDtBQUNqRixRQUFNQyxxQkFBcUIsR0FBRztBQUM1QkMsSUFBQUEsS0FBSyxFQUFFLGFBRHFCO0FBRzVCQyxJQUFBQSxxQkFBcUIsRUFBRSw2QkFISztBQUs1QkMsSUFBQUEsa0JBQWtCLEVBQUUsMEJBTFE7QUFNNUJDLElBQUFBLGlCQUFpQixFQUFFLHlCQU5TO0FBUTVCQyxJQUFBQSxpQkFBaUIsRUFBRSx5QkFSUztBQVM1QkMsSUFBQUEsY0FBYyxFQUFFLHNCQVRZO0FBVzVCQyxJQUFBQSxtQkFBbUIsRUFBRSwyQkFYTztBQWE1QkMsSUFBQUEsU0FBUyxFQUFFLFdBYmlCO0FBZTVCQyxJQUFBQSxhQUFhLEVBQUUscUJBZmE7QUFpQjVCQyxJQUFBQSxvQkFBb0IsRUFBRSw0QkFqQk07QUFrQjVCQyxJQUFBQSxtQkFBbUIsRUFBRSwyQkFsQk87QUFvQjVCQyxJQUFBQSxnQkFBZ0IsRUFBRSx3QkFwQlU7QUFzQjVCQyxJQUFBQSxPQUFPLEVBQUUsZUF0Qm1CO0FBd0I1QkMsSUFBQUEsVUFBVSxFQUFFLGtCQXhCZ0I7QUEwQjVCQyxJQUFBQSxRQUFRLEVBQUUsZ0JBMUJrQjtBQTRCNUJDLElBQUFBLFlBQVksRUFBRSxvQkE1QmM7QUE2QjVCQyxJQUFBQSxXQUFXLEVBQUUsbUJBN0JlO0FBOEI1QkMsSUFBQUEsYUFBYSxFQUFFLHFCQTlCYTtBQStCNUJDLElBQUFBLFNBQVMsRUFBRSxpQkEvQmlCO0FBaUM1QkMsSUFBQUEsV0FBVyxFQUFFLG1CQWpDZTtBQW1DNUJDLElBQUFBLE1BQU0sRUFBRSxjQW5Db0I7QUFxQzVCQyxJQUFBQSxlQUFlLEVBQUU7QUFyQ1csR0FBOUI7O0FBd0NBLE1BQUksQ0FBQ3BDLGdCQUFFcUMsR0FBRixDQUFNdkIscUJBQU4sRUFBNkJGLGFBQTdCLENBQUwsRUFBa0Q7QUFDaEQsVUFBTSxJQUFJVCxtQkFBT21DLG1CQUFYLENBQWdDLDJCQUEwQjFCLGFBQWMsS0FBekMsR0FDbEMsUUFBT1osZ0JBQUV1QyxJQUFGLENBQU96QixxQkFBUCxDQUE4QiwwQkFEbEMsQ0FBTjtBQUVEOztBQUNELFNBQU8sTUFBTSxLQUFLQSxxQkFBcUIsQ0FBQ0YsYUFBRCxDQUExQixFQUEyQ0MsSUFBM0MsQ0FBYjtBQUNELENBOUNEOztlQWdEZXZCLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzLCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBsb2dnZXIuaW5mbyhgRXhlY3V0aW5nIG5hdGl2ZSBjb21tYW5kICcke3NjcmlwdH0nYCk7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQXG4gICAgPyAnL2V4ZWN1dGUnXG4gICAgOiAnL2V4ZWN1dGUvc3luYyc7XG4gIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHNjcmlwdCxcbiAgICBhcmdzLFxuICB9KTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBtb2JpbGVDb21tYW5kc01hcHBpbmcgPSB7XG4gICAgc2hlbGw6ICdtb2JpbGVTaGVsbCcsXG5cbiAgICBleGVjRW11Q29uc29sZUNvbW1hbmQ6ICdtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhtb2JpbGVDb21tYW5kc01hcHBpbmcsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kIFwiJHttb2JpbGVDb21tYW5kfVwiLiBgICtcbiAgICAgIGBPbmx5ICR7Xy5rZXlzKG1vYmlsZUNvbW1hbmRzTWFwcGluZyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbbW9iaWxlQ29tbWFuZHNNYXBwaW5nW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
73
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJleGVjdXRlIiwic2NyaXB0IiwiYXJncyIsIm1hdGNoIiwibG9nIiwiaW5mbyIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsIl8iLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImVuZHBvaW50IiwiY2hyb21lZHJpdmVyIiwiandwcm94eSIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJjb21tYW5kIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJtb2JpbGVDb21tYW5kc01hcHBpbmciLCJzaGVsbCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJzZW5zb3JTZXQiLCJnZXREZXZpY2VUaW1lIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJkZWxldGVGaWxlIiwiY2xlYXJBcHAiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsInN0YXJ0QWN0aXZpdHkiLCJicm9hZGNhc3QiLCJnZXRDb250ZXh0cyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLFVBQVUsR0FBRyxFQUFuQjs7QUFFQUEsVUFBVSxDQUFDQyxPQUFYLEdBQXFCLGVBQWVBLE9BQWYsQ0FBd0JDLE1BQXhCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUN6RCxNQUFJRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxVQUFiLENBQUosRUFBOEI7QUFDNUIsU0FBS0MsR0FBTCxDQUFTQyxJQUFULENBQWUsNkJBQTRCSixNQUFPLEdBQWxEO0FBQ0FBLElBQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDSyxPQUFQLENBQWUsVUFBZixFQUEyQixFQUEzQixFQUErQkMsSUFBL0IsRUFBVDtBQUNBLFdBQU8sTUFBTSxLQUFLQyxhQUFMLENBQW1CUCxNQUFuQixFQUEyQlEsZ0JBQUVDLE9BQUYsQ0FBVVIsSUFBVixJQUFrQkEsSUFBSSxDQUFDLENBQUQsQ0FBdEIsR0FBNEJBLElBQXZELENBQWI7QUFDRDs7QUFDRCxNQUFJLENBQUMsS0FBS1MsWUFBTCxFQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSUMsbUJBQU9DLG1CQUFYLEVBQU47QUFDRDs7QUFDRCxRQUFNQyxRQUFRLEdBQUcsS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLGtCQUExQixLQUFpREMsc0JBQVVDLE9BQTNELEdBQ2IsVUFEYSxHQUViLGVBRko7QUFHQSxTQUFPLE1BQU0sS0FBS0osWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJJLE9BQTFCLENBQWtDTixRQUFsQyxFQUE0QyxNQUE1QyxFQUFvRDtBQUMvRGIsSUFBQUEsTUFEK0Q7QUFFL0RDLElBQUFBO0FBRitELEdBQXBELENBQWI7QUFJRCxDQWhCRDs7QUFrQkFILFVBQVUsQ0FBQ1MsYUFBWCxHQUEyQixlQUFlQSxhQUFmLENBQThCYSxhQUE5QixFQUE2Q0MsSUFBSSxHQUFHLEVBQXBELEVBQXdEO0FBQ2pGLFFBQU1DLHFCQUFxQixHQUFHO0FBQzVCQyxJQUFBQSxLQUFLLEVBQUUsYUFEcUI7QUFHNUJDLElBQUFBLHFCQUFxQixFQUFFLDZCQUhLO0FBSzVCQyxJQUFBQSxrQkFBa0IsRUFBRSwwQkFMUTtBQU01QkMsSUFBQUEsaUJBQWlCLEVBQUUseUJBTlM7QUFRNUJDLElBQUFBLGlCQUFpQixFQUFFLHlCQVJTO0FBUzVCQyxJQUFBQSxjQUFjLEVBQUUsc0JBVFk7QUFXNUJDLElBQUFBLG1CQUFtQixFQUFFLDJCQVhPO0FBYTVCQyxJQUFBQSxTQUFTLEVBQUUsV0FiaUI7QUFlNUJDLElBQUFBLGFBQWEsRUFBRSxxQkFmYTtBQWlCNUJDLElBQUFBLG9CQUFvQixFQUFFLDRCQWpCTTtBQWtCNUJDLElBQUFBLG1CQUFtQixFQUFFLDJCQWxCTztBQW9CNUJDLElBQUFBLGdCQUFnQixFQUFFLHdCQXBCVTtBQXNCNUJDLElBQUFBLE9BQU8sRUFBRSxlQXRCbUI7QUF3QjVCQyxJQUFBQSxVQUFVLEVBQUUsa0JBeEJnQjtBQTBCNUJDLElBQUFBLFFBQVEsRUFBRSxnQkExQmtCO0FBNEI1QkMsSUFBQUEsWUFBWSxFQUFFLG9CQTVCYztBQTZCNUJDLElBQUFBLFdBQVcsRUFBRSxtQkE3QmU7QUE4QjVCQyxJQUFBQSxhQUFhLEVBQUUscUJBOUJhO0FBK0I1QkMsSUFBQUEsU0FBUyxFQUFFLGlCQS9CaUI7QUFpQzVCQyxJQUFBQSxXQUFXLEVBQUUsbUJBakNlO0FBbUM1QkMsSUFBQUEsTUFBTSxFQUFFLGNBbkNvQjtBQXFDNUJDLElBQUFBLGVBQWUsRUFBRTtBQXJDVyxHQUE5Qjs7QUF3Q0EsTUFBSSxDQUFDcEMsZ0JBQUVxQyxHQUFGLENBQU12QixxQkFBTixFQUE2QkYsYUFBN0IsQ0FBTCxFQUFrRDtBQUNoRCxVQUFNLElBQUlULG1CQUFPbUMsbUJBQVgsQ0FBZ0MsMkJBQTBCMUIsYUFBYyxLQUF6QyxHQUNsQyxRQUFPWixnQkFBRXVDLElBQUYsQ0FBT3pCLHFCQUFQLENBQThCLDBCQURsQyxDQUFOO0FBRUQ7O0FBQ0QsU0FBTyxNQUFNLEtBQUtBLHFCQUFxQixDQUFDRixhQUFELENBQTFCLEVBQTJDQyxJQUEzQyxDQUFiO0FBQ0QsQ0E5Q0Q7O2VBZ0RldkIsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMsIFBST1RPQ09MUyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuXG5jb25zdCBleHRlbnNpb25zID0ge307XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgRXhlY3V0aW5nIG5hdGl2ZSBjb21tYW5kICcke3NjcmlwdH0nYCk7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQXG4gICAgPyAnL2V4ZWN1dGUnXG4gICAgOiAnL2V4ZWN1dGUvc3luYyc7XG4gIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHNjcmlwdCxcbiAgICBhcmdzLFxuICB9KTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBtb2JpbGVDb21tYW5kc01hcHBpbmcgPSB7XG4gICAgc2hlbGw6ICdtb2JpbGVTaGVsbCcsXG5cbiAgICBleGVjRW11Q29uc29sZUNvbW1hbmQ6ICdtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhtb2JpbGVDb21tYW5kc01hcHBpbmcsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kIFwiJHttb2JpbGVDb21tYW5kfVwiLiBgICtcbiAgICAgIGBPbmx5ICR7Xy5rZXlzKG1vYmlsZUNvbW1hbmRzTWFwcGluZyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbbW9iaWxlQ29tbWFuZHNNYXBwaW5nW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -13,10 +13,10 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
14
  var _support = require("@appium/support");
15
15
 
16
- var _logger = _interopRequireDefault(require("../logger"));
17
-
18
16
  var _path = _interopRequireDefault(require("path"));
19
17
 
18
+ var _baseDriver = require("@appium/base-driver");
19
+
20
20
  const CONTAINER_PATH_MARKER = '@';
21
21
  const CONTAINER_PATH_PATTERN = new RegExp(`^${CONTAINER_PATH_MARKER}([^/]+)/(.+)`);
22
22
  const ANDROID_MEDIA_RESCAN_INTENT = 'android.intent.action.MEDIA_SCANNER_SCAN_FILE';
@@ -27,14 +27,14 @@ function parseContainerPath(remotePath) {
27
27
  const match = CONTAINER_PATH_PATTERN.exec(remotePath);
28
28
 
29
29
  if (!match) {
30
- _logger.default.errorAndThrow(`It is expected that package identifier is separated from the relative path with a single slash. ` + `'${remotePath}' is given instead`);
30
+ throw new Error(`It is expected that package identifier is separated from the relative path with a single slash. ` + `'${remotePath}' is given instead`);
31
31
  }
32
32
 
33
33
  return [match[1], _path.default.posix.resolve(`/data/data/${match[1]}`, match[2])];
34
34
  }
35
35
 
36
- async function scanMedia(adb, remotePath) {
37
- _logger.default.debug(`Performing media scan of '${remotePath}'`);
36
+ async function scanMedia(adb, remotePath, log = null) {
37
+ log === null || log === void 0 ? void 0 : log.debug(`Performing media scan of '${remotePath}'`);
38
38
 
39
39
  try {
40
40
  if ((await adb.getApiLevel()) >= 29) {
@@ -43,7 +43,7 @@ async function scanMedia(adb, remotePath) {
43
43
  await adb.shell(['am', 'broadcast', '-a', ANDROID_MEDIA_RESCAN_INTENT, '-d', `file://${remotePath}`]);
44
44
  }
45
45
  } catch (e) {
46
- _logger.default.warn(`Ignoring an unexpected error upon media scanning of '${remotePath}': ${e.stderr || e.message}`);
46
+ log === null || log === void 0 ? void 0 : log.warn(`Ignoring an unexpected error upon media scanning of '${remotePath}': ${e.stderr || e.message}`);
47
47
  }
48
48
  }
49
49
 
@@ -53,23 +53,21 @@ function escapePath(p) {
53
53
 
54
54
  commands.pullFile = async function pullFile(remotePath) {
55
55
  if (remotePath.endsWith('/')) {
56
- _logger.default.errorAndThrow(`It is expected that remote path points to a file and not to a folder. ` + `'${remotePath}' is given instead`);
56
+ throw new _baseDriver.errors.InvalidArgumentError(`It is expected that remote path points to a file and not to a folder. ` + `'${remotePath}' is given instead`);
57
57
  }
58
58
 
59
59
  let tmpDestination = null;
60
60
 
61
61
  if (remotePath.startsWith(CONTAINER_PATH_MARKER)) {
62
62
  const [packageId, pathInContainer] = parseContainerPath(remotePath);
63
-
64
- _logger.default.debug(`Parsed package identifier '${packageId}' from '${remotePath}'. Will get the data from '${pathInContainer}'`);
65
-
63
+ this.log.debug(`Parsed package identifier '${packageId}' from '${remotePath}'. Will get the data from '${pathInContainer}'`);
66
64
  tmpDestination = `/data/local/tmp/${_path.default.posix.basename(pathInContainer)}`;
67
65
 
68
66
  try {
69
67
  await this.adb.shell(['run-as', packageId, `chmod 777 '${escapePath(pathInContainer)}'`]);
70
68
  await this.adb.shell(['run-as', packageId, `cp -f '${escapePath(pathInContainer)}' '${escapePath(tmpDestination)}'`]);
71
69
  } catch (e) {
72
- _logger.default.errorAndThrow(`Cannot access the container of '${packageId}' application. ` + `Is the application installed and has 'debuggable' build option set to true? ` + `Original error: ${e.message}`);
70
+ this.log.errorAndThrow(`Cannot access the container of '${packageId}' application. ` + `Is the application installed and has 'debuggable' build option set to true? ` + `Original error: ${e.message}`);
73
71
  }
74
72
  }
75
73
 
@@ -94,7 +92,7 @@ commands.pullFile = async function pullFile(remotePath) {
94
92
 
95
93
  commands.pushFile = async function pushFile(remotePath, base64Data) {
96
94
  if (remotePath.endsWith('/')) {
97
- _logger.default.errorAndThrow(`It is expected that remote path points to a file and not to a folder. ` + `'${remotePath}' is given instead`);
95
+ throw new _baseDriver.errors.InvalidArgumentError(`It is expected that remote path points to a file and not to a folder. ` + `'${remotePath}' is given instead`);
98
96
  }
99
97
 
100
98
  const localFile = await _support.tempDir.path({
@@ -114,9 +112,7 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
114
112
 
115
113
  if (remotePath.startsWith(CONTAINER_PATH_MARKER)) {
116
114
  const [packageId, pathInContainer] = parseContainerPath(remotePath);
117
-
118
- _logger.default.debug(`Parsed package identifier '${packageId}' from '${remotePath}'. Will put the data into '${pathInContainer}'`);
119
-
115
+ this.log.debug(`Parsed package identifier '${packageId}' from '${remotePath}'. ` + `Will put the data into '${pathInContainer}'`);
120
116
  tmpDestination = `/data/local/tmp/${_path.default.posix.basename(pathInContainer)}`;
121
117
 
122
118
  try {
@@ -126,11 +122,11 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
126
122
  await this.adb.push(localFile, tmpDestination);
127
123
  await this.adb.shell(['run-as', packageId, `cp -f '${escapePath(tmpDestination)}' '${escapePath(pathInContainer)}'`]);
128
124
  } catch (e) {
129
- _logger.default.errorAndThrow(`Cannot access the container of '${packageId}' application. ` + `Is the application installed and has 'debuggable' build option set to true? ` + `Original error: ${e.message}`);
125
+ this.log.errorAndThrow(`Cannot access the container of '${packageId}' application. ` + `Is the application installed and has 'debuggable' build option set to true? ` + `Original error: ${e.message}`);
130
126
  }
131
127
  } else {
132
128
  await this.adb.push(localFile, remotePath);
133
- await scanMedia(this.adb, remotePath);
129
+ await scanMedia(this.adb, remotePath, this.log);
134
130
  }
135
131
  } finally {
136
132
  if (await _support.fs.exists(localFile)) {
@@ -177,9 +173,7 @@ async function deleteFileOrFolder(adb, remotePath) {
177
173
 
178
174
  if (remotePath.startsWith(CONTAINER_PATH_MARKER)) {
179
175
  const [packageId, pathInContainer] = parseContainerPath(remotePath);
180
-
181
- _logger.default.debug(`Parsed package identifier '${packageId}' from '${remotePath}'`);
182
-
176
+ this.log.debug(`Parsed package identifier '${packageId}' from '${remotePath}'`);
183
177
  dstPath = pathInContainer;
184
178
  pkgId = packageId;
185
179
  }
@@ -188,22 +182,21 @@ async function deleteFileOrFolder(adb, remotePath) {
188
182
  try {
189
183
  await adb.shell(['run-as', pkgId, 'ls']);
190
184
  } catch (e) {
191
- _logger.default.errorAndThrow(`Cannot access the container of '${pkgId}' application. ` + `Is the application installed and has 'debuggable' build option set to true? ` + `Original error: ${e.message}`);
185
+ this.log.errorAndThrow(`Cannot access the container of '${pkgId}' application. ` + `Is the application installed and has 'debuggable' build option set to true? ` + `Original error: ${e.message}`);
192
186
  }
193
187
  }
194
188
 
195
189
  if (!(await isPresent(dstPath, pkgId))) {
196
- _logger.default.info(`The item at '${dstPath}' does not exist. Perhaps, already deleted?`);
197
-
190
+ this.log.info(`The item at '${dstPath}' does not exist. Perhaps, already deleted?`);
198
191
  return false;
199
192
  }
200
193
 
201
194
  const expectsFile = !remotePath.endsWith('/');
202
195
 
203
196
  if (expectsFile && !(await isFile(dstPath, pkgId))) {
204
- _logger.default.errorAndThrow(`The item at '${dstPath}' is not a file`);
197
+ this.log.errorAndThrow(`The item at '${dstPath}' is not a file`);
205
198
  } else if (!expectsFile && !(await isDir(dstPath, pkgId))) {
206
- _logger.default.errorAndThrow(`The item at '${dstPath}' is not a folder`);
199
+ this.log.errorAndThrow(`The item at '${dstPath}' is not a folder`);
207
200
  }
208
201
 
209
202
  if (pkgId) {
@@ -213,7 +206,7 @@ async function deleteFileOrFolder(adb, remotePath) {
213
206
  }
214
207
 
215
208
  if (await isPresent(dstPath, pkgId)) {
216
- _logger.default.errorAndThrow(`The item at '${dstPath}' still exists after being deleted. ` + `Is it writable?`);
209
+ this.log.errorAndThrow(`The item at '${dstPath}' still exists after being deleted. ` + `Is it writable?`);
217
210
  }
218
211
 
219
212
  return true;
@@ -225,11 +218,11 @@ commands.mobileDeleteFile = async function mobileDeleteFile(opts = {}) {
225
218
  } = opts;
226
219
 
227
220
  if (!remotePath) {
228
- _logger.default.errorAndThrow(`The 'remotePath' argument is mandatory`);
221
+ throw new _baseDriver.errors.InvalidArgumentError(`The 'remotePath' argument is mandatory`);
229
222
  }
230
223
 
231
224
  if (remotePath.endsWith('/')) {
232
- _logger.default.errorAndThrow(`It is expected that remote path points to a folder and not to a file. ` + `'${remotePath}' is given instead`);
225
+ throw new _baseDriver.errors.InvalidArgumentError(`It is expected that remote path points to a folder and not to a file. ` + `'${remotePath}' is given instead`);
233
226
  }
234
227
 
235
228
  return await deleteFileOrFolder(this.adb, remotePath);
@@ -239,4 +232,4 @@ var _default = commands;
239
232
  exports.default = _default;require('source-map-support').install();
240
233
 
241
234
 
242
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiXSwibmFtZXMiOlsiQ09OVEFJTkVSX1BBVEhfTUFSS0VSIiwiQ09OVEFJTkVSX1BBVEhfUEFUVEVSTiIsIlJlZ0V4cCIsIkFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCIsImNvbW1hbmRzIiwicGFyc2VDb250YWluZXJQYXRoIiwicmVtb3RlUGF0aCIsIm1hdGNoIiwiZXhlYyIsImxvZyIsImVycm9yQW5kVGhyb3ciLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwic2Nhbk1lZGlhIiwiYWRiIiwiZGVidWciLCJnZXRBcGlMZXZlbCIsInNoZWxsIiwiZSIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXNjYXBlUGF0aCIsInAiLCJyZXBsYWNlIiwicHVsbEZpbGUiLCJlbmRzV2l0aCIsInRtcERlc3RpbmF0aW9uIiwic3RhcnRzV2l0aCIsInBhY2thZ2VJZCIsInBhdGhJbkNvbnRhaW5lciIsImJhc2VuYW1lIiwibG9jYWxGaWxlIiwidGVtcERpciIsInByZWZpeCIsInN1ZmZpeCIsInB1bGwiLCJ1dGlsIiwidG9Jbk1lbW9yeUJhc2U2NCIsInRvU3RyaW5nIiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJwdXNoRmlsZSIsImJhc2U2NERhdGEiLCJfIiwiaXNBcnJheSIsIkJ1ZmZlciIsImZyb20iLCJjb250ZW50Iiwid3JpdGVGaWxlIiwiZGlybmFtZSIsInB1c2giLCJwdWxsRm9sZGVyIiwibG9jYWxGb2xkZXIiLCJ6aXAiLCJ0b0luTWVtb3J5WmlwIiwiZW5jb2RlVG9CYXNlNjQiLCJkZWxldGVGaWxlT3JGb2xkZXIiLCJwZXJmb3JtUmVtb3RlRnNDaGVjayIsIm9wIiwicnVuQXMiLCJwYXNzRmxhZyIsImNoZWNrQ21kIiwiZnVsbENtZCIsImluY2x1ZGVzIiwiaWduIiwiaXNGaWxlIiwiaXNEaXIiLCJpc1ByZXNlbnQiLCJkc3RQYXRoIiwicGtnSWQiLCJpbmZvIiwiZXhwZWN0c0ZpbGUiLCJt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QUFDZkcsb0JBQUlDLGFBQUosQ0FBbUIsd0NBQW5CO0FBQ0Q7O0FBQ0QsTUFBSUosVUFBVSxDQUFDcUIsUUFBWCxDQUFvQixHQUFwQixDQUFKLEVBQThCO0FBQzVCbEIsb0JBQUlDLGFBQUosQ0FBbUIsd0VBQUQsR0FDQyxJQUFHSixVQUFXLG9CQURqQztBQUVEOztBQUNELFNBQU8sTUFBTXFELGtCQUFrQixDQUFDLEtBQUs1QyxHQUFOLEVBQVdULFVBQVgsQ0FBL0I7QUFDRCxDQVZEOztlQWFlRixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB1dGlsLCB6aXAsIHRlbXBEaXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuXG5jb25zdCBDT05UQUlORVJfUEFUSF9NQVJLRVIgPSAnQCc7XG4vLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL1BMZEIwRy8yXG5jb25zdCBDT05UQUlORVJfUEFUSF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7Q09OVEFJTkVSX1BBVEhfTUFSS0VSfShbXi9dKykvKC4rKWApO1xuY29uc3QgQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5UID0gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NRURJQV9TQ0FOTkVSX1NDQU5fRklMRSc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGFjdHVhbCBkZXN0aW5hdGlvbiBwYXRoIGZyb20gdGhlIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIHByZWZvcm1hdHRlZCByZW1vdGUgcGF0aCwgd2hpY2ggbG9va3MgbGlrZVxuICogYEBteS5hcHAuaWQvbXkvcGF0aGBcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIHBhcnNlZCBwYWNrYWdlXG4gKiBpZGVudGlmaWVyIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHBhdGggaW5zaWRlIHRoZSBwYWNrYWdlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBzdHJpbmcgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRhaW5lclBhdGggKHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgbWF0Y2ggPSBDT05UQUlORVJfUEFUSF9QQVRURVJOLmV4ZWMocmVtb3RlUGF0aCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSXQgaXMgZXhwZWN0ZWQgdGhhdCBwYWNrYWdlIGlkZW50aWZpZXIgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggd2l0aCBhIHNpbmdsZSBzbGFzaC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIFttYXRjaFsxXSwgcGF0aC5wb3NpeC5yZXNvbHZlKGAvZGF0YS9kYXRhLyR7bWF0Y2hbMV19YCwgbWF0Y2hbMl0pXTtcbn1cblxuLyoqXG4gKiBTY2FucyB0aGUgZ2l2ZW4gZmlsZS9mb2xkZXIgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqIGFuZCBhZGRzIG1hdGNoaW5nIGl0ZW1zIHRvIHRoZSBkZXZpY2UncyBtZWRpYSBsaWJyYXJ5LlxuICogRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBhbmQgd3JpdHRlbiBpbnRvIHRoZSBsb2cuXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5NZWRpYSAoYWRiLCByZW1vdGVQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBtZWRpYSBzY2FuIG9mICcke3JlbW90ZVBhdGh9J2ApO1xuICB0cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjE4NFxuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOSkge1xuICAgICAgYXdhaXQgYWRiLnNjYW5NZWRpYShyZW1vdGVQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAgICctYScsIEFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCxcbiAgICAgICAgJy1kJywgYGZpbGU6Ly8ke3JlbW90ZVBhdGh9YFxuICAgICAgXSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oYElnbm9yaW5nIGFuIHVuZXhwZWN0ZWQgZXJyb3IgdXBvbiBtZWRpYSBzY2FubmluZyBvZiAnJHtyZW1vdGVQYXRofSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogQSBzbWFsbCBoZWxwZXIsIHdoaWNoIGVzY2FwZXMgc2luZ2xlIHF1b3RlcyBpbiBwYXRocyxcbiAqIHNvIHRoZXkgYXJlIHNhZmUgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZiBzaGVsbCBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwIFRoZSBpbml0aWFsIHJlbW90ZSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZXNjYXBlZCBwYXRoIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVBhdGggKHApIHtcbiAgcmV0dXJuIHAucmVwbGFjZSgvJy9nLCBgXFxcXCdgKTtcbn1cblxuLyoqXG4gKiBQdWxscyBhIHJlbW90ZSBmaWxlIGZyb20gdGhlIGRldmljZS5cbiAqIEl0IGlzIHJlcXVpcmVkLCB0aGF0IGEgcGFja2FnZSBoYXMgZGVidWdnaW5nIGZsYWcgZW5hYmxlZFxuICogaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZVxuICogb3IgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHBhdGgsIHdoaWNoIHBvaW50cyB0byBhbiBpdGVtIGluc2lkZSBhcHAgYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBjb250ZW50IG9mIHRoZSBwdWxsZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwdWxsIG9wZXJhdGlvbiBmYWlsZWRcbiAqL1xuY29tbWFuZHMucHVsbEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdWxsRmlsZSAocmVtb3RlUGF0aCkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYEl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHBhdGggcG9pbnRzIHRvIGEgZmlsZSBhbmQgbm90IHRvIGEgZm9sZGVyLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICBsZXQgdG1wRGVzdGluYXRpb24gPSBudWxsO1xuICBpZiAocmVtb3RlUGF0aC5zdGFydHNXaXRoKENPTlRBSU5FUl9QQVRIX01BUktFUikpIHtcbiAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gV2lsbCBnZXQgdGhlIGRhdGEgZnJvbSAnJHtwYXRoSW5Db250YWluZXJ9J2ApO1xuICAgIHRtcERlc3RpbmF0aW9uID0gYC9kYXRhL2xvY2FsL3RtcC8ke3BhdGgucG9zaXguYmFzZW5hbWUocGF0aEluQ29udGFpbmVyKX1gO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3J1bi1hcycsIHBhY2thZ2VJZCwgYGNobW9kIDc3NyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BdKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgYGNwIC1mICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nICcke2VzY2FwZVBhdGgodG1wRGVzdGluYXRpb24pfSdgXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjY2VzcyB0aGUgY29udGFpbmVyIG9mICcke3BhY2thZ2VJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbCh0bXBEZXN0aW5hdGlvbiB8fCByZW1vdGVQYXRoLCBsb2NhbEZpbGUpO1xuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGxvY2FsRmlsZSkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gICAgaWYgKHRtcERlc3RpbmF0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3JtJywgJy1mJywgdG1wRGVzdGluYXRpb25dKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUHVzaGVkIHRoZSBnaXZlbiBkYXRhIHRvIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGRldmljZVxuICogSXQgaXMgcmVxdWlyZWQsIHRoYXQgYSBwYWNrYWdlIGhhcyBkZWJ1Z2dpbmcgZmxhZyBlbmFibGVkXG4gKiBpbiBvcmRlciB0byBhY2Nlc3MgaXRzIGZpbGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlIG9yXG4gKiBhIGZpbGUgaW5zaWRlIGEgcGFja2FnZSBidW5kbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjREYXRhIEJhc2U2NCBlbmNvZGVkIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGVcbiAqIHJlbW90ZSBmaWxlLiBUaGUgcmVtb3RlIGZpbGUgd2lsbCBiZSBzaWxlbnRseSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBwdXNoaW5nIHRoZSBkYXRhXG4gKi9cbmNvbW1hbmRzLnB1c2hGaWxlID0gYXN5bmMgZnVuY3Rpb24gcHVzaEZpbGUgKHJlbW90ZVBhdGgsIGJhc2U2NERhdGEpIHtcbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZpbGUgYW5kIG5vdCB0byBhIGZvbGRlci4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgbG9jYWxGaWxlID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nLCBzdWZmaXg6ICcudG1wJ30pO1xuICBpZiAoXy5pc0FycmF5KGJhc2U2NERhdGEpKSB7XG4gICAgLy8gc29tZSBjbGllbnRzIChhaGVtKSBqYXZhLCBzZW5kIGEgYnl0ZSBhcnJheSBlbmNvZGluZyB1dGY4IGNoYXJhY3RlcnNcbiAgICAvLyBpbnN0ZWFkIG9mIGEgc3RyaW5nLCB3aGljaCB3b3VsZCBiZSBpbmZpbml0ZWx5IGJldHRlciFcbiAgICBiYXNlNjREYXRhID0gQnVmZmVyLmZyb20oYmFzZTY0RGF0YSkudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oYmFzZTY0RGF0YSwgJ2Jhc2U2NCcpO1xuICBsZXQgdG1wRGVzdGluYXRpb24gPSBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShsb2NhbEZpbGUsIGNvbnRlbnQudG9TdHJpbmcoJ2JpbmFyeScpLCAnYmluYXJ5Jyk7XG4gICAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBpZGVudGlmaWVyICcke3BhY2thZ2VJZH0nIGZyb20gJyR7cmVtb3RlUGF0aH0nLiBXaWxsIHB1dCB0aGUgZGF0YSBpbnRvICcke3BhdGhJbkNvbnRhaW5lcn0nYCk7XG4gICAgICB0bXBEZXN0aW5hdGlvbiA9IGAvZGF0YS9sb2NhbC90bXAvJHtwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhJbkNvbnRhaW5lcil9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFxuICAgICAgICAgIFsncnVuLWFzJywgcGFja2FnZUlkLCBgbWtkaXIgLXAgJyR7ZXNjYXBlUGF0aChwYXRoLnBvc2l4LmRpcm5hbWUocGF0aEluQ29udGFpbmVyKSl9J2BdXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgdG91Y2ggJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgY2htb2QgNzc3ICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nYF0pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgdG1wRGVzdGluYXRpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgICBgY3AgLWYgJyR7ZXNjYXBlUGF0aCh0bXBEZXN0aW5hdGlvbil9JyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGFja2FnZUlkfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgSXMgdGhlIGFwcGxpY2F0aW9uIGluc3RhbGxlZCBhbmQgaGFzICdkZWJ1Z2dhYmxlJyBidWlsZCBvcHRpb24gc2V0IHRvIHRydWU/IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhZGIgcHVzaCBjcmVhdGVzIGZvbGRlcnMgYW5kIG92ZXJ3cml0ZXMgZXhpc3RpbmcgZmlsZXMuXG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCk7XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgcHVzaGVkIGEgZmlsZSwgaXQgbWlnaHQgYmUgYSBtZWRpYSBmaWxlLCBzbyBlbnN1cmUgdGhhdFxuICAgICAgLy8gYXBwcyBrbm93IGFib3V0IGl0XG4gICAgICBhd2FpdCBzY2FuTWVkaWEodGhpcy5hZGIsIHJlbW90ZVBhdGgpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdWxscyB0aGUgd2hvbGUgZm9sZGVyIGZyb20gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIGEgZm9sZGVyIG9uIHRoZVxuICogcmVtb3RlIGRldmljZSBvciBhIGZvbGRlciBpbnNpZGUgYW4gYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBhbmQgemlwcGVkIGNvbnRlbnQgb2YgdGhlIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgZ2V0dGluZyB0aGUgZm9sZGVyIGNvbnRlbnRcbiAqL1xuY29tbWFuZHMucHVsbEZvbGRlciA9IGFzeW5jIGZ1bmN0aW9uIHB1bGxGb2xkZXIgKHJlbW90ZVBhdGgpIHtcbiAgbGV0IGxvY2FsRm9sZGVyID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nfSk7XG4gIGF3YWl0IHRoaXMuYWRiLnB1bGwocmVtb3RlUGF0aCwgbG9jYWxGb2xkZXIpO1xuICByZXR1cm4gKGF3YWl0IHppcC50b0luTWVtb3J5WmlwKGxvY2FsRm9sZGVyLCB7XG4gICAgZW5jb2RlVG9CYXNlNjQ6IHRydWUsXG4gIH0pKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBEZWxldGVzIHRoZSBnaXZlbiBmb2xkZXIgb3IgZmlsZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZvbGRlclxuICogb3IgZmlsZSAoZm9sZGVyIG5hbWVzIG11c3QgZW5kIHdpdGggYSBzaW5nbGUgc2xhc2gpXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHByb3ZpZGVkIHJlbW90ZSBwYXRoIGlzIGludmFsaWQgb3JcbiAqIHRoZSBwYWNrYWdlIGNvbnRlbnQgY2Fubm90IGJlIGFjY2Vzc2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSByZW1vdGUgcGF0aCBpcyB2YWxpZCwgYnV0IHRoZSByZW1vdGUgcGF0aCBkb2VzIG5vdCBleGlzdFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm4gYGZhbHNlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRmlsZU9yRm9sZGVyIChhZGIsIHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgcGVyZm9ybVJlbW90ZUZzQ2hlY2sgPSBhc3luYyAocCwgb3AsIHJ1bkFzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBjb25zdCBjaGVja0NtZCA9IGBbIC0ke29wfSAnJHtlc2NhcGVQYXRoKHApfScgXSAmJiBlY2hvICR7cGFzc0ZsYWd9YDtcbiAgICBjb25zdCBmdWxsQ21kID0gcnVuQXMgPyBgcnVuLWFzICR7cnVuQXN9ICR7Y2hlY2tDbWR9YCA6IGNoZWNrQ21kO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gXy5pbmNsdWRlcyhhd2FpdCBhZGIuc2hlbGwoW2Z1bGxDbWRdKSwgcGFzc0ZsYWcpO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNGaWxlID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2YnLCBydW5Bcyk7XG4gIGNvbnN0IGlzRGlyID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2QnLCBydW5Bcyk7XG4gIGNvbnN0IGlzUHJlc2VudCA9IGFzeW5jIChwLCBydW5BcyA9IG51bGwpID0+IGF3YWl0IHBlcmZvcm1SZW1vdGVGc0NoZWNrKHAsICdlJywgcnVuQXMpO1xuXG4gIGxldCBkc3RQYXRoID0gcmVtb3RlUGF0aDtcbiAgbGV0IHBrZ0lkID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGlkZW50aWZpZXIgJyR7cGFja2FnZUlkfScgZnJvbSAnJHtyZW1vdGVQYXRofSdgKTtcbiAgICBkc3RQYXRoID0gcGF0aEluQ29udGFpbmVyO1xuICAgIHBrZ0lkID0gcGFja2FnZUlkO1xuICB9XG5cbiAgaWYgKHBrZ0lkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3J1bi1hcycsIHBrZ0lkLCAnbHMnXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY2Nlc3MgdGhlIGNvbnRhaW5lciBvZiAnJHtwa2dJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGRvZXMgbm90IGV4aXN0LiBQZXJoYXBzLCBhbHJlYWR5IGRlbGV0ZWQ/YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0c0ZpbGUgPSAhcmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpO1xuICBpZiAoZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRmlsZShkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGlzIG5vdCBhIGZpbGVgKTtcbiAgfSBlbHNlIGlmICghZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRGlyKGRzdFBhdGgsIHBrZ0lkKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgaXMgbm90IGEgZm9sZGVyYCk7XG4gIH1cblxuICBpZiAocGtnSWQpIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoXG4gICAgICBbJ3J1bi1hcycsIHBrZ0lkLCBgcm0gLWYke2V4cGVjdHNGaWxlID8gJycgOiAncid9ICcke2VzY2FwZVBhdGgoZHN0UGF0aCl9J2BdKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoWydybScsIGAtZiR7ZXhwZWN0c0ZpbGUgPyAnJyA6ICdyJ31gLCBkc3RQYXRoXSk7XG4gIH1cbiAgaWYgKGF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIHN0aWxsIGV4aXN0cyBhZnRlciBiZWluZyBkZWxldGVkLiBgICtcbiAgICAgIGBJcyBpdCB3cml0YWJsZT9gKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWxldGVGaWxlT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlXG4gKiBvciBhIGZpbGUgaW5zaWRlIGFuIGFwcGxpY2F0aW9uIGJ1bmRsZSAoZm9yIGV4YW1wbGUgYEBteS5hcHAuaWQvcGF0aC9pbi9idW5kbGVgKVxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge0RlbGV0ZUZpbGVPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSBwYXRoIHRvIGEgcmVtb3RlIGZpbGUgaXMgdmFsaWQsIGJ1dCB0aGUgZmlsZSBpdHNlbGYgZG9lcyBub3QgZXhpc3RcbiAqIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGRlbGV0aW5nIHRoZSBmaWxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlbGV0ZUZpbGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEZWxldGVGaWxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3JlbW90ZVBhdGh9ID0gb3B0cztcbiAgaWYgKCFyZW1vdGVQYXRoKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSAncmVtb3RlUGF0aCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZvbGRlciBhbmQgbm90IHRvIGEgZmlsZS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGRlbGV0ZUZpbGVPckZvbGRlcih0aGlzLmFkYiwgcmVtb3RlUGF0aCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
235
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiXSwibmFtZXMiOlsiQ09OVEFJTkVSX1BBVEhfTUFSS0VSIiwiQ09OVEFJTkVSX1BBVEhfUEFUVEVSTiIsIlJlZ0V4cCIsIkFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCIsImNvbW1hbmRzIiwicGFyc2VDb250YWluZXJQYXRoIiwicmVtb3RlUGF0aCIsIm1hdGNoIiwiZXhlYyIsIkVycm9yIiwicGF0aCIsInBvc2l4IiwicmVzb2x2ZSIsInNjYW5NZWRpYSIsImFkYiIsImxvZyIsImRlYnVnIiwiZ2V0QXBpTGV2ZWwiLCJzaGVsbCIsImUiLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImVzY2FwZVBhdGgiLCJwIiwicmVwbGFjZSIsInB1bGxGaWxlIiwiZW5kc1dpdGgiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsInRtcERlc3RpbmF0aW9uIiwic3RhcnRzV2l0aCIsInBhY2thZ2VJZCIsInBhdGhJbkNvbnRhaW5lciIsImJhc2VuYW1lIiwiZXJyb3JBbmRUaHJvdyIsImxvY2FsRmlsZSIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJwdWxsIiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsImZzIiwiZXhpc3RzIiwidW5saW5rIiwicHVzaEZpbGUiLCJiYXNlNjREYXRhIiwiXyIsImlzQXJyYXkiLCJCdWZmZXIiLCJmcm9tIiwiY29udGVudCIsIndyaXRlRmlsZSIsImRpcm5hbWUiLCJwdXNoIiwicHVsbEZvbGRlciIsImxvY2FsRm9sZGVyIiwiemlwIiwidG9Jbk1lbW9yeVppcCIsImVuY29kZVRvQmFzZTY0IiwiZGVsZXRlRmlsZU9yRm9sZGVyIiwicGVyZm9ybVJlbW90ZUZzQ2hlY2siLCJvcCIsInJ1bkFzIiwicGFzc0ZsYWciLCJjaGVja0NtZCIsImZ1bGxDbWQiLCJpbmNsdWRlcyIsImlnbiIsImlzRmlsZSIsImlzRGlyIiwiaXNQcmVzZW50Iiwi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QyxDQUFWLENBQU47QUFDRDs7QUFDRCxNQUFJLE1BQU1ELFNBQVMsQ0FBQ0MsT0FBRCxFQUFVQyxLQUFWLENBQW5CLEVBQXFDO0FBQ25DLFNBQUs1RCxHQUFMLENBQVNvQixhQUFULENBQXdCLGdCQUFldUMsT0FBUSxzQ0FBeEIsR0FDcEIsaUJBREg7QUFFRDs7QUFDRCxTQUFPLElBQVA7QUFDRDs7QUFrQkR0RSxRQUFRLENBQUMwRSxnQkFBVCxHQUE0QixlQUFlQSxnQkFBZixDQUFpQ0MsSUFBSSxHQUFHLEVBQXhDLEVBQTRDO0FBQ3RFLFFBQU07QUFBQ3pFLElBQUFBO0FBQUQsTUFBZXlFLElBQXJCOztBQUNBLE1BQUksQ0FBQ3pFLFVBQUwsRUFBaUI7QUFDZixVQUFNLElBQUlzQixtQkFBT0Msb0JBQVgsQ0FBaUMsd0NBQWpDLENBQU47QUFDRDs7QUFDRCxNQUFJdkIsVUFBVSxDQUFDcUIsUUFBWCxDQUFvQixHQUFwQixDQUFKLEVBQThCO0FBQzVCLFVBQU0sSUFBSUMsbUJBQU9DLG9CQUFYLENBQ0gsd0VBQUQsR0FDQyxJQUFHdkIsVUFBVyxvQkFGWCxDQUFOO0FBSUQ7O0FBQ0QsU0FBTyxNQUFNd0Qsa0JBQWtCLENBQUMsS0FBS2hELEdBQU4sRUFBV1IsVUFBWCxDQUEvQjtBQUNELENBWkQ7O2VBZWVGLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHppcCwgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuXG5cbmNvbnN0IENPTlRBSU5FUl9QQVRIX01BUktFUiA9ICdAJztcbi8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvUExkQjBHLzJcbmNvbnN0IENPTlRBSU5FUl9QQVRIX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGBeJHtDT05UQUlORVJfUEFUSF9NQVJLRVJ9KFteL10rKS8oLispYCk7XG5jb25zdCBBTkRST0lEX01FRElBX1JFU0NBTl9JTlRFTlQgPSAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1FRElBX1NDQU5ORVJfU0NBTl9GSUxFJztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFBhcnNlcyB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHBhdGggZnJvbSB0aGUgZ2l2ZW4gdmFsdWVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgcHJlZm9ybWF0dGVkIHJlbW90ZSBwYXRoLCB3aGljaCBsb29rcyBsaWtlXG4gKiBgQG15LmFwcC5pZC9teS9wYXRoYFxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIGFycmF5LCB3aGVyZSB0aGUgZmlyc3QgaXRlbSBpcyB0aGUgcGFyc2VkIHBhY2thZ2VcbiAqIGlkZW50aWZpZXIgYW5kIHRoZSBzZWNvbmQgb25lIGlzIHRoZSBhY3R1YWwgZGVzdGluYXRpb24gcGF0aCBpbnNpZGUgdGhlIHBhY2thZ2UuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIHN0cmluZyBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29udGFpbmVyUGF0aCAocmVtb3RlUGF0aCkge1xuICBjb25zdCBtYXRjaCA9IENPTlRBSU5FUl9QQVRIX1BBVFRFUk4uZXhlYyhyZW1vdGVQYXRoKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSXQgaXMgZXhwZWN0ZWQgdGhhdCBwYWNrYWdlIGlkZW50aWZpZXIgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggd2l0aCBhIHNpbmdsZSBzbGFzaC4gYCArXG4gICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICByZXR1cm4gW21hdGNoWzFdLCBwYXRoLnBvc2l4LnJlc29sdmUoYC9kYXRhL2RhdGEvJHttYXRjaFsxXX1gLCBtYXRjaFsyXSldO1xufVxuXG4vKipcbiAqIFNjYW5zIHRoZSBnaXZlbiBmaWxlL2ZvbGRlciBvbiB0aGUgcmVtb3RlIGRldmljZVxuICogYW5kIGFkZHMgbWF0Y2hpbmcgaXRlbXMgdG8gdGhlIGRldmljZSdzIG1lZGlhIGxpYnJhcnkuXG4gKiBFeGNlcHRpb25zIGFyZSBpZ25vcmVkIGFuZCB3cml0dGVuIGludG8gdGhlIGxvZy5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3Q/fSBsb2cgTG9nZ2VyIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZmlsZS9mb2xkZXIgcGF0aCBvbiB0aGUgcmVtb3RlIGRldmljZVxuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGFkYiwgcmVtb3RlUGF0aCwgbG9nID0gbnVsbCkge1xuICBsb2c/LmRlYnVnKGBQZXJmb3JtaW5nIG1lZGlhIHNjYW4gb2YgJyR7cmVtb3RlUGF0aH0nYCk7XG4gIHRyeSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE2MTg0XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpID49IDI5KSB7XG4gICAgICBhd2FpdCBhZGIuc2Nhbk1lZGlhKHJlbW90ZVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoW1xuICAgICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICAgJy1hJywgQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5ULFxuICAgICAgICAnLWQnLCBgZmlsZTovLyR7cmVtb3RlUGF0aH1gXG4gICAgICBdKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2c/Lndhcm4oYElnbm9yaW5nIGFuIHVuZXhwZWN0ZWQgZXJyb3IgdXBvbiBtZWRpYSBzY2FubmluZyBvZiAnJHtyZW1vdGVQYXRofSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogQSBzbWFsbCBoZWxwZXIsIHdoaWNoIGVzY2FwZXMgc2luZ2xlIHF1b3RlcyBpbiBwYXRocyxcbiAqIHNvIHRoZXkgYXJlIHNhZmUgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZiBzaGVsbCBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwIFRoZSBpbml0aWFsIHJlbW90ZSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZXNjYXBlZCBwYXRoIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVBhdGggKHApIHtcbiAgcmV0dXJuIHAucmVwbGFjZSgvJy9nLCBgXFxcXCdgKTtcbn1cblxuLyoqXG4gKiBQdWxscyBhIHJlbW90ZSBmaWxlIGZyb20gdGhlIGRldmljZS5cbiAqIEl0IGlzIHJlcXVpcmVkLCB0aGF0IGEgcGFja2FnZSBoYXMgZGVidWdnaW5nIGZsYWcgZW5hYmxlZFxuICogaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZVxuICogb3IgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHBhdGgsIHdoaWNoIHBvaW50cyB0byBhbiBpdGVtIGluc2lkZSBhcHAgYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBjb250ZW50IG9mIHRoZSBwdWxsZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwdWxsIG9wZXJhdGlvbiBmYWlsZWRcbiAqL1xuY29tbWFuZHMucHVsbEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdWxsRmlsZSAocmVtb3RlUGF0aCkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgaXMgZXhwZWN0ZWQgdGhhdCByZW1vdGUgcGF0aCBwb2ludHMgdG8gYSBmaWxlIGFuZCBub3QgdG8gYSBmb2xkZXIuIGAgK1xuICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgbGV0IHRtcERlc3RpbmF0aW9uID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gV2lsbCBnZXQgdGhlIGRhdGEgZnJvbSAnJHtwYXRoSW5Db250YWluZXJ9J2ApO1xuICAgIHRtcERlc3RpbmF0aW9uID0gYC9kYXRhL2xvY2FsL3RtcC8ke3BhdGgucG9zaXguYmFzZW5hbWUocGF0aEluQ29udGFpbmVyKX1gO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3J1bi1hcycsIHBhY2thZ2VJZCwgYGNobW9kIDc3NyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BdKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgYGNwIC1mICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nICcke2VzY2FwZVBhdGgodG1wRGVzdGluYXRpb24pfSdgXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGFja2FnZUlkfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxvY2FsRmlsZSA9IGF3YWl0IHRlbXBEaXIucGF0aCh7cHJlZml4OiAnYXBwaXVtJywgc3VmZml4OiAnLnRtcCd9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdWxsKHRtcERlc3RpbmF0aW9uIHx8IHJlbW90ZVBhdGgsIGxvY2FsRmlsZSk7XG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQobG9jYWxGaWxlKSkudG9TdHJpbmcoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdXNoZWQgdGhlIGdpdmVuIGRhdGEgdG8gYSBmaWxlIG9uIHRoZSByZW1vdGUgZGV2aWNlXG4gKiBJdCBpcyByZXF1aXJlZCwgdGhhdCBhIHBhY2thZ2UgaGFzIGRlYnVnZ2luZyBmbGFnIGVuYWJsZWRcbiAqIGluIG9yZGVyIHRvIGFjY2VzcyBpdHMgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZpbGUgb3JcbiAqIGEgZmlsZSBpbnNpZGUgYSBwYWNrYWdlIGJ1bmRsZVxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NERhdGEgQmFzZTY0IGVuY29kZWQgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZVxuICogcmVtb3RlIGZpbGUuIFRoZSByZW1vdGUgZmlsZSB3aWxsIGJlIHNpbGVudGx5IG92ZXJyaWRkZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHB1c2hpbmcgdGhlIGRhdGFcbiAqL1xuY29tbWFuZHMucHVzaEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdXNoRmlsZSAocmVtb3RlUGF0aCwgYmFzZTY0RGF0YSkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZpbGUgYW5kIG5vdCB0byBhIGZvbGRlci4gYCArXG4gICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIGlmIChfLmlzQXJyYXkoYmFzZTY0RGF0YSkpIHtcbiAgICAvLyBzb21lIGNsaWVudHMgKGFoZW0pIGphdmEsIHNlbmQgYSBieXRlIGFycmF5IGVuY29kaW5nIHV0ZjggY2hhcmFjdGVyc1xuICAgIC8vIGluc3RlYWQgb2YgYSBzdHJpbmcsIHdoaWNoIHdvdWxkIGJlIGluZmluaXRlbHkgYmV0dGVyIVxuICAgIGJhc2U2NERhdGEgPSBCdWZmZXIuZnJvbShiYXNlNjREYXRhKS50b1N0cmluZygndXRmOCcpO1xuICB9XG4gIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShiYXNlNjREYXRhLCAnYmFzZTY0Jyk7XG4gIGxldCB0bXBEZXN0aW5hdGlvbiA9IG51bGw7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGxvY2FsRmlsZSwgY29udGVudC50b1N0cmluZygnYmluYXJ5JyksICdiaW5hcnknKTtcbiAgICBpZiAocmVtb3RlUGF0aC5zdGFydHNXaXRoKENPTlRBSU5FUl9QQVRIX01BUktFUikpIHtcbiAgICAgIGNvbnN0IFtwYWNrYWdlSWQsIHBhdGhJbkNvbnRhaW5lcl0gPSBwYXJzZUNvbnRhaW5lclBhdGgocmVtb3RlUGF0aCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gYCArXG4gICAgICAgIGBXaWxsIHB1dCB0aGUgZGF0YSBpbnRvICcke3BhdGhJbkNvbnRhaW5lcn0nYCk7XG4gICAgICB0bXBEZXN0aW5hdGlvbiA9IGAvZGF0YS9sb2NhbC90bXAvJHtwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhJbkNvbnRhaW5lcil9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFxuICAgICAgICAgIFsncnVuLWFzJywgcGFja2FnZUlkLCBgbWtkaXIgLXAgJyR7ZXNjYXBlUGF0aChwYXRoLnBvc2l4LmRpcm5hbWUocGF0aEluQ29udGFpbmVyKSl9J2BdXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgdG91Y2ggJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgY2htb2QgNzc3ICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nYF0pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgdG1wRGVzdGluYXRpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgICBgY3AgLWYgJyR7ZXNjYXBlUGF0aCh0bXBEZXN0aW5hdGlvbil9JyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY2Nlc3MgdGhlIGNvbnRhaW5lciBvZiAnJHtwYWNrYWdlSWR9JyBhcHBsaWNhdGlvbi4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFkYiBwdXNoIGNyZWF0ZXMgZm9sZGVycyBhbmQgb3ZlcndyaXRlcyBleGlzdGluZyBmaWxlcy5cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnB1c2gobG9jYWxGaWxlLCByZW1vdGVQYXRoKTtcblxuICAgICAgLy8gaWYgd2UgaGF2ZSBwdXNoZWQgYSBmaWxlLCBpdCBtaWdodCBiZSBhIG1lZGlhIGZpbGUsIHNvIGVuc3VyZSB0aGF0XG4gICAgICAvLyBhcHBzIGtub3cgYWJvdXQgaXRcbiAgICAgIGF3YWl0IHNjYW5NZWRpYSh0aGlzLmFkYiwgcmVtb3RlUGF0aCwgdGhpcy5sb2cpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdWxscyB0aGUgd2hvbGUgZm9sZGVyIGZyb20gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIGEgZm9sZGVyIG9uIHRoZVxuICogcmVtb3RlIGRldmljZSBvciBhIGZvbGRlciBpbnNpZGUgYW4gYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBhbmQgemlwcGVkIGNvbnRlbnQgb2YgdGhlIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgZ2V0dGluZyB0aGUgZm9sZGVyIGNvbnRlbnRcbiAqL1xuY29tbWFuZHMucHVsbEZvbGRlciA9IGFzeW5jIGZ1bmN0aW9uIHB1bGxGb2xkZXIgKHJlbW90ZVBhdGgpIHtcbiAgbGV0IGxvY2FsRm9sZGVyID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nfSk7XG4gIGF3YWl0IHRoaXMuYWRiLnB1bGwocmVtb3RlUGF0aCwgbG9jYWxGb2xkZXIpO1xuICByZXR1cm4gKGF3YWl0IHppcC50b0luTWVtb3J5WmlwKGxvY2FsRm9sZGVyLCB7XG4gICAgZW5jb2RlVG9CYXNlNjQ6IHRydWUsXG4gIH0pKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBEZWxldGVzIHRoZSBnaXZlbiBmb2xkZXIgb3IgZmlsZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZvbGRlclxuICogb3IgZmlsZSAoZm9sZGVyIG5hbWVzIG11c3QgZW5kIHdpdGggYSBzaW5nbGUgc2xhc2gpXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHByb3ZpZGVkIHJlbW90ZSBwYXRoIGlzIGludmFsaWQgb3JcbiAqIHRoZSBwYWNrYWdlIGNvbnRlbnQgY2Fubm90IGJlIGFjY2Vzc2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSByZW1vdGUgcGF0aCBpcyB2YWxpZCwgYnV0IHRoZSByZW1vdGUgcGF0aCBkb2VzIG5vdCBleGlzdFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm4gYGZhbHNlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRmlsZU9yRm9sZGVyIChhZGIsIHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgcGVyZm9ybVJlbW90ZUZzQ2hlY2sgPSBhc3luYyAocCwgb3AsIHJ1bkFzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBjb25zdCBjaGVja0NtZCA9IGBbIC0ke29wfSAnJHtlc2NhcGVQYXRoKHApfScgXSAmJiBlY2hvICR7cGFzc0ZsYWd9YDtcbiAgICBjb25zdCBmdWxsQ21kID0gcnVuQXMgPyBgcnVuLWFzICR7cnVuQXN9ICR7Y2hlY2tDbWR9YCA6IGNoZWNrQ21kO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gXy5pbmNsdWRlcyhhd2FpdCBhZGIuc2hlbGwoW2Z1bGxDbWRdKSwgcGFzc0ZsYWcpO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNGaWxlID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2YnLCBydW5Bcyk7XG4gIGNvbnN0IGlzRGlyID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2QnLCBydW5Bcyk7XG4gIGNvbnN0IGlzUHJlc2VudCA9IGFzeW5jIChwLCBydW5BcyA9IG51bGwpID0+IGF3YWl0IHBlcmZvcm1SZW1vdGVGc0NoZWNrKHAsICdlJywgcnVuQXMpO1xuXG4gIGxldCBkc3RQYXRoID0gcmVtb3RlUGF0aDtcbiAgbGV0IHBrZ0lkID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9J2ApO1xuICAgIGRzdFBhdGggPSBwYXRoSW5Db250YWluZXI7XG4gICAgcGtnSWQgPSBwYWNrYWdlSWQ7XG4gIH1cblxuICBpZiAocGtnSWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsncnVuLWFzJywgcGtnSWQsICdscyddKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGtnSWR9JyBhcHBsaWNhdGlvbi4gYCArXG4gICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFhd2FpdCBpc1ByZXNlbnQoZHN0UGF0aCwgcGtnSWQpKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGRvZXMgbm90IGV4aXN0LiBQZXJoYXBzLCBhbHJlYWR5IGRlbGV0ZWQ/YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0c0ZpbGUgPSAhcmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpO1xuICBpZiAoZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRmlsZShkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgaXMgbm90IGEgZmlsZWApO1xuICB9IGVsc2UgaWYgKCFleHBlY3RzRmlsZSAmJiAhYXdhaXQgaXNEaXIoZHN0UGF0aCwgcGtnSWQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGlzIG5vdCBhIGZvbGRlcmApO1xuICB9XG5cbiAgaWYgKHBrZ0lkKSB7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFxuICAgICAgWydydW4tYXMnLCBwa2dJZCwgYHJtIC1mJHtleHBlY3RzRmlsZSA/ICcnIDogJ3InfSAnJHtlc2NhcGVQYXRoKGRzdFBhdGgpfSdgXSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFsncm0nLCBgLWYke2V4cGVjdHNGaWxlID8gJycgOiAncid9YCwgZHN0UGF0aF0pO1xuICB9XG4gIGlmIChhd2FpdCBpc1ByZXNlbnQoZHN0UGF0aCwgcGtnSWQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIHN0aWxsIGV4aXN0cyBhZnRlciBiZWluZyBkZWxldGVkLiBgICtcbiAgICAgIGBJcyBpdCB3cml0YWJsZT9gKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWxldGVGaWxlT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlXG4gKiBvciBhIGZpbGUgaW5zaWRlIGFuIGFwcGxpY2F0aW9uIGJ1bmRsZSAoZm9yIGV4YW1wbGUgYEBteS5hcHAuaWQvcGF0aC9pbi9idW5kbGVgKVxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge0RlbGV0ZUZpbGVPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSBwYXRoIHRvIGEgcmVtb3RlIGZpbGUgaXMgdmFsaWQsIGJ1dCB0aGUgZmlsZSBpdHNlbGYgZG9lcyBub3QgZXhpc3RcbiAqIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGRlbGV0aW5nIHRoZSBmaWxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlbGV0ZUZpbGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEZWxldGVGaWxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3JlbW90ZVBhdGh9ID0gb3B0cztcbiAgaWYgKCFyZW1vdGVQYXRoKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdyZW1vdGVQYXRoJyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZvbGRlciBhbmQgbm90IHRvIGEgZmlsZS4gYCArXG4gICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgZGVsZXRlRmlsZU9yRm9sZGVyKHRoaXMuYWRiLCByZW1vdGVQYXRoKTtcbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2ZpbGUtYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9