appium-android-driver 5.7.1 → 5.7.3

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 (77) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/index.js +1 -2
  3. package/build/lib/android-helpers.js +3 -27
  4. package/build/lib/android-helpers.js.map +1 -1
  5. package/build/lib/bootstrap.js +2 -9
  6. package/build/lib/bootstrap.js.map +1 -1
  7. package/build/lib/commands/actions.js +2 -3
  8. package/build/lib/commands/actions.js.map +1 -1
  9. package/build/lib/commands/alert.js +1 -2
  10. package/build/lib/commands/alert.js.map +1 -1
  11. package/build/lib/commands/app-management.js +3 -17
  12. package/build/lib/commands/app-management.js.map +1 -1
  13. package/build/lib/commands/context.js +2 -16
  14. package/build/lib/commands/context.js.map +1 -1
  15. package/build/lib/commands/element.js +2 -5
  16. package/build/lib/commands/element.js.map +1 -1
  17. package/build/lib/commands/emu-console.js +1 -3
  18. package/build/lib/commands/emu-console.js.map +1 -1
  19. package/build/lib/commands/file-actions.js +2 -14
  20. package/build/lib/commands/file-actions.js.map +1 -1
  21. package/build/lib/commands/find.js +1 -5
  22. package/build/lib/commands/find.js.map +1 -1
  23. package/build/lib/commands/general.js +2 -15
  24. package/build/lib/commands/general.js.map +1 -1
  25. package/build/lib/commands/index.js +2 -3
  26. package/build/lib/commands/index.js.map +1 -1
  27. package/build/lib/commands/intent.js +1 -5
  28. package/build/lib/commands/intent.js.map +1 -1
  29. package/build/lib/commands/log.js +1 -4
  30. package/build/lib/commands/log.js.map +1 -1
  31. package/build/lib/commands/media-projection.js +2 -6
  32. package/build/lib/commands/media-projection.js.map +1 -1
  33. package/build/lib/commands/network.js +1 -7
  34. package/build/lib/commands/network.js.map +1 -1
  35. package/build/lib/commands/performance.js +1 -8
  36. package/build/lib/commands/performance.js.map +1 -1
  37. package/build/lib/commands/recordscreen.js +2 -4
  38. package/build/lib/commands/recordscreen.js.map +1 -1
  39. package/build/lib/commands/shell.js +2 -2
  40. package/build/lib/commands/shell.js.map +1 -1
  41. package/build/lib/commands/streamscreen.js +5 -10
  42. package/build/lib/commands/streamscreen.js.map +1 -1
  43. package/build/lib/commands/system-bars.js +1 -4
  44. package/build/lib/commands/system-bars.js.map +1 -1
  45. package/build/lib/commands/touch.js +2 -10
  46. package/build/lib/commands/touch.js.map +1 -1
  47. package/build/lib/desired-caps.js +2 -3
  48. package/build/lib/desired-caps.js.map +1 -1
  49. package/build/lib/driver.js +2 -21
  50. package/build/lib/driver.js.map +1 -1
  51. package/build/lib/logger.js +2 -2
  52. package/build/lib/logger.js.map +1 -1
  53. package/build/lib/uiautomator.js +2 -4
  54. package/build/lib/uiautomator.js.map +1 -1
  55. package/build/lib/unlock-helpers.js +2 -4
  56. package/build/lib/unlock-helpers.js.map +1 -1
  57. package/build/lib/webview-helpers.js +2 -14
  58. package/build/lib/webview-helpers.js.map +1 -1
  59. package/lib/android-helpers.js +1 -1
  60. package/lib/bootstrap.js +1 -1
  61. package/lib/commands/actions.js +1 -1
  62. package/lib/commands/app-management.js +1 -1
  63. package/lib/commands/context.js +1 -1
  64. package/lib/commands/element.js +1 -1
  65. package/lib/commands/file-actions.js +1 -1
  66. package/lib/commands/general.js +1 -1
  67. package/lib/commands/media-projection.js +1 -1
  68. package/lib/commands/recordscreen.js +1 -1
  69. package/lib/commands/shell.js +1 -1
  70. package/lib/commands/streamscreen.js +1 -1
  71. package/lib/commands/touch.js +1 -1
  72. package/lib/driver.js +1 -1
  73. package/lib/logger.js +1 -1
  74. package/lib/uiautomator.js +1 -1
  75. package/lib/unlock-helpers.js +1 -1
  76. package/lib/webview-helpers.js +1 -1
  77. package/package.json +3 -2
@@ -11,7 +11,7 @@ var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
11
11
  var _bluebird = _interopRequireDefault(require("bluebird"));
12
12
  var _driver = require("appium/driver");
13
13
  var _asyncbox = require("asyncbox");
14
- var _support = require("appium/support");
14
+ var _support = require("@appium/support");
15
15
  let commands = {},
16
16
  helpers = {},
17
17
  extensions = {};
@@ -59,7 +59,6 @@ commands.doTouchAction = async function doTouchAction(action, opts = {}) {
59
59
  this.log.errorAndThrow(`unknown action ${action}`);
60
60
  }
61
61
  };
62
-
63
62
  helpers.doTouchDrag = async function doTouchDrag(gestures) {
64
63
  let longPress = gestures[0];
65
64
  let moveTo = gestures[1];
@@ -88,10 +87,8 @@ helpers.doTouchDrag = async function doTouchDrag(gestures) {
88
87
  if (longPress.options && longPress.options.duration) {
89
88
  duration = Math.max(longPress.options.duration / 1000, duration);
90
89
  }
91
-
92
90
  return await this.drag(startX, startY, endX, endY, duration, 1, longPress.options.element, moveTo.options.element);
93
91
  };
94
-
95
92
  helpers.fixRelease = async function fixRelease(gestures) {
96
93
  let release = _lodash.default.last(gestures);
97
94
  release.options = release.options || {};
@@ -129,7 +126,6 @@ helpers.fixRelease = async function fixRelease(gestures) {
129
126
  }
130
127
  return release;
131
128
  };
132
-
133
129
  helpers.performGesture = async function performGesture(gesture) {
134
130
  try {
135
131
  return await this.doTouchAction(gesture.action, gesture.options || {});
@@ -150,7 +146,6 @@ commands.getSwipeOptions = async function getSwipeOptions(gestures, touchCount =
150
146
  duration = getSwipeTouchDuration(gestures[1]),
151
147
  element = gestures[0].options.element,
152
148
  destElement = gestures[2].options.element || gestures[0].options.element;
153
-
154
149
  if (_support.util.hasValue(destElement)) {
155
150
  let locResult = await this.getLocationInView(destElement);
156
151
  let sizeResult = await this.getSize(destElement);
@@ -188,7 +183,6 @@ commands.performTouch = async function performTouch(gestures) {
188
183
  actions[0] = 'tap';
189
184
  gestures[0].action = 'tap';
190
185
  }
191
-
192
186
  if ((_lodash.default.head(actions) === 'tap' || _lodash.default.head(actions) === 'longPress') && _lodash.default.last(actions) === 'release') {
193
187
  gestures.pop();
194
188
  actions.pop();
@@ -288,7 +282,6 @@ helpers.parseTouch = async function parseTouch(gestures, multi) {
288
282
  let timeOffset = state.timeOffset;
289
283
  time += timeOffset;
290
284
  state.time = _androidHelpers.default.truncateDecimals(time, 3);
291
-
292
285
  if (!_lodash.default.isUndefined(state.options.x) && !_lodash.default.isUndefined(state.options.y)) {
293
286
  state.touch = {
294
287
  x: state.options.x,
@@ -308,7 +301,6 @@ commands.performMultiAction = async function performMultiAction(actions, element
308
301
  const states = await (0, _asyncbox.asyncmap)(actions, async action => await this.parseTouch(action, true), false);
309
302
  return await this.doPerformMultiAction(elementId, states);
310
303
  };
311
-
312
304
  commands.doPerformMultiAction = async function doPerformMultiAction(elementId, states) {
313
305
  let opts;
314
306
  if (elementId) {
@@ -327,4 +319,4 @@ commands.doPerformMultiAction = async function doPerformMultiAction(elementId, s
327
319
  Object.assign(extensions, commands, helpers);
328
320
  var _default = extensions;
329
321
  exports.default = _default;
330
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q29vcmREZWZhdWx0IiwidmFsIiwidXRpbCIsImhhc1ZhbHVlIiwiZ2V0U3dpcGVUb3VjaER1cmF0aW9uIiwid2FpdEdlc3R1cmUiLCJkdXJhdGlvbiIsIm9wdGlvbnMiLCJtcyIsImRvVG91Y2hBY3Rpb24iLCJhY3Rpb24iLCJvcHRzIiwiZWxlbWVudCIsIngiLCJ5IiwiY291bnQiLCJ0YXAiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiQiIsImRlbGF5IiwidG91Y2hMb25nQ2xpY2siLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsImRvVG91Y2hEcmFnIiwiZ2VzdHVyZXMiLCJsb25nUHJlc3MiLCJtb3ZlVG8iLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImdldExvY2F0aW9uSW5WaWV3IiwiYXBpTGV2ZWwiLCJhZGIiLCJnZXRBcGlMZXZlbCIsIk1hdGgiLCJtYXgiLCJkcmFnIiwiZml4UmVsZWFzZSIsInJlbGVhc2UiLCJfIiwibGFzdCIsImNsb25lIiwicmVmIiwiZ2VzdHVyZSIsInJldmVyc2UiLCJsb2MiLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwicGljayIsInBlcmZvcm1HZXN0dXJlIiwiZSIsImlzRXJyb3JUeXBlIiwiZXJyb3JzIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiZGVidWciLCJnZXRTd2lwZU9wdGlvbnMiLCJ0b3VjaENvdW50IiwiZGVzdEVsZW1lbnQiLCJsb2NSZXN1bHQiLCJzaXplUmVzdWx0Iiwib2Zmc2V0WCIsImFicyIsIm9mZnNldFkiLCJmaXJzdEVsTG9jYXRpb24iLCJwZXJmb3JtVG91Y2giLCJsZW5ndGgiLCJzd2lwZU9wdHMiLCJzd2lwZSIsImFjdGlvbnMiLCJtYXAiLCJoZWFkIiwicG9wIiwic2xpY2UiLCJwcmVzcyIsInNoaWZ0Iiwid2FpdCIsImZpeGVkR2VzdHVyZXMiLCJwYXJzZVRvdWNoIiwiZyIsIm11bHRpIiwidG91Y2hTdGF0ZU9iamVjdHMiLCJhc3luY21hcCIsImluY2x1ZGVzIiwib2Zmc2V0IiwiZWxlbWVudElkIiwicG9zIiwidG91Y2hTdGF0ZU9iamVjdCIsInRpbWVPZmZzZXQiLCJwYXJzZUludCIsInByZXZQb3MiLCJ0aW1lIiwic3RhdGUiLCJpc1VuZGVmaW5lZCIsImFuZHJvaWRIZWxwZXJzIiwidHJ1bmNhdGVEZWNpbWFscyIsInRvdWNoIiwicGVyZm9ybU11bHRpQWN0aW9uIiwiRXJyb3IiLCJzdGF0ZXMiLCJkb1BlcmZvcm1NdWx0aUFjdGlvbiIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvdG91Y2guanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbmZ1bmN0aW9uIGdldENvb3JkRGVmYXVsdCAodmFsKSB7XG4gIC8vIGdvaW5nIHRoZSBsb25nIHdheSBhbmQgY2hlY2tpbmcgZm9yIHVuZGVmaW5lZCBhbmQgbnVsbCBzaW5jZVxuICAvLyB3ZSBjYW4ndCBiZSBhc3N1cmVkIGBlbElkYCBpcyBhIHN0cmluZyBhbmQgbm90IGFuIGludC4gU2FtZVxuICAvLyB0aGluZyB3aXRoIGRlc3RFbGVtZW50IGJlbG93LlxuICByZXR1cm4gdXRpbC5oYXNWYWx1ZSh2YWwpID8gdmFsIDogMC41O1xufVxuXG5mdW5jdGlvbiBnZXRTd2lwZVRvdWNoRHVyYXRpb24gKHdhaXRHZXN0dXJlKSB7XG4gIC8vIHRoZSB0b3VjaCBhY3Rpb24gYXBpIHVzZXMgbXMsIHdlIHdhbnQgc2Vjb25kc1xuICAvLyAwLjggaXMgdGhlIGRlZmF1bHQgdGltZSBmb3IgdGhlIG9wZXJhdGlvblxuICBsZXQgZHVyYXRpb24gPSAwLjg7XG4gIGlmICh0eXBlb2Ygd2FpdEdlc3R1cmUub3B0aW9ucy5tcyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2FpdEdlc3R1cmUub3B0aW9ucy5tcykge1xuICAgIGR1cmF0aW9uID0gd2FpdEdlc3R1cmUub3B0aW9ucy5tcyAvIDEwMDA7XG4gICAgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgICAvLyBzZXQgdG8gYSB2ZXJ5IGxvdyBudW1iZXIsIHNpbmNlIHRoZXkgd2FudGVkIGl0IGZhc3RcbiAgICAgIC8vIGJ1dCBiZWxvdyAwLjEgYmVjb21lcyAwIHN0ZXBzLCB3aGljaCBjYXVzZXMgZXJyb3JzXG4gICAgICBkdXJhdGlvbiA9IDAuMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGR1cmF0aW9uO1xufVxuXG5jb21tYW5kcy5kb1RvdWNoQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gZG9Ub3VjaEFjdGlvbiAoYWN0aW9uLCBvcHRzID0ge30pIHtcbiAgY29uc3QgeyBlbGVtZW50LCB4LCB5LCBjb3VudCwgbXMsIGR1cmF0aW9uIH0gPSBvcHRzO1xuICAvLyBwYXJzZVRvdWNoIHByZWNhbGN1bGF0ZXMgYWJzb2x1dGUgZWxlbWVudCBwb3NpdGlvbnNcbiAgLy8gc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwYXNzIGBlbGVtZW50YCB0byB0aGUgYWZmZWN0ZWQgZ2VzdHVyZXNcbiAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICBjYXNlICd0YXAnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudGFwKG51bGwsIHgsIHksIGNvdW50KTtcbiAgICBjYXNlICdwcmVzcyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaERvd24obnVsbCwgeCwgeSk7XG4gICAgY2FzZSAncmVsZWFzZSc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaFVwKGVsZW1lbnQsIHgsIHkpO1xuICAgIGNhc2UgJ21vdmVUbyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaE1vdmUobnVsbCwgeCwgeSk7XG4gICAgY2FzZSAnd2FpdCc6XG4gICAgICByZXR1cm4gYXdhaXQgQi5kZWxheShtcyk7XG4gICAgY2FzZSAnbG9uZ1ByZXNzJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRvdWNoTG9uZ0NsaWNrKG51bGwsIHgsIHksIGR1cmF0aW9uIHx8IDEwMDApO1xuICAgIGNhc2UgJ2NhbmNlbCc6XG4gICAgICAvLyBUT0RPOiBjbGFyaWZ5IGJlaGF2aW9yIG9mICdjYW5jZWwnIGFjdGlvbiBhbmQgZml4IHRoaXNcbiAgICAgIHRoaXMubG9nLndhcm4oJ0NhbmNlbCBhY3Rpb24gY3VycmVudGx5IGhhcyBubyBlZmZlY3QnKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGB1bmtub3duIGFjdGlvbiAke2FjdGlvbn1gKTtcbiAgfVxufTtcblxuLy8gZHJhZyBpcyAqbm90KiBwcmVzcy1tb3ZlLXJlbGVhc2UsIHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlXG4vLyBkcmFnIHdvcmtzIGZpbmUgZm9yIHNjcm9sbCwgYXMgd2VsbFxuaGVscGVycy5kb1RvdWNoRHJhZyA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hEcmFnIChnZXN0dXJlcykge1xuICBsZXQgbG9uZ1ByZXNzID0gZ2VzdHVyZXNbMF07XG4gIGxldCBtb3ZlVG8gPSBnZXN0dXJlc1sxXTtcbiAgbGV0IHN0YXJ0WCA9IGxvbmdQcmVzcy5vcHRpb25zLnggfHwgMCxcbiAgICAgIHN0YXJ0WSA9IGxvbmdQcmVzcy5vcHRpb25zLnkgfHwgMCxcbiAgICAgIGVuZFggPSBtb3ZlVG8ub3B0aW9ucy54IHx8IDAsXG4gICAgICBlbmRZID0gbW92ZVRvLm9wdGlvbnMueSB8fCAwO1xuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpO1xuICAgIHN0YXJ0WCArPSB4IHx8IDA7XG4gICAgc3RhcnRZICs9IHkgfHwgMDtcbiAgfVxuICBpZiAobW92ZVRvLm9wdGlvbnMuZWxlbWVudCkge1xuICAgIGxldCB7eCwgeX0gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG1vdmVUby5vcHRpb25zLmVsZW1lbnQpO1xuICAgIGVuZFggKz0geCB8fCAwO1xuICAgIGVuZFkgKz0geSB8fCAwO1xuICB9XG5cbiAgbGV0IGFwaUxldmVsID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgLy8gbG9sbGlwb3AgdGFrZXMgYSBsaXR0bGUgbG9uZ2VyIHRvIGdldCB0aGluZ3Mgcm9sbGluZ1xuICBsZXQgZHVyYXRpb24gPSBhcGlMZXZlbCA+PSA1ID8gMiA6IDE7XG4gIC8vIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBsb25nIHByZXNzIGhhcyBhIGR1cmF0aW9uLCB3ZSB1c2UgaXQuXG4gIGlmIChsb25nUHJlc3Mub3B0aW9ucyAmJiBsb25nUHJlc3Mub3B0aW9ucy5kdXJhdGlvbikge1xuICAgIGR1cmF0aW9uID0gTWF0aC5tYXgobG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24gLyAxMDAwLCBkdXJhdGlvbik7XG4gIH1cblxuICAvLyBgZHJhZ2Agd2lsbCB0YWtlIGNhcmUgb2Ygd2hldGhlciB0aGVyZSBpcyBhbiBlbGVtZW50IG9yIG5vdCBhdCB0aGF0IGxldmVsXG4gIHJldHVybiBhd2FpdCB0aGlzLmRyYWcoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGR1cmF0aW9uLCAxLCBsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50LCBtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbn07XG5cbi8vIFJlbGVhc2UgZ2VzdHVyZSBuZWVkcyBlbGVtZW50IG9yIGNvLW9yZGluYXRlcyB0byByZWxlYXNlIGl0IGZyb20gdGhhdCBwb3NpdGlvblxuLy8gb3IgZWxzZSByZWxlYXNlIGdlc3R1cmUgaXMgcGVyZm9ybWVkIGZyb20gY2VudGVyIG9mIHRoZSBzY3JlZW4sIHNvIHRvIGZpeCBpdFxuLy8gVGhpcyBtZXRob2Qgc2V0cyBjby1vcmRpbmF0ZXMvZWxlbWVudCB0byByZWxlYXNlIGdlc3R1cmUgaWYgaXQgaGFzIG5vIG9wdGlvbnMgc2V0IGFscmVhZHkuXG5oZWxwZXJzLmZpeFJlbGVhc2UgPSBhc3luYyBmdW5jdGlvbiBmaXhSZWxlYXNlIChnZXN0dXJlcykge1xuICBsZXQgcmVsZWFzZSA9IF8ubGFzdChnZXN0dXJlcyk7XG4gIC8vIHNvbWV0aW1lcyB0aGVyZSBhcmUgbm8gb3B0aW9uc1xuICByZWxlYXNlLm9wdGlvbnMgPSByZWxlYXNlLm9wdGlvbnMgfHwge307XG4gIC8vIG5vdGhpbmcgdG8gZG8gaWYgcmVsZWFzZSBvcHRpb25zIGFyZSBhbHJlYWR5IHNldFxuICBpZiAocmVsZWFzZS5vcHRpb25zLmVsZW1lbnQgfHwgKHJlbGVhc2Uub3B0aW9ucy54ICYmIHJlbGVhc2Uub3B0aW9ucy55KSkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyB3aXRob3V0IGNvb3JkaW5hdGVzLCBgcmVsZWFzZWAgdXNlcyB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW4sIHdoaWNoLFxuICAvLyBnZW5lcmFsbHkgc3BlYWtpbmcsIGlzIG5vdCB3aGF0IHdlIHdhbnRcbiAgLy8gdGhlcmVmb3JlOiBsb29wIGJhY2t3YXJkcyBhbmQgdXNlIHRoZSBsYXN0IGNvbW1hbmQgd2l0aCBhbiBlbGVtZW50IGFuZC9vclxuICAvLyBvZmZzZXQgY29vcmRpbmF0ZXNcbiAgZ2VzdHVyZXMgPSBfLmNsb25lKGdlc3R1cmVzKTtcbiAgbGV0IHJlZiA9IG51bGw7XG4gIGZvciAobGV0IGdlc3R1cmUgb2YgZ2VzdHVyZXMucmV2ZXJzZSgpKSB7XG4gICAgbGV0IG9wdHMgPSBnZXN0dXJlLm9wdGlvbnM7XG4gICAgaWYgKG9wdHMuZWxlbWVudCB8fCAob3B0cy54ICYmIG9wdHMueSkpIHtcbiAgICAgIHJlZiA9IGdlc3R1cmU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJlZikge1xuICAgIGxldCBvcHRzID0gcmVmLm9wdGlvbnM7XG4gICAgaWYgKG9wdHMuZWxlbWVudCkge1xuICAgICAgbGV0IGxvYyA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcob3B0cy5lbGVtZW50KTtcbiAgICAgIGlmIChvcHRzLnggJiYgb3B0cy55KSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIGVsZW1lbnRcbiAgICAgICAgcmVsZWFzZS5vcHRpb25zID0ge1xuICAgICAgICAgIHg6IGxvYy54ICsgb3B0cy54LFxuICAgICAgICAgIHk6IGxvYy55ICsgb3B0cy55XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnRcbiAgICAgICAgbGV0IHNpemUgPSBhd2FpdCB0aGlzLmdldFNpemUob3B0cy5lbGVtZW50KTtcbiAgICAgICAgcmVsZWFzZS5vcHRpb25zID0ge1xuICAgICAgICAgIHg6IGxvYy54ICsgc2l6ZS53aWR0aCAvIDIsXG4gICAgICAgICAgeTogbG9jLnkgKyBzaXplLmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVsZWFzZS5vcHRpb25zID0gXy5waWNrKG9wdHMsICd4JywgJ3knKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbGVhc2U7XG59O1xuXG4vLyBQZXJmb3JtIG9uZSBnZXN0dXJlXG5oZWxwZXJzLnBlcmZvcm1HZXN0dXJlID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUdlc3R1cmUgKGdlc3R1cmUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoQWN0aW9uKGdlc3R1cmUuYWN0aW9uLCBnZXN0dXJlLm9wdGlvbnMgfHwge30pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc29tZXRpbWUgdGhlIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHJlbGVhc2luZywgcmV0cnkgd2l0aG91dCBpdFxuICAgIGlmIChpc0Vycm9yVHlwZShlLCBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKSAmJiBnZXN0dXJlLmFjdGlvbiA9PT0gJ3JlbGVhc2UnICYmXG4gICAgICAgIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50KSB7XG4gICAgICBkZWxldGUgZ2VzdHVyZS5vcHRpb25zLmVsZW1lbnQ7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgcmV0cnlpbmcgcmVsZWFzZSB3aXRob3V0IGVsZW1lbnQgb3B0czogJHtnZXN0dXJlLm9wdGlvbnN9LmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaEFjdGlvbihnZXN0dXJlLmFjdGlvbiwgZ2VzdHVyZS5vcHRpb25zIHx8IHt9KTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0U3dpcGVPcHRpb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0U3dpcGVPcHRpb25zIChnZXN0dXJlcywgdG91Y2hDb3VudCA9IDEpIHtcbiAgbGV0IHN0YXJ0WCA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1swXS5vcHRpb25zLngpLFxuICAgICAgc3RhcnRZID0gZ2V0Q29vcmREZWZhdWx0KGdlc3R1cmVzWzBdLm9wdGlvbnMueSksXG4gICAgICBlbmRYID0gZ2V0Q29vcmREZWZhdWx0KGdlc3R1cmVzWzJdLm9wdGlvbnMueCksXG4gICAgICBlbmRZID0gZ2V0Q29vcmREZWZhdWx0KGdlc3R1cmVzWzJdLm9wdGlvbnMueSksXG4gICAgICBkdXJhdGlvbiA9IGdldFN3aXBlVG91Y2hEdXJhdGlvbihnZXN0dXJlc1sxXSksXG4gICAgICBlbGVtZW50ID0gZ2VzdHVyZXNbMF0ub3B0aW9ucy5lbGVtZW50LFxuICAgICAgZGVzdEVsZW1lbnQgPSBnZXN0dXJlc1syXS5vcHRpb25zLmVsZW1lbnQgfHwgZ2VzdHVyZXNbMF0ub3B0aW9ucy5lbGVtZW50O1xuXG4gIC8vIHRoZXJlJ3Mgbm8gZGVzdGluYXRpb24gZWxlbWVudCBoYW5kbGluZyBpbiBib290c3RyYXAgYW5kIHNpbmNlIGl0IGFwcGxpZXMgdG8gYWxsIHBsYXRmb3Jtcywgd2UgaGFuZGxlIGl0IGhlcmVcbiAgaWYgKHV0aWwuaGFzVmFsdWUoZGVzdEVsZW1lbnQpKSB7XG4gICAgbGV0IGxvY1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0TG9jYXRpb25JblZpZXcoZGVzdEVsZW1lbnQpO1xuICAgIGxldCBzaXplUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRTaXplKGRlc3RFbGVtZW50KTtcbiAgICBsZXQgb2Zmc2V0WCA9IChNYXRoLmFicyhlbmRYKSA8IDEgJiYgTWF0aC5hYnMoZW5kWCkgPiAwKSA/IHNpemVSZXN1bHQud2lkdGggKiBlbmRYIDogZW5kWDtcbiAgICBsZXQgb2Zmc2V0WSA9IChNYXRoLmFicyhlbmRZKSA8IDEgJiYgTWF0aC5hYnMoZW5kWSkgPiAwKSA/IHNpemVSZXN1bHQuaGVpZ2h0ICogZW5kWSA6IGVuZFk7XG4gICAgZW5kWCA9IGxvY1Jlc3VsdC54ICsgb2Zmc2V0WDtcbiAgICBlbmRZID0gbG9jUmVzdWx0LnkgKyBvZmZzZXRZO1xuICAgIC8vIGlmIHRoZSB0YXJnZXQgZWxlbWVudCB3YXMgcHJvdmlkZWQsIHRoZSBjb29yZGluYXRlcyBmb3IgdGhlIGRlc3RpbmF0aW9uIG5lZWQgdG8gYmUgcmVsYXRpdmUgdG8gaXQuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudCkpIHtcbiAgICAgIGxldCBmaXJzdEVsTG9jYXRpb24gPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGVsZW1lbnQpO1xuICAgICAgZW5kWCAtPSBmaXJzdEVsTG9jYXRpb24ueDtcbiAgICAgIGVuZFkgLT0gZmlyc3RFbExvY2F0aW9uLnk7XG4gICAgfVxuICB9XG4gIC8vIGNsaWVudHMgYXJlIHJlc3BvbnNpYmxlIHRvIHVzZSB0aGVzZSBvcHRpb25zIGNvcnJlY3RseVxuICByZXR1cm4ge3N0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgdG91Y2hDb3VudCwgZWxlbWVudH07XG59O1xuXG5jb21tYW5kcy5wZXJmb3JtVG91Y2ggPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtVG91Y2ggKGdlc3R1cmVzKSB7XG4gIC8vIHByZXNzLXdhaXQtbW92ZVRvLXJlbGVhc2UgaXMgYHN3aXBlYCwgc28gdXNlIG5hdGl2ZSBtZXRob2RcbiAgaWYgKGdlc3R1cmVzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgZ2VzdHVyZXNbMF0uYWN0aW9uID09PSAncHJlc3MnICYmXG4gICAgICBnZXN0dXJlc1sxXS5hY3Rpb24gPT09ICd3YWl0JyAmJlxuICAgICAgZ2VzdHVyZXNbMl0uYWN0aW9uID09PSAnbW92ZVRvJyAmJlxuICAgICAgZ2VzdHVyZXNbM10uYWN0aW9uID09PSAncmVsZWFzZScpIHtcblxuICAgIGxldCBzd2lwZU9wdHMgPSBhd2FpdCB0aGlzLmdldFN3aXBlT3B0aW9ucyhnZXN0dXJlcyk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc3dpcGUoc3dpcGVPcHRzLnN0YXJ0WCwgc3dpcGVPcHRzLnN0YXJ0WSwgc3dpcGVPcHRzLmVuZFgsXG4gICAgICAgIHN3aXBlT3B0cy5lbmRZLCBzd2lwZU9wdHMuZHVyYXRpb24sIHN3aXBlT3B0cy50b3VjaENvdW50LFxuICAgICAgICBzd2lwZU9wdHMuZWxlbWVudCk7XG4gIH1cbiAgbGV0IGFjdGlvbnMgPSBfLm1hcChnZXN0dXJlcywgJ2FjdGlvbicpO1xuXG4gIGlmIChhY3Rpb25zWzBdID09PSAnbG9uZ1ByZXNzJyAmJiBhY3Rpb25zWzFdID09PSAnbW92ZVRvJyAmJiBhY3Rpb25zWzJdID09PSAncmVsZWFzZScpIHtcbiAgICAvLyBzb21lIHRoaW5ncyBhcmUgc3BlY2lhbFxuICAgIHJldHVybiBhd2FpdCB0aGlzLmRvVG91Y2hEcmFnKGdlc3R1cmVzKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIGBwcmVzc2Agd2l0aG91dCBhIHdhaXQgaXMgdG9vIHNsb3cgYW5kIGdldHMgaW50ZXJwcmV0dGVkIGFzIGEgYGxvbmdQcmVzc2BcbiAgICAgIGlmIChfLmhlYWQoYWN0aW9ucykgPT09ICdwcmVzcycgJiYgXy5sYXN0KGFjdGlvbnMpID09PSAncmVsZWFzZScpIHtcbiAgICAgICAgYWN0aW9uc1swXSA9ICd0YXAnO1xuICAgICAgICBnZXN0dXJlc1swXS5hY3Rpb24gPSAndGFwJztcbiAgICAgIH1cblxuICAgICAgLy8gdGhlIGBsb25nUHJlc3NgIGFuZCBgdGFwYCBtZXRob2RzIHJlbGVhc2Ugb24gdGhlaXIgb3duXG4gICAgICBpZiAoKF8uaGVhZChhY3Rpb25zKSA9PT0gJ3RhcCcgfHwgXy5oZWFkKGFjdGlvbnMpID09PSAnbG9uZ1ByZXNzJykgJiYgXy5sYXN0KGFjdGlvbnMpID09PSAncmVsZWFzZScpIHtcbiAgICAgICAgZ2VzdHVyZXMucG9wKCk7XG4gICAgICAgIGFjdGlvbnMucG9wKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGxvbmdwcmVzcyBmb2xsb3dlZCBieSBhbnl0aGluZyBvdGhlciB0aGFuIHJlbGVhc2Ugc2hvdWxkIGJlY29tZSBhIHByZXNzIGFuZCB3YWl0XG4gICAgICBpZiAoYWN0aW9uc1swXSA9PT0gJ2xvbmdQcmVzcycpIHtcbiAgICAgICAgYWN0aW9ucyA9IFsncHJlc3MnLCAnd2FpdCcsIC4uLmFjdGlvbnMuc2xpY2UoMSldO1xuXG4gICAgICAgIGxldCBwcmVzcyA9IGdlc3R1cmVzLnNoaWZ0KCk7XG4gICAgICAgIHByZXNzLmFjdGlvbiA9ICdwcmVzcyc7XG4gICAgICAgIGxldCB3YWl0ID0ge1xuICAgICAgICAgIGFjdGlvbjogJ3dhaXQnLFxuICAgICAgICAgIG9wdGlvbnM6IHttczogcHJlc3Mub3B0aW9ucy5kdXJhdGlvbiB8fCAxMDAwfVxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgcHJlc3Mub3B0aW9ucy5kdXJhdGlvbjtcbiAgICAgICAgZ2VzdHVyZXMgPSBbcHJlc3MsIHdhaXQsIC4uLmdlc3R1cmVzXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZml4ZWRHZXN0dXJlcyA9IGF3YWl0IHRoaXMucGFyc2VUb3VjaChnZXN0dXJlcywgZmFsc2UpO1xuICAgIC8vIGZpeCByZWxlYXNlIGFjdGlvbiB0aGVuIHBlcmZvcm0gYWxsIGFjdGlvbnNcbiAgICBpZiAoYWN0aW9uc1thY3Rpb25zLmxlbmd0aCAtIDFdID09PSAncmVsZWFzZScpIHtcbiAgICAgIGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSA9IGF3YWl0IHRoaXMuZml4UmVsZWFzZShnZXN0dXJlcyk7XG4gICAgfVxuICAgIGZvciAobGV0IGcgb2YgZml4ZWRHZXN0dXJlcykge1xuICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtR2VzdHVyZShnKTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMucGFyc2VUb3VjaCA9IGFzeW5jIGZ1bmN0aW9uIHBhcnNlVG91Y2ggKGdlc3R1cmVzLCBtdWx0aSkge1xuICAvLyBiZWNhdXNlIG11bHRpLXRvdWNoIHJlbGVhc2VzIGF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICBpZiAobXVsdGkgJiYgXy5sYXN0KGdlc3R1cmVzKS5hY3Rpb24gPT09ICdyZWxlYXNlJykge1xuICAgIGdlc3R1cmVzLnBvcCgpO1xuICB9XG5cbiAgbGV0IHRvdWNoU3RhdGVPYmplY3RzID0gYXdhaXQgYXN5bmNtYXAoZ2VzdHVyZXMsIGFzeW5jIChnZXN0dXJlKSA9PiB7XG4gICAgbGV0IG9wdGlvbnMgPSBnZXN0dXJlLm9wdGlvbnMgfHwge307XG4gICAgaWYgKF8uaW5jbHVkZXMoWydwcmVzcycsICdtb3ZlVG8nLCAndGFwJywgJ2xvbmdQcmVzcyddLCBnZXN0dXJlLmFjdGlvbikpIHtcbiAgICAgIG9wdGlvbnMub2Zmc2V0ID0gZmFsc2U7XG4gICAgICBsZXQgZWxlbWVudElkID0gZ2VzdHVyZS5vcHRpb25zLmVsZW1lbnQ7XG4gICAgICBpZiAoZWxlbWVudElkKSB7XG4gICAgICAgIGxldCBwb3MgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGVsZW1lbnRJZCk7XG4gICAgICAgIGlmIChnZXN0dXJlLm9wdGlvbnMueCB8fCBnZXN0dXJlLm9wdGlvbnMueSkge1xuICAgICAgICAgIG9wdGlvbnMueCA9IHBvcy54ICsgKGdlc3R1cmUub3B0aW9ucy54IHx8IDApO1xuICAgICAgICAgIG9wdGlvbnMueSA9IHBvcy55ICsgKGdlc3R1cmUub3B0aW9ucy55IHx8IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0U2l6ZShlbGVtZW50SWQpO1xuICAgICAgICAgIG9wdGlvbnMueCA9IHBvcy54ICsgKHdpZHRoIC8gMik7XG4gICAgICAgICAgb3B0aW9ucy55ID0gcG9zLnkgKyAoaGVpZ2h0IC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRvdWNoU3RhdGVPYmplY3QgPSB7XG4gICAgICAgICAgYWN0aW9uOiBnZXN0dXJlLmFjdGlvbixcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRpbWVPZmZzZXQ6IDAuMDA1LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdG91Y2hTdGF0ZU9iamVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMueCA9IChnZXN0dXJlLm9wdGlvbnMueCB8fCAwKTtcbiAgICAgICAgb3B0aW9ucy55ID0gKGdlc3R1cmUub3B0aW9ucy55IHx8IDApO1xuXG4gICAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICAgIGFjdGlvbjogZ2VzdHVyZS5hY3Rpb24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICB0aW1lT2Zmc2V0OiAwLjAwNSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBvZmZzZXQgPSAwLjAwNTtcbiAgICAgIGlmIChnZXN0dXJlLmFjdGlvbiA9PT0gJ3dhaXQnKSB7XG4gICAgICAgIG9wdGlvbnMgPSBnZXN0dXJlLm9wdGlvbnM7XG4gICAgICAgIG9mZnNldCA9IChwYXJzZUludChnZXN0dXJlLm9wdGlvbnMubXMsIDEwKSAvIDEwMDApO1xuICAgICAgfVxuICAgICAgbGV0IHRvdWNoU3RhdGVPYmplY3QgPSB7XG4gICAgICAgIGFjdGlvbjogZ2VzdHVyZS5hY3Rpb24sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHRpbWVPZmZzZXQ6IG9mZnNldCxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdG91Y2hTdGF0ZU9iamVjdDtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgLy8gd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHRpbWUgKHdoaWNoIGlzIG5vdyBhbiBvZmZzZXQpXG4gIC8vIGFuZCB0aGUgcG9zaXRpb24gKHdoaWNoIG1heSBiZSBhbiBvZmZzZXQpXG4gIGxldCBwcmV2UG9zID0gbnVsbCxcbiAgICAgIHRpbWUgPSAwO1xuICBmb3IgKGxldCBzdGF0ZSBvZiB0b3VjaFN0YXRlT2JqZWN0cykge1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLnkpICYmIHByZXZQb3MgIT09IG51bGwpIHtcbiAgICAgIC8vIHRoaXMgaGFwcGVucyB3aXRoIHdhaXRcbiAgICAgIHN0YXRlLm9wdGlvbnMueCA9IHByZXZQb3MueDtcbiAgICAgIHN0YXRlLm9wdGlvbnMueSA9IHByZXZQb3MueTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLm9wdGlvbnMub2Zmc2V0ICYmIHByZXZQb3MpIHtcbiAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGFuIG9mZnNldFxuICAgICAgc3RhdGUub3B0aW9ucy54ICs9IHByZXZQb3MueDtcbiAgICAgIHN0YXRlLm9wdGlvbnMueSArPSBwcmV2UG9zLnk7XG4gICAgfVxuICAgIGRlbGV0ZSBzdGF0ZS5vcHRpb25zLm9mZnNldDtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy54KSAmJiAhXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLnkpKSB7XG4gICAgICBwcmV2UG9zID0gc3RhdGUub3B0aW9ucztcbiAgICB9XG5cbiAgICBpZiAobXVsdGkpIHtcbiAgICAgIGxldCB0aW1lT2Zmc2V0ID0gc3RhdGUudGltZU9mZnNldDtcbiAgICAgIHRpbWUgKz0gdGltZU9mZnNldDtcbiAgICAgIHN0YXRlLnRpbWUgPSBhbmRyb2lkSGVscGVycy50cnVuY2F0ZURlY2ltYWxzKHRpbWUsIDMpO1xuXG4gICAgICAvLyBtdWx0aSBnZXN0dXJlcyByZXF1aXJlICd0b3VjaCcgcmF0aGVyIHRoYW4gJ29wdGlvbnMnXG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy54KSAmJiAhXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLnkpKSB7XG4gICAgICAgIHN0YXRlLnRvdWNoID0ge1xuICAgICAgICAgIHg6IHN0YXRlLm9wdGlvbnMueCxcbiAgICAgICAgICB5OiBzdGF0ZS5vcHRpb25zLnlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBzdGF0ZS5vcHRpb25zO1xuICAgIH1cbiAgICBkZWxldGUgc3RhdGUudGltZU9mZnNldDtcbiAgfVxuICByZXR1cm4gdG91Y2hTdGF0ZU9iamVjdHM7XG59O1xuXG5cbmNvbW1hbmRzLnBlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1NdWx0aUFjdGlvbiAoYWN0aW9ucywgZWxlbWVudElkKSB7XG4gIC8vIEFuZHJvaWQgbmVlZHMgYXQgbGVhc3QgdHdvIGFjdGlvbnMgdG8gYmUgYWJsZSB0byBwZXJmb3JtIGEgbXVsdGkgcG9pbnRlciBnZXN0dXJlXG4gIGlmIChhY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVsdGkgUG9pbnRlciBHZXN0dXJlcyBuZWVkIGF0IGxlYXN0IHR3byBhY3Rpb25zLiAnICtcbiAgICAgICAgJ1VzZSBUb3VjaCBBY3Rpb25zIGZvciBhIHNpbmdsZSBhY3Rpb24uJyk7XG4gIH1cblxuICBjb25zdCBzdGF0ZXMgPSBhd2FpdCBhc3luY21hcChhY3Rpb25zLCBhc3luYyAoYWN0aW9uKSA9PiBhd2FpdCB0aGlzLnBhcnNlVG91Y2goYWN0aW9uLCB0cnVlKSwgZmFsc2UpO1xuXG4gIHJldHVybiBhd2FpdCB0aGlzLmRvUGVyZm9ybU11bHRpQWN0aW9uKGVsZW1lbnRJZCwgc3RhdGVzKTtcbn07XG5cbi8qKlxuICogUmVhc29uIGZvciBpc29sYXRpbmcgZG9QZXJmb3JtTXVsdGlBY3Rpb24gZnJvbSBwZXJmb3JtTXVsdGlBY3Rpb24gaXMgZm9yIHJldXNpbmcgcGVyZm9ybU11bHRpQWN0aW9uXG4gKiBhY3Jvc3MgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBhbmQgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi5cbiAqIE90aGVyIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgbmVlZCB0byBvdmVycmlkZSBkb1BlcmZvcm1NdWx0aUFjdGlvblxuICogdG8gZmFjaWxpdGF0ZSBwZXJmb3JtTXVsdGlBY3Rpb24uXG4gKi9cbmNvbW1hbmRzLmRvUGVyZm9ybU11bHRpQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gZG9QZXJmb3JtTXVsdGlBY3Rpb24gKGVsZW1lbnRJZCwgc3RhdGVzKSB7XG4gIGxldCBvcHRzO1xuICBpZiAoZWxlbWVudElkKSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6cGVyZm9ybU11bHRpUG9pbnRlckdlc3R1cmUnLCBvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzID0ge1xuICAgICAgYWN0aW9uczogc3RhdGVzXG4gICAgfTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigncGVyZm9ybU11bHRpUG9pbnRlckdlc3R1cmUnLCBvcHRzKTtcbiAgfVxufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQUE7QUFFakQsU0FBU0MsZUFBZSxDQUFFQyxHQUFHLEVBQUU7RUFJN0IsT0FBT0MsYUFBSSxDQUFDQyxRQUFRLENBQUNGLEdBQUcsQ0FBQyxHQUFHQSxHQUFHLEdBQUcsR0FBRztBQUN2QztBQUVBLFNBQVNHLHFCQUFxQixDQUFFQyxXQUFXLEVBQUU7RUFHM0MsSUFBSUMsUUFBUSxHQUFHLEdBQUc7RUFDbEIsSUFBSSxPQUFPRCxXQUFXLENBQUNFLE9BQU8sQ0FBQ0MsRUFBRSxLQUFLLFdBQVcsSUFBSUgsV0FBVyxDQUFDRSxPQUFPLENBQUNDLEVBQUUsRUFBRTtJQUMzRUYsUUFBUSxHQUFHRCxXQUFXLENBQUNFLE9BQU8sQ0FBQ0MsRUFBRSxHQUFHLElBQUk7SUFDeEMsSUFBSUYsUUFBUSxLQUFLLENBQUMsRUFBRTtNQUdsQkEsUUFBUSxHQUFH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
322
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q29vcmREZWZhdWx0IiwidmFsIiwidXRpbCIsImhhc1ZhbHVlIiwiZ2V0U3dpcGVUb3VjaER1cmF0aW9uIiwid2FpdEdlc3R1cmUiLCJkdXJhdGlvbiIsIm9wdGlvbnMiLCJtcyIsImRvVG91Y2hBY3Rpb24iLCJhY3Rpb24iLCJvcHRzIiwiZWxlbWVudCIsIngiLCJ5IiwiY291bnQiLCJ0YXAiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiQiIsImRlbGF5IiwidG91Y2hMb25nQ2xpY2siLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsImRvVG91Y2hEcmFnIiwiZ2VzdHVyZXMiLCJsb25nUHJlc3MiLCJtb3ZlVG8iLCJzdGFydFgiLCJzdGFydFkiLCJlbmRYIiwiZW5kWSIsImdldExvY2F0aW9uSW5WaWV3IiwiYXBpTGV2ZWwiLCJhZGIiLCJnZXRBcGlMZXZlbCIsIk1hdGgiLCJtYXgiLCJkcmFnIiwiZml4UmVsZWFzZSIsInJlbGVhc2UiLCJfIiwibGFzdCIsImNsb25lIiwicmVmIiwiZ2VzdHVyZSIsInJldmVyc2UiLCJsb2MiLCJzaXplIiwiZ2V0U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwicGljayIsInBlcmZvcm1HZXN0dXJlIiwiZSIsImlzRXJyb3JUeXBlIiwiZXJyb3JzIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiZGVidWciLCJnZXRTd2lwZU9wdGlvbnMiLCJ0b3VjaENvdW50IiwiZGVzdEVsZW1lbnQiLCJsb2NSZXN1bHQiLCJzaXplUmVzdWx0Iiwib2Zmc2V0WCIsImFicyIsIm9mZnNldFkiLCJmaXJzdEVsTG9jYXRpb24iLCJwZXJmb3JtVG91Y2giLCJsZW5ndGgiLCJzd2lwZU9wdHMiLCJzd2lwZSIsImFjdGlvbnMiLCJtYXAiLCJoZWFkIiwicG9wIiwic2xpY2UiLCJwcmVzcyIsInNoaWZ0Iiwid2FpdCIsImZpeGVkR2VzdHVyZXMiLCJwYXJzZVRvdWNoIiwiZyIsIm11bHRpIiwidG91Y2hTdGF0ZU9iamVjdHMiLCJhc3luY21hcCIsImluY2x1ZGVzIiwib2Zmc2V0IiwiZWxlbWVudElkIiwicG9zIiwidG91Y2hTdGF0ZU9iamVjdCIsInRpbWVPZmZzZXQiLCJwYXJzZUludCIsInByZXZQb3MiLCJ0aW1lIiwic3RhdGUiLCJpc1VuZGVmaW5lZCIsImFuZHJvaWRIZWxwZXJzIiwidHJ1bmNhdGVEZWNpbWFscyIsInRvdWNoIiwicGVyZm9ybU11bHRpQWN0aW9uIiwiRXJyb3IiLCJzdGF0ZXMiLCJkb1BlcmZvcm1NdWx0aUFjdGlvbiIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvdG91Y2guanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBpc0Vycm9yVHlwZSB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgYXN5bmNtYXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDb29yZERlZmF1bHQgKHZhbCkge1xuICAvLyBnb2luZyB0aGUgbG9uZyB3YXkgYW5kIGNoZWNraW5nIGZvciB1bmRlZmluZWQgYW5kIG51bGwgc2luY2VcbiAgLy8gd2UgY2FuJ3QgYmUgYXNzdXJlZCBgZWxJZGAgaXMgYSBzdHJpbmcgYW5kIG5vdCBhbiBpbnQuIFNhbWVcbiAgLy8gdGhpbmcgd2l0aCBkZXN0RWxlbWVudCBiZWxvdy5cbiAgcmV0dXJuIHV0aWwuaGFzVmFsdWUodmFsKSA/IHZhbCA6IDAuNTtcbn1cblxuZnVuY3Rpb24gZ2V0U3dpcGVUb3VjaER1cmF0aW9uICh3YWl0R2VzdHVyZSkge1xuICAvLyB0aGUgdG91Y2ggYWN0aW9uIGFwaSB1c2VzIG1zLCB3ZSB3YW50IHNlY29uZHNcbiAgLy8gMC44IGlzIHRoZSBkZWZhdWx0IHRpbWUgZm9yIHRoZSBvcGVyYXRpb25cbiAgbGV0IGR1cmF0aW9uID0gMC44O1xuICBpZiAodHlwZW9mIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgIT09ICd1bmRlZmluZWQnICYmIHdhaXRHZXN0dXJlLm9wdGlvbnMubXMpIHtcbiAgICBkdXJhdGlvbiA9IHdhaXRHZXN0dXJlLm9wdGlvbnMubXMgLyAxMDAwO1xuICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgLy8gc2V0IHRvIGEgdmVyeSBsb3cgbnVtYmVyLCBzaW5jZSB0aGV5IHdhbnRlZCBpdCBmYXN0XG4gICAgICAvLyBidXQgYmVsb3cgMC4xIGJlY29tZXMgMCBzdGVwcywgd2hpY2ggY2F1c2VzIGVycm9yc1xuICAgICAgZHVyYXRpb24gPSAwLjE7XG4gICAgfVxuICB9XG4gIHJldHVybiBkdXJhdGlvbjtcbn1cblxuY29tbWFuZHMuZG9Ub3VjaEFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvVG91Y2hBY3Rpb24gKGFjdGlvbiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgZWxlbWVudCwgeCwgeSwgY291bnQsIG1zLCBkdXJhdGlvbiB9ID0gb3B0cztcbiAgLy8gcGFyc2VUb3VjaCBwcmVjYWxjdWxhdGVzIGFic29sdXRlIGVsZW1lbnQgcG9zaXRpb25zXG4gIC8vIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFzcyBgZWxlbWVudGAgdG8gdGhlIGFmZmVjdGVkIGdlc3R1cmVzXG4gIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgY2FzZSAndGFwJzpcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRhcChudWxsLCB4LCB5LCBjb3VudCk7XG4gICAgY2FzZSAncHJlc3MnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hEb3duKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3JlbGVhc2UnOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hVcChlbGVtZW50LCB4LCB5KTtcbiAgICBjYXNlICdtb3ZlVG8nOlxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudG91Y2hNb3ZlKG51bGwsIHgsIHkpO1xuICAgIGNhc2UgJ3dhaXQnOlxuICAgICAgcmV0dXJuIGF3YWl0IEIuZGVsYXkobXMpO1xuICAgIGNhc2UgJ2xvbmdQcmVzcyc6XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50b3VjaExvbmdDbGljayhudWxsLCB4LCB5LCBkdXJhdGlvbiB8fCAxMDAwKTtcbiAgICBjYXNlICdjYW5jZWwnOlxuICAgICAgLy8gVE9ETzogY2xhcmlmeSBiZWhhdmlvciBvZiAnY2FuY2VsJyBhY3Rpb24gYW5kIGZpeCB0aGlzXG4gICAgICB0aGlzLmxvZy53YXJuKCdDYW5jZWwgYWN0aW9uIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0Jyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgdW5rbm93biBhY3Rpb24gJHthY3Rpb259YCk7XG4gIH1cbn07XG5cbi8vIGRyYWcgaXMgKm5vdCogcHJlc3MtbW92ZS1yZWxlYXNlLCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZVxuLy8gZHJhZyB3b3JrcyBmaW5lIGZvciBzY3JvbGwsIGFzIHdlbGxcbmhlbHBlcnMuZG9Ub3VjaERyYWcgPSBhc3luYyBmdW5jdGlvbiBkb1RvdWNoRHJhZyAoZ2VzdHVyZXMpIHtcbiAgbGV0IGxvbmdQcmVzcyA9IGdlc3R1cmVzWzBdO1xuICBsZXQgbW92ZVRvID0gZ2VzdHVyZXNbMV07XG4gIGxldCBzdGFydFggPSBsb25nUHJlc3Mub3B0aW9ucy54IHx8IDAsXG4gICAgICBzdGFydFkgPSBsb25nUHJlc3Mub3B0aW9ucy55IHx8IDAsXG4gICAgICBlbmRYID0gbW92ZVRvLm9wdGlvbnMueCB8fCAwLFxuICAgICAgZW5kWSA9IG1vdmVUby5vcHRpb25zLnkgfHwgMDtcbiAgaWYgKGxvbmdQcmVzcy5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhsb25nUHJlc3Mub3B0aW9ucy5lbGVtZW50KTtcbiAgICBzdGFydFggKz0geCB8fCAwO1xuICAgIHN0YXJ0WSArPSB5IHx8IDA7XG4gIH1cbiAgaWYgKG1vdmVUby5vcHRpb25zLmVsZW1lbnQpIHtcbiAgICBsZXQge3gsIHl9ID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhtb3ZlVG8ub3B0aW9ucy5lbGVtZW50KTtcbiAgICBlbmRYICs9IHggfHwgMDtcbiAgICBlbmRZICs9IHkgfHwgMDtcbiAgfVxuXG4gIGxldCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG4gIC8vIGxvbGxpcG9wIHRha2VzIGEgbGl0dGxlIGxvbmdlciB0byBnZXQgdGhpbmdzIHJvbGxpbmdcbiAgbGV0IGR1cmF0aW9uID0gYXBpTGV2ZWwgPj0gNSA/IDIgOiAxO1xuICAvLyBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgbG9uZyBwcmVzcyBoYXMgYSBkdXJhdGlvbiwgd2UgdXNlIGl0LlxuICBpZiAobG9uZ1ByZXNzLm9wdGlvbnMgJiYgbG9uZ1ByZXNzLm9wdGlvbnMuZHVyYXRpb24pIHtcbiAgICBkdXJhdGlvbiA9IE1hdGgubWF4KGxvbmdQcmVzcy5vcHRpb25zLmR1cmF0aW9uIC8gMTAwMCwgZHVyYXRpb24pO1xuICB9XG5cbiAgLy8gYGRyYWdgIHdpbGwgdGFrZSBjYXJlIG9mIHdoZXRoZXIgdGhlcmUgaXMgYW4gZWxlbWVudCBvciBub3QgYXQgdGhhdCBsZXZlbFxuICByZXR1cm4gYXdhaXQgdGhpcy5kcmFnKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkdXJhdGlvbiwgMSwgbG9uZ1ByZXNzLm9wdGlvbnMuZWxlbWVudCwgbW92ZVRvLm9wdGlvbnMuZWxlbWVudCk7XG59O1xuXG4vLyBSZWxlYXNlIGdlc3R1cmUgbmVlZHMgZWxlbWVudCBvciBjby1vcmRpbmF0ZXMgdG8gcmVsZWFzZSBpdCBmcm9tIHRoYXQgcG9zaXRpb25cbi8vIG9yIGVsc2UgcmVsZWFzZSBnZXN0dXJlIGlzIHBlcmZvcm1lZCBmcm9tIGNlbnRlciBvZiB0aGUgc2NyZWVuLCBzbyB0byBmaXggaXRcbi8vIFRoaXMgbWV0aG9kIHNldHMgY28tb3JkaW5hdGVzL2VsZW1lbnQgdG8gcmVsZWFzZSBnZXN0dXJlIGlmIGl0IGhhcyBubyBvcHRpb25zIHNldCBhbHJlYWR5LlxuaGVscGVycy5maXhSZWxlYXNlID0gYXN5bmMgZnVuY3Rpb24gZml4UmVsZWFzZSAoZ2VzdHVyZXMpIHtcbiAgbGV0IHJlbGVhc2UgPSBfLmxhc3QoZ2VzdHVyZXMpO1xuICAvLyBzb21ldGltZXMgdGhlcmUgYXJlIG5vIG9wdGlvbnNcbiAgcmVsZWFzZS5vcHRpb25zID0gcmVsZWFzZS5vcHRpb25zIHx8IHt9O1xuICAvLyBub3RoaW5nIHRvIGRvIGlmIHJlbGVhc2Ugb3B0aW9ucyBhcmUgYWxyZWFkeSBzZXRcbiAgaWYgKHJlbGVhc2Uub3B0aW9ucy5lbGVtZW50IHx8IChyZWxlYXNlLm9wdGlvbnMueCAmJiByZWxlYXNlLm9wdGlvbnMueSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gd2l0aG91dCBjb29yZGluYXRlcywgYHJlbGVhc2VgIHVzZXMgdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLCB3aGljaCxcbiAgLy8gZ2VuZXJhbGx5IHNwZWFraW5nLCBpcyBub3Qgd2hhdCB3ZSB3YW50XG4gIC8vIHRoZXJlZm9yZTogbG9vcCBiYWNrd2FyZHMgYW5kIHVzZSB0aGUgbGFzdCBjb21tYW5kIHdpdGggYW4gZWxlbWVudCBhbmQvb3JcbiAgLy8gb2Zmc2V0IGNvb3JkaW5hdGVzXG4gIGdlc3R1cmVzID0gXy5jbG9uZShnZXN0dXJlcyk7XG4gIGxldCByZWYgPSBudWxsO1xuICBmb3IgKGxldCBnZXN0dXJlIG9mIGdlc3R1cmVzLnJldmVyc2UoKSkge1xuICAgIGxldCBvcHRzID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQgfHwgKG9wdHMueCAmJiBvcHRzLnkpKSB7XG4gICAgICByZWYgPSBnZXN0dXJlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyZWYpIHtcbiAgICBsZXQgb3B0cyA9IHJlZi5vcHRpb25zO1xuICAgIGlmIChvcHRzLmVsZW1lbnQpIHtcbiAgICAgIGxldCBsb2MgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KG9wdHMuZWxlbWVudCk7XG4gICAgICBpZiAob3B0cy54ICYmIG9wdHMueSkge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIG9mZnNldCBmcm9tIHRoZSBlbGVtZW50XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIG9wdHMueCxcbiAgICAgICAgICB5OiBsb2MueSArIG9wdHMueVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50XG4gICAgICAgIGxldCBzaXplID0gYXdhaXQgdGhpcy5nZXRTaXplKG9wdHMuZWxlbWVudCk7XG4gICAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IHtcbiAgICAgICAgICB4OiBsb2MueCArIHNpemUud2lkdGggLyAyLFxuICAgICAgICAgIHk6IGxvYy55ICsgc2l6ZS5oZWlnaHQgLyAyXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGVhc2Uub3B0aW9ucyA9IF8ucGljayhvcHRzLCAneCcsICd5Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWxlYXNlO1xufTtcblxuLy8gUGVyZm9ybSBvbmUgZ2VzdHVyZVxuaGVscGVycy5wZXJmb3JtR2VzdHVyZSA9IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1HZXN0dXJlIChnZXN0dXJlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZG9Ub3VjaEFjdGlvbihnZXN0dXJlLmFjdGlvbiwgZ2VzdHVyZS5vcHRpb25zIHx8IHt9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHNvbWV0aW1lIHRoZSBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgd2hlbiByZWxlYXNpbmcsIHJldHJ5IHdpdGhvdXQgaXRcbiAgICBpZiAoaXNFcnJvclR5cGUoZSwgZXJyb3JzLk5vU3VjaEVsZW1lbnRFcnJvcikgJiYgZ2VzdHVyZS5hY3Rpb24gPT09ICdyZWxlYXNlJyAmJlxuICAgICAgICBnZXN0dXJlLm9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgZGVsZXRlIGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgdGhpcy5sb2cuZGVidWcoYHJldHJ5aW5nIHJlbGVhc2Ugd2l0aG91dCBlbGVtZW50IG9wdHM6ICR7Z2VzdHVyZS5vcHRpb25zfS5gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvVG91Y2hBY3Rpb24oZ2VzdHVyZS5hY3Rpb24sIGdlc3R1cmUub3B0aW9ucyB8fCB7fSk7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldFN3aXBlT3B0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN3aXBlT3B0aW9ucyAoZ2VzdHVyZXMsIHRvdWNoQ291bnQgPSAxKSB7XG4gIGxldCBzdGFydFggPSBnZXRDb29yZERlZmF1bHQoZ2VzdHVyZXNbMF0ub3B0aW9ucy54KSxcbiAgICAgIHN0YXJ0WSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1swXS5vcHRpb25zLnkpLFxuICAgICAgZW5kWCA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLngpLFxuICAgICAgZW5kWSA9IGdldENvb3JkRGVmYXVsdChnZXN0dXJlc1syXS5vcHRpb25zLnkpLFxuICAgICAgZHVyYXRpb24gPSBnZXRTd2lwZVRvdWNoRHVyYXRpb24oZ2VzdHVyZXNbMV0pLFxuICAgICAgZWxlbWVudCA9IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGRlc3RFbGVtZW50ID0gZ2VzdHVyZXNbMl0ub3B0aW9ucy5lbGVtZW50IHx8IGdlc3R1cmVzWzBdLm9wdGlvbnMuZWxlbWVudDtcblxuICAvLyB0aGVyZSdzIG5vIGRlc3RpbmF0aW9uIGVsZW1lbnQgaGFuZGxpbmcgaW4gYm9vdHN0cmFwIGFuZCBzaW5jZSBpdCBhcHBsaWVzIHRvIGFsbCBwbGF0Zm9ybXMsIHdlIGhhbmRsZSBpdCBoZXJlXG4gIGlmICh1dGlsLmhhc1ZhbHVlKGRlc3RFbGVtZW50KSkge1xuICAgIGxldCBsb2NSZXN1bHQgPSBhd2FpdCB0aGlzLmdldExvY2F0aW9uSW5WaWV3KGRlc3RFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0U2l6ZShkZXN0RWxlbWVudCk7XG4gICAgbGV0IG9mZnNldFggPSAoTWF0aC5hYnMoZW5kWCkgPCAxICYmIE1hdGguYWJzKGVuZFgpID4gMCkgPyBzaXplUmVzdWx0LndpZHRoICogZW5kWCA6IGVuZFg7XG4gICAgbGV0IG9mZnNldFkgPSAoTWF0aC5hYnMoZW5kWSkgPCAxICYmIE1hdGguYWJzKGVuZFkpID4gMCkgPyBzaXplUmVzdWx0LmhlaWdodCAqIGVuZFkgOiBlbmRZO1xuICAgIGVuZFggPSBsb2NSZXN1bHQueCArIG9mZnNldFg7XG4gICAgZW5kWSA9IGxvY1Jlc3VsdC55ICsgb2Zmc2V0WTtcbiAgICAvLyBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgd2FzIHByb3ZpZGVkLCB0aGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBkZXN0aW5hdGlvbiBuZWVkIHRvIGJlIHJlbGF0aXZlIHRvIGl0LlxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnQpKSB7XG4gICAgICBsZXQgZmlyc3RFbExvY2F0aW9uID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50KTtcbiAgICAgIGVuZFggLT0gZmlyc3RFbExvY2F0aW9uLng7XG4gICAgICBlbmRZIC09IGZpcnN0RWxMb2NhdGlvbi55O1xuICAgIH1cbiAgfVxuICAvLyBjbGllbnRzIGFyZSByZXNwb25zaWJsZSB0byB1c2UgdGhlc2Ugb3B0aW9ucyBjb3JyZWN0bHlcbiAgcmV0dXJuIHtzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHVyYXRpb24sIHRvdWNoQ291bnQsIGVsZW1lbnR9O1xufTtcblxuY29tbWFuZHMucGVyZm9ybVRvdWNoID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVRvdWNoIChnZXN0dXJlcykge1xuICAvLyBwcmVzcy13YWl0LW1vdmVUby1yZWxlYXNlIGlzIGBzd2lwZWAsIHNvIHVzZSBuYXRpdmUgbWV0aG9kXG4gIGlmIChnZXN0dXJlcy5sZW5ndGggPT09IDQgJiZcbiAgICAgIGdlc3R1cmVzWzBdLmFjdGlvbiA9PT0gJ3ByZXNzJyAmJlxuICAgICAgZ2VzdHVyZXNbMV0uYWN0aW9uID09PSAnd2FpdCcgJiZcbiAgICAgIGdlc3R1cmVzWzJdLmFjdGlvbiA9PT0gJ21vdmVUbycgJiZcbiAgICAgIGdlc3R1cmVzWzNdLmFjdGlvbiA9PT0gJ3JlbGVhc2UnKSB7XG5cbiAgICBsZXQgc3dpcGVPcHRzID0gYXdhaXQgdGhpcy5nZXRTd2lwZU9wdGlvbnMoZ2VzdHVyZXMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnN3aXBlKHN3aXBlT3B0cy5zdGFydFgsIHN3aXBlT3B0cy5zdGFydFksIHN3aXBlT3B0cy5lbmRYLFxuICAgICAgICBzd2lwZU9wdHMuZW5kWSwgc3dpcGVPcHRzLmR1cmF0aW9uLCBzd2lwZU9wdHMudG91Y2hDb3VudCxcbiAgICAgICAgc3dpcGVPcHRzLmVsZW1lbnQpO1xuICB9XG4gIGxldCBhY3Rpb25zID0gXy5tYXAoZ2VzdHVyZXMsICdhY3Rpb24nKTtcblxuICBpZiAoYWN0aW9uc1swXSA9PT0gJ2xvbmdQcmVzcycgJiYgYWN0aW9uc1sxXSA9PT0gJ21vdmVUbycgJiYgYWN0aW9uc1syXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgLy8gc29tZSB0aGluZ3MgYXJlIHNwZWNpYWxcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5kb1RvdWNoRHJhZyhnZXN0dXJlcyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGFjdGlvbnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBgcHJlc3NgIHdpdGhvdXQgYSB3YWl0IGlzIHRvbyBzbG93IGFuZCBnZXRzIGludGVycHJldHRlZCBhcyBhIGBsb25nUHJlc3NgXG4gICAgICBpZiAoXy5oZWFkKGFjdGlvbnMpID09PSAncHJlc3MnICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGFjdGlvbnNbMF0gPSAndGFwJztcbiAgICAgICAgZ2VzdHVyZXNbMF0uYWN0aW9uID0gJ3RhcCc7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoZSBgbG9uZ1ByZXNzYCBhbmQgYHRhcGAgbWV0aG9kcyByZWxlYXNlIG9uIHRoZWlyIG93blxuICAgICAgaWYgKChfLmhlYWQoYWN0aW9ucykgPT09ICd0YXAnIHx8IF8uaGVhZChhY3Rpb25zKSA9PT0gJ2xvbmdQcmVzcycpICYmIF8ubGFzdChhY3Rpb25zKSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgIGdlc3R1cmVzLnBvcCgpO1xuICAgICAgICBhY3Rpb25zLnBvcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBsb25ncHJlc3MgZm9sbG93ZWQgYnkgYW55dGhpbmcgb3RoZXIgdGhhbiByZWxlYXNlIHNob3VsZCBiZWNvbWUgYSBwcmVzcyBhbmQgd2FpdFxuICAgICAgaWYgKGFjdGlvbnNbMF0gPT09ICdsb25nUHJlc3MnKSB7XG4gICAgICAgIGFjdGlvbnMgPSBbJ3ByZXNzJywgJ3dhaXQnLCAuLi5hY3Rpb25zLnNsaWNlKDEpXTtcblxuICAgICAgICBsZXQgcHJlc3MgPSBnZXN0dXJlcy5zaGlmdCgpO1xuICAgICAgICBwcmVzcy5hY3Rpb24gPSAncHJlc3MnO1xuICAgICAgICBsZXQgd2FpdCA9IHtcbiAgICAgICAgICBhY3Rpb246ICd3YWl0JyxcbiAgICAgICAgICBvcHRpb25zOiB7bXM6IHByZXNzLm9wdGlvbnMuZHVyYXRpb24gfHwgMTAwMH1cbiAgICAgICAgfTtcbiAgICAgICAgZGVsZXRlIHByZXNzLm9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIGdlc3R1cmVzID0gW3ByZXNzLCB3YWl0LCAuLi5nZXN0dXJlc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZpeGVkR2VzdHVyZXMgPSBhd2FpdCB0aGlzLnBhcnNlVG91Y2goZ2VzdHVyZXMsIGZhbHNlKTtcbiAgICAvLyBmaXggcmVsZWFzZSBhY3Rpb24gdGhlbiBwZXJmb3JtIGFsbCBhY3Rpb25zXG4gICAgaWYgKGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0gPSBhd2FpdCB0aGlzLmZpeFJlbGVhc2UoZ2VzdHVyZXMpO1xuICAgIH1cbiAgICBmb3IgKGxldCBnIG9mIGZpeGVkR2VzdHVyZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybUdlc3R1cmUoZyk7XG4gICAgfVxuICB9XG59O1xuXG5oZWxwZXJzLnBhcnNlVG91Y2ggPSBhc3luYyBmdW5jdGlvbiBwYXJzZVRvdWNoIChnZXN0dXJlcywgbXVsdGkpIHtcbiAgLy8gYmVjYXVzZSBtdWx0aS10b3VjaCByZWxlYXNlcyBhdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgaWYgKG11bHRpICYmIF8ubGFzdChnZXN0dXJlcykuYWN0aW9uID09PSAncmVsZWFzZScpIHtcbiAgICBnZXN0dXJlcy5wb3AoKTtcbiAgfVxuXG4gIGxldCB0b3VjaFN0YXRlT2JqZWN0cyA9IGF3YWl0IGFzeW5jbWFwKGdlc3R1cmVzLCBhc3luYyAoZ2VzdHVyZSkgPT4ge1xuICAgIGxldCBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zIHx8IHt9O1xuICAgIGlmIChfLmluY2x1ZGVzKFsncHJlc3MnLCAnbW92ZVRvJywgJ3RhcCcsICdsb25nUHJlc3MnXSwgZ2VzdHVyZS5hY3Rpb24pKSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IGZhbHNlO1xuICAgICAgbGV0IGVsZW1lbnRJZCA9IGdlc3R1cmUub3B0aW9ucy5lbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnRJZCkge1xuICAgICAgICBsZXQgcG9zID0gYXdhaXQgdGhpcy5nZXRMb2NhdGlvbkluVmlldyhlbGVtZW50SWQpO1xuICAgICAgICBpZiAoZ2VzdHVyZS5vcHRpb25zLnggfHwgZ2VzdHVyZS5vcHRpb25zLnkpIHtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArIChnZXN0dXJlLm9wdGlvbnMueCB8fCAwKTtcbiAgICAgICAgICBvcHRpb25zLnkgPSBwb3MueSArIChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmdldFNpemUoZWxlbWVudElkKTtcbiAgICAgICAgICBvcHRpb25zLnggPSBwb3MueCArICh3aWR0aCAvIDIpO1xuICAgICAgICAgIG9wdGlvbnMueSA9IHBvcy55ICsgKGhlaWdodCAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICAgIGFjdGlvbjogZ2VzdHVyZS5hY3Rpb24sXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICB0aW1lT2Zmc2V0OiAwLjAwNSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnggPSAoZ2VzdHVyZS5vcHRpb25zLnggfHwgMCk7XG4gICAgICAgIG9wdGlvbnMueSA9IChnZXN0dXJlLm9wdGlvbnMueSB8fCAwKTtcblxuICAgICAgICBsZXQgdG91Y2hTdGF0ZU9iamVjdCA9IHtcbiAgICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgdGltZU9mZnNldDogMC4wMDUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0b3VjaFN0YXRlT2JqZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgb2Zmc2V0ID0gMC4wMDU7XG4gICAgICBpZiAoZ2VzdHVyZS5hY3Rpb24gPT09ICd3YWl0Jykge1xuICAgICAgICBvcHRpb25zID0gZ2VzdHVyZS5vcHRpb25zO1xuICAgICAgICBvZmZzZXQgPSAocGFyc2VJbnQoZ2VzdHVyZS5vcHRpb25zLm1zLCAxMCkgLyAxMDAwKTtcbiAgICAgIH1cbiAgICAgIGxldCB0b3VjaFN0YXRlT2JqZWN0ID0ge1xuICAgICAgICBhY3Rpb246IGdlc3R1cmUuYWN0aW9uLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0aW1lT2Zmc2V0OiBvZmZzZXQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3Q7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIC8vIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSB0aW1lICh3aGljaCBpcyBub3cgYW4gb2Zmc2V0KVxuICAvLyBhbmQgdGhlIHBvc2l0aW9uICh3aGljaCBtYXkgYmUgYW4gb2Zmc2V0KVxuICBsZXQgcHJldlBvcyA9IG51bGwsXG4gICAgICB0aW1lID0gMDtcbiAgZm9yIChsZXQgc3RhdGUgb2YgdG91Y2hTdGF0ZU9iamVjdHMpIHtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdGF0ZS5vcHRpb25zLngpICYmIF8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSAmJiBwcmV2UG9zICE9PSBudWxsKSB7XG4gICAgICAvLyB0aGlzIGhhcHBlbnMgd2l0aCB3YWl0XG4gICAgICBzdGF0ZS5vcHRpb25zLnggPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgPSBwcmV2UG9zLnk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5vcHRpb25zLm9mZnNldCAmJiBwcmV2UG9zKSB7XG4gICAgICAvLyB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhbiBvZmZzZXRcbiAgICAgIHN0YXRlLm9wdGlvbnMueCArPSBwcmV2UG9zLng7XG4gICAgICBzdGF0ZS5vcHRpb25zLnkgKz0gcHJldlBvcy55O1xuICAgIH1cbiAgICBkZWxldGUgc3RhdGUub3B0aW9ucy5vZmZzZXQ7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgcHJldlBvcyA9IHN0YXRlLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKG11bHRpKSB7XG4gICAgICBsZXQgdGltZU9mZnNldCA9IHN0YXRlLnRpbWVPZmZzZXQ7XG4gICAgICB0aW1lICs9IHRpbWVPZmZzZXQ7XG4gICAgICBzdGF0ZS50aW1lID0gYW5kcm9pZEhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyh0aW1lLCAzKTtcblxuICAgICAgLy8gbXVsdGkgZ2VzdHVyZXMgcmVxdWlyZSAndG91Y2gnIHJhdGhlciB0aGFuICdvcHRpb25zJ1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHN0YXRlLm9wdGlvbnMueCkgJiYgIV8uaXNVbmRlZmluZWQoc3RhdGUub3B0aW9ucy55KSkge1xuICAgICAgICBzdGF0ZS50b3VjaCA9IHtcbiAgICAgICAgICB4OiBzdGF0ZS5vcHRpb25zLngsXG4gICAgICAgICAgeTogc3RhdGUub3B0aW9ucy55XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBkZWxldGUgc3RhdGUub3B0aW9ucztcbiAgICB9XG4gICAgZGVsZXRlIHN0YXRlLnRpbWVPZmZzZXQ7XG4gIH1cbiAgcmV0dXJuIHRvdWNoU3RhdGVPYmplY3RzO1xufTtcblxuXG5jb21tYW5kcy5wZXJmb3JtTXVsdGlBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtTXVsdGlBY3Rpb24gKGFjdGlvbnMsIGVsZW1lbnRJZCkge1xuICAvLyBBbmRyb2lkIG5lZWRzIGF0IGxlYXN0IHR3byBhY3Rpb25zIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBhIG11bHRpIHBvaW50ZXIgZ2VzdHVyZVxuICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpIFBvaW50ZXIgR2VzdHVyZXMgbmVlZCBhdCBsZWFzdCB0d28gYWN0aW9ucy4gJyArXG4gICAgICAgICdVc2UgVG91Y2ggQWN0aW9ucyBmb3IgYSBzaW5nbGUgYWN0aW9uLicpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVzID0gYXdhaXQgYXN5bmNtYXAoYWN0aW9ucywgYXN5bmMgKGFjdGlvbikgPT4gYXdhaXQgdGhpcy5wYXJzZVRvdWNoKGFjdGlvbiwgdHJ1ZSksIGZhbHNlKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1BlcmZvcm1NdWx0aUFjdGlvbihlbGVtZW50SWQsIHN0YXRlcyk7XG59O1xuXG4vKipcbiAqIFJlYXNvbiBmb3IgaXNvbGF0aW5nIGRvUGVyZm9ybU11bHRpQWN0aW9uIGZyb20gcGVyZm9ybU11bHRpQWN0aW9uIGlzIGZvciByZXVzaW5nIHBlcmZvcm1NdWx0aUFjdGlvblxuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uXG4gKiBPdGhlciBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIG5lZWQgdG8gb3ZlcnJpZGUgZG9QZXJmb3JtTXVsdGlBY3Rpb25cbiAqIHRvIGZhY2lsaXRhdGUgcGVyZm9ybU11bHRpQWN0aW9uLlxuICovXG5jb21tYW5kcy5kb1BlcmZvcm1NdWx0aUFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGRvUGVyZm9ybU11bHRpQWN0aW9uIChlbGVtZW50SWQsIHN0YXRlcykge1xuICBsZXQgb3B0cztcbiAgaWYgKGVsZW1lbnRJZCkge1xuICAgIG9wdHMgPSB7XG4gICAgICBlbGVtZW50SWQsXG4gICAgICBhY3Rpb25zOiBzdGF0ZXNcbiAgICB9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnBlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0cyA9IHtcbiAgICAgIGFjdGlvbnM6IHN0YXRlc1xuICAgIH07XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3BlcmZvcm1NdWx0aVBvaW50ZXJHZXN0dXJlJywgb3B0cyk7XG4gIH1cbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQztBQUFBO0FBRWpELFNBQVNDLGVBQWUsQ0FBRUMsR0FBRyxFQUFFO0VBSTdCLE9BQU9DLGFBQUksQ0FBQ0MsUUFBUSxDQUFDRixHQUFHLENBQUMsR0FBR0EsR0FBRyxHQUFHLEdBQUc7QUFDdkM7QUFFQSxTQUFTRyxxQkFBcUIsQ0FBRUMsV0FBVyxFQUFFO0VBRzNDLElBQUlDLFFBQVEsR0FBRyxHQUFHO0VBQ2xCLElBQUksT0FBT0QsV0FBVyxDQUFDRSxPQUFPLENBQUNDLEVBQUUsS0FBSyxXQUFXLElBQUlILFdBQVcsQ0FBQ0UsT0FBTyxDQUFDQyxFQUFFLEVBQUU7SUFDM0VGLFFBQVEsR0FBR0QsV0FBVyxDQUFDRSxPQUFPLENBQUNDLEVBQUUsR0FBRyxJQUFJO0lBQ3hDLElBQUlGLFFBQVEsS0FBSyxDQUFDLEVBQUU7TUFHbEJBLFFBQVEsR0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"touch.js","names":["commands","helpers","extensions","getCoordDefault","val","util","hasValue","getSwipeTouchDuration","waitGesture","duration","options","ms","doTouchAction","action","opts","element","x","y","count","tap","touchDown","touchUp","touchMove","B","delay","touchLongClick","log","warn","errorAndThrow","doTouchDrag","gestures","longPress","moveTo","startX","startY","endX","endY","getLocationInView","apiLevel","adb","getApiLevel","Math","max","drag","fixRelease","release","_","last","clone","ref","gesture","reverse","loc","size","getSize","width","height","pick","performGesture","e","isErrorType","errors","NoSuchElementError","debug","getSwipeOptions","touchCount","destElement","locResult","sizeResult","offsetX","abs","offsetY","firstElLocation","performTouch","length","swipeOpts","swipe","actions","map","head","pop","slice","press","shift","wait","fixedGestures","parseTouch","g","multi","touchStateObjects","asyncmap","includes","offset","elementId","pos","touchStateObject","timeOffset","parseInt","prevPos","time","state","isUndefined","androidHelpers","truncateDecimals","touch","performMultiAction","Error","states","doPerformMultiAction","bootstrap","sendAction","Object","assign"],"sources":["../../../lib/commands/touch.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport B from 'bluebird';\nimport { errors, isErrorType } from 'appium/driver';\nimport { asyncmap } from 'asyncbox';\nimport { util } from 'appium/support';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction getCoordDefault (val) {\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int. Same\n // thing with destElement below.\n return util.hasValue(val) ? val : 0.5;\n}\n\nfunction getSwipeTouchDuration (waitGesture) {\n // the touch action api uses ms, we want seconds\n // 0.8 is the default time for the operation\n let duration = 0.8;\n if (typeof waitGesture.options.ms !== 'undefined' && waitGesture.options.ms) {\n duration = waitGesture.options.ms / 1000;\n if (duration === 0) {\n // set to a very low number, since they wanted it fast\n // but below 0.1 becomes 0 steps, which causes errors\n duration = 0.1;\n }\n }\n return duration;\n}\n\ncommands.doTouchAction = async function doTouchAction (action, opts = {}) {\n const { element, x, y, count, ms, duration } = opts;\n // parseTouch precalculates absolute element positions\n // so there is no need to pass `element` to the affected gestures\n switch (action) {\n case 'tap':\n return await this.tap(null, x, y, count);\n case 'press':\n return await this.touchDown(null, x, y);\n case 'release':\n return await this.touchUp(element, x, y);\n case 'moveTo':\n return await this.touchMove(null, x, y);\n case 'wait':\n return await B.delay(ms);\n case 'longPress':\n return await this.touchLongClick(null, x, y, duration || 1000);\n case 'cancel':\n // TODO: clarify behavior of 'cancel' action and fix this\n this.log.warn('Cancel action currently has no effect');\n break;\n default:\n this.log.errorAndThrow(`unknown action ${action}`);\n }\n};\n\n// drag is *not* press-move-release, so we need to translate\n// drag works fine for scroll, as well\nhelpers.doTouchDrag = async function doTouchDrag (gestures) {\n let longPress = gestures[0];\n let moveTo = gestures[1];\n let startX = longPress.options.x || 0,\n startY = longPress.options.y || 0,\n endX = moveTo.options.x || 0,\n endY = moveTo.options.y || 0;\n if (longPress.options.element) {\n let {x, y} = await this.getLocationInView(longPress.options.element);\n startX += x || 0;\n startY += y || 0;\n }\n if (moveTo.options.element) {\n let {x, y} = await this.getLocationInView(moveTo.options.element);\n endX += x || 0;\n endY += y || 0;\n }\n\n let apiLevel = await this.adb.getApiLevel();\n // lollipop takes a little longer to get things rolling\n let duration = apiLevel >= 5 ? 2 : 1;\n // make sure that if the long press has a duration, we use it.\n if (longPress.options && longPress.options.duration) {\n duration = Math.max(longPress.options.duration / 1000, duration);\n }\n\n // `drag` will take care of whether there is an element or not at that level\n return await this.drag(startX, startY, endX, endY, duration, 1, longPress.options.element, moveTo.options.element);\n};\n\n// Release gesture needs element or co-ordinates to release it from that position\n// or else release gesture is performed from center of the screen, so to fix it\n// This method sets co-ordinates/element to release gesture if it has no options set already.\nhelpers.fixRelease = async function fixRelease (gestures) {\n let release = _.last(gestures);\n // sometimes there are no options\n release.options = release.options || {};\n // nothing to do if release options are already set\n if (release.options.element || (release.options.x && release.options.y)) {\n return;\n }\n // without coordinates, `release` uses the center of the screen, which,\n // generally speaking, is not what we want\n // therefore: loop backwards and use the last command with an element and/or\n // offset coordinates\n gestures = _.clone(gestures);\n let ref = null;\n for (let gesture of gestures.reverse()) {\n let opts = gesture.options;\n if (opts.element || (opts.x && opts.y)) {\n ref = gesture;\n break;\n }\n }\n if (ref) {\n let opts = ref.options;\n if (opts.element) {\n let loc = await this.getLocationInView(opts.element);\n if (opts.x && opts.y) {\n // this is an offset from the element\n release.options = {\n x: loc.x + opts.x,\n y: loc.y + opts.y\n };\n } else {\n // this is the center of the element\n let size = await this.getSize(opts.element);\n release.options = {\n x: loc.x + size.width / 2,\n y: loc.y + size.height / 2\n };\n }\n } else {\n release.options = _.pick(opts, 'x', 'y');\n }\n }\n return release;\n};\n\n// Perform one gesture\nhelpers.performGesture = async function performGesture (gesture) {\n try {\n return await this.doTouchAction(gesture.action, gesture.options || {});\n } catch (e) {\n // sometime the element is not available when releasing, retry without it\n if (isErrorType(e, errors.NoSuchElementError) && gesture.action === 'release' &&\n gesture.options.element) {\n delete gesture.options.element;\n this.log.debug(`retrying release without element opts: ${gesture.options}.`);\n return await this.doTouchAction(gesture.action, gesture.options || {});\n }\n throw e;\n }\n};\n\ncommands.getSwipeOptions = async function getSwipeOptions (gestures, touchCount = 1) {\n let startX = getCoordDefault(gestures[0].options.x),\n startY = getCoordDefault(gestures[0].options.y),\n endX = getCoordDefault(gestures[2].options.x),\n endY = getCoordDefault(gestures[2].options.y),\n duration = getSwipeTouchDuration(gestures[1]),\n element = gestures[0].options.element,\n destElement = gestures[2].options.element || gestures[0].options.element;\n\n // there's no destination element handling in bootstrap and since it applies to all platforms, we handle it here\n if (util.hasValue(destElement)) {\n let locResult = await this.getLocationInView(destElement);\n let sizeResult = await this.getSize(destElement);\n let offsetX = (Math.abs(endX) < 1 && Math.abs(endX) > 0) ? sizeResult.width * endX : endX;\n let offsetY = (Math.abs(endY) < 1 && Math.abs(endY) > 0) ? sizeResult.height * endY : endY;\n endX = locResult.x + offsetX;\n endY = locResult.y + offsetY;\n // if the target element was provided, the coordinates for the destination need to be relative to it.\n if (util.hasValue(element)) {\n let firstElLocation = await this.getLocationInView(element);\n endX -= firstElLocation.x;\n endY -= firstElLocation.y;\n }\n }\n // clients are responsible to use these options correctly\n return {startX, startY, endX, endY, duration, touchCount, element};\n};\n\ncommands.performTouch = async function performTouch (gestures) {\n // press-wait-moveTo-release is `swipe`, so use native method\n if (gestures.length === 4 &&\n gestures[0].action === 'press' &&\n gestures[1].action === 'wait' &&\n gestures[2].action === 'moveTo' &&\n gestures[3].action === 'release') {\n\n let swipeOpts = await this.getSwipeOptions(gestures);\n return await this.swipe(swipeOpts.startX, swipeOpts.startY, swipeOpts.endX,\n swipeOpts.endY, swipeOpts.duration, swipeOpts.touchCount,\n swipeOpts.element);\n }\n let actions = _.map(gestures, 'action');\n\n if (actions[0] === 'longPress' && actions[1] === 'moveTo' && actions[2] === 'release') {\n // some things are special\n return await this.doTouchDrag(gestures);\n } else {\n if (actions.length === 2) {\n // `press` without a wait is too slow and gets interpretted as a `longPress`\n if (_.head(actions) === 'press' && _.last(actions) === 'release') {\n actions[0] = 'tap';\n gestures[0].action = 'tap';\n }\n\n // the `longPress` and `tap` methods release on their own\n if ((_.head(actions) === 'tap' || _.head(actions) === 'longPress') && _.last(actions) === 'release') {\n gestures.pop();\n actions.pop();\n }\n } else {\n // longpress followed by anything other than release should become a press and wait\n if (actions[0] === 'longPress') {\n actions = ['press', 'wait', ...actions.slice(1)];\n\n let press = gestures.shift();\n press.action = 'press';\n let wait = {\n action: 'wait',\n options: {ms: press.options.duration || 1000}\n };\n delete press.options.duration;\n gestures = [press, wait, ...gestures];\n }\n }\n\n let fixedGestures = await this.parseTouch(gestures, false);\n // fix release action then perform all actions\n if (actions[actions.length - 1] === 'release') {\n actions[actions.length - 1] = await this.fixRelease(gestures);\n }\n for (let g of fixedGestures) {\n await this.performGesture(g);\n }\n }\n};\n\nhelpers.parseTouch = async function parseTouch (gestures, multi) {\n // because multi-touch releases at the end by default\n if (multi && _.last(gestures).action === 'release') {\n gestures.pop();\n }\n\n let touchStateObjects = await asyncmap(gestures, async (gesture) => {\n let options = gesture.options || {};\n if (_.includes(['press', 'moveTo', 'tap', 'longPress'], gesture.action)) {\n options.offset = false;\n let elementId = gesture.options.element;\n if (elementId) {\n let pos = await this.getLocationInView(elementId);\n if (gesture.options.x || gesture.options.y) {\n options.x = pos.x + (gesture.options.x || 0);\n options.y = pos.y + (gesture.options.y || 0);\n } else {\n const {width, height} = await this.getSize(elementId);\n options.x = pos.x + (width / 2);\n options.y = pos.y + (height / 2);\n }\n let touchStateObject = {\n action: gesture.action,\n options,\n timeOffset: 0.005,\n };\n return touchStateObject;\n } else {\n options.x = (gesture.options.x || 0);\n options.y = (gesture.options.y || 0);\n\n let touchStateObject = {\n action: gesture.action,\n options,\n timeOffset: 0.005,\n };\n return touchStateObject;\n }\n } else {\n let offset = 0.005;\n if (gesture.action === 'wait') {\n options = gesture.options;\n offset = (parseInt(gesture.options.ms, 10) / 1000);\n }\n let touchStateObject = {\n action: gesture.action,\n options,\n timeOffset: offset,\n };\n return touchStateObject;\n }\n }, false);\n // we need to change the time (which is now an offset)\n // and the position (which may be an offset)\n let prevPos = null,\n time = 0;\n for (let state of touchStateObjects) {\n if (_.isUndefined(state.options.x) && _.isUndefined(state.options.y) && prevPos !== null) {\n // this happens with wait\n state.options.x = prevPos.x;\n state.options.y = prevPos.y;\n }\n if (state.options.offset && prevPos) {\n // the current position is an offset\n state.options.x += prevPos.x;\n state.options.y += prevPos.y;\n }\n delete state.options.offset;\n if (!_.isUndefined(state.options.x) && !_.isUndefined(state.options.y)) {\n prevPos = state.options;\n }\n\n if (multi) {\n let timeOffset = state.timeOffset;\n time += timeOffset;\n state.time = androidHelpers.truncateDecimals(time, 3);\n\n // multi gestures require 'touch' rather than 'options'\n if (!_.isUndefined(state.options.x) && !_.isUndefined(state.options.y)) {\n state.touch = {\n x: state.options.x,\n y: state.options.y\n };\n }\n delete state.options;\n }\n delete state.timeOffset;\n }\n return touchStateObjects;\n};\n\n\ncommands.performMultiAction = async function performMultiAction (actions, elementId) {\n // Android needs at least two actions to be able to perform a multi pointer gesture\n if (actions.length === 1) {\n throw new Error('Multi Pointer Gestures need at least two actions. ' +\n 'Use Touch Actions for a single action.');\n }\n\n const states = await asyncmap(actions, async (action) => await this.parseTouch(action, true), false);\n\n return await this.doPerformMultiAction(elementId, states);\n};\n\n/**\n * Reason for isolating doPerformMultiAction from performMultiAction is for reusing performMultiAction\n * across android-drivers (like appium-uiautomator2-driver) and to avoid code duplication.\n * Other android-drivers (like appium-uiautomator2-driver) need to override doPerformMultiAction\n * to facilitate performMultiAction.\n */\ncommands.doPerformMultiAction = async function doPerformMultiAction (elementId, states) {\n let opts;\n if (elementId) {\n opts = {\n elementId,\n actions: states\n };\n return await this.bootstrap.sendAction('element:performMultiPointerGesture', opts);\n } else {\n opts = {\n actions: states\n };\n return await this.bootstrap.sendAction('performMultiPointerGesture', opts);\n }\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"touch.js","names":["commands","helpers","extensions","getCoordDefault","val","util","hasValue","getSwipeTouchDuration","waitGesture","duration","options","ms","doTouchAction","action","opts","element","x","y","count","tap","touchDown","touchUp","touchMove","B","delay","touchLongClick","log","warn","errorAndThrow","doTouchDrag","gestures","longPress","moveTo","startX","startY","endX","endY","getLocationInView","apiLevel","adb","getApiLevel","Math","max","drag","fixRelease","release","_","last","clone","ref","gesture","reverse","loc","size","getSize","width","height","pick","performGesture","e","isErrorType","errors","NoSuchElementError","debug","getSwipeOptions","touchCount","destElement","locResult","sizeResult","offsetX","abs","offsetY","firstElLocation","performTouch","length","swipeOpts","swipe","actions","map","head","pop","slice","press","shift","wait","fixedGestures","parseTouch","g","multi","touchStateObjects","asyncmap","includes","offset","elementId","pos","touchStateObject","timeOffset","parseInt","prevPos","time","state","isUndefined","androidHelpers","truncateDecimals","touch","performMultiAction","Error","states","doPerformMultiAction","bootstrap","sendAction","Object","assign"],"sources":["../../../lib/commands/touch.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport B from 'bluebird';\nimport { errors, isErrorType } from 'appium/driver';\nimport { asyncmap } from 'asyncbox';\nimport { util } from '@appium/support';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction getCoordDefault (val) {\n // going the long way and checking for undefined and null since\n // we can't be assured `elId` is a string and not an int. Same\n // thing with destElement below.\n return util.hasValue(val) ? val : 0.5;\n}\n\nfunction getSwipeTouchDuration (waitGesture) {\n // the touch action api uses ms, we want seconds\n // 0.8 is the default time for the operation\n let duration = 0.8;\n if (typeof waitGesture.options.ms !== 'undefined' && waitGesture.options.ms) {\n duration = waitGesture.options.ms / 1000;\n if (duration === 0) {\n // set to a very low number, since they wanted it fast\n // but below 0.1 becomes 0 steps, which causes errors\n duration = 0.1;\n }\n }\n return duration;\n}\n\ncommands.doTouchAction = async function doTouchAction (action, opts = {}) {\n const { element, x, y, count, ms, duration } = opts;\n // parseTouch precalculates absolute element positions\n // so there is no need to pass `element` to the affected gestures\n switch (action) {\n case 'tap':\n return await this.tap(null, x, y, count);\n case 'press':\n return await this.touchDown(null, x, y);\n case 'release':\n return await this.touchUp(element, x, y);\n case 'moveTo':\n return await this.touchMove(null, x, y);\n case 'wait':\n return await B.delay(ms);\n case 'longPress':\n return await this.touchLongClick(null, x, y, duration || 1000);\n case 'cancel':\n // TODO: clarify behavior of 'cancel' action and fix this\n this.log.warn('Cancel action currently has no effect');\n break;\n default:\n this.log.errorAndThrow(`unknown action ${action}`);\n }\n};\n\n// drag is *not* press-move-release, so we need to translate\n// drag works fine for scroll, as well\nhelpers.doTouchDrag = async function doTouchDrag (gestures) {\n let longPress = gestures[0];\n let moveTo = gestures[1];\n let startX = longPress.options.x || 0,\n startY = longPress.options.y || 0,\n endX = moveTo.options.x || 0,\n endY = moveTo.options.y || 0;\n if (longPress.options.element) {\n let {x, y} = await this.getLocationInView(longPress.options.element);\n startX += x || 0;\n startY += y || 0;\n }\n if (moveTo.options.element) {\n let {x, y} = await this.getLocationInView(moveTo.options.element);\n endX += x || 0;\n endY += y || 0;\n }\n\n let apiLevel = await this.adb.getApiLevel();\n // lollipop takes a little longer to get things rolling\n let duration = apiLevel >= 5 ? 2 : 1;\n // make sure that if the long press has a duration, we use it.\n if (longPress.options && longPress.options.duration) {\n duration = Math.max(longPress.options.duration / 1000, duration);\n }\n\n // `drag` will take care of whether there is an element or not at that level\n return await this.drag(startX, startY, endX, endY, duration, 1, longPress.options.element, moveTo.options.element);\n};\n\n// Release gesture needs element or co-ordinates to release it from that position\n// or else release gesture is performed from center of the screen, so to fix it\n// This method sets co-ordinates/element to release gesture if it has no options set already.\nhelpers.fixRelease = async function fixRelease (gestures) {\n let release = _.last(gestures);\n // sometimes there are no options\n release.options = release.options || {};\n // nothing to do if release options are already set\n if (release.options.element || (release.options.x && release.options.y)) {\n return;\n }\n // without coordinates, `release` uses the center of the screen, which,\n // generally speaking, is not what we want\n // therefore: loop backwards and use the last command with an element and/or\n // offset coordinates\n gestures = _.clone(gestures);\n let ref = null;\n for (let gesture of gestures.reverse()) {\n let opts = gesture.options;\n if (opts.element || (opts.x && opts.y)) {\n ref = gesture;\n break;\n }\n }\n if (ref) {\n let opts = ref.options;\n if (opts.element) {\n let loc = await this.getLocationInView(opts.element);\n if (opts.x && opts.y) {\n // this is an offset from the element\n release.options = {\n x: loc.x + opts.x,\n y: loc.y + opts.y\n };\n } else {\n // this is the center of the element\n let size = await this.getSize(opts.element);\n release.options = {\n x: loc.x + size.width / 2,\n y: loc.y + size.height / 2\n };\n }\n } else {\n release.options = _.pick(opts, 'x', 'y');\n }\n }\n return release;\n};\n\n// Perform one gesture\nhelpers.performGesture = async function performGesture (gesture) {\n try {\n return await this.doTouchAction(gesture.action, gesture.options || {});\n } catch (e) {\n // sometime the element is not available when releasing, retry without it\n if (isErrorType(e, errors.NoSuchElementError) && gesture.action === 'release' &&\n gesture.options.element) {\n delete gesture.options.element;\n this.log.debug(`retrying release without element opts: ${gesture.options}.`);\n return await this.doTouchAction(gesture.action, gesture.options || {});\n }\n throw e;\n }\n};\n\ncommands.getSwipeOptions = async function getSwipeOptions (gestures, touchCount = 1) {\n let startX = getCoordDefault(gestures[0].options.x),\n startY = getCoordDefault(gestures[0].options.y),\n endX = getCoordDefault(gestures[2].options.x),\n endY = getCoordDefault(gestures[2].options.y),\n duration = getSwipeTouchDuration(gestures[1]),\n element = gestures[0].options.element,\n destElement = gestures[2].options.element || gestures[0].options.element;\n\n // there's no destination element handling in bootstrap and since it applies to all platforms, we handle it here\n if (util.hasValue(destElement)) {\n let locResult = await this.getLocationInView(destElement);\n let sizeResult = await this.getSize(destElement);\n let offsetX = (Math.abs(endX) < 1 && Math.abs(endX) > 0) ? sizeResult.width * endX : endX;\n let offsetY = (Math.abs(endY) < 1 && Math.abs(endY) > 0) ? sizeResult.height * endY : endY;\n endX = locResult.x + offsetX;\n endY = locResult.y + offsetY;\n // if the target element was provided, the coordinates for the destination need to be relative to it.\n if (util.hasValue(element)) {\n let firstElLocation = await this.getLocationInView(element);\n endX -= firstElLocation.x;\n endY -= firstElLocation.y;\n }\n }\n // clients are responsible to use these options correctly\n return {startX, startY, endX, endY, duration, touchCount, element};\n};\n\ncommands.performTouch = async function performTouch (gestures) {\n // press-wait-moveTo-release is `swipe`, so use native method\n if (gestures.length === 4 &&\n gestures[0].action === 'press' &&\n gestures[1].action === 'wait' &&\n gestures[2].action === 'moveTo' &&\n gestures[3].action === 'release') {\n\n let swipeOpts = await this.getSwipeOptions(gestures);\n return await this.swipe(swipeOpts.startX, swipeOpts.startY, swipeOpts.endX,\n swipeOpts.endY, swipeOpts.duration, swipeOpts.touchCount,\n swipeOpts.element);\n }\n let actions = _.map(gestures, 'action');\n\n if (actions[0] === 'longPress' && actions[1] === 'moveTo' && actions[2] === 'release') {\n // some things are special\n return await this.doTouchDrag(gestures);\n } else {\n if (actions.length === 2) {\n // `press` without a wait is too slow and gets interpretted as a `longPress`\n if (_.head(actions) === 'press' && _.last(actions) === 'release') {\n actions[0] = 'tap';\n gestures[0].action = 'tap';\n }\n\n // the `longPress` and `tap` methods release on their own\n if ((_.head(actions) === 'tap' || _.head(actions) === 'longPress') && _.last(actions) === 'release') {\n gestures.pop();\n actions.pop();\n }\n } else {\n // longpress followed by anything other than release should become a press and wait\n if (actions[0] === 'longPress') {\n actions = ['press', 'wait', ...actions.slice(1)];\n\n let press = gestures.shift();\n press.action = 'press';\n let wait = {\n action: 'wait',\n options: {ms: press.options.duration || 1000}\n };\n delete press.options.duration;\n gestures = [press, wait, ...gestures];\n }\n }\n\n let fixedGestures = await this.parseTouch(gestures, false);\n // fix release action then perform all actions\n if (actions[actions.length - 1] === 'release') {\n actions[actions.length - 1] = await this.fixRelease(gestures);\n }\n for (let g of fixedGestures) {\n await this.performGesture(g);\n }\n }\n};\n\nhelpers.parseTouch = async function parseTouch (gestures, multi) {\n // because multi-touch releases at the end by default\n if (multi && _.last(gestures).action === 'release') {\n gestures.pop();\n }\n\n let touchStateObjects = await asyncmap(gestures, async (gesture) => {\n let options = gesture.options || {};\n if (_.includes(['press', 'moveTo', 'tap', 'longPress'], gesture.action)) {\n options.offset = false;\n let elementId = gesture.options.element;\n if (elementId) {\n let pos = await this.getLocationInView(elementId);\n if (gesture.options.x || gesture.options.y) {\n options.x = pos.x + (gesture.options.x || 0);\n options.y = pos.y + (gesture.options.y || 0);\n } else {\n const {width, height} = await this.getSize(elementId);\n options.x = pos.x + (width / 2);\n options.y = pos.y + (height / 2);\n }\n let touchStateObject = {\n action: gesture.action,\n options,\n timeOffset: 0.005,\n };\n return touchStateObject;\n } else {\n options.x = (gesture.options.x || 0);\n options.y = (gesture.options.y || 0);\n\n let touchStateObject = {\n action: gesture.action,\n options,\n timeOffset: 0.005,\n };\n return touchStateObject;\n }\n } else {\n let offset = 0.005;\n if (gesture.action === 'wait') {\n options = gesture.options;\n offset = (parseInt(gesture.options.ms, 10) / 1000);\n }\n let touchStateObject = {\n action: gesture.action,\n options,\n timeOffset: offset,\n };\n return touchStateObject;\n }\n }, false);\n // we need to change the time (which is now an offset)\n // and the position (which may be an offset)\n let prevPos = null,\n time = 0;\n for (let state of touchStateObjects) {\n if (_.isUndefined(state.options.x) && _.isUndefined(state.options.y) && prevPos !== null) {\n // this happens with wait\n state.options.x = prevPos.x;\n state.options.y = prevPos.y;\n }\n if (state.options.offset && prevPos) {\n // the current position is an offset\n state.options.x += prevPos.x;\n state.options.y += prevPos.y;\n }\n delete state.options.offset;\n if (!_.isUndefined(state.options.x) && !_.isUndefined(state.options.y)) {\n prevPos = state.options;\n }\n\n if (multi) {\n let timeOffset = state.timeOffset;\n time += timeOffset;\n state.time = androidHelpers.truncateDecimals(time, 3);\n\n // multi gestures require 'touch' rather than 'options'\n if (!_.isUndefined(state.options.x) && !_.isUndefined(state.options.y)) {\n state.touch = {\n x: state.options.x,\n y: state.options.y\n };\n }\n delete state.options;\n }\n delete state.timeOffset;\n }\n return touchStateObjects;\n};\n\n\ncommands.performMultiAction = async function performMultiAction (actions, elementId) {\n // Android needs at least two actions to be able to perform a multi pointer gesture\n if (actions.length === 1) {\n throw new Error('Multi Pointer Gestures need at least two actions. ' +\n 'Use Touch Actions for a single action.');\n }\n\n const states = await asyncmap(actions, async (action) => await this.parseTouch(action, true), false);\n\n return await this.doPerformMultiAction(elementId, states);\n};\n\n/**\n * Reason for isolating doPerformMultiAction from performMultiAction is for reusing performMultiAction\n * across android-drivers (like appium-uiautomator2-driver) and to avoid code duplication.\n * Other android-drivers (like appium-uiautomator2-driver) need to override doPerformMultiAction\n * to facilitate performMultiAction.\n */\ncommands.doPerformMultiAction = async function doPerformMultiAction (elementId, states) {\n let opts;\n if (elementId) {\n opts = {\n elementId,\n actions: states\n };\n return await this.bootstrap.sendAction('element:performMultiPointerGesture', opts);\n } else {\n opts = {\n actions: states\n };\n return await this.bootstrap.sendAction('performMultiPointerGesture', opts);\n }\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIA,QAAQ,GAAG,CAAC,CAAC;EAAEC,OAAO,GAAG,CAAC,CAAC;EAAEC,UAAU,GAAG,CAAC,CAAC;AAAC;AAAA;AAEjD,SAASC,eAAe,CAAEC,GAAG,EAAE;EAI7B,OAAOC,aAAI,CAACC,QAAQ,CAACF,GAAG,CAAC,GAAGA,GAAG,GAAG,GAAG;AACvC;AAEA,SAASG,qBAAqB,CAAEC,WAAW,EAAE;EAG3C,IAAIC,QAAQ,GAAG,GAAG;EAClB,IAAI,OAAOD,WAAW,CAACE,OAAO,CAACC,EAAE,KAAK,WAAW,IAAIH,WAAW,CAACE,OAAO,CAACC,EAAE,EAAE;IAC3EF,QAAQ,GAAGD,WAAW,CAACE,OAAO,CAACC,EAAE,GAAG,IAAI;IACxC,IAAIF,QAAQ,KAAK,CAAC,EAAE;MAGlBA,QAAQ,GAAG,GAAG;IAChB;EACF;EACA,OAAOA,QAAQ;AACjB;AAEAT,QAAQ,CAACY,aAAa,GAAG,eAAeA,aAAa,CAAEC,MAAM,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACxE,MAAM;IAAEC,OAAO;IAAEC,CAAC;IAAEC,CAAC;IAAEC,KAAK;IAAEP,EAAE;IAAEF;EAAS,CAAC,GAAGK,IAAI;EAGnD,QAAQD,MAAM;IACZ,KAAK,KAAK;MACR,OAAO,MAAM,IAAI,CAACM,GAAG,CAAC,IAAI,EAAEH,CAAC,EAAEC,CAAC,EAAEC,KAAK,CAAC;IAC1C,KAAK,OAAO;MACV,OAAO,MAAM,IAAI,CAACE,SAAS,CAAC,IAAI,EAAEJ,CAAC,EAAEC,CAAC,CAAC;IACzC,KAAK,SAAS;MACZ,OAAO,MAAM,IAAI,CAACI,OAAO,CAACN,OAAO,EAAEC,CAAC,EAAEC,CAAC,CAAC;IAC1C,KAAK,QAAQ;MACX,OAAO,MAAM,IAAI,CAACK,SAAS,CAAC,IAAI,EAAEN,CAAC,EAAEC,CAAC,CAAC;IACzC,KAAK,MAAM;MACT,OAAO,MAAMM,iBAAC,CAACC,KAAK,CAACb,EAAE,CAAC;IAC1B,KAAK,WAAW;MACd,OAAO,MAAM,IAAI,CAACc,cAAc,CAAC,IAAI,EAAET,CAAC,EAAEC,CAAC,EAAER,QAAQ,IAAI,IAAI,CAAC;IAChE,KAAK,QAAQ;MAEX,IAAI,CAACiB,GAAG,CAACC,IAAI,CAAC,uCAAuC,CAAC;MACtD;IACF;MACE,IAAI,CAACD,GAAG,CAACE,aAAa,CAAE,kBAAiBf,MAAO,EAAC,CAAC;EAAC;AAEzD,CAAC;AAIDZ,OAAO,CAAC4B,WAAW,GAAG,eAAeA,WAAW,CAAEC,QAAQ,EAAE;EAC1D,IAAIC,SAAS,GAAGD,QAAQ,CAAC,CAAC,CAAC;EAC3B,IAAIE,MAAM,GAAGF,QAAQ,CAAC,CAAC,CAAC;EACxB,IAAIG,MAAM,GAAGF,SAAS,CAACrB,OAAO,CAACM,CAAC,IAAI,CAAC;IACjCkB,MAAM,GAAGH,SAAS,CAACrB,OAAO,CAACO,CAAC,IAAI,CAAC;IACjCkB,IAAI,GAAGH,MAAM,CAACtB,OAAO,CAACM,CAAC,IAAI,CAAC;IAC5BoB,IAAI,GAAGJ,MAAM,CAACtB,OAAO,CAACO,CAAC,IAAI,CAAC;EAChC,IAAIc,SAAS,CAACrB,OAAO,CAACK,OAAO,EAAE;IAC7B,IAAI;MAACC,CAAC;MAAEC;IAAC,CAAC,GAAG,MAAM,IAAI,CAACoB,iBAAiB,CAACN,SAAS,CAACrB,OAAO,CAACK,OAAO,CAAC;IACpEkB,MAAM,IAAIjB,CAAC,IAAI,CAAC;IAChBkB,MAAM,IAAIjB,CAAC,IAAI,CAAC;EAClB;EACA,IAAIe,MAAM,CAACtB,OAAO,CAACK,OAAO,EAAE;IAC1B,IAAI;MAACC,CAAC;MAAEC;IAAC,CAAC,GAAG,MAAM,IAAI,CAACoB,iBAAiB,CAACL,MAAM,CAACtB,OAAO,CAACK,OAAO,CAAC;IACjEoB,IAAI,IAAInB,CAAC,IAAI,CAAC;IACdoB,IAAI,IAAInB,CAAC,IAAI,CAAC;EAChB;EAEA,IAAIqB,QAAQ,GAAG,MAAM,IAAI,CAACC,GAAG,CAACC,WAAW,EAAE;EAE3C,IAAI/B,QAAQ,GAAG6B,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;EAEpC,IAAIP,SAAS,CAACrB,OAAO,IAAIqB,SAAS,CAACrB,OAAO,CAACD,QAAQ,EAAE;IACnDA,QAAQ,GAAGgC,IAAI,CAACC,GAAG,CAACX,SAAS,CAACrB,OAAO,CAACD,QAAQ,GAAG,IAAI,EAAEA,QAAQ,CAAC;EAClE;EAGA,OAAO,MAAM,IAAI,CAACkC,IAAI,CAACV,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAE3B,QAAQ,EAAE,CAAC,EAAEsB,SAAS,CAACrB,OAAO,CAACK,OAAO,EAAEiB,MAAM,CAACtB,OAAO,CAACK,OAAO,CAAC;AACpH,CAAC;AAKDd,OAAO,CAAC2C,UAAU,GAAG,eAAeA,UAAU,CAAEd,QAAQ,EAAE;EACxD,IAAIe,OAAO,GAAGC,eAAC,CAACC,IAAI,CAACjB,QAAQ,CAAC;EAE9Be,OAAO,CAACnC,OAAO,GAAGmC,OAAO,CAACnC,OAAO,IAAI,CAAC,CAAC;EAEvC,IAAImC,OAAO,CAACnC,OAAO,CAACK,OAAO,IAAK8B,OAAO,CAACnC,OAAO,CAACM,CAAC,IAAI6B,OAAO,CAACnC,OAAO,CAACO,CAAE,EAAE;IACvE;EACF;EAKAa,QAAQ,GAAGgB,eAAC,CAACE,KAAK,CAAClB,QAAQ,CAAC;EAC5B,IAAImB,GAAG,GAAG,IAAI;EACd,KAAK,IAAIC,OAAO,IAAIpB,QAAQ,CAACqB,OAAO,EAAE,EAAE;IACtC,IAAIrC,IAAI,GAAGoC,OAAO,CAACxC,OAAO;IAC1B,IAAII,IAAI,CAACC,OAAO,IAAKD,IAAI,CAACE,CAAC,IAAIF,IAAI,CAACG,CAAE,EAAE;MACtCgC,GAAG,GAAGC,OAAO;MACb;IACF;EACF;EACA,IAAID,GAAG,EAAE;IACP,IAAInC,IAAI,GAAGmC,GAAG,CAACvC,OAAO;IACtB,IAAII,IAAI,CAACC,OAAO,EAAE;MAChB,IAAIqC,GAAG,GAAG,MAAM,IAAI,CAACf,iBAAiB,CAACvB,IAAI,CAACC,OAAO,CAAC;MACpD,IAAID,IAAI,CAACE,CAAC,IAAIF,IAAI,CAACG,CAAC,EAAE;QAEpB4B,OAAO,CAACnC,OAAO,GAAG;UAChBM,CAAC,EAAEoC,GAAG,CAACpC,CAAC,GAAGF,IAAI,CAACE,CAAC;UACjBC,CAAC,EAAEmC,GAAG,CAACnC,CAAC,GAAGH,IAAI,CAACG;QAClB,CAAC;MACH,CAAC,MAAM;QAEL,IAAIoC,IAAI,GAAG,MAAM,IAAI,CAACC,OAAO,CAACxC,IAAI,CAACC,OAAO,CAAC;QAC3C8B,OAAO,CAACnC,OAAO,GAAG;UAChBM,CAAC,EAAEoC,GAAG,CAACpC,CAAC,GAAGqC,IAAI,CAACE,KAAK,GAAG,CAAC;UACzBtC,CAAC,EAAEmC,GAAG,CAACnC,CAAC,GAAGoC,IAAI,CAACG,MAAM,GAAG;QAC3B,CAAC;MACH;IACF,CAAC,MAAM;MACLX,OAAO,CAACnC,OAAO,GAAGoC,eAAC,CAACW,IAAI,CAAC3C,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAC1C;EACF;EACA,OAAO+B,OAAO;AAChB,CAAC;AAGD5C,OAAO,CAACyD,cAAc,GAAG,eAAeA,cAAc,CAAER,OAAO,EAAE;EAC/D,IAAI;IACF,OAAO,MAAM,IAAI,CAACtC,aAAa,CAACsC,OAAO,CAACrC,MAAM,EAAEqC,OAAO,CAACxC,OAAO,IAAI,CAAC,CAAC,CAAC;EACxE,CAAC,CAAC,OAAOiD,CAAC,EAAE;IAEV,IAAI,IAAAC,mBAAW,EAACD,CAAC,EAAEE,cAAM,CAACC,kBAAkB,CAAC,IAAIZ,OAAO,CAACrC,MAAM,KAAK,SAAS,IACzEqC,OAAO,CAACxC,OAAO,CAACK,OAAO,EAAE;MAC3B,OAAOmC,OAAO,CAACxC,OAAO,CAACK,OAAO;MAC9B,IAAI,CAACW,GAAG,CAACqC,KAAK,CAAE,0CAAyCb,OAAO,CAACxC,OAAQ,GAAE,CAAC;MAC5E,OAAO,MAAM,IAAI,CAACE,aAAa,CAACsC,OAAO,CAACrC,MAAM,EAAEqC,OAAO,CAACxC,OAAO,IAAI,CAAC,CAAC,CAAC;IACxE;IACA,MAAMiD,CAAC;EACT;AACF,CAAC;AAED3D,QAAQ,CAACgE,eAAe,GAAG,eAAeA,eAAe,CAAElC,QAAQ,EAAEmC,UAAU,GAAG,CAAC,EAAE;EACnF,IAAIhC,MAAM,GAAG9B,eAAe,CAAC2B,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACM,CAAC,CAAC;IAC/CkB,MAAM,GAAG/B,eAAe,CAAC2B,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACO,CAAC,CAAC;IAC/CkB,IAAI,GAAGhC,eAAe,CAAC2B,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACM,CAAC,CAAC;IAC7CoB,IAAI,GAAGjC,eAAe,CAAC2B,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACO,CAAC,CAAC;IAC7CR,QAAQ,GAAGF,qBAAqB,CAACuB,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7Cf,OAAO,GAAGe,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACK,OAAO;IACrCmD,WAAW,GAAGpC,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACK,OAAO,IAAIe,QAAQ,CAAC,CAAC,CAAC,CAACpB,OAAO,CAACK,OAAO;EAG5E,IAAIV,aAAI,CAACC,QAAQ,CAAC4D,WAAW,CAAC,EAAE;IAC9B,IAAIC,SAAS,GAAG,MAAM,IAAI,CAAC9B,iBAAiB,CAAC6B,WAAW,CAAC;IACzD,IAAIE,UAAU,GAAG,MAAM,IAAI,CAACd,OAAO,CAACY,WAAW,CAAC;IAChD,IAAIG,OAAO,GAAI5B,IAAI,CAAC6B,GAAG,CAACnC,IAAI,CAAC,GAAG,CAAC,IAAIM,IAAI,CAAC6B,GAAG,CAACnC,IAAI,CAAC,GAAG,CAAC,GAAIiC,UAAU,CAACb,KAAK,GAAGpB,IAAI,GAAGA,IAAI;IACzF,IAAIoC,OAAO,GAAI9B,IAAI,CAAC6B,GAAG,CAAClC,IAAI,CAAC,GAAG,CAAC,IAAIK,IAAI,CAAC6B,GAAG,CAAClC,IAAI,CAAC,GAAG,CAAC,GAAIgC,UAAU,CAACZ,MAAM,GAAGpB,IAAI,GAAGA,IAAI;IAC1FD,IAAI,GAAGgC,SAAS,CAACnD,CAAC,GAAGqD,OAAO;IAC5BjC,IAAI,GAAG+B,SAAS,CAAClD,CAAC,GAAGsD,OAAO;IAE5B,IAAIlE,aAAI,CAACC,QAAQ,CAACS,OAAO,CAAC,EAAE;MAC1B,IAAIyD,eAAe,GAAG,MAAM,IAAI,CAACnC,iBAAiB,CAACtB,OAAO,CAAC;MAC3DoB,IAAI,IAAIqC,eAAe,CAACxD,CAAC;MACzBoB,IAAI,IAAIoC,eAAe,CAACvD,CAAC;IAC3B;EACF;EAEA,OAAO;IAACgB,MAAM;IAAEC,MAAM;IAAEC,IAAI;IAAEC,IAAI;IAAE3B,QAAQ;IAAEwD,UAAU;IAAElD;EAAO,CAAC;AACpE,CAAC;AAEDf,QAAQ,CAACyE,YAAY,GAAG,eAAeA,YAAY,CAAE3C,QAAQ,EAAE;EAE7D,IAAIA,QAAQ,CAAC4C,MAAM,KAAK,CAAC,IACrB5C,QAAQ,CAAC,CAAC,CAAC,CAACjB,MAAM,KAAK,OAAO,IAC9BiB,QAAQ,CAAC,CAAC,CAAC,CAACjB,MAAM,KAAK,MAAM,IAC7BiB,QAAQ,CAAC,CAAC,CAAC,CAACjB,MAAM,KAAK,QAAQ,IAC/BiB,QAAQ,CAAC,CAAC,CAAC,CAACjB,MAAM,KAAK,SAAS,EAAE;IAEpC,IAAI8D,SAAS,GAAG,MAAM,IAAI,CAACX,eAAe,CAAClC,QAAQ,CAAC;IACpD,OAAO,MAAM,IAAI,CAAC8C,KAAK,CAACD,SAAS,CAAC1C,MAAM,EAAE0C,SAAS,CAACzC,MAAM,EAAEyC,SAAS,CAACxC,IAAI,EACtEwC,SAAS,CAACvC,IAAI,EAAEuC,SAAS,CAAClE,QAAQ,EAAEkE,SAAS,CAACV,UAAU,EACxDU,SAAS,CAAC5D,OAAO,CAAC;EACxB;EACA,IAAI8D,OAAO,GAAG/B,eAAC,CAACgC,GAAG,CAAChD,QAAQ,EAAE,QAAQ,CAAC;EAEvC,IAAI+C,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,IAAIA,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAIA,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;IAErF,OAAO,MAAM,IAAI,CAAChD,WAAW,CAACC,QAAQ,CAAC;EACzC,CAAC,MAAM;IACL,IAAI+C,OAAO,CAACH,MAAM,KAAK,CAAC,EAAE;MAExB,IAAI5B,eAAC,CAACiC,IAAI,CAACF,OAAO,CAAC,KAAK,OAAO,IAAI/B,eAAC,CAACC,IAAI,CAAC8B,OAAO,CAAC,KAAK,SAAS,EAAE;QAChEA,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;QAClB/C,QAAQ,CAAC,CAAC,CAAC,CAACjB,MAAM,GAAG,KAAK;MAC5B;MAGA,IAAI,CAACiC,eAAC,CAACiC,IAAI,CAACF,OAAO,CAAC,KAAK,KAAK,IAAI/B,eAAC,CAACiC,IAAI,CAACF,OAAO,CAAC,KAAK,WAAW,KAAK/B,eAAC,CAACC,IAAI,CAAC8B,OAAO,CAAC,KAAK,SAAS,EAAE;QACnG/C,QAAQ,CAACkD,GAAG,EAAE;QACdH,OAAO,CAACG,GAAG,EAAE;MACf;IACF,CAAC,MAAM;MAEL,IAAIH,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;QAC9BA,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAGA,OAAO,CAACI,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAIC,KAAK,GAAGpD,QAAQ,CAACqD,KAAK,EAAE;QAC5BD,KAAK,CAACrE,MAAM,GAAG,OAAO;QACtB,IAAIuE,IAAI,GAAG;UACTvE,MAAM,EAAE,MAAM;UACdH,OAAO,EAAE;YAACC,EAAE,EAAEuE,KAAK,CAACxE,OAAO,CAACD,QAAQ,IAAI;UAAI;QAC9C,CAAC;QACD,OAAOyE,KAAK,CAACxE,OAAO,CAACD,QAAQ;QAC7BqB,QAAQ,GAAG,CAACoD,KAAK,EAAEE,IAAI,EAAE,GAAGtD,QAAQ,CAAC;MACvC;IACF;IAEA,IAAIuD,aAAa,GAAG,MAAM,IAAI,CAACC,UAAU,CAACxD,QAAQ,EAAE,KAAK,CAAC;IAE1D,IAAI+C,OAAO,CAACA,OAAO,CAACH,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE;MAC7CG,OAAO,CAACA,OAAO,CAACH,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC9B,UAAU,CAACd,QAAQ,CAAC;IAC/D;IACA,KAAK,IAAIyD,CAAC,IAAIF,aAAa,EAAE;MAC3B,MAAM,IAAI,CAAC3B,cAAc,CAAC6B,CAAC,CAAC;IAC9B;EACF;AACF,CAAC;AAEDtF,OAAO,CAACqF,UAAU,GAAG,eAAeA,UAAU,CAAExD,QAAQ,EAAE0D,KAAK,EAAE;EAE/D,IAAIA,KAAK,IAAI1C,eAAC,CAACC,IAAI,CAACjB,QAAQ,CAAC,CAACjB,MAAM,KAAK,SAAS,EAAE;IAClDiB,QAAQ,CAACkD,GAAG,EAAE;EAChB;EAEA,IAAIS,iBAAiB,GAAG,MAAM,IAAAC,kBAAQ,EAAC5D,QAAQ,EAAE,MAAOoB,OAAO,IAAK;IAClE,IAAIxC,OAAO,GAAGwC,OAAO,CAACxC,OAAO,IAAI,CAAC,CAAC;IACnC,IAAIoC,eAAC,CAAC6C,QAAQ,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,EAAEzC,OAAO,CAACrC,MAAM,CAAC,EAAE;MACvEH,OAAO,CAACkF,MAAM,GAAG,KAAK;MACtB,IAAIC,SAAS,GAAG3C,OAAO,CAACxC,OAAO,CAACK,OAAO;MACvC,IAAI8E,SAAS,EAAE;QACb,IAAIC,GAAG,GAAG,MAAM,IAAI,CAACzD,iBAAiB,CAACwD,SAAS,CAAC;QACjD,IAAI3C,OAAO,CAACxC,OAAO,CAACM,CAAC,IAAIkC,OAAO,CAACxC,OAAO,CAACO,CAAC,EAAE;UAC1CP,OAAO,CAACM,CAAC,GAAG8E,GAAG,CAAC9E,CAAC,IAAIkC,OAAO,CAACxC,OAAO,CAACM,CAAC,IAAI,CAAC,CAAC;UAC5CN,OAAO,CAACO,CAAC,GAAG6E,GAAG,CAAC7E,CAAC,IAAIiC,OAAO,CAACxC,OAAO,CAACO,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,MAAM;UACL,MAAM;YAACsC,KAAK;YAAEC;UAAM,CAAC,GAAG,MAAM,IAAI,CAACF,OAAO,CAACuC,SAAS,CAAC;UACrDnF,OAAO,CAACM,CAAC,GAAG8E,GAAG,CAAC9E,CAAC,GAAIuC,KAAK,GAAG,CAAE;UAC/B7C,OAAO,CAACO,CAAC,GAAG6E,GAAG,CAAC7E,CAAC,GAAIuC,MAAM,GAAG,CAAE;QAClC;QACA,IAAIuC,gBAAgB,GAAG;UACrBlF,MAAM,EAAEqC,OAAO,CAACrC,MAAM;UACtBH,OAAO;UACPsF,UAAU,EAAE;QACd,CAAC;QACD,OAAOD,gBAAgB;MACzB,CAAC,MAAM;QACLrF,OAAO,CAACM,CAAC,GAAIkC,OAAO,CAACxC,OAAO,CAACM,CAAC,IAAI,CAAE;QACpCN,OAAO,CAACO,CAAC,GAAIiC,OAAO,CAACxC,OAAO,CAACO,CAAC,IAAI,CAAE;QAEpC,IAAI8E,gBAAgB,GAAG;UACrBlF,MAAM,EAAEqC,OAAO,CAACrC,MAAM;UACtBH,OAAO;UACPsF,UAAU,EAAE;QACd,CAAC;QACD,OAAOD,gBAAgB;MACzB;IACF,CAAC,MAAM;MACL,IAAIH,MAAM,GAAG,KAAK;MAClB,IAAI1C,OAAO,CAACrC,MAAM,KAAK,MAAM,EAAE;QAC7BH,OAAO,GAAGwC,OAAO,CAACxC,OAAO;QACzBkF,MAAM,GAAIK,QAAQ,CAAC/C,OAAO,CAACxC,OAAO,CAACC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAK;MACpD;MACA,IAAIoF,gBAAgB,GAAG;QACrBlF,MAAM,EAAEqC,OAAO,CAACrC,MAAM;QACtBH,OAAO;QACPsF,UAAU,EAAEJ;MACd,CAAC;MACD,OAAOG,gBAAgB;IACzB;EACF,CAAC,EAAE,KAAK,CAAC;EAGT,IAAIG,OAAO,GAAG,IAAI;IACdC,IAAI,GAAG,CAAC;EACZ,KAAK,IAAIC,KAAK,IAAIX,iBAAiB,EAAE;IACnC,IAAI3C,eAAC,CAACuD,WAAW,CAACD,KAAK,CAAC1F,OAAO,CAACM,CAAC,CAAC,IAAI8B,eAAC,CAACuD,WAAW,CAACD,KAAK,CAAC1F,OAAO,CAACO,CAAC,CAAC,IAAIiF,OAAO,KAAK,IAAI,EAAE;MAExFE,KAAK,CAAC1F,OAAO,CAACM,CAAC,GAAGkF,OAAO,CAAClF,CAAC;MAC3BoF,KAAK,CAAC1F,OAAO,CAACO,CAAC,GAAGiF,OAAO,CAACjF,CAAC;IAC7B;IACA,IAAImF,KAAK,CAAC1F,OAAO,CAACkF,MAAM,IAAIM,OAAO,EAAE;MAEnCE,KAAK,CAAC1F,OAAO,CAACM,CAAC,IAAIkF,OAAO,CAAClF,CAAC;MAC5BoF,KAAK,CAAC1F,OAAO,CAACO,CAAC,IAAIiF,OAAO,CAACjF,CAAC;IAC9B;IACA,OAAOmF,KAAK,CAAC1F,OAAO,CAACkF,MAAM;IAC3B,IAAI,CAAC9C,eAAC,CAACuD,WAAW,CAACD,KAAK,CAAC1F,OAAO,CAACM,CAAC,CAAC,IAAI,CAAC8B,eAAC,CAACuD,WAAW,CAACD,KAAK,CAAC1F,OAAO,CAACO,CAAC,CAAC,EAAE;MACtEiF,OAAO,GAAGE,KAAK,CAAC1F,OAAO;IACzB;IAEA,IAAI8E,KAAK,EAAE;MACT,IAAIQ,UAAU,GAAGI,KAAK,CAACJ,UAAU;MACjCG,IAAI,IAAIH,UAAU;MAClBI,KAAK,CAACD,IAAI,GAAGG,uBAAc,CAACC,gBAAgB,CAACJ,IAAI,EAAE,CAAC,CAAC;MAGrD,IAAI,CAACrD,eAAC,CAACuD,WAAW,CAACD,KAAK,CAAC1F,OAAO,CAACM,CAAC,CAAC,IAAI,CAAC8B,eAAC,CAACuD,WAAW,CAACD,KAAK,CAAC1F,OAAO,CAACO,CAAC,CAAC,EAAE;QACtEmF,KAAK,CAACI,KAAK,GAAG;UACZxF,CAAC,EAAEoF,KAAK,CAAC1F,OAAO,CAACM,CAAC;UAClBC,CAAC,EAAEmF,KAAK,CAAC1F,OAAO,CAACO;QACnB,CAAC;MACH;MACA,OAAOmF,KAAK,CAAC1F,OAAO;IACtB;IACA,OAAO0F,KAAK,CAACJ,UAAU;EACzB;EACA,OAAOP,iBAAiB;AAC1B,CAAC;AAGDzF,QAAQ,CAACyG,kBAAkB,GAAG,eAAeA,kBAAkB,CAAE5B,OAAO,EAAEgB,SAAS,EAAE;EAEnF,IAAIhB,OAAO,CAACH,MAAM,KAAK,CAAC,EAAE;IACxB,MAAM,IAAIgC,KAAK,CAAC,oDAAoD,GAChE,wCAAwC,CAAC;EAC/C;EAEA,MAAMC,MAAM,GAAG,MAAM,IAAAjB,kBAAQ,EAACb,OAAO,EAAE,MAAOhE,MAAM,IAAK,MAAM,IAAI,CAACyE,UAAU,CAACzE,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC;EAEpG,OAAO,MAAM,IAAI,CAAC+F,oBAAoB,CAACf,SAAS,EAAEc,MAAM,CAAC;AAC3D,CAAC;AAQD3G,QAAQ,CAAC4G,oBAAoB,GAAG,eAAeA,oBAAoB,CAAEf,SAAS,EAAEc,MAAM,EAAE;EACtF,IAAI7F,IAAI;EACR,IAAI+E,SAAS,EAAE;IACb/E,IAAI,GAAG;MACL+E,SAAS;MACThB,OAAO,EAAE8B;IACX,CAAC;IACD,OAAO,MAAM,IAAI,CAACE,SAAS,CAACC,UAAU,CAAC,oCAAoC,EAAEhG,IAAI,CAAC;EACpF,CAAC,MAAM;IACLA,IAAI,GAAG;MACL+D,OAAO,EAAE8B;IACX,CAAC;IACD,OAAO,MAAM,IAAI,CAACE,SAAS,CAACC,UAAU,CAAC,4BAA4B,EAAEhG,IAAI,CAAC;EAC5E;AACF,CAAC;AAEDiG,MAAM,CAACC,MAAM,CAAC9G,UAAU,EAAEF,QAAQ,EAAEC,OAAO,CAAC;AAAC,eAE9BC,UAAU;AAAA"}
@@ -62,8 +62,7 @@ let commonCapConstraints = {
62
62
  avdReadyTimeout: {
63
63
  isNumber: true
64
64
  },
65
- avdArgs: {
66
- },
65
+ avdArgs: {},
67
66
  avdEnv: {
68
67
  isObject: true
69
68
  },
@@ -298,4 +297,4 @@ let desiredCapConstraints = {};
298
297
  Object.assign(desiredCapConstraints, commonCapConstraints, uiautomatorCapConstraints);
299
298
  var _default = desiredCapConstraints;
300
299
  exports.default = _default;
301
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tb25DYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwicHJlc2VuY2UiLCJhcHAiLCJhcHBBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXREdXJhdGlvbiIsImlzTnVtYmVyIiwiZGV2aWNlUmVhZHlUaW1lb3V0IiwiYW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZERldmljZVJlYWR5VGltZW91dCIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhZGJQb3J0IiwicmVtb3RlQWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiYXZkIiwiYXZkTGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsImF2ZEFyZ3MiLCJhdmRFbnYiLCJpc09iamVjdCIsInVzZUtleXN0b3JlIiwiaXNCb29sZWFuIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiaXNBcnJheSIsImNocm9tZWRyaXZlckFyZ3MiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsImNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlIiwiY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiY2hyb21lTG9nZ2luZ1ByZWZzIiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwiYXV0b1dlYnZpZXdOYW1lIiwiaW50ZW50QWN0aW9uIiwiaW50ZW50Q2F0ZWdvcnkiLCJpbnRlbnRGbGFncyIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwiZG9udFN0b3BBcHBPblJlc2V0IiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsIm5vU2lnbiIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJhdXRvTGF1bmNoIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsImFuZHJvaWRJbnN0YWxsUGF0aCIsImNsZWFyU3lzdGVtRmlsZXMiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsInNoYXJlZFByZWZlcmVuY2VzIiwibmV0d29ya1NwZWVkIiwiZ3BzRW5hYmxlZCIsImlzSGVhZGxlc3MiLCJzaG93Q2hyb21lZHJpdmVyTG9nIiwic2tpcFVubG9jayIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJ1bmxvY2tUeXBlIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJvdGhlckFwcHMiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJwYWdlTG9hZFN0cmF0ZWd5IiwibG9jYWxlU2NyaXB0Iiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsInNraXBMb2djYXRDYXB0dXJlIiwiY2hyb21lT3B0aW9ucyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsInVzZXJQcm9maWxlIiwiYnJvd3Nlck5hbWUiLCJlbmZvcmNlQXBwSW5zdGFsbCIsInN1cHByZXNzS2lsbFNlcnZlciIsImFsbG93T2ZmbGluZURldmljZXMiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwibW9ja0xvY2F0aW9uQXBwIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJhbGxvd0RlbGF5QWRiIiwidWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImJvb3RzdHJhcFBvcnQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi9saWIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tb25DYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ0FuZHJvaWQnXSxcbiAgICBwcmVzZW5jZTogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBBY3Rpdml0eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFBhY2thZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0QWN0aXZpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0UGFja2FnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFdhaXREdXJhdGlvbjoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGRldmljZVJlYWR5VGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWREZXZpY2VSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhbmRyb2lkRGV2aWNlU29ja2V0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWRiUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlbW90ZUFkYkhvc3Q6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZGJFeGVjVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGF2ZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF2ZExhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRBcmdzOiB7XG4gICAgLy8gY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcbiAgfSxcbiAgYXZkRW52OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgdXNlS2V5c3RvcmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGtleUFsaWFzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5UGFzc3dvcmQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIC8vIHRoaXMgb25lIGlzIGRlcHJlY2F0ZWRcbiAgY2hyb21lRHJpdmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIC8vIGR1cGxpY2F0ZSBvZiBhYm92ZSB3aXRoIGJldHRlciBzcGVsbGluZ1xuICBjaHJvbWVkcml2ZXJQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyUG9ydHM6IHtcbiAgICBpc0FycmF5OiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckFyZ3M6IHtcbiAgICBpc09iamVjdDogdHJ1ZSxcbiAgfSxcbiAgY2hyb21lZHJpdmVyRXhlY3V0YWJsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lTG9nZ2luZ1ByZWZzOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50QWN0aW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50Q2F0ZWdvcnk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpbnRlbnRGbGFnczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZG9udFN0b3BBcHBPblJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVuaWNvZGVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldEtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5vU2lnbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zOiB7XG4gICAgaXNCb29sZWFuOiBmYWxzZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5hdGl2ZVdlYlNjcmVlbnNob3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYW5kcm9pZFNjcmVlbnNob3RQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2xlYXJTeXN0ZW1GaWxlczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0dyYW50UGVybWlzc2lvbnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBuZXR3b3JrU3BlZWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBncHNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlzSGVhZGxlc3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd0Nocm9tZWRyaXZlckxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwVW5sb2NrOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrVHlwZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja0tleToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja1N0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ2xvY2tzZXR0aW5ncycsICd1aWF1dG9tYXRvciddLFxuICB9LFxuICBvdGhlckFwcHM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1bmluc3RhbGxPdGhlclBhY2thZ2VzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWxsb3dUZXN0UGFja2FnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZVNjcmlwdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZW1vdGVBcHBzQ2FjaGVMaW1pdDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJ1aWxkVG9vbHNWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2tpcExvZ2NhdENhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lT3B0aW9uczoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VyUHJvZmlsZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5mb3JjZUFwcEluc3RhbGw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFsbG93T2ZmbGluZURldmljZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3I6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtb2NrTG9jYXRpb25BcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGb3JtYXQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGaWx0ZXJTcGVjczoge1xuICAgIGlzQXJyYXk6IHRydWVcbiAgfSxcbiAgYWxsb3dEZWxheUFkYjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgdWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyA9IHtcbiAgaWdub3JlVW5pbXBvcnRhbnRWaWV3czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFjY2VwdFNzbENlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWROYXR1cmFsT3JpZW50YXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBib290c3RyYXBQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG5cbmxldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihkZXNpcmVkQ2FwQ29uc3RyYWludHMsIGNvbW1vbkNhcENvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuZXhwb3J0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUlBLG9CQUFvQixHQUFHO0VBQ3pCQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDckNDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsR0FBRyxFQUFFO0lBQ0hILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksV0FBVyxFQUFFO0lBQ1hKLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREssVUFBVSxFQUFFO0lBQ1ZMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sZUFBZSxFQUFFO0lBQ2ZOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sY0FBYyxFQUFFO0lBQ2RQLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFEsZUFBZSxFQUFFO0lBQ2ZDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsa0JBQWtCLEVBQUU7SUFDbEJELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsZUFBZSxFQUFFO0lBQ2ZYLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFkseUJBQXlCLEVBQUU7SUFDekJILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksbUJBQW1CLEVBQUU7SUFDbkJiLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGMscUJBQXFCLEVBQUU7SUFDckJMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sT0FBTyxFQUFFO0lBQ1BOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sYUFBYSxFQUFFO0lBQ2JoQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RpQixjQUFjLEVBQUU7SUFDZFIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUyxHQUFHLEVBQUU7SUFDSGxCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1CLGdCQUFnQixFQUFFO0lBQ2hCVixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RXLGVBQWUsRUFBRTtJQUNmWCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RZLE9BQU8sRUFBRTtFQUVULENBQUM7RUFDREMsTUFBTSxFQUFFO0lBQ05DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsV0FBVyxFQUFFO0lBQ1hDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDREMsWUFBWSxFQUFFO0lBQ1oxQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QyQixnQkFBZ0IsRUFBRTtJQUNoQjNCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDRCLFFBQVEsRUFBRTtJQUNSNUIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNENkIsV0FBVyxFQUFFO0lBQ1g3QixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q4QixtQkFBbUIsRUFBRTtJQUNuQnJCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHNCLHVCQUF1QixFQUFFO0lBQ3ZCTixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RPLDhCQUE4QixFQUFFO0lBQzlCUCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBRURRLGdCQUFnQixFQUFFO0lBQ2hCeEIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUVEeUIsZ0JBQWdCLEVBQUU7SUFDaEJ6QixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QwQixpQkFBaUIsRUFBRTtJQUNqQkMsT0FBTyxFQUFFO0VBQ1gsQ0FBQztFQUNEQyxnQkFBZ0IsRUFBRTtJQUNoQmQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEZSxzQkFBc0IsRUFBRTtJQUN0QnRDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHVDLHlCQUF5QixFQUFFO0lBQ3pCdkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEd0MsNkJBQTZCLEVBQUU7SUFDN0J4QyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R5QywrQkFBK0IsRUFBRTtJQUMvQmhCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGlCLDZCQUE2QixFQUFFO0lBQzdCakIsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEa0Isa0JBQWtCLEVBQUU7SUFDbEJwQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RxQixrQkFBa0IsRUFBRTtJQUNsQm5DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG9DLGVBQWUsRUFBRTtJQUNmN0MsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEOEMsWUFBWSxFQUFFO0lBQ1o5QyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QrQyxjQUFjLEVBQUU7SUFDZC9DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGdELFdBQVcsRUFBRTtJQUNYaEQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEaUQsdUJBQXVCLEVBQUU7SUFDdkJqRCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RrRCxrQkFBa0IsRUFBRTtJQUNsQnpCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDBCLGVBQWUsRUFBRTtJQUNmMUIsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMkIsYUFBYSxFQUFFO0lBQ2IzQixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q0QixNQUFNLEVBQUU7SUFDTjVCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDZCLDRCQUE0QixFQUFFO0lBQzVCN0IsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEOEIsVUFBVSxFQUFFO0lBQ1Y5QixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QrQixtQkFBbUIsRUFBRTtJQUNuQi9CLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGdDLHFCQUFxQixFQUFFO0lBQ3JCekQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMEQsa0JBQWtCLEVBQUU7SUFDbEIxRCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QyRCxnQkFBZ0IsRUFBRTtJQUNoQmxDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRG1DLDBDQUEwQyxFQUFFO0lBQzFDbkMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEb0Msb0JBQW9CLEVBQUU7SUFDcEJwQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RxQyxpQkFBaUIsRUFBRTtJQUNqQnZDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHdDLFlBQVksRUFBRTtJQUNaL0QsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEZ0UsVUFBVSxFQUFFO0lBQ1Z2QyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R3QyxVQUFVLEVBQUU7SUFDVnhDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHlDLG1CQUFtQixFQUFFO0lBQ25CekMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMEMsVUFBVSxFQUFFO0lBQ1YxQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QyQyxzQkFBc0IsRUFBRTtJQUN0QjNDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDRDLFVBQVUsRUFBRTtJQUNWckUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEc0UsU0FBUyxFQUFFO0lBQ1R0RSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R1RSxjQUFjLEVBQUU7SUFDZHZFLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLHdCQUF3QixFQUFFLENBQUMsY0FBYyxFQUFFLGFBQWE7RUFDMUQsQ0FBQztFQUNEdUUsU0FBUyxFQUFFO0lBQ1R4RSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R5RSxzQkFBc0IsRUFBRTtJQUN0QnpFLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDBFLGlCQUFpQixFQUFFO0lBQ2pCakQsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEa0QsZ0JBQWdCLEVBQUU7SUFDaEIzRSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q0RSxZQUFZLEVBQUU7SUFDWjVFLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDZFLHdCQUF3QixFQUFFO0lBQ3hCcEQsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEcUQsb0JBQW9CLEVBQUU7SUFDcEJyRSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RzRSxpQkFBaUIsRUFBRTtJQUNqQi9FLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGdGLGlCQUFpQixFQUFFO0lBQ2pCdkQsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEd0QsYUFBYSxFQUFFO0lBQ2IxRCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QyRCx3QkFBd0IsRUFBRTtJQUN4QnpELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDBELFdBQVcsRUFBRTtJQUNYMUUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMkUsV0FBVyxFQUFFO0lBQ1hwRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RxRixpQkFBaUIsRUFBRTtJQUNqQjVELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDZELGtCQUFrQixFQUFFO0lBQ2xCN0QsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEOEQsbUJBQW1CLEVBQUU7SUFDbkI5RCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QrRCwwQkFBMEIsRUFBRTtJQUMxQi9ELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGdFLG9CQUFvQixFQUFFO0lBQ3BCaEYsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEaUYsZUFBZSxFQUFFO0lBQ2YxRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QyRixZQUFZLEVBQUU7SUFDWjNGLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDRGLGlCQUFpQixFQUFFO0lBQ2pCeEQsT0FBTyxFQUFFO0VBQ1gsQ0FBQztFQUNEeUQsYUFBYSxFQUFFO0lBQ2JwRSxTQUFTLEVBQUU7RUFDYjtBQUNGLENBQUM7QUFBQztBQUVGLElBQUlxRSx5QkFBeUIsR0FBRztFQUM5QkMsc0JBQXNCLEVBQUU7SUFDdEJ0RSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R1RSxzQkFBc0IsRUFBRTtJQUN0QnZFLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHdFLGNBQWMsRUFBRTtJQUNkeEUsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEeUUseUJBQXlCLEVBQUU7SUFDekJ6RSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QwRSxzQkFBc0IsRUFBRTtJQUN0QjFFLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDJFLGFBQWEsRUFBRTtJQUNiM0YsUUFBUSxFQUFFO0VBQ1o7QUFDRixDQUFDO0FBRUQsSUFBSTRGLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUU5QkMsTUFBTSxDQUFDQyxNQUFNLENBQUNGLHFCQUFxQixFQUFFdkcsb0JBQW9CLEVBQzNDZ0cseUJBQXlCLENBQUM7QUFBQyxlQUUxQk8scUJBQXFCO0FBQUEifQ==
300
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tb25DYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwicHJlc2VuY2UiLCJhcHAiLCJhcHBBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXREdXJhdGlvbiIsImlzTnVtYmVyIiwiZGV2aWNlUmVhZHlUaW1lb3V0IiwiYW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZERldmljZVJlYWR5VGltZW91dCIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhZGJQb3J0IiwicmVtb3RlQWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiYXZkIiwiYXZkTGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsImF2ZEFyZ3MiLCJhdmRFbnYiLCJpc09iamVjdCIsInVzZUtleXN0b3JlIiwiaXNCb29sZWFuIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiaXNBcnJheSIsImNocm9tZWRyaXZlckFyZ3MiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsImNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlIiwiY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiY2hyb21lTG9nZ2luZ1ByZWZzIiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwiYXV0b1dlYnZpZXdOYW1lIiwiaW50ZW50QWN0aW9uIiwiaW50ZW50Q2F0ZWdvcnkiLCJpbnRlbnRGbGFncyIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwiZG9udFN0b3BBcHBPblJlc2V0IiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsIm5vU2lnbiIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJhdXRvTGF1bmNoIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsImFuZHJvaWRJbnN0YWxsUGF0aCIsImNsZWFyU3lzdGVtRmlsZXMiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsInNoYXJlZFByZWZlcmVuY2VzIiwibmV0d29ya1NwZWVkIiwiZ3BzRW5hYmxlZCIsImlzSGVhZGxlc3MiLCJzaG93Q2hyb21lZHJpdmVyTG9nIiwic2tpcFVubG9jayIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJ1bmxvY2tUeXBlIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJvdGhlckFwcHMiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJwYWdlTG9hZFN0cmF0ZWd5IiwibG9jYWxlU2NyaXB0Iiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsInNraXBMb2djYXRDYXB0dXJlIiwiY2hyb21lT3B0aW9ucyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsInVzZXJQcm9maWxlIiwiYnJvd3Nlck5hbWUiLCJlbmZvcmNlQXBwSW5zdGFsbCIsInN1cHByZXNzS2lsbFNlcnZlciIsImFsbG93T2ZmbGluZURldmljZXMiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwibW9ja0xvY2F0aW9uQXBwIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJhbGxvd0RlbGF5QWRiIiwidWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImJvb3RzdHJhcFBvcnQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi9saWIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tb25DYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ0FuZHJvaWQnXSxcbiAgICBwcmVzZW5jZTogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBBY3Rpdml0eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFBhY2thZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0QWN0aXZpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0UGFja2FnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFdhaXREdXJhdGlvbjoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGRldmljZVJlYWR5VGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWREZXZpY2VSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhbmRyb2lkRGV2aWNlU29ja2V0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWRiUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlbW90ZUFkYkhvc3Q6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZGJFeGVjVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGF2ZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF2ZExhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRBcmdzOiB7XG4gICAgLy8gY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcbiAgfSxcbiAgYXZkRW52OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgdXNlS2V5c3RvcmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGtleUFsaWFzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5UGFzc3dvcmQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIC8vIHRoaXMgb25lIGlzIGRlcHJlY2F0ZWRcbiAgY2hyb21lRHJpdmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIC8vIGR1cGxpY2F0ZSBvZiBhYm92ZSB3aXRoIGJldHRlciBzcGVsbGluZ1xuICBjaHJvbWVkcml2ZXJQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyUG9ydHM6IHtcbiAgICBpc0FycmF5OiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckFyZ3M6IHtcbiAgICBpc09iamVjdDogdHJ1ZSxcbiAgfSxcbiAgY2hyb21lZHJpdmVyRXhlY3V0YWJsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lTG9nZ2luZ1ByZWZzOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50QWN0aW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50Q2F0ZWdvcnk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpbnRlbnRGbGFnczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZG9udFN0b3BBcHBPblJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVuaWNvZGVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldEtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5vU2lnbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zOiB7XG4gICAgaXNCb29sZWFuOiBmYWxzZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5hdGl2ZVdlYlNjcmVlbnNob3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYW5kcm9pZFNjcmVlbnNob3RQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2xlYXJTeXN0ZW1GaWxlczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0dyYW50UGVybWlzc2lvbnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBuZXR3b3JrU3BlZWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBncHNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlzSGVhZGxlc3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd0Nocm9tZWRyaXZlckxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwVW5sb2NrOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrVHlwZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja0tleToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja1N0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ2xvY2tzZXR0aW5ncycsICd1aWF1dG9tYXRvciddLFxuICB9LFxuICBvdGhlckFwcHM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1bmluc3RhbGxPdGhlclBhY2thZ2VzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWxsb3dUZXN0UGFja2FnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZVNjcmlwdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZW1vdGVBcHBzQ2FjaGVMaW1pdDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJ1aWxkVG9vbHNWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2tpcExvZ2NhdENhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lT3B0aW9uczoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VyUHJvZmlsZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5mb3JjZUFwcEluc3RhbGw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFsbG93T2ZmbGluZURldmljZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3I6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtb2NrTG9jYXRpb25BcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGb3JtYXQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGaWx0ZXJTcGVjczoge1xuICAgIGlzQXJyYXk6IHRydWVcbiAgfSxcbiAgYWxsb3dEZWxheUFkYjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgdWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyA9IHtcbiAgaWdub3JlVW5pbXBvcnRhbnRWaWV3czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFjY2VwdFNzbENlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWROYXR1cmFsT3JpZW50YXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBib290c3RyYXBQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG5cbmxldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihkZXNpcmVkQ2FwQ29uc3RyYWludHMsIGNvbW1vbkNhcENvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuZXhwb3J0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUlBLG9CQUFvQixHQUFHO0VBQ3pCQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDckNDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsR0FBRyxFQUFFO0lBQ0hILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksV0FBVyxFQUFFO0lBQ1hKLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREssVUFBVSxFQUFFO0lBQ1ZMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sZUFBZSxFQUFFO0lBQ2ZOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sY0FBYyxFQUFFO0lBQ2RQLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFEsZUFBZSxFQUFFO0lBQ2ZDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsa0JBQWtCLEVBQUU7SUFDbEJELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsZUFBZSxFQUFFO0lBQ2ZYLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFkseUJBQXlCLEVBQUU7SUFDekJILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksbUJBQW1CLEVBQUU7SUFDbkJiLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGMscUJBQXFCLEVBQUU7SUFDckJMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sT0FBTyxFQUFFO0lBQ1BOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sYUFBYSxFQUFFO0lBQ2JoQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RpQixjQUFjLEVBQUU7SUFDZFIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUyxHQUFHLEVBQUU7SUFDSGxCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1CLGdCQUFnQixFQUFF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
@@ -1 +1 @@
1
- {"version":3,"file":"desired-caps.js","names":["commonCapConstraints","platformName","isString","inclusionCaseInsensitive","presence","app","appActivity","appPackage","appWaitActivity","appWaitPackage","appWaitDuration","isNumber","deviceReadyTimeout","androidCoverage","androidDeviceReadyTimeout","androidDeviceSocket","androidInstallTimeout","adbPort","remoteAdbHost","adbExecTimeout","avd","avdLaunchTimeout","avdReadyTimeout","avdArgs","avdEnv","isObject","useKeystore","isBoolean","keystorePath","keystorePassword","keyAlias","keyPassword","webviewDevtoolsPort","ensureWebviewsHavePages","enableWebviewDetailsCollection","chromeDriverPort","chromedriverPort","chromedriverPorts","isArray","chromedriverArgs","chromedriverExecutable","chromedriverExecutableDir","chromedriverChromeMappingFile","chromedriverUseSystemExecutable","chromedriverDisableBuildCheck","chromeLoggingPrefs","autoWebviewTimeout","autoWebviewName","intentAction","intentCategory","intentFlags","optionalIntentArguments","dontStopAppOnReset","unicodeKeyboard","resetKeyboard","noSign","recreateChromeDriverSessions","autoLaunch","nativeWebScreenshot","androidScreenshotPath","androidInstallPath","clearSystemFiles","extractChromeAndroidPackageFromContextName","autoGrantPermissions","sharedPreferences","networkSpeed","gpsEnabled","isHeadless","showChromedriverLog","skipUnlock","clearDeviceLogsOnStart","unlockType","unlockKey","unlockStrategy","otherApps","uninstallOtherPackages","allowTestPackages","pageLoadStrategy","localeScript","skipDeviceInitialization","remoteAppsCacheLimit","buildToolsVersion","skipLogcatCapture","chromeOptions","enablePerformanceLogging","userProfile","browserName","enforceAppInstall","suppressKillServer","allowOfflineDevices","ignoreHiddenApiPolicyError","unlockSuccessTimeout","mockLocationApp","logcatFormat","logcatFilterSpecs","allowDelayAdb","uiautomatorCapConstraints","ignoreUnimportantViews","disableAndroidWatchers","acceptSslCerts","androidNaturalOrientation","disableWindowAnimation","bootstrapPort","desiredCapConstraints","Object","assign"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["let commonCapConstraints = {\n platformName: {\n isString: true,\n inclusionCaseInsensitive: ['Android'],\n presence: true\n },\n app: {\n isString: true\n },\n appActivity: {\n isString: true\n },\n appPackage: {\n isString: true\n },\n appWaitActivity: {\n isString: true\n },\n appWaitPackage: {\n isString: true\n },\n appWaitDuration: {\n isNumber: true\n },\n deviceReadyTimeout: {\n isNumber: true\n },\n androidCoverage: {\n isString: true\n },\n androidDeviceReadyTimeout: {\n isNumber: true\n },\n androidDeviceSocket: {\n isString: true\n },\n androidInstallTimeout: {\n isNumber: true\n },\n adbPort: {\n isNumber: true\n },\n remoteAdbHost: {\n isString: true\n },\n adbExecTimeout: {\n isNumber: true\n },\n avd: {\n isString: true\n },\n avdLaunchTimeout: {\n isNumber: true\n },\n avdReadyTimeout: {\n isNumber: true\n },\n avdArgs: {\n // could be a string or an array\n },\n avdEnv: {\n isObject: true\n },\n useKeystore: {\n isBoolean: true\n },\n keystorePath: {\n isString: true\n },\n keystorePassword: {\n isString: true\n },\n keyAlias: {\n isString: true\n },\n keyPassword: {\n isString: true\n },\n webviewDevtoolsPort: {\n isNumber: true\n },\n ensureWebviewsHavePages: {\n isBoolean: true\n },\n enableWebviewDetailsCollection: {\n isBoolean: true\n },\n // this one is deprecated\n chromeDriverPort: {\n isNumber: true\n },\n // duplicate of above with better spelling\n chromedriverPort: {\n isNumber: true\n },\n chromedriverPorts: {\n isArray: true\n },\n chromedriverArgs: {\n isObject: true,\n },\n chromedriverExecutable: {\n isString: true\n },\n chromedriverExecutableDir: {\n isString: true\n },\n chromedriverChromeMappingFile: {\n isString: true\n },\n chromedriverUseSystemExecutable: {\n isBoolean: true\n },\n chromedriverDisableBuildCheck: {\n isBoolean: true\n },\n chromeLoggingPrefs: {\n isObject: true\n },\n autoWebviewTimeout: {\n isNumber: true\n },\n autoWebviewName: {\n isString: true\n },\n intentAction: {\n isString: true\n },\n intentCategory: {\n isString: true\n },\n intentFlags: {\n isString: true\n },\n optionalIntentArguments: {\n isString: true\n },\n dontStopAppOnReset: {\n isBoolean: true\n },\n unicodeKeyboard: {\n isBoolean: true\n },\n resetKeyboard: {\n isBoolean: true\n },\n noSign: {\n isBoolean: true\n },\n recreateChromeDriverSessions: {\n isBoolean: false\n },\n autoLaunch: {\n isBoolean: true\n },\n nativeWebScreenshot: {\n isBoolean: true\n },\n androidScreenshotPath: {\n isString: true\n },\n androidInstallPath: {\n isString: true\n },\n clearSystemFiles: {\n isBoolean: true\n },\n extractChromeAndroidPackageFromContextName: {\n isBoolean: true\n },\n autoGrantPermissions: {\n isBoolean: true\n },\n sharedPreferences: {\n isObject: true\n },\n networkSpeed: {\n isString: true\n },\n gpsEnabled: {\n isBoolean: true\n },\n isHeadless: {\n isBoolean: true\n },\n showChromedriverLog: {\n isBoolean: true\n },\n skipUnlock: {\n isBoolean: true\n },\n clearDeviceLogsOnStart: {\n isBoolean: true\n },\n unlockType: {\n isString: true\n },\n unlockKey: {\n isString: true\n },\n unlockStrategy: {\n isString: true,\n inclusionCaseInsensitive: ['locksettings', 'uiautomator'],\n },\n otherApps: {\n isString: true\n },\n uninstallOtherPackages: {\n isString: true\n },\n allowTestPackages: {\n isBoolean: true\n },\n pageLoadStrategy: {\n isString: true\n },\n localeScript: {\n isString: true\n },\n skipDeviceInitialization: {\n isBoolean: true\n },\n remoteAppsCacheLimit: {\n isNumber: true\n },\n buildToolsVersion: {\n isString: true\n },\n skipLogcatCapture: {\n isBoolean: true\n },\n chromeOptions: {\n isObject: true\n },\n enablePerformanceLogging: {\n isBoolean: true\n },\n userProfile: {\n isNumber: true\n },\n browserName: {\n isString: true\n },\n enforceAppInstall: {\n isBoolean: true\n },\n suppressKillServer: {\n isBoolean: true\n },\n allowOfflineDevices: {\n isBoolean: true\n },\n ignoreHiddenApiPolicyError: {\n isBoolean: true\n },\n unlockSuccessTimeout: {\n isNumber: true\n },\n mockLocationApp: {\n isString: true\n },\n logcatFormat: {\n isString: true\n },\n logcatFilterSpecs: {\n isArray: true\n },\n allowDelayAdb: {\n isBoolean: true\n }\n};\n\nlet uiautomatorCapConstraints = {\n ignoreUnimportantViews: {\n isBoolean: true\n },\n disableAndroidWatchers: {\n isBoolean: true\n },\n acceptSslCerts: {\n isBoolean: true\n },\n androidNaturalOrientation: {\n isBoolean: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n bootstrapPort: {\n isNumber: true\n },\n};\n\nlet desiredCapConstraints = {};\n\nObject.assign(desiredCapConstraints, commonCapConstraints,\n uiautomatorCapConstraints);\n\nexport default desiredCapConstraints;\nexport { commonCapConstraints };\n"],"mappings":"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"}
1
+ {"version":3,"file":"desired-caps.js","names":["commonCapConstraints","platformName","isString","inclusionCaseInsensitive","presence","app","appActivity","appPackage","appWaitActivity","appWaitPackage","appWaitDuration","isNumber","deviceReadyTimeout","androidCoverage","androidDeviceReadyTimeout","androidDeviceSocket","androidInstallTimeout","adbPort","remoteAdbHost","adbExecTimeout","avd","avdLaunchTimeout","avdReadyTimeout","avdArgs","avdEnv","isObject","useKeystore","isBoolean","keystorePath","keystorePassword","keyAlias","keyPassword","webviewDevtoolsPort","ensureWebviewsHavePages","enableWebviewDetailsCollection","chromeDriverPort","chromedriverPort","chromedriverPorts","isArray","chromedriverArgs","chromedriverExecutable","chromedriverExecutableDir","chromedriverChromeMappingFile","chromedriverUseSystemExecutable","chromedriverDisableBuildCheck","chromeLoggingPrefs","autoWebviewTimeout","autoWebviewName","intentAction","intentCategory","intentFlags","optionalIntentArguments","dontStopAppOnReset","unicodeKeyboard","resetKeyboard","noSign","recreateChromeDriverSessions","autoLaunch","nativeWebScreenshot","androidScreenshotPath","androidInstallPath","clearSystemFiles","extractChromeAndroidPackageFromContextName","autoGrantPermissions","sharedPreferences","networkSpeed","gpsEnabled","isHeadless","showChromedriverLog","skipUnlock","clearDeviceLogsOnStart","unlockType","unlockKey","unlockStrategy","otherApps","uninstallOtherPackages","allowTestPackages","pageLoadStrategy","localeScript","skipDeviceInitialization","remoteAppsCacheLimit","buildToolsVersion","skipLogcatCapture","chromeOptions","enablePerformanceLogging","userProfile","browserName","enforceAppInstall","suppressKillServer","allowOfflineDevices","ignoreHiddenApiPolicyError","unlockSuccessTimeout","mockLocationApp","logcatFormat","logcatFilterSpecs","allowDelayAdb","uiautomatorCapConstraints","ignoreUnimportantViews","disableAndroidWatchers","acceptSslCerts","androidNaturalOrientation","disableWindowAnimation","bootstrapPort","desiredCapConstraints","Object","assign"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["let commonCapConstraints = {\n platformName: {\n isString: true,\n inclusionCaseInsensitive: ['Android'],\n presence: true\n },\n app: {\n isString: true\n },\n appActivity: {\n isString: true\n },\n appPackage: {\n isString: true\n },\n appWaitActivity: {\n isString: true\n },\n appWaitPackage: {\n isString: true\n },\n appWaitDuration: {\n isNumber: true\n },\n deviceReadyTimeout: {\n isNumber: true\n },\n androidCoverage: {\n isString: true\n },\n androidDeviceReadyTimeout: {\n isNumber: true\n },\n androidDeviceSocket: {\n isString: true\n },\n androidInstallTimeout: {\n isNumber: true\n },\n adbPort: {\n isNumber: true\n },\n remoteAdbHost: {\n isString: true\n },\n adbExecTimeout: {\n isNumber: true\n },\n avd: {\n isString: true\n },\n avdLaunchTimeout: {\n isNumber: true\n },\n avdReadyTimeout: {\n isNumber: true\n },\n avdArgs: {\n // could be a string or an array\n },\n avdEnv: {\n isObject: true\n },\n useKeystore: {\n isBoolean: true\n },\n keystorePath: {\n isString: true\n },\n keystorePassword: {\n isString: true\n },\n keyAlias: {\n isString: true\n },\n keyPassword: {\n isString: true\n },\n webviewDevtoolsPort: {\n isNumber: true\n },\n ensureWebviewsHavePages: {\n isBoolean: true\n },\n enableWebviewDetailsCollection: {\n isBoolean: true\n },\n // this one is deprecated\n chromeDriverPort: {\n isNumber: true\n },\n // duplicate of above with better spelling\n chromedriverPort: {\n isNumber: true\n },\n chromedriverPorts: {\n isArray: true\n },\n chromedriverArgs: {\n isObject: true,\n },\n chromedriverExecutable: {\n isString: true\n },\n chromedriverExecutableDir: {\n isString: true\n },\n chromedriverChromeMappingFile: {\n isString: true\n },\n chromedriverUseSystemExecutable: {\n isBoolean: true\n },\n chromedriverDisableBuildCheck: {\n isBoolean: true\n },\n chromeLoggingPrefs: {\n isObject: true\n },\n autoWebviewTimeout: {\n isNumber: true\n },\n autoWebviewName: {\n isString: true\n },\n intentAction: {\n isString: true\n },\n intentCategory: {\n isString: true\n },\n intentFlags: {\n isString: true\n },\n optionalIntentArguments: {\n isString: true\n },\n dontStopAppOnReset: {\n isBoolean: true\n },\n unicodeKeyboard: {\n isBoolean: true\n },\n resetKeyboard: {\n isBoolean: true\n },\n noSign: {\n isBoolean: true\n },\n recreateChromeDriverSessions: {\n isBoolean: false\n },\n autoLaunch: {\n isBoolean: true\n },\n nativeWebScreenshot: {\n isBoolean: true\n },\n androidScreenshotPath: {\n isString: true\n },\n androidInstallPath: {\n isString: true\n },\n clearSystemFiles: {\n isBoolean: true\n },\n extractChromeAndroidPackageFromContextName: {\n isBoolean: true\n },\n autoGrantPermissions: {\n isBoolean: true\n },\n sharedPreferences: {\n isObject: true\n },\n networkSpeed: {\n isString: true\n },\n gpsEnabled: {\n isBoolean: true\n },\n isHeadless: {\n isBoolean: true\n },\n showChromedriverLog: {\n isBoolean: true\n },\n skipUnlock: {\n isBoolean: true\n },\n clearDeviceLogsOnStart: {\n isBoolean: true\n },\n unlockType: {\n isString: true\n },\n unlockKey: {\n isString: true\n },\n unlockStrategy: {\n isString: true,\n inclusionCaseInsensitive: ['locksettings', 'uiautomator'],\n },\n otherApps: {\n isString: true\n },\n uninstallOtherPackages: {\n isString: true\n },\n allowTestPackages: {\n isBoolean: true\n },\n pageLoadStrategy: {\n isString: true\n },\n localeScript: {\n isString: true\n },\n skipDeviceInitialization: {\n isBoolean: true\n },\n remoteAppsCacheLimit: {\n isNumber: true\n },\n buildToolsVersion: {\n isString: true\n },\n skipLogcatCapture: {\n isBoolean: true\n },\n chromeOptions: {\n isObject: true\n },\n enablePerformanceLogging: {\n isBoolean: true\n },\n userProfile: {\n isNumber: true\n },\n browserName: {\n isString: true\n },\n enforceAppInstall: {\n isBoolean: true\n },\n suppressKillServer: {\n isBoolean: true\n },\n allowOfflineDevices: {\n isBoolean: true\n },\n ignoreHiddenApiPolicyError: {\n isBoolean: true\n },\n unlockSuccessTimeout: {\n isNumber: true\n },\n mockLocationApp: {\n isString: true\n },\n logcatFormat: {\n isString: true\n },\n logcatFilterSpecs: {\n isArray: true\n },\n allowDelayAdb: {\n isBoolean: true\n }\n};\n\nlet uiautomatorCapConstraints = {\n ignoreUnimportantViews: {\n isBoolean: true\n },\n disableAndroidWatchers: {\n isBoolean: true\n },\n acceptSslCerts: {\n isBoolean: true\n },\n androidNaturalOrientation: {\n isBoolean: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n bootstrapPort: {\n isNumber: true\n },\n};\n\nlet desiredCapConstraints = {};\n\nObject.assign(desiredCapConstraints, commonCapConstraints,\n uiautomatorCapConstraints);\n\nexport default desiredCapConstraints;\nexport { commonCapConstraints };\n"],"mappings":"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"}