appium-android-driver 5.7.0 → 5.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/build/lib/android-helpers.js +2 -2
  3. package/build/lib/android-helpers.js.map +1 -1
  4. package/build/lib/bootstrap.js +2 -2
  5. package/build/lib/bootstrap.js.map +1 -1
  6. package/build/lib/commands/actions.js +2 -2
  7. package/build/lib/commands/actions.js.map +1 -1
  8. package/build/lib/commands/app-management.js +2 -2
  9. package/build/lib/commands/app-management.js.map +1 -1
  10. package/build/lib/commands/context.js +2 -2
  11. package/build/lib/commands/context.js.map +1 -1
  12. package/build/lib/commands/element.js +2 -2
  13. package/build/lib/commands/element.js.map +1 -1
  14. package/build/lib/commands/file-actions.js +2 -2
  15. package/build/lib/commands/file-actions.js.map +1 -1
  16. package/build/lib/commands/general.js +2 -2
  17. package/build/lib/commands/general.js.map +1 -1
  18. package/build/lib/commands/media-projection.js +2 -2
  19. package/build/lib/commands/media-projection.js.map +1 -1
  20. package/build/lib/commands/recordscreen.js +2 -2
  21. package/build/lib/commands/recordscreen.js.map +1 -1
  22. package/build/lib/commands/shell.js +2 -2
  23. package/build/lib/commands/shell.js.map +1 -1
  24. package/build/lib/commands/streamscreen.js +4 -4
  25. package/build/lib/commands/streamscreen.js.map +1 -1
  26. package/build/lib/commands/touch.js +2 -2
  27. package/build/lib/commands/touch.js.map +1 -1
  28. package/build/lib/desired-caps.js +2 -1
  29. package/build/lib/desired-caps.js.map +1 -1
  30. package/build/lib/driver.js +2 -2
  31. package/build/lib/driver.js.map +1 -1
  32. package/build/lib/logger.js +2 -2
  33. package/build/lib/logger.js.map +1 -1
  34. package/build/lib/uiautomator.js +2 -2
  35. package/build/lib/uiautomator.js.map +1 -1
  36. package/build/lib/unlock-helpers.js +2 -2
  37. package/build/lib/unlock-helpers.js.map +1 -1
  38. package/build/lib/webview-helpers.js +2 -2
  39. package/build/lib/webview-helpers.js.map +1 -1
  40. package/lib/android-helpers.js +1 -1
  41. package/lib/bootstrap.js +1 -1
  42. package/lib/commands/actions.js +1 -1
  43. package/lib/commands/app-management.js +1 -1
  44. package/lib/commands/context.js +1 -1
  45. package/lib/commands/element.js +1 -1
  46. package/lib/commands/file-actions.js +1 -1
  47. package/lib/commands/general.js +1 -1
  48. package/lib/commands/media-projection.js +1 -1
  49. package/lib/commands/recordscreen.js +1 -1
  50. package/lib/commands/shell.js +1 -1
  51. package/lib/commands/streamscreen.js +1 -1
  52. package/lib/commands/touch.js +1 -1
  53. package/lib/driver.js +1 -1
  54. package/lib/logger.js +1 -1
  55. package/lib/uiautomator.js +1 -1
  56. package/lib/unlock-helpers.js +1 -1
  57. package/lib/webview-helpers.js +1 -1
  58. package/package.json +5 -2
@@ -12,7 +12,7 @@ var _index = _interopRequireDefault(require("./commands/index"));
12
12
  var _androidHelpers = require("./android-helpers");
13
13
  var _lodash = _interopRequireDefault(require("lodash"));
14
14
  var _appiumAdb = require("appium-adb");
15
- var _support = require("appium/support");
15
+ var _support = require("@appium/support");
16
16
  var _asyncbox = require("asyncbox");
17
17
  var _sharedPreferencesBuilder = require("shared-preferences-builder");
18
18
  var _bluebird = _interopRequireDefault(require("bluebird"));
@@ -420,4 +420,4 @@ class AndroidDriver extends _driver.BaseDriver {
420
420
  exports.AndroidDriver = AndroidDriver;
421
421
  var _default = AndroidDriver;
422
422
  exports.default = _default;
423
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkFuZHJvaWREcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJkZXNpcmVkQ29uc3RyYWludHMiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImp3cFByb3h5QWN0aXZlIiwiandwUHJveHlBdm9pZCIsIl8iLCJjbG9uZSIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJhcGtTdHJpbmdzIiwidW5sb2NrZXIiLCJoZWxwZXJzIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWZhdWx0T3B0cyIsImFjdGlvbiIsImNhdGVnb3J5IiwiZmxhZ3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwidG1wRGlyIiwidGVtcERpciIsInN0YXRpY0RpciIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImJvb3RzdHJhcFBvcnQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsInVzZVVubG9ja0hlbHBlckFwcCIsImlzVW5kZWZpbmVkIiwidW5sb2NrVHlwZSIsIm5vUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiaXNDaHJvbWVTZXNzaW9uIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsInB1c2giLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiZ2V0QXBpTGV2ZWwiLCJsb2ciLCJ3YXJuIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJhcHAiLCJhcHBQYWNrYWdlIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiY2hlY2tQYWNrYWdlUHJlc2VudCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5ldHdvcmtTcGVlZCIsImlzRW11bGF0b3IiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJncHNFbmFibGVkIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInN0YXJ0QW5kcm9pZFNlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsImlnbiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwia2V5IiwidmFsdWUiLCJzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IiwiZGVmYXVsdElNRSIsImluaXREZXZpY2UiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VTY3JlZW5TaXplIiwiZ2V0U2NyZWVuU2l6ZSIsImRldmljZU1vZGVsIiwiZ2V0TW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJnZXRNYW51ZmFjdHVyZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwiYm9vdHN0cmFwIiwid2Vic29ja2V0Iiwic3RhcnQiLCJhY2NlcHRTc2xDZXJ0cyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsInNldElNRSIsImRvbnRTdG9wQXBwT25SZXNldCIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwic2h1dGRvd24iLCJzdG9wTG9nY2F0Iiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzaGFyZWRQcmVmcyIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVtb3RlUGF0aCIsInJlbW90ZUZpbGUiLCJsb2NhbFBhdGgiLCJidWlsZGVyIiwiZ2V0UHJlZnNCdWlsZGVyIiwiYnVpbGQiLCJwcmVmcyIsInRvRmlsZSIsInVubGluayIsIlNoYXJlZFByZWZzQnVpbGRlciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImlzRnVuY3Rpb24iLCJwcm94eVJlcVJlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgU2hhcmVkUHJlZnNCdWlsZGVyIH0gZnJvbSAnc2hhcmVkLXByZWZlcmVuY2VzLWJ1aWxkZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OID0gJy5hcGsnO1xuY29uc3QgREVWSUNFX1BPUlQgPSA0NzI0O1xuXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1ldGhvZHMgYW5kIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0b1xuLy8gQ2hyb21lZHJpdmVyXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuXTtcblxuY2xhc3MgQW5kcm9pZERyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcblxuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAneHBhdGgnLFxuICAgICAgJ2lkJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICctYW5kcm9pZCB1aWF1dG9tYXRvcidcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENvbnN0cmFpbnRzO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gXy5jbG9uZShOT19QUk9YWSk7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2V9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTtcbiAgICB0aGlzLnVubG9ja2VyID0gaGVscGVycy51bmxvY2tlcjtcblxuICAgIGZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gICAgICBBbmRyb2lkRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG4gICAgfVxuXG4gICAgLy8gbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIGxpbmUgd2hpY2ggYXNzaWducyBjb21tYW5kcyB0byBBbmRyb2lkRHJpdmVyLnByb3RvdHlwZSwgc28gdGhhdCBgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWVgIGlzIGRlZmluZWQuXG4gICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICAvLyB0aGUgd2hvbGUgY3JlYXRlU2Vzc2lvbiBmbG93IGlzIHN1cnJvdW5kZWQgaW4gYSB0cnktY2F0Y2ggc3RhdGVtZW50XG4gICAgLy8gaWYgY3JlYXRpbmcgYSBzZXNzaW9uIGZhaWxzIGF0IGFueSBwb2ludCwgd2UgdGVhcmRvd24gZXZlcnl0aGluZyB3ZVxuICAgIC8vIHNldCB1cCBiZWZvcmUgdGhyb3dpbmcgdGhlIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBsZXQgW3Nlc3Npb25JZCwgY2Fwc10gPSBhd2FpdCBzdXBlci5jcmVhdGVTZXNzaW9uKC4uLmFyZ3MpO1xuXG4gICAgICBsZXQgc2VydmVyRGV0YWlscyA9IHtcbiAgICAgICAgcGxhdGZvcm06ICdMSU5VWCcsXG4gICAgICAgIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgICBsb2NhdGlvbkNvbnRleHRFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgd2FybmluZ3M6IHt9LFxuICAgICAgICBkZXNpcmVkOiB0aGlzLmNhcHNcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgLy8gYXNzaWduaW5nIGRlZmF1bHRzXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGFjdGlvbjogJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAgIGZsYWdzOiAnMHgxMDIwMDAwMCcsXG4gICAgICAgIGRpc2FibGVBbmRyb2lkV2F0Y2hlcnM6IGZhbHNlLFxuICAgICAgICB0bXBEaXI6IGF3YWl0IHRlbXBEaXIuc3RhdGljRGlyKCksXG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGJvb3RzdHJhcFBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwLFxuICAgICAgfTtcbiAgICAgIF8uZGVmYXVsdHModGhpcy5vcHRzLCBkZWZhdWx0T3B0cyk7XG4gICAgICB0aGlzLnVzZVVubG9ja0hlbHBlckFwcCA9IF8uaXNVbmRlZmluZWQodGhpcy5jYXBzLnVubG9ja1R5cGUpO1xuXG4gICAgICAvLyBub3QgdXNlciB2aXNpYmxlIHZpYSBjYXBzXG4gICAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5vcHRzLmZ1bGxSZXNldCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5vcHRzLm5vUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0cy5mYXN0UmVzZXQgPSAhdGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLm5vUmVzZXQ7XG4gICAgICB0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCA9IHRoaXMub3B0cy5mYXN0UmVzZXQgfHwgdGhpcy5vcHRzLm5vUmVzZXQ7XG5cbiAgICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgICBoZWxwZXJzLmFkanVzdEJyb3dzZXJTZXNzaW9uQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLm5hdGl2ZVdlYlNjcmVlbnNob3QpIHtcbiAgICAgICAgdGhpcy5qd3BQcm94eUF2b2lkLnB1c2goWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2NyZWVuc2hvdCcpXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgICB0aGlzLm9wdHMudWRpZCA9IHVkaWQ7XG4gICAgICB0aGlzLm9wdHMuZW1Qb3J0ID0gZW1Qb3J0O1xuXG4gICAgICAvLyBzZXQgdXAgYW4gaW5zdGFuY2Ugb2YgQURCXG4gICAgICB0aGlzLmFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQURCKHtcbiAgICAgICAgdWRpZDogdGhpcy5vcHRzLnVkaWQsXG4gICAgICAgIGVtUG9ydDogdGhpcy5vcHRzLmVtUG9ydCxcbiAgICAgICAgYWRiUG9ydDogdGhpcy5vcHRzLmFkYlBvcnQsXG4gICAgICAgIHN1cHByZXNzS2lsbFNlcnZlcjogdGhpcy5vcHRzLnN1cHByZXNzS2lsbFNlcnZlcixcbiAgICAgICAgcmVtb3RlQWRiSG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QsXG4gICAgICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHRoaXMub3B0cy5jbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgICAgICBhZGJFeGVjVGltZW91dDogdGhpcy5vcHRzLmFkYkV4ZWNUaW1lb3V0LFxuICAgICAgICBhbGxvd09mZmxpbmVEZXZpY2VzOiB0aGlzLm9wdHMuYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyMykge1xuICAgICAgICB0aGlzLmxvZy53YXJuKFwiQ29uc2lkZXIgc2V0dGluZyAnYXV0b21hdGlvbk5hbWUnIGNhcGFiaWxpdHkgdG8gXCIgK1xuICAgICAgICAgIFwiJ3VpYXV0b21hdG9yMicgb24gQW5kcm9pZCA+PSA2LCBzaW5jZSBVSUF1dG9tYXRvciBmcmFtZXdvcmsgXCIgK1xuICAgICAgICAgICdpcyBub3QgbWFpbnRhaW5lZCBhbnltb3JlIGJ5IHRoZSBPUyB2ZW5kb3IuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgICAgLy8gdXNlciBwcm92aWRlZCBwYWNrYWdlIGluc3RlYWQgb2YgYXBwIGZvciAnYXBwJyBjYXBhYmlsaXR5LCBtYXNzYWdlIG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRzLmFwcFBhY2thZ2UgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgICB0aGlzLm9wdHMuYXBwID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBBUFBfRVhURU5TSU9OKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICAvLyB0aGUgYXBwIGlzbid0IGFuIGFjdHVhbCBhcHAgZmlsZSBidXQgcmF0aGVyIHNvbWV0aGluZyB3ZSB3YW50IHRvXG4gICAgICAgIC8vIGFzc3VtZSBpcyBvbiB0aGUgZGV2aWNlIGFuZCBqdXN0IGxhdW5jaCB2aWEgdGhlIGFwcFBhY2thZ2VcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgQXBwIGZpbGUgd2FzIG5vdCBsaXN0ZWQsIGluc3RlYWQgd2UncmUgZ29pbmcgdG8gcnVuIGAgK1xuICAgICAgICAgIGAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBkaXJlY3RseSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tQYWNrYWdlUHJlc2VudCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTb21lIGNsb3VkIHNlcnZpY2VzIHVzaW5nIGFwcGl1bSBsYXVuY2ggdGhlIGF2ZCB0aGVtc2VsdmVzLCBzbyB3ZSBlbnN1cmUgbmV0c3BlZWRcbiAgICAgIC8vIGlzIHNldCBmb3IgZW11bGF0b3JzIGJ5IGNhbGxpbmcgYWRiLm5ldHdvcmtTcGVlZCBiZWZvcmUgcnVubmluZyB0aGUgYXBwXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMubmV0d29ya1NwZWVkKSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignU29ycnksIG5ldHdvcmtTcGVlZCBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBuZXR3b3JrU3BlZWQgPSBlbnN1cmVOZXR3b3JrU3BlZWQodGhpcy5hZGIsIHRoaXMub3B0cy5uZXR3b3JrU3BlZWQpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLm5ldHdvcmtTcGVlZChuZXR3b3JrU3BlZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHRvIGVuYWJsZS9kaXNhYmxlIGdwcyBiZWZvcmUgcnVubmluZyB0aGUgYXBwbGljYXRpb25cbiAgICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5ncHNFbmFibGVkKSkge1xuICAgICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBUcnlpbmcgdG8gJHt0aGlzLm9wdHMuZ3BzRW5hYmxlZCA/ICdlbmFibGUnIDogJ2Rpc2FibGUnfSBncHMgbG9jYXRpb24gcHJvdmlkZXJgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKCdTb3JyeSEgZ3BzRW5hYmxlZCBjYXBhYmlsaXR5IGlzIG9ubHkgYXZhaWxhYmxlIGZvciBlbXVsYXRvcnMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0QW5kcm9pZFNlc3Npb24odGhpcy5vcHRzKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCB0aGlzLmNhcHNdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGlnbm9yaW5nIGRlbGV0ZSBzZXNzaW9uIGV4Y2VwdGlvbiBpZiBhbnkgYW5kIHRocm93IHRoZSByZWFsIGVycm9yXG4gICAgICAvLyB0aGF0IGhhcHBlbmVkIHdoaWxlIGNyZWF0aW5nIHRoZSBzZXNzaW9uLlxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhcHBPbkRldmljZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSB8fCAoIXRoaXMub3B0cy5hcHAgJiZcbiAgICAgICAgICAgdGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHBQYWNrYWdlKSk7XG4gIH1cblxuICBnZXQgaXNDaHJvbWVTZXNzaW9uICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0Nocm9tZUJyb3dzZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIG9uU2V0dGluZ3NVcGRhdGUgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnaWdub3JlVW5pbXBvcnRhbnRWaWV3cycpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0Q29tcHJlc3NlZExheW91dEhpZXJhcmNoeSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBbmRyb2lkU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgU3RhcnRpbmcgQW5kcm9pZCBzZXNzaW9uYCk7XG4gICAgLy8gc2V0IHVwIHRoZSBkZXZpY2UgdG8gcnVuIG9uIChyZWFsIG9yIGVtdWxhdG9yLCBldGMpXG4gICAgdGhpcy5kZWZhdWx0SU1FID0gYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZCwgcGxhdGZvcm0gdmVyc2lvbiwgc2NyZWVuIHNpemUsIG1vZGVsIGFuZCBtYW51ZmFjdHVyZXIgZGV0YWlscy5cbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IGF3YWl0IHRoaXMuYWRiLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gYXdhaXQgdGhpcy5hZGIuZ2V0U2NyZWVuU2l6ZSgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IGF3YWl0IHRoaXMuYWRiLmdldE1vZGVsKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IGF3YWl0IHRoaXMuYWRiLmdldE1hbnVmYWN0dXJlcigpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFQSSBsZXZlbCAyOCBpcyBBbmRyb2lkIFBcbiAgICAgICAgICAvLyBEb24ndCBmb3JnZXQgdG8gcmVzZXQgdGhlIHJlbGF4aW5nIGluIGRlbGV0ZSBzZXNzaW9uXG4gICAgICAgICAgdGhpcy5sb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gbWFuYWdlIGFuaW1hdGlvbiBzY2FsZScpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0Rpc2FibGluZyB3aW5kb3cgYW5pbWF0aW9uIGFzIGl0IGlzIHJlcXVlc3RlZCBieSBcImRpc2FibGVXaW5kb3dBbmltYXRpb25cIiBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvLyBzdGFydCBVaUF1dG9tYXRvclxuICAgIHRoaXMuYm9vdHN0cmFwID0gbmV3IGhlbHBlcnMuYm9vdHN0cmFwKHRoaXMuYWRiLCB0aGlzLm9wdHMuYm9vdHN0cmFwUG9ydCwgdGhpcy5vcHRzLndlYnNvY2tldCk7XG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc3RhcnQodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRoaXMub3B0cy5kaXNhYmxlQW5kcm9pZFdhdGNoZXJzLCB0aGlzLm9wdHMuYWNjZXB0U3NsQ2VydHMpO1xuICAgIC8vIGhhbmRsaW5nIHVuZXhwZWN0ZWQgc2h1dGRvd25cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ib290c3RyYXAub25VbmV4cGVjdGVkU2h1dGRvd247XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvb3RzdHJhcC5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24pIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpO1xuXG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyBMZXQncyB0cnkgdG8gdW5sb2NrIHRoZSBkZXZpY2VcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH1cblxuICAgIC8vIFNldCBDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IG9uIHRoZSBkZXZpY2UgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncyBvYmplY3RcbiAgICAvLyB0aGlzIGhhcyB0byBoYXBwZW4gX2FmdGVyXyBib290c3RyYXAgaXMgaW5pdGlhbGl6ZWRcbiAgICBpZiAodGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3MpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MudXBkYXRlKHtpZ25vcmVVbmltcG9ydGFudFZpZXdzOiB0aGlzLm9wdHMuaWdub3JlVW5pbXBvcnRhbnRWaWV3c30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgICAgLy8gc3RhcnQgYSBjaHJvbWVkcml2ZXIgc2Vzc2lvbiBhbmQgcHJveHkgdG8gaXRcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVTZXNzaW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuYXV0b0xhdW5jaCkge1xuICAgICAgICAvLyBzdGFydCBhcHBcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydEFVVCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5vcmllbnRhdGlvbikpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluaXRBdXRvV2VidmlldygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdEF1dG9XZWJ2aWV3ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBsZXQgdmlld05hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICAgICAgbGV0IHRpbWVvdXQgPSAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3VGltZW91dCkgfHwgMjAwMDtcblxuICAgICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcblxuICAgICAgLy8gdHJ5IGV2ZXJ5IDUwMG1zIHVudGlsIHRpbWVvdXQgaXMgb3ZlclxuICAgICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRDb250ZXh0KHZpZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIHBvcHVsYXRlIGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5LFxuICAgIC8vIGFuZCB0aGUgZGV2aWNlIGJlaW5nIHVzZWRcbiAgICAvLyBpbiB0aGUgb3B0cyBhbmQgY2FwcyAoc28gaXQgZ2V0cyBiYWNrIHRvIHRoZSB1c2VyIG9uIHNlc3Npb24gY3JlYXRpb24pXG4gICAgbGV0IGxhdW5jaEluZm8gPSBhd2FpdCBoZWxwZXJzLmdldExhdW5jaEluZm8odGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGxhdW5jaEluZm8pO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jYXBzLCBsYXVuY2hJbmZvKTtcblxuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBoZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHModGhpcy5vcHRzKTtcbiAgICAgIC8vIE9ubHkgU0VUVElOR1NfSEVMUEVSX1BLR19JRCBwYWNrYWdlIGlzIHVzZWQgYnkgVUlBMVxuICAgICAgYXdhaXQgaGVscGVycy51bmluc3RhbGxPdGhlclBhY2thZ2VzKFxuICAgICAgICB0aGlzLmFkYixcbiAgICAgICAgaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSxcbiAgICAgICAgW1NFVFRJTkdTX0hFTFBFUl9QS0dfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcIm90aGVyQXBwc1wiIGNhcGFiaWxpdHk6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgb3RoZXJBcHBzID0gYXdhaXQgQi5hbGwob3RoZXJBcHBzLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgQVBQX0VYVEVOU0lPTikpKTtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyhvdGhlckFwcHMsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cblxuICAgIC8vIGluc3RhbGwgYXBwXG4gICAgaWYgKCF0aGlzLm9wdHMuYXBwKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGdWxsIHJlc2V0IHJlcXVpcmVzIGFuIGFwcCBjYXBhYmlsaXR5LCB1c2UgZmFzdFJlc2V0IGlmIGFwcCBpcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBhcHAgY2FwYWJpbGl0eS4gQXNzdW1pbmcgaXQgaXMgYWxyZWFkeSBvbiB0aGUgZGV2aWNlJyk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZhc3RSZXNldCkge1xuICAgICAgICBhd2FpdCBoZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxBcGsodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgY29uc3QgYXBrU3RyaW5nc0Zvckxhbmd1YWdlID0gYXdhaXQgaGVscGVycy5wdXNoU3RyaW5ncyh0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmICh0aGlzLm9wdHMubGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuYXBrU3RyaW5nc1t0aGlzLm9wdHMubGFuZ3VhZ2VdID0gYXBrU3RyaW5nc0Zvckxhbmd1YWdlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbXVzdCBydW4gYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBrLCBvdGhlcndpc2UgaXQgd291bGQgY2F1c2UgdGhlXG4gICAgLy8gaW5zdGFsbCB0byBmYWlsLiBBbmQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcC5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5vcHRzLnNoYXJlZFByZWZlcmVuY2VzKSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRTaGFyZWRQcmVmZXJlbmNlcyh0aGlzLm9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgYXBwIGlzIGFjdHVhbGx5IHByZXNlbnQnKTtcbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5vcHRzLmFwcCkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBhcHAgYXBrIGF0ICR7dGhpcy5vcHRzLmFwcH1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1BhY2thZ2VQcmVzZW50ICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnQ2hlY2tpbmcgd2hldGhlciBwYWNrYWdlIGlzIHByZXNlbnQgb24gdGhlIGRldmljZScpO1xuICAgIGlmICghKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsIHRoaXMub3B0cy5hcHBQYWNrYWdlXSkpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgZmluZCBwYWNrYWdlICR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9IG9uIHRoZSBkZXZpY2VgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlXG4gIGFzeW5jIHNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgKGNvbXByZXNzKSB7XG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignY29tcHJlc3NlZExheW91dEhpZXJhcmNoeScsIHtjb21wcmVzc0xheW91dDogY29tcHJlc3N9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdTaHV0dGluZyBkb3duIEFuZHJvaWQgZHJpdmVyJyk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wUmVjb3JkaW5nU2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuXG4gICAgYXdhaXQgaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuXG4gICAgaWYgKHRoaXMuYm9vdHN0cmFwKSB7XG4gICAgICAvLyBjZXJ0YWluIGNsZWFudXAgd2Ugb25seSBjYXJlIHRvIGRvIGlmIHRoZSBib290c3RyYXAgd2FzIGV2ZXIgcnVuXG4gICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJHt0aGlzLmRlZmF1bHRJTUV9YCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXRJTUUodGhpcy5kZWZhdWx0SU1FKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uZ29Ub0hvbWUoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCAmJiAhdGhpcy5hcHBPbkRldmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8udW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNodXRkb3duKCk7XG4gICAgICB0aGlzLmJvb3RzdHJhcCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKFwiQ2FsbGVkIGRlbGV0ZVNlc3Npb24gYnV0IGJvb3RzdHJhcCB3YXNuJ3QgYWN0aXZlXCIpO1xuICAgIH1cbiAgICAvLyBzb21lIGNsZWFudXAgd2Ugd2FudCB0byBkbyByZWdhcmRsZXNzLCBpbiBjYXNlIHdlIGFyZSBzaHV0dGluZyBkb3duXG4gICAgLy8gbWlkLXN0YXJ0dXBcbiAgICBhd2FpdCB0aGlzLmFkYj8uc3RvcExvZ2NhdCgpO1xuICAgIGlmICh0aGlzLnVzZVVubG9ja0hlbHBlckFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LmZvcmNlU3RvcCgnaW8uYXBwaXVtLnVubG9jaycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyB3aW5kb3cgYW5pbWF0aW9uIHN0YXRlJyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG5cbiAgICAgIC8vIFRoaXMgd2FzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgYW5pbWF0aW9uIHNjYWxlIG92ZXIgQW5kcm9pZCBQLiBXZSBtdXN0IHJlc2V0IHRoZSBwb2xpY3kgZm9yIHRoZSBzZWN1cml0eS5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmFkYj8uZ2V0QXBpTGV2ZWwoKSA+PSAyOCkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3JpbmcgaGlkZGVuIGFwaSBwb2xpY3kgdG8gdGhlIGRldmljZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3koISF0aGlzLm9wdHMuaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICBsZXQgYXZkTmFtZSA9IHRoaXMub3B0cy5hdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBjbG9zaW5nIGVtdWxhdG9yICcke2F2ZE5hbWV9J2ApO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXRTaGFyZWRQcmVmZXJlbmNlcyAoKSB7XG4gICAgbGV0IHNoYXJlZFByZWZzID0gdGhpcy5vcHRzLnNoYXJlZFByZWZlcmVuY2VzO1xuICAgIHRoaXMubG9nLmluZm8oJ1RyeWluZyB0byBzZXQgc2hhcmVkIHByZWZlcmVuY2VzJyk7XG4gICAgbGV0IG5hbWUgPSBzaGFyZWRQcmVmcy5uYW1lO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBTa2lwcGluZyBzZXR0aW5nIFNoYXJlZCBwcmVmZXJlbmNlcywgbmFtZSBpcyB1bmRlZmluZWQ6ICR7SlNPTi5zdHJpbmdpZnkoc2hhcmVkUHJlZnMpfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcmVtb3RlUGF0aCA9IGAvZGF0YS9kYXRhLyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9L3NoYXJlZF9wcmVmc2A7XG4gICAgbGV0IHJlbW90ZUZpbGUgPSBgJHtyZW1vdGVQYXRofS8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGxvY2FsUGF0aCA9IGAvdG1wLyR7bmFtZX0ueG1sYDtcbiAgICBsZXQgYnVpbGRlciA9IHRoaXMuZ2V0UHJlZnNCdWlsZGVyKCk7XG4gICAgYnVpbGRlci5idWlsZChzaGFyZWRQcmVmcy5wcmVmcyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgdGVtcG9yYXJ5IHNoYXJlZCBwcmVmZXJlbmNlczogJHtsb2NhbFBhdGh9YCk7XG4gICAgYnVpbGRlci50b0ZpbGUobG9jYWxQYXRoKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBDcmVhdGluZyBzaGFyZWRfcHJlZnMgcmVtb3RlIGZvbGRlcjogJHtyZW1vdGVQYXRofWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnbWtkaXInLCAnLXAnLCByZW1vdGVQYXRoXSk7XG4gICAgdGhpcy5sb2cuaW5mbyhgUHVzaGluZyBzaGFyZWRfcHJlZnMgdG8gJHtyZW1vdGVGaWxlfWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLnB1c2gobG9jYWxQYXRoLCByZW1vdGVGaWxlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvIHJlbW92ZSBzaGFyZWQgcHJlZmVyZW5jZXMgdGVtcG9yYXJ5IGZpbGVgKTtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxQYXRoKSkge1xuICAgICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxQYXRoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciB0cnlpbmcgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlICR7bG9jYWxQYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByZWZzQnVpbGRlciAoKSB7XG4gICAgLyogQWRkIHRoaXMgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBTaGFyZWRQcmVmc0J1aWxkZXIgaW5zdGVhZCBvZlxuICAgICAqIGRpcmVjdGx5IGNyZWF0aW5nIHRoZSBvYmplY3Qgb24gc2V0U2hhcmVkUHJlZmVyZW5jZXMgZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAgICAqL1xuICAgIHJldHVybiBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyKCk7XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgaWYgKCFzdXBlci52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoIWNhcHMuYnJvd3Nlck5hbWUgfHwgIWhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKGNhcHMuYnJvd3Nlck5hbWUpKSAmJiAhY2Fwcy5hcHAgJiYgIWNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIG11c3QgaW5jbHVkZSBlaXRoZXIgYW4gYXBwLCBhcHBQYWNrYWdlIG9yIGJyb3dzZXJOYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiBoZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMoY2Fwcyk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcblxuICAgIHJldHVybiB0aGlzLmp3cFByb3h5QWN0aXZlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB0aGlzIHdpbGwgY2hhbmdlIGRlcGVuZGluZyBvbiBDaHJvbWVEcml2ZXIgc3RhdHVzXG4gICAgcmV0dXJuIF8uaXNGdW5jdGlvbih0aGlzLnByb3h5UmVxUmVzKTtcbiAgfVxufVxuXG5leHBvcnQgeyBBbmRyb2lkRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkRHJpdmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsYUFBYSxHQUFHLE1BQU07QUFDNUIsTUFBTUMsV0FBVyxHQUFHLElBQUk7O0FBSXhCLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsTUFBTSxFQUFFLElBQUlDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlDLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQzlDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQzdDLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLEVBQ3JELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLEVBQzNELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQ25ELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0s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
423
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OIiwiREVWSUNFX1BPUlQiLCJOT19QUk9YWSIsIlJlZ0V4cCIsIkFuZHJvaWREcml2ZXIiLCJCYXNlRHJpdmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJkZXNpcmVkQ29uc3RyYWludHMiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImp3cFByb3h5QWN0aXZlIiwiandwUHJveHlBdm9pZCIsIl8iLCJjbG9uZSIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJpZ25vcmVVbmltcG9ydGFudFZpZXdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJhcGtTdHJpbmdzIiwidW5sb2NrZXIiLCJoZWxwZXJzIiwiY21kIiwiZm4iLCJ0b1BhaXJzIiwiY29tbWFuZHMiLCJwcm90b3R5cGUiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJkZWZhdWx0T3B0cyIsImFjdGlvbiIsImNhdGVnb3J5IiwiZmxhZ3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwidG1wRGlyIiwidGVtcERpciIsInN0YXRpY0RpciIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImJvb3RzdHJhcFBvcnQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkZWZhdWx0cyIsInVzZVVubG9ja0hlbHBlckFwcCIsImlzVW5kZWZpbmVkIiwidW5sb2NrVHlwZSIsIm5vUmVzZXQiLCJmYXN0UmVzZXQiLCJza2lwVW5pbnN0YWxsIiwiaXNDaHJvbWVTZXNzaW9uIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsInB1c2giLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImFkYiIsImNyZWF0ZUFEQiIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiZ2V0QXBpTGV2ZWwiLCJsb2ciLCJ3YXJuIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJhcHAiLCJhcHBQYWNrYWdlIiwiY29uZmlndXJlQXBwIiwiY2hlY2tBcHBQcmVzZW50IiwiYXBwT25EZXZpY2UiLCJpbmZvIiwiY2hlY2tQYWNrYWdlUHJlc2VudCIsInV0aWwiLCJoYXNWYWx1ZSIsIm5ldHdvcmtTcGVlZCIsImlzRW11bGF0b3IiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJncHNFbmFibGVkIiwidG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlciIsInN0YXJ0QW5kcm9pZFNlc3Npb24iLCJlIiwiZGVsZXRlU2Vzc2lvbiIsImlnbiIsImF2ZCIsImRldmljZU5hbWUiLCJlcnJvckFuZFRocm93IiwicGxhdGZvcm1WZXJzaW9uIiwiYXZkRGV2aWNlIiwicmVwbGFjZSIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwia2V5IiwidmFsdWUiLCJzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IiwiZGVmYXVsdElNRSIsImluaXREZXZpY2UiLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VTY3JlZW5TaXplIiwiZ2V0U2NyZWVuU2l6ZSIsImRldmljZU1vZGVsIiwiZ2V0TW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJnZXRNYW51ZmFjdHVyZXIiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwiaXNBbmltYXRpb25PbiIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwiYm9vdHN0cmFwIiwid2Vic29ja2V0Iiwic3RhcnQiLCJhY2NlcHRTc2xDZXJ0cyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiZXJyIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJza2lwVW5sb2NrIiwidW5sb2NrIiwidXBkYXRlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwic3RhcnRBVVQiLCJvcmllbnRhdGlvbiIsImRlYnVnIiwic2V0T3JpZW50YXRpb24iLCJpbml0QXV0b1dlYnZpZXciLCJhdXRvV2VidmlldyIsInZpZXdOYW1lIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwibGF1bmNoSW5mbyIsImdldExhdW5jaEluZm8iLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwib3RoZXJBcHBzIiwibWVzc2FnZSIsIkIiLCJhbGwiLCJtYXAiLCJpbnN0YWxsT3RoZXJBcGtzIiwicmVzZXRBcHAiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiYXBrU3RyaW5nc0Zvckxhbmd1YWdlIiwicHVzaFN0cmluZ3MiLCJsYW5ndWFnZSIsInNoYXJlZFByZWZlcmVuY2VzIiwic2V0U2hhcmVkUHJlZmVyZW5jZXMiLCJmcyIsImV4aXN0cyIsInNoZWxsIiwiY29tcHJlc3MiLCJzZW5kQWN0aW9uIiwiY29tcHJlc3NMYXlvdXQiLCJpc0VtcHR5IiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsInNldElNRSIsImRvbnRTdG9wQXBwT25SZXNldCIsImZvcmNlU3RvcCIsImdvVG9Ib21lIiwic2h1dGRvd24iLCJzdG9wTG9nY2F0Iiwic2V0RGVmYXVsdEhpZGRlbkFwaVBvbGljeSIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzaGFyZWRQcmVmcyIsIm5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVtb3RlUGF0aCIsInJlbW90ZUZpbGUiLCJsb2NhbFBhdGgiLCJidWlsZGVyIiwiZ2V0UHJlZnNCdWlsZGVyIiwiYnVpbGQiLCJwcmVmcyIsInRvRmlsZSIsInVubGluayIsIlNoYXJlZFByZWZzQnVpbGRlciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsImlzRnVuY3Rpb24iLCJwcm94eVJlcVJlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgaGVscGVycywgZW5zdXJlTmV0d29ya1NwZWVkLFxuICBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufSBmcm9tICcuL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFNoYXJlZFByZWZzQnVpbGRlciB9IGZyb20gJ3NoYXJlZC1wcmVmZXJlbmNlcy1idWlsZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgQVBQX0VYVEVOU0lPTiA9ICcuYXBrJztcbmNvbnN0IERFVklDRV9QT1JUID0gNDcyNDtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG9cbi8vIENocm9tZWRyaXZlclxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvbXVsdGkvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbl07XG5cbmNsYXNzIEFuZHJvaWREcml2ZXIgZXh0ZW5kcyBCYXNlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDb25zdHJhaW50cztcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzID0ge307XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uY2xvbmUoTk9fUFJPWFkpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3Moe2lnbm9yZVVuaW1wb3J0YW50Vmlld3M6IGZhbHNlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307XG4gICAgdGhpcy51bmxvY2tlciA9IGhlbHBlcnMudW5sb2NrZXI7XG5cbiAgICBmb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICAgICAgQW5kcm9pZERyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICAgIH1cblxuICAgIC8vIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBsaW5lIHdoaWNoIGFzc2lnbnMgY29tbWFuZHMgdG8gQW5kcm9pZERyaXZlci5wcm90b3R5cGUsIHNvIHRoYXQgYHRoaXMuZGVmYXVsdENvbnRleHROYW1lYCBpcyBkZWZpbmVkLlxuICAgIHRoaXMuY3VyQ29udGV4dCA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTZXNzaW9uICguLi5hcmdzKSB7XG4gICAgLy8gdGhlIHdob2xlIGNyZWF0ZVNlc3Npb24gZmxvdyBpcyBzdXJyb3VuZGVkIGluIGEgdHJ5LWNhdGNoIHN0YXRlbWVudFxuICAgIC8vIGlmIGNyZWF0aW5nIGEgc2Vzc2lvbiBmYWlscyBhdCBhbnkgcG9pbnQsIHdlIHRlYXJkb3duIGV2ZXJ5dGhpbmcgd2VcbiAgICAvLyBzZXQgdXAgYmVmb3JlIHRocm93aW5nIHRoZSBlcnJvci5cbiAgICB0cnkge1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogdGhpcy5jYXBzXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNhcHMgPSBPYmplY3QuYXNzaWduKHNlcnZlckRldGFpbHMsIHRoaXMuY2Fwcyk7XG5cbiAgICAgIC8vIGFzc2lnbmluZyBkZWZhdWx0c1xuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgICBmbGFnczogJzB4MTAyMDAwMDAnLFxuICAgICAgICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiBmYWxzZSxcbiAgICAgICAgdG1wRGlyOiBhd2FpdCB0ZW1wRGlyLnN0YXRpY0RpcigpLFxuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBib290c3RyYXBQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiA5MDAwMCxcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuICAgICAgdGhpcy51c2VVbmxvY2tIZWxwZXJBcHAgPSBfLmlzVW5kZWZpbmVkKHRoaXMuY2Fwcy51bmxvY2tUeXBlKTtcblxuICAgICAgLy8gbm90IHVzZXIgdmlzaWJsZSB2aWEgY2Fwc1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1Jlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0cy5ub1Jlc2V0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdHMuZmFzdFJlc2V0ID0gIXRoaXMub3B0cy5mdWxsUmVzZXQgJiYgIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgICAgdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgPSB0aGlzLm9wdHMuZmFzdFJlc2V0IHx8IHRoaXMub3B0cy5ub1Jlc2V0O1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHModGhpcy5vcHRzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICAgIHRoaXMuandwUHJveHlBdm9pZC5wdXNoKFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NjcmVlbnNob3QnKV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBkZXZpY2UgdWRpZCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICBsZXQge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcblxuICAgICAgLy8gc2V0IHVwIGFuIGluc3RhbmNlIG9mIEFEQlxuICAgICAgdGhpcy5hZGIgPSBhd2FpdCBoZWxwZXJzLmNyZWF0ZUFEQih7XG4gICAgICAgIHVkaWQ6IHRoaXMub3B0cy51ZGlkLFxuICAgICAgICBlbVBvcnQ6IHRoaXMub3B0cy5lbVBvcnQsXG4gICAgICAgIGFkYlBvcnQ6IHRoaXMub3B0cy5hZGJQb3J0LFxuICAgICAgICBzdXBwcmVzc0tpbGxTZXJ2ZXI6IHRoaXMub3B0cy5zdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgICAgIHJlbW90ZUFkYkhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0LFxuICAgICAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0OiB0aGlzLm9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICAgICAgYWRiRXhlY1RpbWVvdXQ6IHRoaXMub3B0cy5hZGJFeGVjVGltZW91dCxcbiAgICAgICAgYWxsb3dPZmZsaW5lRGV2aWNlczogdGhpcy5vcHRzLmFsbG93T2ZmbGluZURldmljZXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjMpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihcIkNvbnNpZGVyIHNldHRpbmcgJ2F1dG9tYXRpb25OYW1lJyBjYXBhYmlsaXR5IHRvIFwiICtcbiAgICAgICAgICBcIid1aWF1dG9tYXRvcjInIG9uIEFuZHJvaWQgPj0gNiwgc2luY2UgVUlBdXRvbWF0b3IgZnJhbWV3b3JrIFwiICtcbiAgICAgICAgICAnaXMgbm90IG1haW50YWluZWQgYW55bW9yZSBieSB0aGUgT1MgdmVuZG9yLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oZWxwZXJzLmlzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICAgIC8vIHVzZXIgcHJvdmlkZWQgcGFja2FnZSBpbnN0ZWFkIG9mIGFwcCBmb3IgJ2FwcCcgY2FwYWJpbGl0eSwgbWFzc2FnZSBvcHRpb25zXG4gICAgICAgIHRoaXMub3B0cy5hcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcDtcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwgQVBQX0VYVEVOU0lPTik7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBQcmVzZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZVByZXNlbnQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBjbG91ZCBzZXJ2aWNlcyB1c2luZyBhcHBpdW0gbGF1bmNoIHRoZSBhdmQgdGhlbXNlbHZlcywgc28gd2UgZW5zdXJlIG5ldHNwZWVkXG4gICAgICAvLyBpcyBzZXQgZm9yIGVtdWxhdG9ycyBieSBjYWxsaW5nIGFkYi5uZXR3b3JrU3BlZWQgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcFxuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm5ldHdvcmtTcGVlZCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW11bGF0b3IoKSkge1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1NvcnJ5LCBuZXR3b3JrU3BlZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbmV0d29ya1NwZWVkID0gZW5zdXJlTmV0d29ya1NwZWVkKHRoaXMuYWRiLCB0aGlzLm9wdHMubmV0d29ya1NwZWVkKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5uZXR3b3JrU3BlZWQobmV0d29ya1NwZWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMuZ3BzRW5hYmxlZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXVsYXRvcigpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgVHJ5aW5nIHRvICR7dGhpcy5vcHRzLmdwc0VuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ30gZ3BzIGxvY2F0aW9uIHByb3ZpZGVyYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIudG9nZ2xlR1BTTG9jYXRpb25Qcm92aWRlcih0aGlzLm9wdHMuZ3BzRW5hYmxlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybignU29ycnkhIGdwc0VuYWJsZWQgY2FwYWJpbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgZW11bGF0b3JzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zdGFydEFuZHJvaWRTZXNzaW9uKHRoaXMub3B0cyk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmluZyBkZWxldGUgc2Vzc2lvbiBleGNlcHRpb24gaWYgYW55IGFuZCB0aHJvdyB0aGUgcmVhbCBlcnJvclxuICAgICAgLy8gdGhhdCBoYXBwZW5lZCB3aGlsZSBjcmVhdGluZyB0aGUgc2Vzc2lvbi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcCkgfHwgKCF0aGlzLm9wdHMuYXBwICYmXG4gICAgICAgICAgIHRoaXMuaGVscGVycy5pc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwUGFja2FnZSkpO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2lnbm9yZVVuaW1wb3J0YW50Vmlld3MnKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QW5kcm9pZFNlc3Npb24gKCkge1xuICAgIHRoaXMubG9nLmluZm8oYFN0YXJ0aW5nIEFuZHJvaWQgc2Vzc2lvbmApO1xuICAgIC8vIHNldCB1cCB0aGUgZGV2aWNlIHRvIHJ1biBvbiAocmVhbCBvciBlbXVsYXRvciwgZXRjKVxuICAgIHRoaXMuZGVmYXVsdElNRSA9IGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWQsIHBsYXRmb3JtIHZlcnNpb24sIHNjcmVlbiBzaXplLCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHMuXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBhd2FpdCB0aGlzLmFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IGF3YWl0IHRoaXMuYWRiLmdldFNjcmVlblNpemUoKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRNb2RlbCgpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBhd2FpdCB0aGlzLmFkYi5nZXRNYW51ZmFjdHVyZXIoKTtcblxuICAgIGlmICh0aGlzLm9wdHMuZGlzYWJsZVdpbmRvd0FuaW1hdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBUEkgbGV2ZWwgMjggaXMgQW5kcm9pZCBQXG4gICAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHJlc2V0IHRoZSByZWxheGluZyBpbiBkZWxldGUgc2Vzc2lvblxuICAgICAgICAgIHRoaXMubG9nLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIG1hbmFnZSBhbmltYXRpb24gc2NhbGUnKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZy5pbmZvKCdEaXNhYmxpbmcgd2luZG93IGFuaW1hdGlvbiBhcyBpdCBpcyByZXF1ZXN0ZWQgYnkgXCJkaXNhYmxlV2luZG93QW5pbWF0aW9uXCIgY2FwYWJpbGl0eScpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1dpbmRvdyBhbmltYXRpb24gaXMgYWxyZWFkeSBkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gc3RhcnQgVWlBdXRvbWF0b3JcbiAgICB0aGlzLmJvb3RzdHJhcCA9IG5ldyBoZWxwZXJzLmJvb3RzdHJhcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmJvb3RzdHJhcFBvcnQsIHRoaXMub3B0cy53ZWJzb2NrZXQpO1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnN0YXJ0KHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0aGlzLm9wdHMuZGlzYWJsZUFuZHJvaWRXYXRjaGVycywgdGhpcy5vcHRzLmFjY2VwdFNzbENlcnRzKTtcbiAgICAvLyBoYW5kbGluZyB1bmV4cGVjdGVkIHNodXRkb3duXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLm9uVW5leHBlY3RlZFNodXRkb3duO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5ib290c3RyYXAuaWdub3JlVW5leHBlY3RlZFNodXRkb3duKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcblxuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gTGV0J3MgdHJ5IHRvIHVubG9jayB0aGUgZGV2aWNlXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgQ29tcHJlc3NlZExheW91dEhpZXJhcmNoeSBvbiB0aGUgZGV2aWNlIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgLy8gdGhpcyBoYXMgdG8gaGFwcGVuIF9hZnRlcl8gYm9vdHN0cmFwIGlzIGluaXRpYWxpemVkXG4gICAgaWYgKHRoaXMub3B0cy5pZ25vcmVVbmltcG9ydGFudFZpZXdzKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZSh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogdGhpcy5vcHRzLmlnbm9yZVVuaW1wb3J0YW50Vmlld3N9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgIC8vIHN0YXJ0IGEgY2hyb21lZHJpdmVyIHNlc3Npb24gYW5kIHByb3h5IHRvIGl0XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmF1dG9MYXVuY2gpIHtcbiAgICAgICAgLy8gc3RhcnQgYXBwXG4gICAgICAgIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMub3JpZW50YXRpb24pKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke3RoaXMub3B0cy5vcmllbnRhdGlvbn0nYCk7XG4gICAgICBhd2FpdCB0aGlzLnNldE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0QXV0b1dlYnZpZXcoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRBdXRvV2VidmlldyAoKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbGV0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGxldCB0aW1lb3V0ID0gKHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQpIHx8IDIwMDA7XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFNldHRpbmcgYXV0byB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG5cbiAgICAgIC8vIHRyeSBldmVyeSA1MDBtcyB1bnRpbCB0aW1lb3V0IGlzIG92ZXJcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Q29udGV4dCh2aWV3TmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbml0QVVUICgpIHtcbiAgICAvLyBwb3B1bGF0ZSBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSxcbiAgICAvLyBhbmQgdGhlIGRldmljZSBiZWluZyB1c2VkXG4gICAgLy8gaW4gdGhlIG9wdHMgYW5kIGNhcHMgKHNvIGl0IGdldHMgYmFjayB0byB0aGUgdXNlciBvbiBzZXNzaW9uIGNyZWF0aW9uKVxuICAgIGxldCBsYXVuY2hJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRzLCBsYXVuY2hJbmZvKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FwcywgbGF1bmNoSW5mbyk7XG5cbiAgICAvLyBVbmluc3RhbGwgYW55IHVuaW5zdGFsbE90aGVyUGFja2FnZXMgd2hpY2ggd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcykge1xuICAgICAgaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKHRoaXMub3B0cyk7XG4gICAgICAvLyBPbmx5IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgcGFja2FnZSBpcyB1c2VkIGJ5IFVJQTFcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lEXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGFueSBcIm90aGVyQXBwc1wiIHRoYXQgd2VyZSBzcGVjaWZpZWQgaW4gY2Fwc1xuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBsZXQgb3RoZXJBcHBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3RoZXJBcHBzID0gaGVscGVycy5wYXJzZUFycmF5KHRoaXMub3B0cy5vdGhlckFwcHMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIEFQUF9FWFRFTlNJT04pKSk7XG4gICAgICBhd2FpdCBoZWxwZXJzLmluc3RhbGxPdGhlckFwa3Mob3RoZXJBcHBzLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGFwcFxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGNvbnN0IGFwa1N0cmluZ3NGb3JMYW5ndWFnZSA9IGF3YWl0IGhlbHBlcnMucHVzaFN0cmluZ3ModGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAodGhpcy5vcHRzLmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGFwa1N0cmluZ3NGb3JMYW5ndWFnZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG11c3QgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwaywgb3RoZXJ3aXNlIGl0IHdvdWxkIGNhdXNlIHRoZVxuICAgIC8vIGluc3RhbGwgdG8gZmFpbC4gQW5kIGJlZm9yZSBydW5uaW5nIHRoZSBhcHAuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcykpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0U2hhcmVkUHJlZmVyZW5jZXModGhpcy5vcHRzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja0FwcFByZXNlbnQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgYXBwIGFwayBhdCAke3RoaXMub3B0cy5hcHB9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tQYWNrYWdlUHJlc2VudCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0NoZWNraW5nIHdoZXRoZXIgcGFja2FnZSBpcyBwcmVzZW50IG9uIHRoZSBkZXZpY2UnKTtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAncGFja2FnZXMnLCB0aGlzLm9wdHMuYXBwUGFja2FnZV0pKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgcGFja2FnZSAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IENvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHkgb24gdGhlIGRldmljZVxuICBhc3luYyBzZXRDb21wcmVzc2VkTGF5b3V0SGllcmFyY2h5IChjb21wcmVzcykge1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2NvbXByZXNzZWRMYXlvdXRIaWVyYXJjaHknLCB7Y29tcHJlc3NMYXlvdXQ6IGNvbXByZXNzfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBBbmRyb2lkIGRyaXZlcicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGlnbikge31cblxuICAgIGF3YWl0IGhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzKHRoaXMuc2VydmVyLCB0aGlzLnNlc3Npb25JZCk7XG5cbiAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcblxuICAgIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgICAgLy8gY2VydGFpbiBjbGVhbnVwIHdlIG9ubHkgY2FyZSB0byBkbyBpZiB0aGUgYm9vdHN0cmFwIHdhcyBldmVyIHJ1blxuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiYgdGhpcy5kZWZhdWx0SU1FKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICR7dGhpcy5kZWZhdWx0SU1FfWApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYj8uc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hZGI/LmdvVG9Ib21lKCk7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGI/LnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zaHV0ZG93bigpO1xuICAgICAgdGhpcy5ib290c3RyYXAgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhcIkNhbGxlZCBkZWxldGVTZXNzaW9uIGJ1dCBib290c3RyYXAgd2Fzbid0IGFjdGl2ZVwiKTtcbiAgICB9XG4gICAgLy8gc29tZSBjbGVhbnVwIHdlIHdhbnQgdG8gZG8gcmVnYXJkbGVzcywgaW4gY2FzZSB3ZSBhcmUgc2h1dHRpbmcgZG93blxuICAgIC8vIG1pZC1zdGFydHVwXG4gICAgYXdhaXQgdGhpcy5hZGI/LnN0b3BMb2djYXQoKTtcbiAgICBpZiAodGhpcy51c2VVbmxvY2tIZWxwZXJBcHApIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5mb3JjZVN0b3AoJ2lvLmFwcGl1bS51bmxvY2snKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dhc1dpbmRvd0FuaW1hdGlvbkRpc2FibGVkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdSZXN0b3Jpbmcgd2luZG93IGFuaW1hdGlvbiBzdGF0ZScpO1xuICAgICAgYXdhaXQgdGhpcy5hZGI/LnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuXG4gICAgICAvLyBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGFuaW1hdGlvbiBzY2FsZSBvdmVyIEFuZHJvaWQgUC4gV2UgbXVzdCByZXNldCB0aGUgcG9saWN5IGZvciB0aGUgc2VjdXJpdHkuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGI/LmdldEFwaUxldmVsKCkgPj0gMjgpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnUmVzdG9yaW5nIGhpZGRlbiBhcGkgcG9saWN5IHRvIHRoZSBkZXZpY2UgZGVmYXVsdCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiPy5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiPy5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkUHJlZmVyZW5jZXMgKCkge1xuICAgIGxldCBzaGFyZWRQcmVmcyA9IHRoaXMub3B0cy5zaGFyZWRQcmVmZXJlbmNlcztcbiAgICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gc2V0IHNoYXJlZCBwcmVmZXJlbmNlcycpO1xuICAgIGxldCBuYW1lID0gc2hhcmVkUHJlZnMubmFtZTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSkge1xuICAgICAgdGhpcy5sb2cud2FybihgU2tpcHBpbmcgc2V0dGluZyBTaGFyZWQgcHJlZmVyZW5jZXMsIG5hbWUgaXMgdW5kZWZpbmVkOiAke0pTT04uc3RyaW5naWZ5KHNoYXJlZFByZWZzKX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHJlbW90ZVBhdGggPSBgL2RhdGEvZGF0YS8ke3RoaXMub3B0cy5hcHBQYWNrYWdlfS9zaGFyZWRfcHJlZnNgO1xuICAgIGxldCByZW1vdGVGaWxlID0gYCR7cmVtb3RlUGF0aH0vJHtuYW1lfS54bWxgO1xuICAgIGxldCBsb2NhbFBhdGggPSBgL3RtcC8ke25hbWV9LnhtbGA7XG4gICAgbGV0IGJ1aWxkZXIgPSB0aGlzLmdldFByZWZzQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuYnVpbGQoc2hhcmVkUHJlZnMucHJlZnMpO1xuICAgIHRoaXMubG9nLmluZm8oYENyZWF0aW5nIHRlbXBvcmFyeSBzaGFyZWQgcHJlZmVyZW5jZXM6ICR7bG9jYWxQYXRofWApO1xuICAgIGJ1aWxkZXIudG9GaWxlKGxvY2FsUGF0aCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgQ3JlYXRpbmcgc2hhcmVkX3ByZWZzIHJlbW90ZSBmb2xkZXI6ICR7cmVtb3RlUGF0aH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ21rZGlyJywgJy1wJywgcmVtb3RlUGF0aF0pO1xuICAgIHRoaXMubG9nLmluZm8oYFB1c2hpbmcgc2hhcmVkX3ByZWZzIHRvICR7cmVtb3RlRmlsZX1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRmlsZSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFRyeWluZyB0byByZW1vdmUgc2hhcmVkIHByZWZlcmVuY2VzIHRlbXBvcmFyeSBmaWxlYCk7XG4gICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsUGF0aCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3IgdHJ5aW5nIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZSAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRQcmVmc0J1aWxkZXIgKCkge1xuICAgIC8qIEFkZCB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgU2hhcmVkUHJlZnNCdWlsZGVyIGluc3RlYWQgb2ZcbiAgICAgKiBkaXJlY3RseSBjcmVhdGluZyB0aGUgb2JqZWN0IG9uIHNldFNoYXJlZFByZWZlcmVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gICAgKi9cbiAgICByZXR1cm4gbmV3IFNoYXJlZFByZWZzQnVpbGRlcigpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKCFjYXBzLmJyb3dzZXJOYW1lIHx8ICFoZWxwZXJzLmlzQ2hyb21lQnJvd3NlcihjYXBzLmJyb3dzZXJOYW1lKSkgJiYgIWNhcHMuYXBwICYmICFjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBtdXN0IGluY2x1ZGUgZWl0aGVyIGFuIGFwcCwgYXBwUGFja2FnZSBvciBicm93c2VyTmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzKGNhcHMpO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuandwUHJveHlBdm9pZDtcbiAgfVxuXG4gIGNhblByb3h5IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5jYW5Qcm94eShzZXNzaW9uSWQpO1xuXG4gICAgLy8gdGhpcyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgb24gQ2hyb21lRHJpdmVyIHN0YXR1c1xuICAgIHJldHVybiBfLmlzRnVuY3Rpb24odGhpcy5wcm94eVJlcVJlcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZERyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGFBQWEsR0FBRyxNQUFNO0FBQzVCLE1BQU1DLFdBQVcsR0FBRyxJQUFJOztBQUl4QixNQUFNQyxRQUFRLEdBQUcsQ0FDZixDQUFDLE1BQU0sRUFBRSxJQUFJQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUMvQyxDQUFDLEtBQUssRUFBRSxJQUFJQSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUM5QyxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUM5QyxDQUFDLEtBQUssRUFBRSxJQUFJQSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUM3QyxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQyxFQUNyRCxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMscUNBQXFDLENBQUMsQ0FBQyxFQUMzRCxDQUFDLE1BQU0sRUFBRSxJQUFJQSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxFQUNuRCxDQUFDLEtBQUssRUFBRSxJQUFJQSxNQUFN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
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","names":["APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","setIME","dontStopAppOnReset","forceStop","goToHome","shutdown","stopLogcat","setDefaultHiddenApiPolicy","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from 'appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (!this.opts.skipUnlock) {\n // Let's try to unlock the device\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
1
+ {"version":3,"file":"driver.js","names":["APP_EXTENSION","DEVICE_PORT","NO_PROXY","RegExp","AndroidDriver","BaseDriver","constructor","opts","shouldValidateCaps","locatorStrategies","desiredCapConstraints","desiredConstraints","sessionChromedrivers","jwpProxyActive","jwpProxyAvoid","_","clone","settings","DeviceSettings","ignoreUnimportantViews","onSettingsUpdate","bind","chromedriver","apkStrings","unlocker","helpers","cmd","fn","toPairs","commands","prototype","curContext","defaultContextName","createSession","args","sessionId","caps","serverDetails","platform","webStorageEnabled","takesScreenshot","javascriptEnabled","databaseEnabled","networkConnectionEnabled","locationContextEnabled","warnings","desired","Object","assign","defaultOpts","action","category","flags","disableAndroidWatchers","tmpDir","tempDir","staticDir","fullReset","autoLaunch","adbPort","DEFAULT_ADB_PORT","bootstrapPort","androidInstallTimeout","defaults","useUnlockHelperApp","isUndefined","unlockType","noReset","fastReset","skipUninstall","isChromeSession","adjustBrowserSessionCaps","nativeWebScreenshot","push","reboot","setAvdFromCapabilities","udid","emPort","getDeviceInfoFromCaps","adb","createADB","suppressKillServer","remoteAdbHost","clearDeviceLogsOnStart","adbExecTimeout","allowOfflineDevices","getApiLevel","log","warn","isPackageOrBundle","app","appPackage","configureApp","checkAppPresent","appOnDevice","info","checkPackagePresent","util","hasValue","networkSpeed","isEmulator","ensureNetworkSpeed","gpsEnabled","toggleGPSLocationProvider","startAndroidSession","e","deleteSession","ign","avd","deviceName","errorAndThrow","platformVersion","avdDevice","replace","isChromeBrowser","browserName","key","value","setCompressedLayoutHierarchy","defaultIME","initDevice","curDeviceId","deviceUDID","getPlatformVersion","deviceScreenSize","getScreenSize","deviceModel","getModel","deviceManufacturer","getManufacturer","disableWindowAnimation","isAnimationOn","setHiddenApiPolicy","ignoreHiddenApiPolicyError","setAnimationState","_wasWindowAnimationDisabled","initAUT","bootstrap","websocket","start","acceptSslCerts","onUnexpectedShutdown","err","ignoreUnexpectedShutdown","startUnexpectedShutdown","skipUnlock","unlock","update","startChromeSession","startAUT","orientation","debug","setOrientation","initAutoWebview","autoWebview","viewName","defaultWebviewName","timeout","autoWebviewTimeout","retryInterval","setContext","launchInfo","getLaunchInfo","uninstallOtherPackages","validateDesiredCaps","parseArray","SETTINGS_HELPER_PKG_ID","otherApps","message","B","all","map","installOtherApks","resetApp","uninstallApk","installApk","apkStringsForLanguage","pushStrings","language","sharedPreferences","setSharedPreferences","fs","exists","shell","compress","sendAction","compressLayout","isEmpty","_screenRecordingProperties","stopRecordingScreen","removeAllSessionWebSocketHandlers","server","mobileStopScreenStreaming","stopChromedriverProxies","unicodeKeyboard","resetKeyboard","setIME","dontStopAppOnReset","forceStop","goToHome","shutdown","stopLogcat","setDefaultHiddenApiPolicy","avdName","killEmulator","sharedPrefs","name","JSON","stringify","remotePath","remoteFile","localPath","builder","getPrefsBuilder","build","prefs","toFile","unlink","SharedPrefsBuilder","proxyActive","getProxyAvoidList","canProxy","isFunction","proxyReqRes"],"sources":["../../lib/driver.js"],"sourcesContent":["import { BaseDriver, DeviceSettings } from 'appium/driver';\nimport desiredConstraints from './desired-caps';\nimport commands from './commands/index';\nimport {\n helpers, ensureNetworkSpeed,\n SETTINGS_HELPER_PKG_ID,\n} from './android-helpers';\nimport _ from 'lodash';\nimport { DEFAULT_ADB_PORT } from 'appium-adb';\nimport { fs, tempDir, util } from '@appium/support';\nimport { retryInterval } from 'asyncbox';\nimport { SharedPrefsBuilder } from 'shared-preferences-builder';\nimport B from 'bluebird';\n\nconst APP_EXTENSION = '.apk';\nconst DEVICE_PORT = 4724;\n\n// This is a set of methods and paths that we never want to proxy to\n// Chromedriver\nconst NO_PROXY = [\n ['POST', new RegExp('^/session/[^/]+/context')],\n ['GET', new RegExp('^/session/[^/]+/context')],\n ['POST', new RegExp('^/session/[^/]+/appium')],\n ['GET', new RegExp('^/session/[^/]+/appium')],\n ['POST', new RegExp('^/session/[^/]+/touch/perform')],\n ['POST', new RegExp('^/session/[^/]+/touch/multi/perform')],\n ['POST', new RegExp('^/session/[^/]+/orientation')],\n ['GET', new RegExp('^/session/[^/]+/orientation')],\n ['POST', new RegExp('^/session/[^/]+/execute')],\n ['POST', new RegExp('^/session/[^/]+/execute/sync')],\n ['GET', new RegExp('^/session/[^/]+/network_connection')],\n ['POST', new RegExp('^/session/[^/]+/network_connection')],\n];\n\nclass AndroidDriver extends BaseDriver {\n constructor (opts = {}, shouldValidateCaps = true) {\n super(opts, shouldValidateCaps);\n\n this.locatorStrategies = [\n 'xpath',\n 'id',\n 'class name',\n 'accessibility id',\n '-android uiautomator'\n ];\n this.desiredCapConstraints = desiredConstraints;\n this.sessionChromedrivers = {};\n this.jwpProxyActive = false;\n this.jwpProxyAvoid = _.clone(NO_PROXY);\n this.settings = new DeviceSettings({ignoreUnimportantViews: false},\n this.onSettingsUpdate.bind(this));\n this.chromedriver = null;\n this.apkStrings = {};\n this.unlocker = helpers.unlocker;\n\n for (let [cmd, fn] of _.toPairs(commands)) {\n AndroidDriver.prototype[cmd] = fn;\n }\n\n // needs to be after the line which assigns commands to AndroidDriver.prototype, so that `this.defaultContextName` is defined.\n this.curContext = this.defaultContextName();\n }\n\n async createSession (...args) {\n // the whole createSession flow is surrounded in a try-catch statement\n // if creating a session fails at any point, we teardown everything we\n // set up before throwing the error.\n try {\n let [sessionId, caps] = await super.createSession(...args);\n\n let serverDetails = {\n platform: 'LINUX',\n webStorageEnabled: false,\n takesScreenshot: true,\n javascriptEnabled: true,\n databaseEnabled: false,\n networkConnectionEnabled: true,\n locationContextEnabled: false,\n warnings: {},\n desired: this.caps\n };\n\n this.caps = Object.assign(serverDetails, this.caps);\n\n // assigning defaults\n let defaultOpts = {\n action: 'android.intent.action.MAIN',\n category: 'android.intent.category.LAUNCHER',\n flags: '0x10200000',\n disableAndroidWatchers: false,\n tmpDir: await tempDir.staticDir(),\n fullReset: false,\n autoLaunch: true,\n adbPort: DEFAULT_ADB_PORT,\n bootstrapPort: DEVICE_PORT,\n androidInstallTimeout: 90000,\n };\n _.defaults(this.opts, defaultOpts);\n this.useUnlockHelperApp = _.isUndefined(this.caps.unlockType);\n\n // not user visible via caps\n if (this.opts.noReset === true) {\n this.opts.fullReset = false;\n }\n if (this.opts.fullReset === true) {\n this.opts.noReset = false;\n }\n this.opts.fastReset = !this.opts.fullReset && !this.opts.noReset;\n this.opts.skipUninstall = this.opts.fastReset || this.opts.noReset;\n\n if (this.isChromeSession) {\n helpers.adjustBrowserSessionCaps(this.opts);\n }\n\n if (this.opts.nativeWebScreenshot) {\n this.jwpProxyAvoid.push(['GET', new RegExp('^/session/[^/]+/screenshot')]);\n }\n\n if (this.opts.reboot) {\n this.setAvdFromCapabilities(caps);\n }\n\n // get device udid for this session\n let {udid, emPort} = await helpers.getDeviceInfoFromCaps(this.opts);\n this.opts.udid = udid;\n this.opts.emPort = emPort;\n\n // set up an instance of ADB\n this.adb = await helpers.createADB({\n udid: this.opts.udid,\n emPort: this.opts.emPort,\n adbPort: this.opts.adbPort,\n suppressKillServer: this.opts.suppressKillServer,\n remoteAdbHost: this.opts.remoteAdbHost,\n clearDeviceLogsOnStart: this.opts.clearDeviceLogsOnStart,\n adbExecTimeout: this.opts.adbExecTimeout,\n allowOfflineDevices: this.opts.allowOfflineDevices,\n });\n\n if (await this.adb.getApiLevel() >= 23) {\n this.log.warn(\"Consider setting 'automationName' capability to \" +\n \"'uiautomator2' on Android >= 6, since UIAutomator framework \" +\n 'is not maintained anymore by the OS vendor.');\n }\n\n if (this.helpers.isPackageOrBundle(this.opts.app)) {\n // user provided package instead of app for 'app' capability, massage options\n this.opts.appPackage = this.opts.app;\n this.opts.app = null;\n }\n\n if (this.opts.app) {\n // find and copy, or download and unzip an app url or path\n this.opts.app = await this.helpers.configureApp(this.opts.app, APP_EXTENSION);\n await this.checkAppPresent();\n } else if (this.appOnDevice) {\n // the app isn't an actual app file but rather something we want to\n // assume is on the device and just launch via the appPackage\n this.log.info(`App file was not listed, instead we're going to run ` +\n `${this.opts.appPackage} directly on the device`);\n await this.checkPackagePresent();\n }\n\n // Some cloud services using appium launch the avd themselves, so we ensure netspeed\n // is set for emulators by calling adb.networkSpeed before running the app\n if (util.hasValue(this.opts.networkSpeed)) {\n if (!this.isEmulator()) {\n this.log.warn('Sorry, networkSpeed capability is only available for emulators');\n } else {\n const networkSpeed = ensureNetworkSpeed(this.adb, this.opts.networkSpeed);\n await this.adb.networkSpeed(networkSpeed);\n }\n }\n // check if we have to enable/disable gps before running the application\n if (util.hasValue(this.opts.gpsEnabled)) {\n if (this.isEmulator()) {\n this.log.info(`Trying to ${this.opts.gpsEnabled ? 'enable' : 'disable'} gps location provider`);\n await this.adb.toggleGPSLocationProvider(this.opts.gpsEnabled);\n } else {\n this.log.warn('Sorry! gpsEnabled capability is only available for emulators');\n }\n }\n\n await this.startAndroidSession(this.opts);\n return [sessionId, this.caps];\n } catch (e) {\n // ignoring delete session exception if any and throw the real error\n // that happened while creating the session.\n try {\n await this.deleteSession();\n } catch (ign) {}\n throw e;\n }\n }\n\n isEmulator () {\n return helpers.isEmulator(this.adb, this.opts);\n }\n\n setAvdFromCapabilities (caps) {\n if (this.opts.avd) {\n this.log.info('avd name defined, ignoring device name and platform version');\n } else {\n if (!caps.deviceName) {\n this.log.errorAndThrow('avd or deviceName should be specified when reboot option is enables');\n }\n if (!caps.platformVersion) {\n this.log.errorAndThrow('avd or platformVersion should be specified when reboot option is enabled');\n }\n let avdDevice = caps.deviceName.replace(/[^a-zA-Z0-9_.]/g, '-');\n this.opts.avd = `${avdDevice}__${caps.platformVersion}`;\n }\n }\n\n get appOnDevice () {\n return this.helpers.isPackageOrBundle(this.opts.app) || (!this.opts.app &&\n this.helpers.isPackageOrBundle(this.opts.appPackage));\n }\n\n get isChromeSession () {\n return helpers.isChromeBrowser(this.opts.browserName);\n }\n\n async onSettingsUpdate (key, value) {\n if (key === 'ignoreUnimportantViews') {\n await this.setCompressedLayoutHierarchy(value);\n }\n }\n\n async startAndroidSession () {\n this.log.info(`Starting Android session`);\n // set up the device to run on (real or emulator, etc)\n this.defaultIME = await helpers.initDevice(this.adb, this.opts);\n\n // set actual device name, udid, platform version, screen size, model and manufacturer details.\n this.caps.deviceName = this.adb.curDeviceId;\n this.caps.deviceUDID = this.opts.udid;\n this.caps.platformVersion = await this.adb.getPlatformVersion();\n this.caps.deviceScreenSize = await this.adb.getScreenSize();\n this.caps.deviceModel = await this.adb.getModel();\n this.caps.deviceManufacturer = await this.adb.getManufacturer();\n\n if (this.opts.disableWindowAnimation) {\n if (await this.adb.isAnimationOn()) {\n if (await this.adb.getApiLevel() >= 28) { // API level 28 is Android P\n // Don't forget to reset the relaxing in delete session\n this.log.warn('Relaxing hidden api policy to manage animation scale');\n await this.adb.setHiddenApiPolicy('1', !!this.opts.ignoreHiddenApiPolicyError);\n }\n\n this.log.info('Disabling window animation as it is requested by \"disableWindowAnimation\" capability');\n await this.adb.setAnimationState(false);\n this._wasWindowAnimationDisabled = true;\n } else {\n this.log.info('Window animation is already disabled');\n }\n }\n\n // set up app under test\n await this.initAUT();\n\n // start UiAutomator\n this.bootstrap = new helpers.bootstrap(this.adb, this.opts.bootstrapPort, this.opts.websocket);\n await this.bootstrap.start(this.opts.appPackage, this.opts.disableAndroidWatchers, this.opts.acceptSslCerts);\n // handling unexpected shutdown\n (async () => {\n try {\n await this.bootstrap.onUnexpectedShutdown;\n } catch (err) {\n if (!this.bootstrap.ignoreUnexpectedShutdown) {\n await this.startUnexpectedShutdown(err);\n }\n }\n })();\n\n\n if (!this.opts.skipUnlock) {\n // Let's try to unlock the device\n await helpers.unlock(this, this.adb, this.caps);\n }\n\n // Set CompressedLayoutHierarchy on the device based on current settings object\n // this has to happen _after_ bootstrap is initialized\n if (this.opts.ignoreUnimportantViews) {\n await this.settings.update({ignoreUnimportantViews: this.opts.ignoreUnimportantViews});\n }\n\n if (this.isChromeSession) {\n // start a chromedriver session and proxy to it\n await this.startChromeSession();\n } else {\n if (this.opts.autoLaunch) {\n // start app\n await this.startAUT();\n }\n }\n\n if (util.hasValue(this.opts.orientation)) {\n this.log.debug(`Setting initial orientation to '${this.opts.orientation}'`);\n await this.setOrientation(this.opts.orientation);\n }\n\n await this.initAutoWebview();\n }\n\n async initAutoWebview () {\n if (this.opts.autoWebview) {\n let viewName = this.defaultWebviewName();\n let timeout = (this.opts.autoWebviewTimeout) || 2000;\n\n this.log.info(`Setting auto webview to context '${viewName}' with timeout ${timeout}ms`);\n\n // try every 500ms until timeout is over\n await retryInterval(timeout / 500, 500, async () => {\n await this.setContext(viewName);\n });\n }\n }\n\n async initAUT () {\n // populate appPackage, appActivity, appWaitPackage, appWaitActivity,\n // and the device being used\n // in the opts and caps (so it gets back to the user on session creation)\n let launchInfo = await helpers.getLaunchInfo(this.adb, this.opts);\n Object.assign(this.opts, launchInfo);\n Object.assign(this.caps, launchInfo);\n\n // Uninstall any uninstallOtherPackages which were specified in caps\n if (this.opts.uninstallOtherPackages) {\n helpers.validateDesiredCaps(this.opts);\n // Only SETTINGS_HELPER_PKG_ID package is used by UIA1\n await helpers.uninstallOtherPackages(\n this.adb,\n helpers.parseArray(this.opts.uninstallOtherPackages),\n [SETTINGS_HELPER_PKG_ID]\n );\n }\n\n // Install any \"otherApps\" that were specified in caps\n if (this.opts.otherApps) {\n let otherApps;\n try {\n otherApps = helpers.parseArray(this.opts.otherApps);\n } catch (e) {\n this.log.errorAndThrow(`Could not parse \"otherApps\" capability: ${e.message}`);\n }\n otherApps = await B.all(otherApps.map((app) => this.helpers.configureApp(app, APP_EXTENSION)));\n await helpers.installOtherApks(otherApps, this.adb, this.opts);\n }\n\n // install app\n if (!this.opts.app) {\n if (this.opts.fullReset) {\n this.log.errorAndThrow('Full reset requires an app capability, use fastReset if app is not provided');\n }\n this.log.debug('No app capability. Assuming it is already on the device');\n if (this.opts.fastReset) {\n await helpers.resetApp(this.adb, this.opts);\n }\n return;\n }\n if (!this.opts.skipUninstall) {\n await this.adb.uninstallApk(this.opts.appPackage);\n }\n await helpers.installApk(this.adb, this.opts);\n const apkStringsForLanguage = await helpers.pushStrings(this.opts.language, this.adb, this.opts);\n if (this.opts.language) {\n this.apkStrings[this.opts.language] = apkStringsForLanguage;\n }\n\n // This must run after installing the apk, otherwise it would cause the\n // install to fail. And before running the app.\n if (!_.isUndefined(this.opts.sharedPreferences)) {\n await this.setSharedPreferences(this.opts);\n }\n }\n\n async checkAppPresent () {\n this.log.debug('Checking whether app is actually present');\n if (!(await fs.exists(this.opts.app))) {\n this.log.errorAndThrow(`Could not find app apk at ${this.opts.app}`);\n }\n }\n\n async checkPackagePresent () {\n this.log.debug('Checking whether package is present on the device');\n if (!(await this.adb.shell(['pm', 'list', 'packages', this.opts.appPackage]))) {\n this.log.errorAndThrow(`Could not find package ${this.opts.appPackage} on the device`);\n }\n }\n\n // Set CompressedLayoutHierarchy on the device\n async setCompressedLayoutHierarchy (compress) {\n await this.bootstrap.sendAction('compressedLayoutHierarchy', {compressLayout: compress});\n }\n\n async deleteSession () {\n this.log.debug('Shutting down Android driver');\n\n try {\n if (!_.isEmpty(this._screenRecordingProperties)) {\n await this.stopRecordingScreen();\n }\n } catch (ign) {}\n\n await helpers.removeAllSessionWebSocketHandlers(this.server, this.sessionId);\n\n await this.mobileStopScreenStreaming();\n\n await super.deleteSession();\n\n if (this.bootstrap) {\n // certain cleanup we only care to do if the bootstrap was ever run\n await this.stopChromedriverProxies();\n if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {\n this.log.debug(`Resetting IME to ${this.defaultIME}`);\n await this.adb?.setIME(this.defaultIME);\n }\n if (!this.isChromeSession && !this.opts.dontStopAppOnReset) {\n await this.adb?.forceStop(this.opts.appPackage);\n }\n await this.adb?.goToHome();\n if (this.opts.fullReset && !this.opts.skipUninstall && !this.appOnDevice) {\n await this.adb?.uninstallApk(this.opts.appPackage);\n }\n await this.bootstrap.shutdown();\n this.bootstrap = null;\n } else {\n this.log.debug(\"Called deleteSession but bootstrap wasn't active\");\n }\n // some cleanup we want to do regardless, in case we are shutting down\n // mid-startup\n await this.adb?.stopLogcat();\n if (this.useUnlockHelperApp) {\n await this.adb?.forceStop('io.appium.unlock');\n }\n if (this._wasWindowAnimationDisabled) {\n this.log.info('Restoring window animation state');\n await this.adb?.setAnimationState(true);\n\n // This was necessary to change animation scale over Android P. We must reset the policy for the security.\n if (await this.adb?.getApiLevel() >= 28) {\n this.log.info('Restoring hidden api policy to the device default configuration');\n await this.adb?.setDefaultHiddenApiPolicy(!!this.opts.ignoreHiddenApiPolicyError);\n }\n }\n\n if (this.opts.reboot) {\n let avdName = this.opts.avd.replace('@', '');\n this.log.debug(`closing emulator '${avdName}'`);\n await this.adb?.killEmulator(avdName);\n }\n }\n\n async setSharedPreferences () {\n let sharedPrefs = this.opts.sharedPreferences;\n this.log.info('Trying to set shared preferences');\n let name = sharedPrefs.name;\n if (_.isUndefined(name)) {\n this.log.warn(`Skipping setting Shared preferences, name is undefined: ${JSON.stringify(sharedPrefs)}`);\n return false;\n }\n let remotePath = `/data/data/${this.opts.appPackage}/shared_prefs`;\n let remoteFile = `${remotePath}/${name}.xml`;\n let localPath = `/tmp/${name}.xml`;\n let builder = this.getPrefsBuilder();\n builder.build(sharedPrefs.prefs);\n this.log.info(`Creating temporary shared preferences: ${localPath}`);\n builder.toFile(localPath);\n this.log.info(`Creating shared_prefs remote folder: ${remotePath}`);\n await this.adb.shell(['mkdir', '-p', remotePath]);\n this.log.info(`Pushing shared_prefs to ${remoteFile}`);\n await this.adb.push(localPath, remoteFile);\n try {\n this.log.info(`Trying to remove shared preferences temporary file`);\n if (await fs.exists(localPath)) {\n await fs.unlink(localPath);\n }\n } catch (e) {\n this.log.warn(`Error trying to remove temporary file ${localPath}`);\n }\n return true;\n }\n\n getPrefsBuilder () {\n /* Add this method to create a new SharedPrefsBuilder instead of\n * directly creating the object on setSharedPreferences for testing purposes\n */\n return new SharedPrefsBuilder();\n }\n\n validateDesiredCaps (caps) {\n if (!super.validateDesiredCaps(caps)) {\n return false;\n }\n if ((!caps.browserName || !helpers.isChromeBrowser(caps.browserName)) && !caps.app && !caps.appPackage) {\n this.log.errorAndThrow('The desired capabilities must include either an app, appPackage or browserName');\n }\n return helpers.validateDesiredCaps(caps);\n }\n\n proxyActive (sessionId) {\n super.proxyActive(sessionId);\n\n return this.jwpProxyActive;\n }\n\n getProxyAvoidList (sessionId) {\n super.getProxyAvoidList(sessionId);\n\n return this.jwpProxyAvoid;\n }\n\n canProxy (sessionId) {\n super.canProxy(sessionId);\n\n // this will change depending on ChromeDriver status\n return _.isFunction(this.proxyReqRes);\n }\n}\n\nexport { AndroidDriver };\nexport default AndroidDriver;\n"],"mappings":"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"}
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  require("source-map-support/register");
8
- var _support = require("appium/support");
8
+ var _support = require("@appium/support");
9
9
  const log = _support.logger.getLogger('AndroidDriver');
10
10
  var _default = log;
11
11
  exports.default = _default;
12
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FuZHJvaWREcml2ZXInKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGVBQU0sQ0FBQ0MsU0FBUyxDQUFDLGVBQWUsQ0FBQztBQUFDLGVBRS9CRixHQUFHO0FBQUEifQ==
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdBbmRyb2lkRHJpdmVyJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxlQUFlLENBQUM7QUFBQyxlQUUvQkYsR0FBRztBQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from 'appium/support';\nconst log = logger.getLogger('AndroidDriver');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AACA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,eAAe,CAAC;AAAC,eAE/BF,GAAG;AAAA"}
1
+ {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from '@appium/support';\nconst log = logger.getLogger('AndroidDriver');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AACA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,eAAe,CAAC;AAAC,eAE/BF,GAAG;AAAA"}
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = exports.UiAutomator = void 0;
8
8
  require("source-map-support/register");
9
9
  var _events = _interopRequireDefault(require("events"));
10
- var _support = require("appium/support");
10
+ var _support = require("@appium/support");
11
11
  const log = _support.logger.getLogger('UiAutomator');
12
12
  class UiAutomator extends _events.default.EventEmitter {
13
13
  constructor(adb) {
@@ -97,4 +97,4 @@ UiAutomator.STATE_STARTING = 'starting';
97
97
  UiAutomator.STATE_ONLINE = 'online';
98
98
  var _default = UiAutomator;
99
99
  exports.default = _default;
100
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignVWlBdXRvbWF0b3InKTtcblxuY2xhc3MgVWlBdXRvbWF0b3IgZXh0ZW5kcyBldmVudHMuRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGFkYikge1xuICAgIGlmICghYWRiKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdygnYWRiIGlzIHJlcXVpcmVkIHRvIGluc3RhbnRpYXRlIFVpQXV0b21hdG9yJyk7XG4gICAgfVxuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy50ZW1wUGF0aCA9ICcvZGF0YS9sb2NhbC90bXAvJztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0ICh1aUF1dG9tYXRvckJpbmFyeVBhdGgsIGNsYXNzTmFtZSwgc3RhcnREZXRlY3RvciwgLi4uZXh0cmFQYXJhbXMpIHtcbiAgICBsZXQgcHJvY2Vzc0lzQWxpdmU7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgVWlBdXRvbWF0b3InKTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RBUlRJTkcpO1xuXG4gICAgICBsb2cuZGVidWcoJ1BhcnNpbmcgdWlhdXRvbWF0b3IgamFyJyk7XG4gICAgICAvLyBleHBlY3RpbmcgYSBwYXRoIGxpa2UgL2Fkcy9hZHMvZm9vLmphciBvciBcXGFzZFxcYXNkXFxmb28uamFyXG4gICAgICBsZXQgamFyTmFtZSA9IHRoaXMucGFyc2VKYXJOYW1lRnJvbVBhdGgodWlBdXRvbWF0b3JCaW5hcnlQYXRoKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnB1c2godWlBdXRvbWF0b3JCaW5hcnlQYXRoLCB0aGlzLnRlbXBQYXRoKTtcblxuICAgICAgLy8ga2lsbGluZyBhbnkgdWlhdXRvbWF0b3IgZXhpc3RpbmcgcHJvY2Vzc2VzXG4gICAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG5cbiAgICAgIGxvZy5kZWJ1ZygnU3RhcnRpbmcgVUlBdXRvbWF0b3InKTtcbiAgICAgIGxldCBhcmdzID0gWydzaGVsbCcsICd1aWF1dG9tYXRvcicsICdydW50ZXN0JywgamFyTmFtZSwgJy1jJywgY2xhc3NOYW1lLCAuLi5leHRyYVBhcmFtc107XG4gICAgICB0aGlzLnByb2MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKGFyZ3MpO1xuXG4gICAgICAvLyBoYW5kbGUgb3V0LW9mLWJvdW5kIGV4aXQgYnkgc2ltcGx5IGVtaXR0aW5nIGEgc3RvcHBlZCBzdGF0ZVxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzSXNBbGl2ZSA9IGZhbHNlO1xuICAgICAgICAvLyBjbGVhbnVwXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORykge1xuICAgICAgICAgIGxldCBtc2cgPSBgVWlBdXRvbWF0b3IgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aXRoIGNvZGUgJHtjb2RlfSwgYCArXG4gICAgICAgICAgICAgICAgICAgIGBzaWduYWwgJHtzaWduYWx9YDtcbiAgICAgICAgICBsb2cuZXJyb3IobXNnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORykge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnVWlBdXRvbWF0b3Igc2h1dCBkb3duIG5vcm1hbGx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoc3RhcnREZXRlY3Rvcik7XG4gICAgICBwcm9jZXNzSXNBbGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX09OTElORSk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9FUlJPUiwgZSk7XG4gICAgICBpZiAocHJvY2Vzc0lzQWxpdmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgICAgfVxuICAgICAgbG9nLmVycm9yQW5kVGhyb3coZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24gKCkge1xuICAgIGxvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biBVaUF1dG9tYXRvcicpO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HKTtcbiAgICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpO1xuICB9XG5cbiAgcGFyc2VKYXJOYW1lRnJvbVBhdGggKGJpbmFyeVBhdGgpIHtcbiAgICBsZXQgcmVUZXN0ID0gLy4qKFxcL3xcXFxcKSguKlxcLmphcikvLmV4ZWMoYmluYXJ5UGF0aCk7XG4gICAgaWYgKCFyZVRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIGphciBuYW1lIGZyb20gJHtiaW5hcnlQYXRofWApO1xuICAgIH1cbiAgICBsZXQgamFyTmFtZSA9IHJlVGVzdFsyXTtcbiAgICBsb2cuZGVidWcoYEZvdW5kIGphciBuYW1lOiAnJHtqYXJOYW1lfSdgKTtcbiAgICByZXR1cm4gamFyTmFtZTtcbiAgfVxuXG4gIGNoYW5nZVN0YXRlIChzdGF0ZSkge1xuICAgIGxvZy5kZWJ1ZyhgTW92aW5nIHRvIHN0YXRlICcke3N0YXRlfSdgKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5lbWl0KFVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQsIHtzdGF0ZX0pO1xuICB9XG5cbiAgYXN5bmMga2lsbFVpQXV0b21hdG9yT25EZXZpY2UgKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5raWxsUHJvY2Vzc2VzQnlOYW1lKCd1aWF1dG9tYXRvcicpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGBFcnJvciB3aGlsZSBraWxsaW5nIHVpQXV0b21hdG9yOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbn1cblxuVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IgPSAndWlhdXRvbWF0b3JfZXJyb3InO1xuVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCA9ICdzdGF0ZUNoYW5nZWQnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcgPSAnc3RvcHBpbmcnO1xuVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCA9ICdzdG9wcGVkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HID0gJ3N0YXJ0aW5nJztcblVpQXV0b21hdG9yLlNUQVRFX09OTElORSA9ICdvbmxpbmUnO1xuXG5cbmV4cG9ydCB7IFVpQXV0b21hdG9yIH07XG5leHBvcnQgZGVmYXVsdCBVaUF1dG9tYXRvcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFNLENBQUNDLFNBQVMsQ0FBQyxhQUFhLENBQUM7QUFFM0MsTUFBTUMsV0FBVyxTQUFTQyxlQUFNLENBQUNDLFlBQVksQ0FBQztFQUM1Q0MsV0FBVyxDQUFFQyxHQUFHLEVBQUU7SUFDaEIsSUFBSSxDQUFDQSxHQUFHLEVBQUU7TUFDUlAsR0FBRyxDQUFDUSxhQUFhLENBQUMsNENBQTRDLENBQUM7SUFDakU7SUFDQSxLQUFLLEVBQUU7SUFDUCxJQUFJLENBQUNELEdBQUcsR0FBR0EsR0FBRztJQUNkLElBQUksQ0FBQ0UsUUFBUSxHQUFHLGtCQUFrQjtFQUNwQztFQUVBLE1BQU1DLEtBQUssQ0FBRUMscUJBQXFCLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxFQUFFLEdBQUdDLFdBQVcsRUFBRTtJQUM1RSxJQUFJQyxjQUFjO0lBQ2xCLElBQUk7TUFDRmYsR0FBRyxD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
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJVaUF1dG9tYXRvciIsImV2ZW50cyIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwiYWRiIiwiZXJyb3JBbmRUaHJvdyIsInRlbXBQYXRoIiwic3RhcnQiLCJ1aUF1dG9tYXRvckJpbmFyeVBhdGgiLCJjbGFzc05hbWUiLCJzdGFydERldGVjdG9yIiwiZXh0cmFQYXJhbXMiLCJwcm9jZXNzSXNBbGl2ZSIsImRlYnVnIiwiY2hhbmdlU3RhdGUiLCJTVEFURV9TVEFSVElORyIsImphck5hbWUiLCJwYXJzZUphck5hbWVGcm9tUGF0aCIsInB1c2giLCJraWxsVWlBdXRvbWF0b3JPbkRldmljZSIsImFyZ3MiLCJwcm9jIiwiY3JlYXRlU3ViUHJvY2VzcyIsIm9uIiwiY29kZSIsInNpZ25hbCIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIlNUQVRFX1NUT1BQSU5HIiwibXNnIiwiZXJyb3IiLCJTVEFURV9PTkxJTkUiLCJlIiwiZW1pdCIsIkVWRU5UX0VSUk9SIiwic3RvcCIsInNodXRkb3duIiwiYmluYXJ5UGF0aCIsInJlVGVzdCIsImV4ZWMiLCJFcnJvciIsIkVWRU5UX0NIQU5HRUQiLCJraWxsUHJvY2Vzc2VzQnlOYW1lIiwid2FybiJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91aWF1dG9tYXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1VpQXV0b21hdG9yJyk7XG5cbmNsYXNzIFVpQXV0b21hdG9yIGV4dGVuZHMgZXZlbnRzLkV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICBpZiAoIWFkYikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ2FkYiBpcyByZXF1aXJlZCB0byBpbnN0YW50aWF0ZSBVaUF1dG9tYXRvcicpO1xuICAgIH1cbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMudGVtcFBhdGggPSAnL2RhdGEvbG9jYWwvdG1wLyc7XG4gIH1cblxuICBhc3luYyBzdGFydCAodWlBdXRvbWF0b3JCaW5hcnlQYXRoLCBjbGFzc05hbWUsIHN0YXJ0RGV0ZWN0b3IsIC4uLmV4dHJhUGFyYW1zKSB7XG4gICAgbGV0IHByb2Nlc3NJc0FsaXZlO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVpQXV0b21hdG9yJyk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKFVpQXV0b21hdG9yLlNUQVRFX1NUQVJUSU5HKTtcblxuICAgICAgbG9nLmRlYnVnKCdQYXJzaW5nIHVpYXV0b21hdG9yIGphcicpO1xuICAgICAgLy8gZXhwZWN0aW5nIGEgcGF0aCBsaWtlIC9hZHMvYWRzL2Zvby5qYXIgb3IgXFxhc2RcXGFzZFxcZm9vLmphclxuICAgICAgbGV0IGphck5hbWUgPSB0aGlzLnBhcnNlSmFyTmFtZUZyb21QYXRoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKHVpQXV0b21hdG9yQmluYXJ5UGF0aCwgdGhpcy50ZW1wUGF0aCk7XG5cbiAgICAgIC8vIGtpbGxpbmcgYW55IHVpYXV0b21hdG9yIGV4aXN0aW5nIHByb2Nlc3Nlc1xuICAgICAgYXdhaXQgdGhpcy5raWxsVWlBdXRvbWF0b3JPbkRldmljZSgpO1xuXG4gICAgICBsb2cuZGVidWcoJ1N0YXJ0aW5nIFVJQXV0b21hdG9yJyk7XG4gICAgICBsZXQgYXJncyA9IFsnc2hlbGwnLCAndWlhdXRvbWF0b3InLCAncnVudGVzdCcsIGphck5hbWUsICctYycsIGNsYXNzTmFtZSwgLi4uZXh0cmFQYXJhbXNdO1xuICAgICAgdGhpcy5wcm9jID0gdGhpcy5hZGIuY3JlYXRlU3ViUHJvY2VzcyhhcmdzKTtcblxuICAgICAgLy8gaGFuZGxlIG91dC1vZi1ib3VuZCBleGl0IGJ5IHNpbXBseSBlbWl0dGluZyBhIHN0b3BwZWQgc3RhdGVcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzc0lzQWxpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gY2xlYW51cFxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsZXQgbXNnID0gYFVpQXV0b21hdG9yIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2l0aCBjb2RlICR7Y29kZX0sIGAgK1xuICAgICAgICAgICAgICAgICAgICBgc2lnbmFsICR7c2lnbmFsfWA7XG4gICAgICAgICAgbG9nLmVycm9yKG1zZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBJTkcpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ1VpQXV0b21hdG9yIHNodXQgZG93biBub3JtYWxseScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0YXJ0KHN0YXJ0RGV0ZWN0b3IpO1xuICAgICAgcHJvY2Vzc0lzQWxpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9PTkxJTkUpO1xuICAgICAgcmV0dXJuIHRoaXMucHJvYztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmVtaXQoVWlBdXRvbWF0b3IuRVZFTlRfRVJST1IsIGUpO1xuICAgICAgaWYgKHByb2Nlc3NJc0FsaXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMua2lsbFVpQXV0b21hdG9yT25EZXZpY2UoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jLnN0b3AoKTtcbiAgICAgIH1cbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBsb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gVWlBdXRvbWF0b3InKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUElORyk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RvcCgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmtpbGxVaUF1dG9tYXRvck9uRGV2aWNlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKTtcbiAgfVxuXG4gIHBhcnNlSmFyTmFtZUZyb21QYXRoIChiaW5hcnlQYXRoKSB7XG4gICAgbGV0IHJlVGVzdCA9IC8uKihcXC98XFxcXCkoLipcXC5qYXIpLy5leGVjKGJpbmFyeVBhdGgpO1xuICAgIGlmICghcmVUZXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSBqYXIgbmFtZSBmcm9tICR7YmluYXJ5UGF0aH1gKTtcbiAgICB9XG4gICAgbGV0IGphck5hbWUgPSByZVRlc3RbMl07XG4gICAgbG9nLmRlYnVnKGBGb3VuZCBqYXIgbmFtZTogJyR7amFyTmFtZX0nYCk7XG4gICAgcmV0dXJuIGphck5hbWU7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZSAoc3RhdGUpIHtcbiAgICBsb2cuZGVidWcoYE1vdmluZyB0byBzdGF0ZSAnJHtzdGF0ZX0nYCk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZW1pdChVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCB7c3RhdGV9KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGxVaUF1dG9tYXRvck9uRGV2aWNlICgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igd2hpbGUga2lsbGluZyB1aUF1dG9tYXRvcjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG59XG5cblVpQXV0b21hdG9yLkVWRU5UX0VSUk9SID0gJ3VpYXV0b21hdG9yX2Vycm9yJztcblVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQgPSAnc3RhdGVDaGFuZ2VkJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQSU5HID0gJ3N0b3BwaW5nJztcblVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQgPSAnc3RvcHBlZCc7XG5VaUF1dG9tYXRvci5TVEFURV9TVEFSVElORyA9ICdzdGFydGluZyc7XG5VaUF1dG9tYXRvci5TVEFURV9PTkxJTkUgPSAnb25saW5lJztcblxuXG5leHBvcnQgeyBVaUF1dG9tYXRvciB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3I7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsYUFBYSxDQUFDO0FBRTNDLE1BQU1DLFdBQVcsU0FBU0MsZUFBTSxDQUFDQyxZQUFZLENBQUM7RUFDNUNDLFdBQVcsQ0FBRUMsR0FBRyxFQUFFO0lBQ2hCLElBQUksQ0FBQ0EsR0FBRyxFQUFFO01BQ1JQLEdBQUcsQ0FBQ1EsYUFBYSxDQUFDLDRDQUE0QyxDQUFDO0lBQ2pFO0lBQ0EsS0FBSyxFQUFFO0lBQ1AsSUFBSSxDQUFDRCxHQUFHLEdBQUdBLEdBQUc7SUFDZCxJQUFJLENBQUNFLFFBQVEsR0FBRyxrQkFBa0I7RUFDcEM7RUFFQSxNQUFNQyxLQUFLLENBQUVDLHFCQUFxQixFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRSxHQUFHQyxXQUFXLEVBQUU7SUFDNUUsSUFBSUMsY0FBYztJQUNsQixJQUFJO01BQ0ZmLEdBQUcs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
@@ -1 +1 @@
1
- {"version":3,"file":"uiautomator.js","names":["log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from 'appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":"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"}
1
+ {"version":3,"file":"uiautomator.js","names":["log","logger","getLogger","UiAutomator","events","EventEmitter","constructor","adb","errorAndThrow","tempPath","start","uiAutomatorBinaryPath","className","startDetector","extraParams","processIsAlive","debug","changeState","STATE_STARTING","jarName","parseJarNameFromPath","push","killUiAutomatorOnDevice","args","proc","createSubProcess","on","code","signal","state","STATE_STOPPED","STATE_STOPPING","msg","error","STATE_ONLINE","e","emit","EVENT_ERROR","stop","shutdown","binaryPath","reTest","exec","Error","EVENT_CHANGED","killProcessesByName","warn"],"sources":["../../lib/uiautomator.js"],"sourcesContent":["import events from 'events';\nimport { logger } from '@appium/support';\n\n\nconst log = logger.getLogger('UiAutomator');\n\nclass UiAutomator extends events.EventEmitter {\n constructor (adb) {\n if (!adb) {\n log.errorAndThrow('adb is required to instantiate UiAutomator');\n }\n super();\n this.adb = adb;\n this.tempPath = '/data/local/tmp/';\n }\n\n async start (uiAutomatorBinaryPath, className, startDetector, ...extraParams) {\n let processIsAlive;\n try {\n log.debug('Starting UiAutomator');\n this.changeState(UiAutomator.STATE_STARTING);\n\n log.debug('Parsing uiautomator jar');\n // expecting a path like /ads/ads/foo.jar or \\asd\\asd\\foo.jar\n let jarName = this.parseJarNameFromPath(uiAutomatorBinaryPath);\n await this.adb.push(uiAutomatorBinaryPath, this.tempPath);\n\n // killing any uiautomator existing processes\n await this.killUiAutomatorOnDevice();\n\n log.debug('Starting UIAutomator');\n let args = ['shell', 'uiautomator', 'runtest', jarName, '-c', className, ...extraParams];\n this.proc = this.adb.createSubProcess(args);\n\n // handle out-of-bound exit by simply emitting a stopped state\n this.proc.on('exit', (code, signal) => {\n processIsAlive = false;\n // cleanup\n if (this.state !== UiAutomator.STATE_STOPPED &&\n this.state !== UiAutomator.STATE_STOPPING) {\n let msg = `UiAutomator exited unexpectedly with code ${code}, ` +\n `signal ${signal}`;\n log.error(msg);\n } else if (this.state === UiAutomator.STATE_STOPPING) {\n log.debug('UiAutomator shut down normally');\n }\n this.changeState(UiAutomator.STATE_STOPPED);\n });\n\n await this.proc.start(startDetector);\n processIsAlive = true;\n this.changeState(UiAutomator.STATE_ONLINE);\n return this.proc;\n } catch (e) {\n this.emit(UiAutomator.EVENT_ERROR, e);\n if (processIsAlive) {\n await this.killUiAutomatorOnDevice();\n await this.proc.stop();\n }\n log.errorAndThrow(e);\n }\n }\n\n async shutdown () {\n log.debug('Shutting down UiAutomator');\n if (this.state !== UiAutomator.STATE_STOPPED) {\n this.changeState(UiAutomator.STATE_STOPPING);\n await this.proc.stop();\n }\n await this.killUiAutomatorOnDevice();\n this.changeState(UiAutomator.STATE_STOPPED);\n }\n\n parseJarNameFromPath (binaryPath) {\n let reTest = /.*(\\/|\\\\)(.*\\.jar)/.exec(binaryPath);\n if (!reTest) {\n throw new Error(`Unable to parse jar name from ${binaryPath}`);\n }\n let jarName = reTest[2];\n log.debug(`Found jar name: '${jarName}'`);\n return jarName;\n }\n\n changeState (state) {\n log.debug(`Moving to state '${state}'`);\n this.state = state;\n this.emit(UiAutomator.EVENT_CHANGED, {state});\n }\n\n async killUiAutomatorOnDevice () {\n try {\n await this.adb.killProcessesByName('uiautomator');\n } catch (e) {\n log.warn(`Error while killing uiAutomator: ${e}`);\n }\n }\n\n}\n\nUiAutomator.EVENT_ERROR = 'uiautomator_error';\nUiAutomator.EVENT_CHANGED = 'stateChanged';\nUiAutomator.STATE_STOPPING = 'stopping';\nUiAutomator.STATE_STOPPED = 'stopped';\nUiAutomator.STATE_STARTING = 'starting';\nUiAutomator.STATE_ONLINE = 'online';\n\n\nexport { UiAutomator };\nexport default UiAutomator;\n"],"mappings":"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"}