appium-espresso-driver 2.11.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +9 -4
  2. package/build/index.js +1 -4
  3. package/build/lib/commands/execute.js +1 -10
  4. package/build/lib/commands/execute.js.map +1 -1
  5. package/build/lib/commands/general.js +3 -43
  6. package/build/lib/commands/general.js.map +1 -1
  7. package/build/lib/commands/idling-resources.js +2 -5
  8. package/build/lib/commands/idling-resources.js.map +1 -1
  9. package/build/lib/commands/index.js +3 -9
  10. package/build/lib/commands/index.js.map +1 -1
  11. package/build/lib/commands/services.js +2 -5
  12. package/build/lib/commands/services.js.map +1 -1
  13. package/build/lib/desired-caps.js +1 -4
  14. package/build/lib/desired-caps.js.map +1 -1
  15. package/build/lib/driver.js +21 -94
  16. package/build/lib/driver.js.map +1 -1
  17. package/build/lib/espresso-runner.js +1 -64
  18. package/build/lib/espresso-runner.js.map +1 -1
  19. package/build/lib/logger.js +1 -5
  20. package/build/lib/logger.js.map +1 -1
  21. package/build/lib/server-builder.js +1 -43
  22. package/build/lib/server-builder.js.map +1 -1
  23. package/build/lib/utils.js +1 -38
  24. package/build/lib/utils.js.map +1 -1
  25. package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
  26. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +2 -3
  27. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +2 -2
  28. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +1 -1
  29. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +3 -3
  30. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +2 -1
  31. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +2 -2
  32. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +3 -4
  33. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +2 -2
  34. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +1 -1
  35. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +1 -1
  36. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +1 -1
  37. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +1 -1
  38. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +2 -2
  39. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +1 -1
  40. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +1 -1
  41. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +1 -1
  42. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +2 -3
  43. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +4 -5
  44. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +3 -1
  45. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +2 -1
  46. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +1 -1
  47. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +1 -1
  48. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +2 -1
  49. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +9 -3
  50. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +149 -135
  51. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +2 -3
  52. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +22 -17
  53. package/npm-shrinkwrap.json +212 -272
  54. package/package.json +2 -2
package/README.md CHANGED
@@ -79,7 +79,7 @@ appium:appWaitDuration | Maximum amount of milliseconds to wait until the applic
79
79
  appium:intentOptions | The mapping of custom options for the intent that is going to be passed to the main app activity. Check [Intent Options](#intent-options) for more details.
80
80
  appium:activityOptions | The mapping of custom options for the main app activity that is going to be started. Check [Activity Options](#activity-options) for more details.
81
81
  appium:androidInstallTimeout | Maximum amount of milliseconds to wait until the application under test is installed. `90000` ms by default
82
- appium:autoGrantPermissions | Whether to grant all the requested application permissions automatically when a test starts(`true`). `false` by default
82
+ appium:autoGrantPermissions | Whether to grant all the requested application permissions automatically when a test starts(`true`). The targetSdkVersion in the application manifest must be greater or equal to 23 and the Android version on the device under test must be greater or equal to Android 6 (API level 23) to grant permissions. Applications whose targetSdkVersion is lower than or equal to 22 must be reisntalled to grant permissions, for example, by setting the `appium:fullReset` capability as `true` for Android 6+ devices. `false` by default
83
83
  appium:otherApps | Allows to set one or more comma-separated paths to Android packages that are going to be installed along with the main application under test. This might be useful if the tested app has dependencies
84
84
  appium:uninstallOtherPackages | Allows to set one or more comma-separated package identifiers to be uninstalled from the device before a test starts
85
85
  appium:allowTestPackages | If set to `true` then it would be possible to use packages built with the test flag for the automated testing (literally adds `-t` flag to the `adb install` command). `false` by default
@@ -856,14 +856,19 @@ True is the app has been found on the device and successfully removed. Otherwise
856
856
 
857
857
  ### mobile: terminateApp
858
858
 
859
- Terminates the app if it is running.
859
+ Terminates the app and waits until the app is terminated up to the given timeout
860
+ by checking the app state to ensure if the app process is actually stopped.
861
+
862
+ The app state check can be skipped if the given timeout is lower or equal to zero since Espresso driver 2.13.0.
863
+ The skip helps when you want to terminate the app process but do not want to check the process existence
864
+ because the app under test may, for example, restart it automatically.
860
865
 
861
866
  #### Arguments
862
867
 
863
868
  Name | Type | Required | Description | Example
864
869
  --- | --- | --- | --- | ---
865
870
  appId | string | yes | The identifier of the application package to be terminated | `my.app.id`
866
- timeout | number | no | The count of milliseconds to wait until the app is terminated. 500ms by default. | 1500
871
+ timeout | number | no | The count of milliseconds to wait until the app is terminated. 500ms by default. | 1500, 0
867
872
 
868
873
  #### Returned Result
869
874
 
@@ -881,7 +886,7 @@ appPath | string | yes | The local .apk(s) path on the server filesystem or a re
881
886
  timeout | number | no | The count of milliseconds to wait until the app is installed.. 6000ms by default. | 120000
882
887
  allowTestPackages | boolean | no | Set to true in order to allow test packages installation. false by default | true
883
888
  useSdcard | boolean | no | Set to true to install the app on sdcard instead of the device memory. false by default | true
884
- grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. false by default | true
889
+ grantPermissions | boolean | no | Set to true in order to grant all the permissions requested in the application's manifest automatically after the installation is completed under Android 6+. The targetSdkVersion in the application manifest must be greater or equal to 23 and the Android version on the device under test must be greater or equal to Android 6 (API level 23) to grant permissions. Applications whose targetSdkVersion is lower than or equal to 22 must be reisntalled to grant permissions for Android 6+ devices. false by default | true
885
890
  replace | boolean | no | Set it to false if you don't want the application to be upgraded/reinstalled if it is already present on the device, but throw an error instead. true by default | false
886
891
 
887
892
  ### mobile: clearApp
package/build/index.js CHANGED
@@ -10,11 +10,8 @@ Object.defineProperty(exports, "EspressoDriver", {
10
10
  }
11
11
  });
12
12
  exports.default = void 0;
13
-
14
13
  require("source-map-support/register");
15
-
16
14
  var _driver = require("./lib/driver");
17
-
18
15
  var _default = _driver.EspressoDriver;
19
16
  exports.default = _default;
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFc3ByZXNzb0RyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBFc3ByZXNzb0RyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O2VBR2VBLHNCIn0=
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFc3ByZXNzb0RyaXZlciJdLCJzb3VyY2VzIjpbIi4uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgeyBFc3ByZXNzb0RyaXZlciB9IGZyb20gJy4vbGliL2RyaXZlcic7XG5cbmV4cG9ydCB7IEVzcHJlc3NvRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb0RyaXZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBO0FBQThDLGVBRy9CQSxzQkFBYztBQUFBIn0=
@@ -1,20 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
10
  var _driver = require("appium/driver");
15
-
16
11
  const extensions = {};
17
-
18
12
  extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}) {
19
13
  const mobileCommandsMapping = {
20
14
  shell: 'mobileShell',
@@ -69,14 +63,11 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
69
63
  isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
70
64
  stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording'
71
65
  };
72
-
73
66
  if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
74
67
  throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
75
68
  }
76
-
77
69
  return await this[mobileCommandsMapping[mobileCommand]](opts);
78
70
  };
79
-
80
71
  var _default = extensions;
81
72
  exports.default = _default;
82
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiZXhlY3V0ZU1vYmlsZSIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsInN3aXBlIiwic2Nyb2xsVG9QYWdlIiwibmF2aWdhdGVUbyIsImNsaWNrQWN0aW9uIiwiZGV2aWNlSW5mbyIsImlzVG9hc3RWaXNpYmxlIiwib3BlbkRyYXdlciIsImNsb3NlRHJhd2VyIiwic2V0RGF0ZSIsInNldFRpbWUiLCJnZXREZXZpY2VUaW1lIiwiYmFja2Rvb3IiLCJmbGFzaEVsZW1lbnQiLCJ1aWF1dG9tYXRvciIsInVpYXV0b21hdG9yUGFnZVNvdXJjZSIsIndlYkF0b21zIiwiZ2V0Q29udGV4dHMiLCJkaXNtaXNzQXV0b2ZpbGwiLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwicmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMiLCJ1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwibGlzdElkbGluZ1Jlc291cmNlcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl8iLCJoYXMiLCJlcnJvcnMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgc2Nyb2xsVG9QYWdlOiAnbW9iaWxlU2Nyb2xsVG9QYWdlJyxcbiAgICBuYXZpZ2F0ZVRvOiAnbW9iaWxlTmF2aWdhdGVUbycsXG4gICAgY2xpY2tBY3Rpb246ICdtb2JpbGVDbGlja0FjdGlvbicsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBpc1RvYXN0VmlzaWJsZTogJ21vYmlsZUlzVG9hc3RWaXNpYmxlJyxcblxuICAgIG9wZW5EcmF3ZXI6ICdtb2JpbGVPcGVuRHJhd2VyJyxcbiAgICBjbG9zZURyYXdlcjogJ21vYmlsZUNsb3NlRHJhd2VyJyxcblxuICAgIHNldERhdGU6ICdtb2JpbGVTZXREYXRlJyxcbiAgICBzZXRUaW1lOiAnbW9iaWxlU2V0VGltZScsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBiYWNrZG9vcjogJ21vYmlsZUJhY2tkb29yJyxcblxuICAgIGZsYXNoRWxlbWVudDogJ21vYmlsZUZsYXNoRWxlbWVudCcsXG5cbiAgICB1aWF1dG9tYXRvcjogJ21vYmlsZVVpYXV0b21hdG9yJyxcbiAgICB1aWF1dG9tYXRvclBhZ2VTb3VyY2U6ICdtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UnLFxuXG4gICAgd2ViQXRvbXM6ICdtb2JpbGVXZWJBdG9tcycsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBkaXNtaXNzQXV0b2ZpbGw6ICdtb2JpbGVEaXNtaXNzQXV0b2ZpbGwnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIHB1c2hGaWxlOiAnbW9iaWxlUHVzaEZpbGUnLFxuICAgIHB1bGxGaWxlOiAnbW9iaWxlUHVsbEZpbGUnLFxuICAgIHB1bGxGb2xkZXI6ICdtb2JpbGVQdWxsRm9sZGVyJyxcbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG5cbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBjbGVhckFwcDogJ21vYmlsZUNsZWFyQXBwJyxcblxuICAgIHN0YXJ0QWN0aXZpdHk6ICdtb2JpbGVTdGFydEFjdGl2aXR5JyxcbiAgICBzdGFydFNlcnZpY2U6ICdtb2JpbGVTdGFydFNlcnZpY2UnLFxuICAgIHN0b3BTZXJ2aWNlOiAnbW9iaWxlU3RvcFNlcnZpY2UnLFxuICAgIGJyb2FkY2FzdDogJ21vYmlsZUJyb2FkY2FzdCcsXG5cbiAgICByZWdpc3RlcklkbGluZ1Jlc291cmNlczogJ21vYmlsZVJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzJyxcbiAgICB1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcycsXG4gICAgbGlzdElkbGluZ1Jlc291cmNlczogJ21vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0MsYUFBWCxHQUEyQixlQUFlQSxhQUFmLENBQThCQyxhQUE5QixFQUE2Q0MsSUFBSSxHQUFHLEVBQXBELEVBQXdEO0VBQ2pGLE1BQU1DLHFCQUFxQixHQUFHO0lBQzVCQyxLQUFLLEVBQUUsYUFEcUI7SUFHNUJDLHFCQUFxQixFQUFFLDZCQUhLO0lBSzVCQyxtQkFBbUIsRUFBRSwyQkFMTztJQU81QkMsaUJBQWlCLEVBQUUseUJBUFM7SUFRNUJDLGNBQWMsRUFBRSxzQkFSWTtJQVU1QkMsb0JBQW9CLEVBQUUsNEJBVk07SUFXNUJDLG1CQUFtQixFQUFFLDJCQVhPO0lBYTVCQyxLQUFLLEVBQUUsYUFicUI7SUFjNUJDLFlBQVksRUFBRSxvQkFkYztJQWU1QkMsVUFBVSxFQUFFLGtCQWZnQjtJQWdCNUJDLFdBQVcsRUFBRSxtQkFoQmU7SUFrQjVCQyxVQUFVLEVBQUUscUJBbEJnQjtJQW9CNUJDLGNBQWMsRUFBRSxzQkFwQlk7SUFzQjVCQyxVQUFVLEVBQUUsa0JBdEJnQjtJQXVCNUJDLFdBQVcsRUFBRSxtQkF2QmU7SUF5QjVCQyxPQUFPLEVBQUUsZUF6Qm1CO0lBMEI1QkMsT0FBTyxFQUFFLGVBMUJtQjtJQTRCNUJDLGFBQWEsRUFBRSxxQkE1QmE7SUE4QjVCQyxRQUFRLEVBQUUsZ0JBOUJrQjtJQWdDNUJDLFlBQVksRUFBRSxvQkFoQ2M7SUFrQzVCQyxXQUFXLEVBQUUsbUJBbENlO0lBbUM1QkMscUJBQXFCLEVBQUUsNkJBbkNLO0lBcUM1QkMsUUFBUSxFQUFFLGdCQXJDa0I7SUFzQzVCQyxXQUFXLEVBQUUsbUJBdENlO0lBd0M1QkMsZUFBZSxFQUFFLHVCQXhDVztJQTBDNUJDLGdCQUFnQixFQUFFLHdCQTFDVTtJQTRDNUJDLE9BQU8sRUFBRSxlQTVDbUI7SUE4QzVCQyxTQUFTLEVBQUUsV0E5Q2lCO0lBZ0Q1QkMsUUFBUSxFQUFFLGdCQWhEa0I7SUFpRDVCQyxRQUFRLEVBQUUsZ0JBakRrQjtJQWtENUJDLFVBQVUsRUFBRSxrQkFsRGdCO0lBbUQ1QkMsVUFBVSxFQUFFLGtCQW5EZ0I7SUFxRDVCQyxjQUFjLEVBQUUsc0JBckRZO0lBc0Q1QkMsYUFBYSxFQUFFLHFCQXREYTtJQXVENUJDLFdBQVcsRUFBRSxtQkF2RGU7SUF3RDVCQyxTQUFTLEVBQUUsaUJBeERpQjtJQXlENUJDLFlBQVksRUFBRSxvQkF6RGM7SUEwRDVCQyxVQUFVLEVBQUUsa0JBMURnQjtJQTJENUJDLFFBQVEsRUFBRSxnQkEzRGtCO0lBNkQ1QkMsYUFBYSxFQUFFLHFCQTdEYTtJQThENUJDLFlBQVksRUFBRSxvQkE5RGM7SUErRDVCQyxXQUFXLEVBQUUsbUJBL0RlO0lBZ0U1QkMsU0FBUyxFQUFFLGlCQWhFaUI7SUFrRTVCQyx1QkFBdUIsRUFBRSwrQkFsRUc7SUFtRTVCQyx5QkFBeUIsRUFBRSxpQ0FuRUM7SUFvRTVCQyxtQkFBbUIsRUFBRSwyQkFwRU87SUFzRTVCQyxNQUFNLEVBQUUsY0F0RW9CO0lBd0U1QkMsZUFBZSxFQUFFLHVCQXhFVztJQTBFNUJDLDZCQUE2QixFQUFFLHFDQTFFSDtJQTJFNUJDLGlDQUFpQyxFQUFFLHlDQTNFUDtJQTRFNUJDLDRCQUE0QixFQUFFO0VBNUVGLENBQTlCOztFQStFQSxJQUFJLENBQUNDLGVBQUEsQ0FBRUMsR0FBRixDQUFNckQscUJBQU4sRUFBNkJGLGFBQTdCLENBQUwsRUFBa0Q7SUFDaEQsTUFBTSxJQUFJd0QsY0FBQSxDQUFPQyxtQkFBWCxDQUFnQywyQkFBMEJ6RCxhQUFjLEtBQXpDLEdBQ2xDLFFBQU9zRCxlQUFBLENBQUVJLElBQUYsQ0FBT3hELHFCQUFQLENBQThCLDBCQURsQyxDQUFOO0VBRUQ7O0VBQ0QsT0FBTyxNQUFNLEtBQUtBLHFCQUFxQixDQUFDRixhQUFELENBQTFCLEVBQTJDQyxJQUEzQyxDQUFiO0FBQ0QsQ0FyRkQ7O2VBdUZlSCxVIn0=
73
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiZXhlY3V0ZU1vYmlsZSIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsInN3aXBlIiwic2Nyb2xsVG9QYWdlIiwibmF2aWdhdGVUbyIsImNsaWNrQWN0aW9uIiwiZGV2aWNlSW5mbyIsImlzVG9hc3RWaXNpYmxlIiwib3BlbkRyYXdlciIsImNsb3NlRHJhd2VyIiwic2V0RGF0ZSIsInNldFRpbWUiLCJnZXREZXZpY2VUaW1lIiwiYmFja2Rvb3IiLCJmbGFzaEVsZW1lbnQiLCJ1aWF1dG9tYXRvciIsInVpYXV0b21hdG9yUGFnZVNvdXJjZSIsIndlYkF0b21zIiwiZ2V0Q29udGV4dHMiLCJkaXNtaXNzQXV0b2ZpbGwiLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwicmVnaXN0ZXJJZGxpbmdSZXNvdXJjZXMiLCJ1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzIiwibGlzdElkbGluZ1Jlc291cmNlcyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl8iLCJoYXMiLCJlcnJvcnMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgc3dpcGU6ICdtb2JpbGVTd2lwZScsXG4gICAgc2Nyb2xsVG9QYWdlOiAnbW9iaWxlU2Nyb2xsVG9QYWdlJyxcbiAgICBuYXZpZ2F0ZVRvOiAnbW9iaWxlTmF2aWdhdGVUbycsXG4gICAgY2xpY2tBY3Rpb246ICdtb2JpbGVDbGlja0FjdGlvbicsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBpc1RvYXN0VmlzaWJsZTogJ21vYmlsZUlzVG9hc3RWaXNpYmxlJyxcblxuICAgIG9wZW5EcmF3ZXI6ICdtb2JpbGVPcGVuRHJhd2VyJyxcbiAgICBjbG9zZURyYXdlcjogJ21vYmlsZUNsb3NlRHJhd2VyJyxcblxuICAgIHNldERhdGU6ICdtb2JpbGVTZXREYXRlJyxcbiAgICBzZXRUaW1lOiAnbW9iaWxlU2V0VGltZScsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBiYWNrZG9vcjogJ21vYmlsZUJhY2tkb29yJyxcblxuICAgIGZsYXNoRWxlbWVudDogJ21vYmlsZUZsYXNoRWxlbWVudCcsXG5cbiAgICB1aWF1dG9tYXRvcjogJ21vYmlsZVVpYXV0b21hdG9yJyxcbiAgICB1aWF1dG9tYXRvclBhZ2VTb3VyY2U6ICdtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UnLFxuXG4gICAgd2ViQXRvbXM6ICdtb2JpbGVXZWJBdG9tcycsXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBkaXNtaXNzQXV0b2ZpbGw6ICdtb2JpbGVEaXNtaXNzQXV0b2ZpbGwnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIHB1c2hGaWxlOiAnbW9iaWxlUHVzaEZpbGUnLFxuICAgIHB1bGxGaWxlOiAnbW9iaWxlUHVsbEZpbGUnLFxuICAgIHB1bGxGb2xkZXI6ICdtb2JpbGVQdWxsRm9sZGVyJyxcbiAgICBkZWxldGVGaWxlOiAnbW9iaWxlRGVsZXRlRmlsZScsXG5cbiAgICBpc0FwcEluc3RhbGxlZDogJ21vYmlsZUlzQXBwSW5zdGFsbGVkJyxcbiAgICBxdWVyeUFwcFN0YXRlOiAnbW9iaWxlUXVlcnlBcHBTdGF0ZScsXG4gICAgYWN0aXZhdGVBcHA6ICdtb2JpbGVBY3RpdmF0ZUFwcCcsXG4gICAgcmVtb3ZlQXBwOiAnbW9iaWxlUmVtb3ZlQXBwJyxcbiAgICB0ZXJtaW5hdGVBcHA6ICdtb2JpbGVUZXJtaW5hdGVBcHAnLFxuICAgIGluc3RhbGxBcHA6ICdtb2JpbGVJbnN0YWxsQXBwJyxcbiAgICBjbGVhckFwcDogJ21vYmlsZUNsZWFyQXBwJyxcblxuICAgIHN0YXJ0QWN0aXZpdHk6ICdtb2JpbGVTdGFydEFjdGl2aXR5JyxcbiAgICBzdGFydFNlcnZpY2U6ICdtb2JpbGVTdGFydFNlcnZpY2UnLFxuICAgIHN0b3BTZXJ2aWNlOiAnbW9iaWxlU3RvcFNlcnZpY2UnLFxuICAgIGJyb2FkY2FzdDogJ21vYmlsZUJyb2FkY2FzdCcsXG5cbiAgICByZWdpc3RlcklkbGluZ1Jlc291cmNlczogJ21vYmlsZVJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzJyxcbiAgICB1bnJlZ2lzdGVySWRsaW5nUmVzb3VyY2VzOiAnbW9iaWxlVW5yZWdpc3RlcklkbGluZ1Jlc291cmNlcycsXG4gICAgbGlzdElkbGluZ1Jlc291cmNlczogJ21vYmlsZUxpc3RJZGxpbmdSZXNvdXJjZXMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUVyQkEsVUFBVSxDQUFDQyxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFQyxhQUFhLEVBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNqRixNQUFNQyxxQkFBcUIsR0FBRztJQUM1QkMsS0FBSyxFQUFFLGFBQWE7SUFFcEJDLHFCQUFxQixFQUFFLDZCQUE2QjtJQUVwREMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxpQkFBaUIsRUFBRSx5QkFBeUI7SUFDNUNDLGNBQWMsRUFBRSxzQkFBc0I7SUFFdENDLG9CQUFvQixFQUFFLDRCQUE0QjtJQUNsREMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxLQUFLLEVBQUUsYUFBYTtJQUNwQkMsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsV0FBVyxFQUFFLG1CQUFtQjtJQUVoQ0MsVUFBVSxFQUFFLHFCQUFxQjtJQUVqQ0MsY0FBYyxFQUFFLHNCQUFzQjtJQUV0Q0MsVUFBVSxFQUFFLGtCQUFrQjtJQUM5QkMsV0FBVyxFQUFFLG1CQUFtQjtJQUVoQ0MsT0FBTyxFQUFFLGVBQWU7SUFDeEJDLE9BQU8sRUFBRSxlQUFlO0lBRXhCQyxhQUFhLEVBQUUscUJBQXFCO0lBRXBDQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxZQUFZLEVBQUUsb0JBQW9CO0lBRWxDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxxQkFBcUIsRUFBRSw2QkFBNkI7SUFFcERDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUJDLFdBQVcsRUFBRSxtQkFBbUI7SUFFaENDLGVBQWUsRUFBRSx1QkFBdUI7SUFFeENDLGdCQUFnQixFQUFFLHdCQUF3QjtJQUUxQ0MsT0FBTyxFQUFFLGVBQWU7SUFFeEJDLFNBQVMsRUFBRSxXQUFXO0lBRXRCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxVQUFVLEVBQUUsa0JBQWtCO0lBRTlCQyxjQUFjLEVBQUUsc0JBQXNCO0lBQ3RDQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBQzVCQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBRTVCQyx1QkFBdUIsRUFBRSwrQkFBK0I7SUFDeERDLHlCQUF5QixFQUFFLGlDQUFpQztJQUM1REMsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxNQUFNLEVBQUUsY0FBYztJQUV0QkMsZUFBZSxFQUFFLHVCQUF1QjtJQUV4Q0MsNkJBQTZCLEVBQUUscUNBQXFDO0lBQ3BFQyxpQ0FBaUMsRUFBRSx5Q0FBeUM7SUFDNUVDLDRCQUE0QixFQUFFO0VBQ2hDLENBQUM7RUFFRCxJQUFJLENBQUNDLGVBQUMsQ0FBQ0MsR0FBRyxDQUFDckQscUJBQXFCLEVBQUVGLGFBQWEsQ0FBQyxFQUFFO0lBQ2hELE1BQU0sSUFBSXdELGNBQU0sQ0FBQ0MsbUJBQW1CLENBQUUsMkJBQTBCekQsYUFBYyxLQUFJLEdBQy9FLFFBQU9zRCxlQUFDLENBQUNJLElBQUksQ0FBQ3hELHFCQUFxQixDQUFFLDBCQUF5QixDQUFDO0VBQ3BFO0VBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ0EscUJBQXFCLENBQUNGLGFBQWEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQztBQUMvRCxDQUFDO0FBQUMsZUFFYUgsVUFBVTtBQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","names":["extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA,MAAMA,UAAU,GAAG,EAAnB;;AAEAA,UAAU,CAACC,aAAX,GAA2B,eAAeA,aAAf,CAA8BC,aAA9B,EAA6CC,IAAI,GAAG,EAApD,EAAwD;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aADqB;IAG5BC,qBAAqB,EAAE,6BAHK;IAK5BC,mBAAmB,EAAE,2BALO;IAO5BC,iBAAiB,EAAE,yBAPS;IAQ5BC,cAAc,EAAE,sBARY;IAU5BC,oBAAoB,EAAE,4BAVM;IAW5BC,mBAAmB,EAAE,2BAXO;IAa5BC,KAAK,EAAE,aAbqB;IAc5BC,YAAY,EAAE,oBAdc;IAe5BC,UAAU,EAAE,kBAfgB;IAgB5BC,WAAW,EAAE,mBAhBe;IAkB5BC,UAAU,EAAE,qBAlBgB;IAoB5BC,cAAc,EAAE,sBApBY;IAsB5BC,UAAU,EAAE,kBAtBgB;IAuB5BC,WAAW,EAAE,mBAvBe;IAyB5BC,OAAO,EAAE,eAzBmB;IA0B5BC,OAAO,EAAE,eA1BmB;IA4B5BC,aAAa,EAAE,qBA5Ba;IA8B5BC,QAAQ,EAAE,gBA9BkB;IAgC5BC,YAAY,EAAE,oBAhCc;IAkC5BC,WAAW,EAAE,mBAlCe;IAmC5BC,qBAAqB,EAAE,6BAnCK;IAqC5BC,QAAQ,EAAE,gBArCkB;IAsC5BC,WAAW,EAAE,mBAtCe;IAwC5BC,eAAe,EAAE,uBAxCW;IA0C5BC,gBAAgB,EAAE,wBA1CU;IA4C5BC,OAAO,EAAE,eA5CmB;IA8C5BC,SAAS,EAAE,WA9CiB;IAgD5BC,QAAQ,EAAE,gBAhDkB;IAiD5BC,QAAQ,EAAE,gBAjDkB;IAkD5BC,UAAU,EAAE,kBAlDgB;IAmD5BC,UAAU,EAAE,kBAnDgB;IAqD5BC,cAAc,EAAE,sBArDY;IAsD5BC,aAAa,EAAE,qBAtDa;IAuD5BC,WAAW,EAAE,mBAvDe;IAwD5BC,SAAS,EAAE,iBAxDiB;IAyD5BC,YAAY,EAAE,oBAzDc;IA0D5BC,UAAU,EAAE,kBA1DgB;IA2D5BC,QAAQ,EAAE,gBA3DkB;IA6D5BC,aAAa,EAAE,qBA7Da;IA8D5BC,YAAY,EAAE,oBA9Dc;IA+D5BC,WAAW,EAAE,mBA/De;IAgE5BC,SAAS,EAAE,iBAhEiB;IAkE5BC,uBAAuB,EAAE,+BAlEG;IAmE5BC,yBAAyB,EAAE,iCAnEC;IAoE5BC,mBAAmB,EAAE,2BApEO;IAsE5BC,MAAM,EAAE,cAtEoB;IAwE5BC,eAAe,EAAE,uBAxEW;IA0E5BC,6BAA6B,EAAE,qCA1EH;IA2E5BC,iCAAiC,EAAE,yCA3EP;IA4E5BC,4BAA4B,EAAE;EA5EF,CAA9B;;EA+EA,IAAI,CAACC,eAAA,CAAEC,GAAF,CAAMrD,qBAAN,EAA6BF,aAA7B,CAAL,EAAkD;IAChD,MAAM,IAAIwD,cAAA,CAAOC,mBAAX,CAAgC,2BAA0BzD,aAAc,KAAzC,GAClC,QAAOsD,eAAA,CAAEI,IAAF,CAAOxD,qBAAP,CAA8B,0BADlC,CAAN;EAED;;EACD,OAAO,MAAM,KAAKA,qBAAqB,CAACF,aAAD,CAA1B,EAA2CC,IAA3C,CAAb;AACD,CArFD;;eAuFeH,U"}
1
+ {"version":3,"file":"execute.js","names":["extensions","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","performEditorAction","changePermissions","getPermissions","startScreenStreaming","stopScreenStreaming","swipe","scrollToPage","navigateTo","clickAction","deviceInfo","isToastVisible","openDrawer","closeDrawer","setDate","setTime","getDeviceTime","backdoor","flashElement","uiautomator","uiautomatorPageSource","webAtoms","getContexts","dismissAutofill","getNotifications","listSms","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","registerIdlingResources","unregisterIdlingResources","listIdlingResources","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","_","has","errors","UnknownCommandError","keys"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n swipe: 'mobileSwipe',\n scrollToPage: 'mobileScrollToPage',\n navigateTo: 'mobileNavigateTo',\n clickAction: 'mobileClickAction',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n isToastVisible: 'mobileIsToastVisible',\n\n openDrawer: 'mobileOpenDrawer',\n closeDrawer: 'mobileCloseDrawer',\n\n setDate: 'mobileSetDate',\n setTime: 'mobileSetTime',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n backdoor: 'mobileBackdoor',\n\n flashElement: 'mobileFlashElement',\n\n uiautomator: 'mobileUiautomator',\n uiautomatorPageSource: 'mobileUiautomatorPageSource',\n\n webAtoms: 'mobileWebAtoms',\n getContexts: 'mobileGetContexts',\n\n dismissAutofill: 'mobileDismissAutofill',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n registerIdlingResources: 'mobileRegisterIdlingResources',\n unregisterIdlingResources: 'mobileUnregisterIdlingResources',\n listIdlingResources: 'mobileListIdlingResources',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA;AACA;AAEA,MAAMA,UAAU,GAAG,CAAC,CAAC;AAErBA,UAAU,CAACC,aAAa,GAAG,eAAeA,aAAa,CAAEC,aAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aAAa;IAEpBC,qBAAqB,EAAE,6BAA6B;IAEpDC,mBAAmB,EAAE,2BAA2B;IAEhDC,iBAAiB,EAAE,yBAAyB;IAC5CC,cAAc,EAAE,sBAAsB;IAEtCC,oBAAoB,EAAE,4BAA4B;IAClDC,mBAAmB,EAAE,2BAA2B;IAEhDC,KAAK,EAAE,aAAa;IACpBC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,UAAU,EAAE,qBAAqB;IAEjCC,cAAc,EAAE,sBAAsB;IAEtCC,UAAU,EAAE,kBAAkB;IAC9BC,WAAW,EAAE,mBAAmB;IAEhCC,OAAO,EAAE,eAAe;IACxBC,OAAO,EAAE,eAAe;IAExBC,aAAa,EAAE,qBAAqB;IAEpCC,QAAQ,EAAE,gBAAgB;IAE1BC,YAAY,EAAE,oBAAoB;IAElCC,WAAW,EAAE,mBAAmB;IAChCC,qBAAqB,EAAE,6BAA6B;IAEpDC,QAAQ,EAAE,gBAAgB;IAC1BC,WAAW,EAAE,mBAAmB;IAEhCC,eAAe,EAAE,uBAAuB;IAExCC,gBAAgB,EAAE,wBAAwB;IAE1CC,OAAO,EAAE,eAAe;IAExBC,SAAS,EAAE,WAAW;IAEtBC,QAAQ,EAAE,gBAAgB;IAC1BC,QAAQ,EAAE,gBAAgB;IAC1BC,UAAU,EAAE,kBAAkB;IAC9BC,UAAU,EAAE,kBAAkB;IAE9BC,cAAc,EAAE,sBAAsB;IACtCC,aAAa,EAAE,qBAAqB;IACpCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAC5BC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,QAAQ,EAAE,gBAAgB;IAE1BC,aAAa,EAAE,qBAAqB;IACpCC,YAAY,EAAE,oBAAoB;IAClCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAE5BC,uBAAuB,EAAE,+BAA+B;IACxDC,yBAAyB,EAAE,iCAAiC;IAC5DC,mBAAmB,EAAE,2BAA2B;IAEhDC,MAAM,EAAE,cAAc;IAEtBC,eAAe,EAAE,uBAAuB;IAExCC,6BAA6B,EAAE,qCAAqC;IACpEC,iCAAiC,EAAE,yCAAyC;IAC5EC,4BAA4B,EAAE;EAChC,CAAC;EAED,IAAI,CAACC,eAAC,CAACC,GAAG,CAACrD,qBAAqB,EAAEF,aAAa,CAAC,EAAE;IAChD,MAAM,IAAIwD,cAAM,CAACC,mBAAmB,CAAE,2BAA0BzD,aAAc,KAAI,GAC/E,QAAOsD,eAAC,CAACI,IAAI,CAACxD,qBAAqB,CAAE,0BAAyB,CAAC;EACpE;EACA,OAAO,MAAM,IAAI,CAACA,qBAAqB,CAACF,aAAa,CAAC,CAAC,CAACC,IAAI,CAAC;AAC/D,CAAC;AAAC,eAEaH,UAAU;AAAA"}
@@ -1,43 +1,30 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.helpers = exports.default = exports.commands = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
10
  var _support = require("appium/support");
15
-
16
11
  var _validate = _interopRequireDefault(require("validate.js"));
17
-
18
12
  var _driver = require("appium/driver");
19
-
20
13
  var _utils = require("../utils");
21
-
22
14
  const commands = {},
23
- helpers = {},
24
- extensions = {};
15
+ helpers = {},
16
+ extensions = {};
25
17
  exports.helpers = helpers;
26
18
  exports.commands = commands;
27
-
28
19
  function assertRequiredOptions(options, requiredOptionNames) {
29
20
  if (!_lodash.default.isArray(requiredOptionNames)) {
30
21
  requiredOptionNames = [requiredOptionNames];
31
22
  }
32
-
33
23
  const presentOptionNames = _lodash.default.keys(options);
34
-
35
24
  const missingOptionNames = _lodash.default.difference(requiredOptionNames, presentOptionNames);
36
-
37
25
  if (_lodash.default.isEmpty(missingOptionNames)) {
38
26
  return options;
39
27
  }
40
-
41
28
  throw new Error(`The following options are required: ${JSON.stringify(missingOptionNames)}. ` + `You have only provided: ${JSON.stringify(presentOptionNames)}`);
42
29
  }
43
30
 
@@ -52,11 +39,9 @@ commands.closeApp = async function closeApp() {
52
39
  commands.reset = async function reset() {
53
40
  throw new _driver.errors.UnsupportedOperationError('Please quit the session and create a new one ' + 'in order to close and launch the application under test');
54
41
  };
55
-
56
42
  commands.getClipboard = async function getClipboard() {
57
43
  return (await this.adb.getApiLevel()) < 29 ? await this.espresso.jwproxy.command('/appium/device/get_clipboard', 'POST', {}) : await this.adb.getClipboard();
58
44
  };
59
-
60
45
  commands.mobilePerformEditorAction = async function mobilePerformEditorAction(opts = {}) {
61
46
  const {
62
47
  action
@@ -65,7 +50,6 @@ commands.mobilePerformEditorAction = async function mobilePerformEditorAction(op
65
50
  action
66
51
  });
67
52
  };
68
-
69
53
  commands.mobileSwipe = async function mobileSwipe(opts = {}) {
70
54
  const {
71
55
  direction,
@@ -84,27 +68,22 @@ commands.mobileSwipe = async function mobileSwipe(opts = {}) {
84
68
  precisionDescriber
85
69
  });
86
70
  };
87
-
88
71
  commands.mobileGetDeviceInfo = async function mobileGetDeviceInfo() {
89
72
  return await this.espresso.jwproxy.command('/appium/device/info', 'GET');
90
73
  };
91
-
92
74
  commands.mobileIsToastVisible = async function mobileIsToastVisible(opts = {}) {
93
75
  const {
94
76
  text,
95
77
  isRegexp
96
78
  } = opts;
97
-
98
79
  if (!_support.util.hasValue(text)) {
99
80
  throw new _driver.errors.InvalidArgumentError(`'text' argument is mandatory`);
100
81
  }
101
-
102
82
  return await this.espresso.jwproxy.command('/appium/execute_mobile/is_toast_displayed', 'POST', {
103
83
  text,
104
84
  isRegexp
105
85
  });
106
86
  };
107
-
108
87
  commands.mobileOpenDrawer = async function mobileOpenDrawer(opts = {}) {
109
88
  const {
110
89
  element,
@@ -114,7 +93,6 @@ commands.mobileOpenDrawer = async function mobileOpenDrawer(opts = {}) {
114
93
  gravity
115
94
  });
116
95
  };
117
-
118
96
  commands.mobileCloseDrawer = async function mobileCloseDrawer(opts = {}) {
119
97
  const {
120
98
  element,
@@ -124,7 +102,6 @@ commands.mobileCloseDrawer = async function mobileCloseDrawer(opts = {}) {
124
102
  gravity
125
103
  });
126
104
  };
127
-
128
105
  commands.mobileSetDate = async function mobileSetDate(opts = {}) {
129
106
  const {
130
107
  element,
@@ -138,7 +115,6 @@ commands.mobileSetDate = async function mobileSetDate(opts = {}) {
138
115
  dayOfMonth
139
116
  });
140
117
  };
141
-
142
118
  commands.mobileSetTime = async function mobileSetTime(opts = {}) {
143
119
  const {
144
120
  element,
@@ -150,18 +126,15 @@ commands.mobileSetTime = async function mobileSetTime(opts = {}) {
150
126
  minutes
151
127
  });
152
128
  };
153
-
154
129
  commands.mobileNavigateTo = async function mobileNavigateTo(opts = {}) {
155
130
  let {
156
131
  element,
157
132
  menuItemId
158
133
  } = assertRequiredOptions(opts, ['menuItemId', 'element']);
159
134
  let menuItemIdAsNumber = parseInt(menuItemId, 10);
160
-
161
135
  if (_lodash.default.isNaN(menuItemIdAsNumber) || menuItemIdAsNumber < 0) {
162
136
  throw new _driver.errors.InvalidArgumentError(`'menuItemId' must be a non-negative number. Found ${menuItemId}`);
163
137
  }
164
-
165
138
  return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/navigate_to`, 'POST', {
166
139
  menuItemId
167
140
  });
@@ -171,11 +144,9 @@ commands.mobileWebAtoms = async function mobileWebAtoms(opts = {}) {
171
144
  opts = assertRequiredOptions(opts, ['methodChain']);
172
145
  return await this.espresso.jwproxy.command(`/appium/execute_mobile/web_atoms`, 'POST', opts);
173
146
  };
174
-
175
147
  commands.getDisplayDensity = async function getDisplayDensity() {
176
148
  return await this.espresso.jwproxy.command('/appium/device/display_density', 'GET', {});
177
149
  };
178
-
179
150
  commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
180
151
  const scrollToTypes = ['first', 'last', 'left', 'right'];
181
152
  const res = (0, _validate.default)(opts, {
@@ -196,22 +167,18 @@ commands.mobileScrollToPage = async function mobileScrollToPage(opts = {}) {
196
167
  }
197
168
  }
198
169
  });
199
-
200
170
  if (_support.util.hasValue(res)) {
201
171
  throw new _driver.errors.InvalidArgumentError(`Invalid scrollTo parameters: ${JSON.stringify(res)}`);
202
172
  }
203
-
204
173
  const {
205
174
  element,
206
175
  scrollTo,
207
176
  scrollToPage,
208
177
  smoothScroll
209
178
  } = opts;
210
-
211
179
  if (_support.util.hasValue(scrollTo) && _support.util.hasValue(scrollToPage)) {
212
180
  this.log.warn(`'scrollTo' and 'scrollToPage' where both provided. Defaulting to 'scrollTo'`);
213
181
  }
214
-
215
182
  return await this.espresso.jwproxy.command(`/appium/execute_mobile/${_support.util.unwrapElement(element)}/scroll_to_page`, 'POST', {
216
183
  scrollTo,
217
184
  scrollToPage,
@@ -225,11 +192,9 @@ commands.mobileBackdoor = async function mobileBackdoor(opts = {}) {
225
192
  target,
226
193
  methods
227
194
  } = opts;
228
-
229
195
  if (target === 'element') {
230
196
  assertRequiredOptions(opts, ['elementId']);
231
197
  }
232
-
233
198
  const {
234
199
  elementId: targetElement
235
200
  } = opts;
@@ -290,13 +255,11 @@ commands.mobileClickAction = async function mobileClickAction(opts = {}) {
290
255
  buttonState
291
256
  });
292
257
  };
293
-
294
258
  commands.updateSettings = async function updateSettings(settings) {
295
259
  return await this.espresso.jwproxy.command(`/appium/settings`, 'POST', {
296
260
  settings
297
261
  });
298
262
  };
299
-
300
263
  commands.getSettings = async function getSettings() {
301
264
  return await this.espresso.jwproxy.command(`/appium/settings`, 'GET');
302
265
  };
@@ -324,7 +287,6 @@ commands.mobileStartActivity = async function mobileStartActivity(opts = {}) {
324
287
  optionalActivityArguments
325
288
  });
326
289
  };
327
-
328
290
  commands.startActivity = async function startActivity(appPackage, appActivity, appWaitPackage, appWaitActivity) {
329
291
  appPackage = appPackage || this.caps.appPackage;
330
292
  appWaitPackage = appWaitPackage || appPackage;
@@ -337,15 +299,13 @@ commands.startActivity = async function startActivity(appPackage, appActivity, a
337
299
  });
338
300
  await this.adb.waitForActivity(appWaitPackage, appWaitActivity);
339
301
  };
340
-
341
302
  commands.mobileDismissAutofill = async function mobileDismissAutofill(opts = {}) {
342
303
  const {
343
304
  element
344
305
  } = assertRequiredOptions(opts, ['element']);
345
306
  await this.espresso.jwproxy.command(`/session/:sessionId/appium/execute_mobile/${_support.util.unwrapElement(element)}/dismiss_autofill`, 'POST', {});
346
307
  };
347
-
348
308
  Object.assign(extensions, commands, helpers);
349
309
  var _default = extensions;
350
310
  exports.default = _default;
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiYXNzZXJ0UmVxdWlyZWRPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVJc1RvYXN0VmlzaWJsZSIsInRleHQiLCJpc1JlZ2V4cCIsImhhc1ZhbHVlIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVPcGVuRHJhd2VyIiwiZ3Jhdml0eSIsIm1vYmlsZUNsb3NlRHJhd2VyIiwibW9iaWxlU2V0RGF0ZSIsInllYXIiLCJtb250aE9mWWVhciIsImRheU9mTW9udGgiLCJtb2JpbGVTZXRUaW1lIiwiaG91cnMiLCJtaW51dGVzIiwibW9iaWxlTmF2aWdhdGVUbyIsIm1lbnVJdGVtSWQiLCJtZW51SXRlbUlkQXNOdW1iZXIiLCJwYXJzZUludCIsImlzTmFOIiwibW9iaWxlV2ViQXRvbXMiLCJnZXREaXNwbGF5RGVuc2l0eSIsIm1vYmlsZVNjcm9sbFRvUGFnZSIsInNjcm9sbFRvVHlwZXMiLCJyZXMiLCJ2YWxpZGF0ZSIsInByZXNlbmNlIiwic2Nyb2xsVG8iLCJpbmNsdXNpb24iLCJ3aXRoaW4iLCJtZXNzYWdlIiwiam9pbiIsInNjcm9sbFRvUGFnZSIsIm51bWVyaWNhbGl0eSIsIm9ubHlJbnRlZ2VyIiwiZ3JlYXRlclRoYW5PckVxdWFsVG8iLCJzbW9vdGhTY3JvbGwiLCJsb2ciLCJ3YXJuIiwibW9iaWxlQmFja2Rvb3IiLCJ0YXJnZXQiLCJtZXRob2RzIiwiZWxlbWVudElkIiwidGFyZ2V0RWxlbWVudCIsIm1vYmlsZVVpYXV0b21hdG9yIiwic3RyYXRlZ3kiLCJsb2NhdG9yIiwiaW5kZXgiLCJtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJtb2JpbGVGbGFzaEVsZW1lbnQiLCJkdXJhdGlvbk1pbGxpcyIsInJlcGVhdENvdW50IiwibW9iaWxlQ2xpY2tBY3Rpb24iLCJ0YXBwZXIiLCJjb29yZGluYXRlc1Byb3ZpZGVyIiwiaW5wdXREZXZpY2UiLCJidXR0b25TdGF0ZSIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJjYXBzIiwiYXBwQWN0aXZpdHkiLCJsb2NhbGUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsIm9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMiLCJzdGFydEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJxdWFsaWZ5QWN0aXZpdHlOYW1lIiwiZGVidWciLCJ3YWl0Rm9yQWN0aXZpdHkiLCJtb2JpbGVEaXNtaXNzQXV0b2ZpbGwiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICd2YWxpZGF0ZS5qcyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBhc3NlcnRSZXF1aXJlZE9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9wZXJmb3JtX2VkaXRvcl9hY3Rpb24nLCAnUE9TVCcsIHthY3Rpb259KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVN3aXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZGlyZWN0aW9uLCBlbGVtZW50LCBzd2lwZXIsIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb25EZXNjcmliZXJ9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zd2lwZWAsICdQT1NUJywge1xuICAgIGRpcmVjdGlvbiwgZWxlbWVudCwgc3dpcGVyLCBzdGFydENvb3JkaW5hdGVzLCBlbmRDb29yZGluYXRlcywgcHJlY2lzaW9uRGVzY3JpYmVyXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlR2V0RGV2aWNlSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldERldmljZUluZm8gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc1RvYXN0VmlzaWJsZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzVG9hc3RWaXNpYmxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3RleHQsIGlzUmVnZXhwfSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0ZXh0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvaXNfdG9hc3RfZGlzcGxheWVkJywgJ1BPU1QnLCB7XG4gICAgdGV4dCxcbiAgICBpc1JlZ2V4cCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVPcGVuRHJhd2VyID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlT3BlbkRyYXdlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBncmF2aXR5fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Nsb3NlX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXREYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0RGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB5ZWFyLCBtb250aE9mWWVhciwgZGF5T2ZNb250aH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50JywgJ3llYXInLCAnbW9udGhPZlllYXInLCAnZGF5T2ZNb250aCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF9kYXRlYCwgJ1BPU1QnLCB7XG4gICAgeWVhcixcbiAgICBtb250aE9mWWVhcixcbiAgICBkYXlPZk1vbnRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldFRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRUaW1lIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGhvdXJzLCBtaW51dGVzfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydtZW51SXRlbUlkJywgJ2VsZW1lbnQnXSk7XG5cbiAgbGV0IG1lbnVJdGVtSWRBc051bWJlciA9IHBhcnNlSW50KG1lbnVJdGVtSWQsIDEwKTtcbiAgaWYgKF8uaXNOYU4obWVudUl0ZW1JZEFzTnVtYmVyKSB8fCBtZW51SXRlbUlkQXNOdW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ21lbnVJdGVtSWQnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBGb3VuZCAke21lbnVJdGVtSWR9YCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L25hdmlnYXRlX3RvYCwgJ1BPU1QnLCB7XG4gICAgbWVudUl0ZW1JZFxuICB9KTtcbn07XG5cbi8qKlxuICogUnVucyBhIGNoYWluIG9mIEVzcHJlc3NvIHdlYiBhdG9tcyAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3RyYWluaW5nL3Rlc3RpbmcvZXNwcmVzc28vd2ViIGZvciByZWZlcmVuY2UpXG4gKlxuICogVGFrZXMgSlNPTiBvZiB0aGUgZm9ybVxuICpcbiAqIHtcbiAqICAgXCJ3ZWJ2aWV3RWxcIjogXCI8RUxFTUVOVF9JRD5cIiwgLy8gb3B0aW9uYWwgd2VidmlldyBlbGVtZW50IHRvIG9wZXJhdGUgb25cbiAqICAgXCJmb3JjZUphdmFzY3JpcHRFbmFibGVkXCI6IHRydWV8ZmFsc2UsIC8vIGlmIHdlYnZpZXcgZGlzYWJsZXMgamF2YXNjcmlwdCwgd2ViYXRvbXMgd29uJ3Qgd29yaywgdGhpcyBmb3JjZXMgaXRcbiAqICAgXCJtZXRob2RDaGFpblwiOiBbXG4gKiAgICAge1wibmFtZVwiOiBcIm1ldGhvZE5hbWVcIiwgXCJhdG9tXCI6IHtcIm5hbWVcIjogXCJhdG9tTmFtZVwiLCBcImFyZ3NcIjogW1wiYXJnMVwiLCBcImFyZzJcIiwgLi4uXX19LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVXZWJBdG9tcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYkF0b21zIChvcHRzID0ge30pIHtcbiAgb3B0cyA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ21ldGhvZENoYWluJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvd2ViX2F0b21zYCwgJ1BPU1QnLCBvcHRzKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb1BhZ2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb1BhZ2UgKG9wdHMgPSB7fSkge1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzXG4gIGNvbnN0IHNjcm9sbFRvVHlwZXMgPSBbJ2ZpcnN0JywgJ2xhc3QnLCAnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCByZXMgPSB2YWxpZGF0ZShvcHRzLCB7XG4gICAgZWxlbWVudDoge3ByZXNlbmNlOiB0cnVlfSxcbiAgICBzY3JvbGxUbzoge1xuICAgICAgaW5jbHVzaW9uOiB7XG4gICAgICAgIHdpdGhpbjogc2Nyb2xsVG9UeXBlcyxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9cIiBtdXN0IGJlIG9uZSBvZiBcIiR7c2Nyb2xsVG9UeXBlcy5qb2luKCcsICcpfVwiIGZvdW5kICcle3ZhbHVlfSdgLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsVG9QYWdlOiB7XG4gICAgICBudW1lcmljYWxpdHk6IHtcbiAgICAgICAgb25seUludGVnZXI6IHRydWUsXG4gICAgICAgIGdyZWF0ZXJUaGFuT3JFcXVhbFRvOiAwLFxuICAgICAgICBtZXNzYWdlOiBgXCJzY3JvbGxUb1BhZ2VcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIEZvdW5kICcle3ZhbHVlfSdgXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBpZiAodXRpbC5oYXNWYWx1ZShyZXMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCBzY3JvbGxUbyBwYXJhbWV0ZXJzOiAke0pTT04uc3RyaW5naWZ5KHJlcyl9YCk7XG4gIH1cblxuICBjb25zdCB7ZWxlbWVudCwgc2Nyb2xsVG8sIHNjcm9sbFRvUGFnZSwgc21vb3RoU2Nyb2xsfSA9IG9wdHM7XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG8pICYmIHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG9QYWdlKSkge1xuICAgIHRoaXMubG9nLndhcm4oYCdzY3JvbGxUbycgYW5kICdzY3JvbGxUb1BhZ2UnIHdoZXJlIGJvdGggcHJvdmlkZWQuIERlZmF1bHRpbmcgdG8gJ3Njcm9sbFRvJ2ApO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zY3JvbGxfdG9fcGFnZWAsICdQT1NUJywge1xuICAgIHNjcm9sbFRvLFxuICAgIHNjcm9sbFRvUGFnZSxcbiAgICBzbW9vdGhTY3JvbGwsXG4gIH0pO1xufTtcblxuXG4vKipcbiAqICBBUEkgdG8gaW52b2tlIG1ldGhvZHMgZGVmaW5lZCBpbiBBbmRyb2lkIGFwcC5cbiAqXG4gKiAgRXhhbXBsZSBkYXRhXG4gKiAge1xuICogICB0YXJnZXQ6ICdhY3Rpdml0eScsXG4gKiAgIG1ldGhvZHM6XG4gKiAgICAgICAgIFtcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgIG5hbWU6IFwic29tZU1ldGhvZFwiLFxuICogICAgICAgICAgIH0sXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcImFub3RoZXJNZXRob2RcIixcbiAqICAgICAgICAgICAgICAgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgIFtcbiAqICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWU6IFwiTG9sXCIsIHR5cGU6ICdqYXZhLmxhbmcuQ2hhclNlcXVlbmNlJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiAxLCB0eXBlOiAnaW50J31cbiAqICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICB9XG4gKiAgICAgICAgIF1cbiAqIH1cbiAqXG4gKiBJbiBhYm92ZSBleGFtcGxlLCBtZXRob2QgXCJzb21lTWV0aG9kXCIgd2lsbCBiZSBpbnZva2VkIG9uICdhY3Rpdml0eScuIE9uIHRoZSByZXN1bHQsIFwiYW5vdGhlck1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZFxuICogIFwidGFyZ2V0XCIgY2FuIGJlIGVpdGhlciAnYWN0aXZpdHknLCAnYXBwbGljYXRpb24nIG9yICdlbGVtZW50J1xuICogIElmIHRhcmdldCBpcyBzZXQgdG8gJ2FwcGxpY2F0aW9uJywgbWV0aG9kcyB3aWxsIGJlIGludm9rZWQgb24gYXBwbGljYXRpb24gY2xhc3NcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhY3Rpdml0eScsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGN1cnJlbnQgYWN0aXZpdHlcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdlbGVtZW50JywgJ2VsZW1lbnRJZCcgbXVzdCBiZSBzcGVjaWZpZWRcbiAqXG4gKiAtIE9ubHkgJ1B1YmxpYycgbWV0aG9kcyBjYW4gYmUgaW52b2tlZC4gKCdvcGVuJyBtb2RpZmlyZSBpcyBuZWNlc3NhcnkgaW4gS290bGluKVxuICogLSBmb2xsb3dpbmcgcHJpbWl0aXZlIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IFwiaW50XCIsIFwiYm9vbGVhblwiLCBcImJ5dGVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJmbG9hdFwiLCBcImNoYXJcIlxuICogLSAgTm9uLXByaW1pdGl2ZSB0eXBlcyB3aXRoIGZ1bGx5IHF1YWxpZmllZCBuYW1lIFwiamF2YS5sYW5nLipcIiBpcyBhbHNvIHN1cHBvcnRlZDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWcuIFwiamF2YS5sYW5nLkNoYXJTZXF1ZW5jZVwiLCBcImphdmEubGFuZy5TdHJpbmdcIiwgXCJqYXZhLmxhbmcuSW50ZWdlclwiLCBcImphdmEubGFuZy5GbG9hdFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5Eb3VibGVcIiwgXCJqYXZhLmxhbmcuQm9vbGVhblwiLCBcImphdmEubGFuZy5Mb25nXCIsIFwiamF2YS5sYW5nLlNob3J0XCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamF2YS5sYW5nLkNoYXJhY3RlclwiIGV0Yy4uLlxuICpcbiAqXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHRhcmdldCBpcyBub3QgJ2FjdGl2aXR5JyBvciAnYXBwbGljYXRpb24nXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIGEgbWV0aG9kIGlzIG5vdCBmb3VuZCB3aXRoIGdpdmVuIGFyZ3VtZW50IHR5cGVzXG4gKlxuICogQHJldHVybiB7Kn0gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBtZXRob2QgaW4gdGhlIGludm9jYXRpb24gY2hhaW4uIElmIG1ldGhvZCByZXR1cm4gdHlwZSBpcyB2b2lkLCB0aGVuIFwiPFZPSUQ+XCIgd2lsbCBiZSByZXR1cm5lZFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlQmFja2Rvb3IgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVCYWNrZG9vciAob3B0cyA9IHt9KSB7XG4gIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnRJZCddKTtcbiAgfVxuICBjb25zdCB7ZWxlbWVudElkOiB0YXJnZXRFbGVtZW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS9iYWNrZG9vcmAsICdQT1NUJywge3RhcmdldCwgbWV0aG9kcywgdGFyZ2V0RWxlbWVudH0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZHMgdG8gZHJpdmUgb3V0IG9mIGFwcCBhcmVhcy5cbiAqICBzdHJhdGVneSBjYW4gYmUgb25lIG9mOiBcImNsYXp6XCIsIFwicmVzXCIsIFwidGV4dFwiLCBcInRleHRDb250YWluc1wiLCBcInRleHRFbmRzV2l0aFwiLCBcInRleHRTdGFydHNXaXRoXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXNjXCIsIFwiZGVzY0NvbnRhaW5zXCIsIFwiZGVzY0VuZHNXaXRoXCIsIFwiZGVzY1N0YXJ0c1dpdGhcIiwgXCJwa2dcIlxuICpcbiAqICBhY3Rpb24gY2FuIGJlIG9uZSBvZjogXCJjbGlja1wiLCBcImxvbmdDbGlja1wiLCBcImdldFRleHRcIiwgXCJnZXRDb250ZW50RGVzY3JpcHRpb25cIiwgXCJnZXRDbGFzc05hbWVcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRSZXNvdXJjZU5hbWVcIiwgXCJnZXRWaXNpYmxlQm91bmRzXCIsIFwiZ2V0VmlzaWJsZUNlbnRlclwiLCBcImdldEFwcGxpY2F0aW9uUGFja2FnZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldENoaWxkQ291bnRcIiwgXCJjbGVhclwiLCBcImlzQ2hlY2thYmxlXCIsIFwiaXNDaGVja2VkXCIsIFwiaXNDbGlja2FibGVcIiwgXCJpc0VuYWJsZWRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpc0ZvY3VzYWJsZVwiLCBcImlzRm9jdXNlZFwiLCBcImlzTG9uZ0NsaWNrYWJsZVwiLCBcImlzU2Nyb2xsYWJsZVwiLCBcImlzU2VsZWN0ZWRcIlxuICovXG5jb21tYW5kcy5tb2JpbGVVaWF1dG9tYXRvciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3N0cmF0ZWd5LCBsb2NhdG9yLCBhY3Rpb24sIGluZGV4fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3N0cmF0ZWd5JywgJ2xvY2F0b3InLCAnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvdWlhdXRvbWF0b3JgLCAnUE9TVCcsIHtzdHJhdGVneSwgbG9jYXRvciwgaW5kZXgsIGFjdGlvbn0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZCB0byByZXR1cm4gdGhlIFVJIGR1bXAgd2hlbiBBVVQgaXMgaW4gYmFja2dyb3VuZC5cbiAqIEB0aHJvd3MgIHtFcnJvcn0gaWYgdWlhdXRvbWF0b3IgdmlldyBkdW1wIGlzIHVuc3VjY2Vzc2Z1bFxuICogQHJldHVybnMge3N0cmluZ30gdWlhdXRvbWF0b3IgRE9NIHhtbCBhcyBzdHJpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yX3BhZ2Vfc291cmNlYCwgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiAgRmxhc2ggdGhlIGVsZW1lbnQgd2l0aCBnaXZlbiBpZC5cbiAqICBkdXJhdGlvbk1pbGxpcyBhbmQgcmVwZWF0Q291bnQgYXJlIG9wdGlvbmFsXG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVGbGFzaEVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGbGFzaEVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xpY2tfYWN0aW9uYCwgJ1BPU1QnLCB7XG4gICAgdGFwcGVyLCBjb29yZGluYXRlc1Byb3ZpZGVyLCBwcmVjaXNpb25EZXNjcmliZXIsIGlucHV0RGV2aWNlLCBidXR0b25TdGF0ZVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3MgKHNldHRpbmdzKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdQT1NUJywgeyBzZXR0aW5ncyB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vc2V0dGluZ3NgLCAnR0VUJyk7XG59O1xuXG4vLyBTdG9wIHByb3h5aW5nIHRvIGFueSBDaHJvbWVkcml2ZXIgYW5kIHJlZGlyZWN0IHRvIEVzcHJlc3NvXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgd2l0aCBpbnRlbnQgb3B0aW9ucywgYWN0aXZpdHkgb3B0aW9ucyBhbmQgbG9jYWxlLlxuICogIEFjdGl2aXR5IGNvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaW4gc2NvcGUgb2YgdGhlIGN1cnJlbnQgYXBwIHBhY2thZ2UuXG4gKlxuICogIGFwcEFjdGl2aXR5IGlzIG1hbmRhdG9yeVxuICpcbiAqICBsb2NhbGUsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIGFyZSBvcHRpb25hbFxuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRBY3Rpdml0eSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgY29uc3Qge1xuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydhcHBBY3Rpdml0eSddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpIHtcbiAgLy8gaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXRcbiAgLy8gcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBFc3ByZXNzb1xuICBhcHBQYWNrYWdlID0gYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgYXBwV2FpdFBhY2thZ2UgPSBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlO1xuICBhcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwQWN0aXZpdHksIGFwcFBhY2thZ2UpO1xuICBhcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9JyBmb3IgcGFja2FnZSAnJHthcHBQYWNrYWdlfSdgKTtcbiAgYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5YCwgJ1BPU1QnLCB7XG4gICAgYXBwUGFja2FnZSxcbiAgICBhcHBBY3Rpdml0eSxcbiAgfSk7XG4gIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eShhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZURpc21pc3NBdXRvZmlsbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURpc21pc3NBdXRvZmlsbCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7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
311
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiYXNzZXJ0UmVxdWlyZWRPcHRpb25zIiwib3B0aW9ucyIsInJlcXVpcmVkT3B0aW9uTmFtZXMiLCJfIiwiaXNBcnJheSIsInByZXNlbnRPcHRpb25OYW1lcyIsImtleXMiLCJtaXNzaW5nT3B0aW9uTmFtZXMiLCJkaWZmZXJlbmNlIiwiaXNFbXB0eSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImxhdW5jaEFwcCIsImVycm9ycyIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJjbG9zZUFwcCIsInJlc2V0IiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJlc3ByZXNzbyIsImp3cHJveHkiLCJjb21tYW5kIiwibW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiIsIm9wdHMiLCJhY3Rpb24iLCJtb2JpbGVTd2lwZSIsImRpcmVjdGlvbiIsImVsZW1lbnQiLCJzd2lwZXIiLCJzdGFydENvb3JkaW5hdGVzIiwiZW5kQ29vcmRpbmF0ZXMiLCJwcmVjaXNpb25EZXNjcmliZXIiLCJ1dGlsIiwidW53cmFwRWxlbWVudCIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVJc1RvYXN0VmlzaWJsZSIsInRleHQiLCJpc1JlZ2V4cCIsImhhc1ZhbHVlIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJtb2JpbGVPcGVuRHJhd2VyIiwiZ3Jhdml0eSIsIm1vYmlsZUNsb3NlRHJhd2VyIiwibW9iaWxlU2V0RGF0ZSIsInllYXIiLCJtb250aE9mWWVhciIsImRheU9mTW9udGgiLCJtb2JpbGVTZXRUaW1lIiwiaG91cnMiLCJtaW51dGVzIiwibW9iaWxlTmF2aWdhdGVUbyIsIm1lbnVJdGVtSWQiLCJtZW51SXRlbUlkQXNOdW1iZXIiLCJwYXJzZUludCIsImlzTmFOIiwibW9iaWxlV2ViQXRvbXMiLCJnZXREaXNwbGF5RGVuc2l0eSIsIm1vYmlsZVNjcm9sbFRvUGFnZSIsInNjcm9sbFRvVHlwZXMiLCJyZXMiLCJ2YWxpZGF0ZSIsInByZXNlbmNlIiwic2Nyb2xsVG8iLCJpbmNsdXNpb24iLCJ3aXRoaW4iLCJtZXNzYWdlIiwiam9pbiIsInNjcm9sbFRvUGFnZSIsIm51bWVyaWNhbGl0eSIsIm9ubHlJbnRlZ2VyIiwiZ3JlYXRlclRoYW5PckVxdWFsVG8iLCJzbW9vdGhTY3JvbGwiLCJsb2ciLCJ3YXJuIiwibW9iaWxlQmFja2Rvb3IiLCJ0YXJnZXQiLCJtZXRob2RzIiwiZWxlbWVudElkIiwidGFyZ2V0RWxlbWVudCIsIm1vYmlsZVVpYXV0b21hdG9yIiwic3RyYXRlZ3kiLCJsb2NhdG9yIiwiaW5kZXgiLCJtb2JpbGVVaWF1dG9tYXRvclBhZ2VTb3VyY2UiLCJtb2JpbGVGbGFzaEVsZW1lbnQiLCJkdXJhdGlvbk1pbGxpcyIsInJlcGVhdENvdW50IiwibW9iaWxlQ2xpY2tBY3Rpb24iLCJ0YXBwZXIiLCJjb29yZGluYXRlc1Byb3ZpZGVyIiwiaW5wdXREZXZpY2UiLCJidXR0b25TdGF0ZSIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlU3RhcnRBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJjYXBzIiwiYXBwQWN0aXZpdHkiLCJsb2NhbGUiLCJvcHRpb25hbEludGVudEFyZ3VtZW50cyIsIm9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHMiLCJzdGFydEFjdGl2aXR5IiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJxdWFsaWZ5QWN0aXZpdHlOYW1lIiwiZGVidWciLCJ3YWl0Rm9yQWN0aXZpdHkiLCJtb2JpbGVEaXNtaXNzQXV0b2ZpbGwiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICd2YWxpZGF0ZS5qcyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBhc3NlcnRSZXF1aXJlZE9wdGlvbnMgKG9wdGlvbnMsIHJlcXVpcmVkT3B0aW9uTmFtZXMpIHtcbiAgaWYgKCFfLmlzQXJyYXkocmVxdWlyZWRPcHRpb25OYW1lcykpIHtcbiAgICByZXF1aXJlZE9wdGlvbk5hbWVzID0gW3JlcXVpcmVkT3B0aW9uTmFtZXNdO1xuICB9XG4gIGNvbnN0IHByZXNlbnRPcHRpb25OYW1lcyA9IF8ua2V5cyhvcHRpb25zKTtcbiAgY29uc3QgbWlzc2luZ09wdGlvbk5hbWVzID0gXy5kaWZmZXJlbmNlKHJlcXVpcmVkT3B0aW9uTmFtZXMsIHByZXNlbnRPcHRpb25OYW1lcyk7XG4gIGlmIChfLmlzRW1wdHkobWlzc2luZ09wdGlvbk5hbWVzKSkge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSByZXF1aXJlZDogJHtKU09OLnN0cmluZ2lmeShtaXNzaW5nT3B0aW9uTmFtZXMpfS4gYCArXG4gICAgYFlvdSBoYXZlIG9ubHkgcHJvdmlkZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJlc2VudE9wdGlvbk5hbWVzKX1gKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcignUGxlYXNlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGluIG9yZGVyIHRvIGxhdW5jaCB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCcpO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmNvbW1hbmRzLmNsb3NlQXBwID0gYXN5bmMgZnVuY3Rpb24gY2xvc2VBcHAgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoJ1BsZWFzZSBxdWl0IHRoZSBzZXNzaW9uIGluIG9yZGVyIHRvIGNsb3NlIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0Jyk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAnUGxlYXNlIHF1aXQgdGhlIHNlc3Npb24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUgJyArXG4gICAgJ2luIG9yZGVyIHRvIGNsb3NlIGFuZCBsYXVuY2ggdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QnKTtcbn07XG5cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJywgJ1BPU1QnLCB7fSkpXG4gICAgOiAoYXdhaXQgdGhpcy5hZGIuZ2V0Q2xpcGJvYXJkKCkpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2FjdGlvbiddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9wZXJmb3JtX2VkaXRvcl9hY3Rpb24nLCAnUE9TVCcsIHthY3Rpb259KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVN3aXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3dpcGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZGlyZWN0aW9uLCBlbGVtZW50LCBzd2lwZXIsIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb25EZXNjcmliZXJ9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zd2lwZWAsICdQT1NUJywge1xuICAgIGRpcmVjdGlvbiwgZWxlbWVudCwgc3dpcGVyLCBzdGFydENvb3JkaW5hdGVzLCBlbmRDb29yZGluYXRlcywgcHJlY2lzaW9uRGVzY3JpYmVyXG4gIH0pO1xufTtcblxuY29tbWFuZHMubW9iaWxlR2V0RGV2aWNlSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldERldmljZUluZm8gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVJc1RvYXN0VmlzaWJsZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzVG9hc3RWaXNpYmxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3RleHQsIGlzUmVnZXhwfSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZSh0ZXh0KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvaXNfdG9hc3RfZGlzcGxheWVkJywgJ1BPU1QnLCB7XG4gICAgdGV4dCxcbiAgICBpc1JlZ2V4cCxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVPcGVuRHJhd2VyID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlT3BlbkRyYXdlciAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCBncmF2aXR5fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9vcGVuX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVDbG9zZURyYXdlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsb3NlRHJhd2VyIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGdyYXZpdHl9ID0gYXNzZXJ0UmVxdWlyZWRPcHRpb25zKG9wdHMsIFsnZWxlbWVudCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L2Nsb3NlX2RyYXdlcmAsICdQT1NUJywge1xuICAgIGdyYXZpdHlcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTZXREYXRlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU2V0RGF0ZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50LCB5ZWFyLCBtb250aE9mWWVhciwgZGF5T2ZNb250aH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50JywgJ3llYXInLCAnbW9udGhPZlllYXInLCAnZGF5T2ZNb250aCddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF9kYXRlYCwgJ1BPU1QnLCB7XG4gICAgeWVhcixcbiAgICBtb250aE9mWWVhcixcbiAgICBkYXlPZk1vbnRoLFxuICB9KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVNldFRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTZXRUaW1lIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIGhvdXJzLCBtaW51dGVzfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnLCAnaG91cnMnLCAnbWludXRlcyddKTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L3NldF90aW1lYCwgJ1BPU1QnLCB7XG4gICAgaG91cnMsXG4gICAgbWludXRlcyxcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVOYXZpZ2F0ZVRvID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTmF2aWdhdGVUbyAob3B0cyA9IHt9KSB7XG4gIGxldCB7ZWxlbWVudCwgbWVudUl0ZW1JZH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydtZW51SXRlbUlkJywgJ2VsZW1lbnQnXSk7XG5cbiAgbGV0IG1lbnVJdGVtSWRBc051bWJlciA9IHBhcnNlSW50KG1lbnVJdGVtSWQsIDEwKTtcbiAgaWYgKF8uaXNOYU4obWVudUl0ZW1JZEFzTnVtYmVyKSB8fCBtZW51SXRlbUlkQXNOdW1iZXIgPCAwKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ21lbnVJdGVtSWQnIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBGb3VuZCAke21lbnVJdGVtSWR9YCk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvJHt1dGlsLnVud3JhcEVsZW1lbnQoZWxlbWVudCl9L25hdmlnYXRlX3RvYCwgJ1BPU1QnLCB7XG4gICAgbWVudUl0ZW1JZFxuICB9KTtcbn07XG5cbi8qKlxuICogUnVucyBhIGNoYWluIG9mIEVzcHJlc3NvIHdlYiBhdG9tcyAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3RyYWluaW5nL3Rlc3RpbmcvZXNwcmVzc28vd2ViIGZvciByZWZlcmVuY2UpXG4gKlxuICogVGFrZXMgSlNPTiBvZiB0aGUgZm9ybVxuICpcbiAqIHtcbiAqICAgXCJ3ZWJ2aWV3RWxcIjogXCI8RUxFTUVOVF9JRD5cIiwgLy8gb3B0aW9uYWwgd2VidmlldyBlbGVtZW50IHRvIG9wZXJhdGUgb25cbiAqICAgXCJmb3JjZUphdmFzY3JpcHRFbmFibGVkXCI6IHRydWV8ZmFsc2UsIC8vIGlmIHdlYnZpZXcgZGlzYWJsZXMgamF2YXNjcmlwdCwgd2ViYXRvbXMgd29uJ3Qgd29yaywgdGhpcyBmb3JjZXMgaXRcbiAqICAgXCJtZXRob2RDaGFpblwiOiBbXG4gKiAgICAge1wibmFtZVwiOiBcIm1ldGhvZE5hbWVcIiwgXCJhdG9tXCI6IHtcIm5hbWVcIjogXCJhdG9tTmFtZVwiLCBcImFyZ3NcIjogW1wiYXJnMVwiLCBcImFyZzJcIiwgLi4uXX19LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVXZWJBdG9tcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVdlYkF0b21zIChvcHRzID0ge30pIHtcbiAgb3B0cyA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ21ldGhvZENoYWluJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvd2ViX2F0b21zYCwgJ1BPU1QnLCBvcHRzKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVTY3JvbGxUb1BhZ2UgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTY3JvbGxUb1BhZ2UgKG9wdHMgPSB7fSkge1xuXG4gIC8vIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzXG4gIGNvbnN0IHNjcm9sbFRvVHlwZXMgPSBbJ2ZpcnN0JywgJ2xhc3QnLCAnbGVmdCcsICdyaWdodCddO1xuICBjb25zdCByZXMgPSB2YWxpZGF0ZShvcHRzLCB7XG4gICAgZWxlbWVudDoge3ByZXNlbmNlOiB0cnVlfSxcbiAgICBzY3JvbGxUbzoge1xuICAgICAgaW5jbHVzaW9uOiB7XG4gICAgICAgIHdpdGhpbjogc2Nyb2xsVG9UeXBlcyxcbiAgICAgICAgbWVzc2FnZTogYFwic2Nyb2xsVG9cIiBtdXN0IGJlIG9uZSBvZiBcIiR7c2Nyb2xsVG9UeXBlcy5qb2luKCcsICcpfVwiIGZvdW5kICcle3ZhbHVlfSdgLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2Nyb2xsVG9QYWdlOiB7XG4gICAgICBudW1lcmljYWxpdHk6IHtcbiAgICAgICAgb25seUludGVnZXI6IHRydWUsXG4gICAgICAgIGdyZWF0ZXJUaGFuT3JFcXVhbFRvOiAwLFxuICAgICAgICBtZXNzYWdlOiBgXCJzY3JvbGxUb1BhZ2VcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuIEZvdW5kICcle3ZhbHVlfSdgXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBpZiAodXRpbC5oYXNWYWx1ZShyZXMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgSW52YWxpZCBzY3JvbGxUbyBwYXJhbWV0ZXJzOiAke0pTT04uc3RyaW5naWZ5KHJlcyl9YCk7XG4gIH1cblxuICBjb25zdCB7ZWxlbWVudCwgc2Nyb2xsVG8sIHNjcm9sbFRvUGFnZSwgc21vb3RoU2Nyb2xsfSA9IG9wdHM7XG5cbiAgaWYgKHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG8pICYmIHV0aWwuaGFzVmFsdWUoc2Nyb2xsVG9QYWdlKSkge1xuICAgIHRoaXMubG9nLndhcm4oYCdzY3JvbGxUbycgYW5kICdzY3JvbGxUb1BhZ2UnIHdoZXJlIGJvdGggcHJvdmlkZWQuIERlZmF1bHRpbmcgdG8gJ3Njcm9sbFRvJ2ApO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlLyR7dXRpbC51bndyYXBFbGVtZW50KGVsZW1lbnQpfS9zY3JvbGxfdG9fcGFnZWAsICdQT1NUJywge1xuICAgIHNjcm9sbFRvLFxuICAgIHNjcm9sbFRvUGFnZSxcbiAgICBzbW9vdGhTY3JvbGwsXG4gIH0pO1xufTtcblxuXG4vKipcbiAqICBBUEkgdG8gaW52b2tlIG1ldGhvZHMgZGVmaW5lZCBpbiBBbmRyb2lkIGFwcC5cbiAqXG4gKiAgRXhhbXBsZSBkYXRhXG4gKiAge1xuICogICB0YXJnZXQ6ICdhY3Rpdml0eScsXG4gKiAgIG1ldGhvZHM6XG4gKiAgICAgICAgIFtcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgIG5hbWU6IFwic29tZU1ldGhvZFwiLFxuICogICAgICAgICAgIH0sXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgICBuYW1lOiBcImFub3RoZXJNZXRob2RcIixcbiAqICAgICAgICAgICAgICAgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgIFtcbiAqICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWU6IFwiTG9sXCIsIHR5cGU6ICdqYXZhLmxhbmcuQ2hhclNlcXVlbmNlJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlOiAxLCB0eXBlOiAnaW50J31cbiAqICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICB9XG4gKiAgICAgICAgIF1cbiAqIH1cbiAqXG4gKiBJbiBhYm92ZSBleGFtcGxlLCBtZXRob2QgXCJzb21lTWV0aG9kXCIgd2lsbCBiZSBpbnZva2VkIG9uICdhY3Rpdml0eScuIE9uIHRoZSByZXN1bHQsIFwiYW5vdGhlck1ldGhvZFwiIHdpbGwgYmUgaW52b2tlZFxuICogIFwidGFyZ2V0XCIgY2FuIGJlIGVpdGhlciAnYWN0aXZpdHknLCAnYXBwbGljYXRpb24nIG9yICdlbGVtZW50J1xuICogIElmIHRhcmdldCBpcyBzZXQgdG8gJ2FwcGxpY2F0aW9uJywgbWV0aG9kcyB3aWxsIGJlIGludm9rZWQgb24gYXBwbGljYXRpb24gY2xhc3NcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdhY3Rpdml0eScsIG1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIG9uIGN1cnJlbnQgYWN0aXZpdHlcbiAqICBJZiB0YXJnZXQgaXMgc2V0IHRvICdlbGVtZW50JywgJ2VsZW1lbnRJZCcgbXVzdCBiZSBzcGVjaWZpZWRcbiAqXG4gKiAtIE9ubHkgJ1B1YmxpYycgbWV0aG9kcyBjYW4gYmUgaW52b2tlZC4gKCdvcGVuJyBtb2RpZmlyZSBpcyBuZWNlc3NhcnkgaW4gS290bGluKVxuICogLSBmb2xsb3dpbmcgcHJpbWl0aXZlIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IFwiaW50XCIsIFwiYm9vbGVhblwiLCBcImJ5dGVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJmbG9hdFwiLCBcImNoYXJcIlxuICogLSAgTm9uLXByaW1pdGl2ZSB0eXBlcyB3aXRoIGZ1bGx5IHF1YWxpZmllZCBuYW1lIFwiamF2YS5sYW5nLipcIiBpcyBhbHNvIHN1cHBvcnRlZDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWcuIFwiamF2YS5sYW5nLkNoYXJTZXF1ZW5jZVwiLCBcImphdmEubGFuZy5TdHJpbmdcIiwgXCJqYXZhLmxhbmcuSW50ZWdlclwiLCBcImphdmEubGFuZy5GbG9hdFwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphdmEubGFuZy5Eb3VibGVcIiwgXCJqYXZhLmxhbmcuQm9vbGVhblwiLCBcImphdmEubGFuZy5Mb25nXCIsIFwiamF2YS5sYW5nLlNob3J0XCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamF2YS5sYW5nLkNoYXJhY3RlclwiIGV0Yy4uLlxuICpcbiAqXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIHRhcmdldCBpcyBub3QgJ2FjdGl2aXR5JyBvciAnYXBwbGljYXRpb24nXG4gKiBAdGhyb3dzICB7RXJyb3J9IGlmIGEgbWV0aG9kIGlzIG5vdCBmb3VuZCB3aXRoIGdpdmVuIGFyZ3VtZW50IHR5cGVzXG4gKlxuICogQHJldHVybiB7Kn0gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBtZXRob2QgaW4gdGhlIGludm9jYXRpb24gY2hhaW4uIElmIG1ldGhvZCByZXR1cm4gdHlwZSBpcyB2b2lkLCB0aGVuIFwiPFZPSUQ+XCIgd2lsbCBiZSByZXR1cm5lZFxuICpcbiAqL1xuY29tbWFuZHMubW9iaWxlQmFja2Rvb3IgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVCYWNrZG9vciAob3B0cyA9IHt9KSB7XG4gIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3RhcmdldCcsICdtZXRob2RzJ10pO1xuICBjb25zdCB7dGFyZ2V0LCBtZXRob2RzfSA9IG9wdHM7XG4gIGlmICh0YXJnZXQgPT09ICdlbGVtZW50Jykge1xuICAgIGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnRJZCddKTtcbiAgfVxuICBjb25zdCB7ZWxlbWVudElkOiB0YXJnZXRFbGVtZW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS9iYWNrZG9vcmAsICdQT1NUJywge3RhcmdldCwgbWV0aG9kcywgdGFyZ2V0RWxlbWVudH0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZHMgdG8gZHJpdmUgb3V0IG9mIGFwcCBhcmVhcy5cbiAqICBzdHJhdGVneSBjYW4gYmUgb25lIG9mOiBcImNsYXp6XCIsIFwicmVzXCIsIFwidGV4dFwiLCBcInRleHRDb250YWluc1wiLCBcInRleHRFbmRzV2l0aFwiLCBcInRleHRTdGFydHNXaXRoXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXNjXCIsIFwiZGVzY0NvbnRhaW5zXCIsIFwiZGVzY0VuZHNXaXRoXCIsIFwiZGVzY1N0YXJ0c1dpdGhcIiwgXCJwa2dcIlxuICpcbiAqICBhY3Rpb24gY2FuIGJlIG9uZSBvZjogXCJjbGlja1wiLCBcImxvbmdDbGlja1wiLCBcImdldFRleHRcIiwgXCJnZXRDb250ZW50RGVzY3JpcHRpb25cIiwgXCJnZXRDbGFzc05hbWVcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJnZXRSZXNvdXJjZU5hbWVcIiwgXCJnZXRWaXNpYmxlQm91bmRzXCIsIFwiZ2V0VmlzaWJsZUNlbnRlclwiLCBcImdldEFwcGxpY2F0aW9uUGFja2FnZVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImdldENoaWxkQ291bnRcIiwgXCJjbGVhclwiLCBcImlzQ2hlY2thYmxlXCIsIFwiaXNDaGVja2VkXCIsIFwiaXNDbGlja2FibGVcIiwgXCJpc0VuYWJsZWRcIixcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXCJpc0ZvY3VzYWJsZVwiLCBcImlzRm9jdXNlZFwiLCBcImlzTG9uZ0NsaWNrYWJsZVwiLCBcImlzU2Nyb2xsYWJsZVwiLCBcImlzU2VsZWN0ZWRcIlxuICovXG5jb21tYW5kcy5tb2JpbGVVaWF1dG9tYXRvciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVVpYXV0b21hdG9yIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3N0cmF0ZWd5LCBsb2NhdG9yLCBhY3Rpb24sIGluZGV4fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ3N0cmF0ZWd5JywgJ2xvY2F0b3InLCAnYWN0aW9uJ10pO1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZXhlY3V0ZV9tb2JpbGUvdWlhdXRvbWF0b3JgLCAnUE9TVCcsIHtzdHJhdGVneSwgbG9jYXRvciwgaW5kZXgsIGFjdGlvbn0pO1xufTtcblxuLyoqXG4gKiAgRXhlY3V0ZSBVaUF1dG9tYXRvcjIgY29tbWFuZCB0byByZXR1cm4gdGhlIFVJIGR1bXAgd2hlbiBBVVQgaXMgaW4gYmFja2dyb3VuZC5cbiAqIEB0aHJvd3MgIHtFcnJvcn0gaWYgdWlhdXRvbWF0b3IgdmlldyBkdW1wIGlzIHVuc3VjY2Vzc2Z1bFxuICogQHJldHVybnMge3N0cmluZ30gdWlhdXRvbWF0b3IgRE9NIHhtbCBhcyBzdHJpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVWlhdXRvbWF0b3JQYWdlU291cmNlICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2V4ZWN1dGVfbW9iaWxlL3VpYXV0b21hdG9yX3BhZ2Vfc291cmNlYCwgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiAgRmxhc2ggdGhlIGVsZW1lbnQgd2l0aCBnaXZlbiBpZC5cbiAqICBkdXJhdGlvbk1pbGxpcyBhbmQgcmVwZWF0Q291bnQgYXJlIG9wdGlvbmFsXG4gKlxuICovXG5jb21tYW5kcy5tb2JpbGVGbGFzaEVsZW1lbnQgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVGbGFzaEVsZW1lbnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7ZWxlbWVudH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydlbGVtZW50J10pO1xuICBjb25zdCB7ZHVyYXRpb25NaWxsaXMsIHJlcGVhdENvdW50fSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZmxhc2hgLCAnUE9TVCcsIHtcbiAgICBkdXJhdGlvbk1pbGxpcyxcbiAgICByZXBlYXRDb3VudFxuICB9KTtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBhICdHZW5lcmFsQ2xpY2tBY3Rpb24nIChodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZHgvdGVzdC9lc3ByZXNzby9hY3Rpb24vR2VuZXJhbENsaWNrQWN0aW9uKVxuICovXG5jb21tYW5kcy5tb2JpbGVDbGlja0FjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsaWNrQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2VsZW1lbnQsIHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwgcHJlY2lzaW9uRGVzY3JpYmVyLFxuICAgICAgICAgaW5wdXREZXZpY2UsIGJ1dHRvblN0YXRlfSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vY2xpY2tfYWN0aW9uYCwgJ1BPU1QnLCB7XG4gICAgdGFwcGVyLCBjb29yZGluYXRlc1Byb3ZpZGVyLCBwcmVjaXNpb25EZXNjcmliZXIsIGlucHV0RGV2aWNlLCBidXR0b25TdGF0ZVxuICB9KTtcbn07XG5cbmNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gdXBkYXRlU2V0dGluZ3MgKHNldHRpbmdzKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmVzcHJlc3NvLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9zZXR0aW5nc2AsICdQT1NUJywgeyBzZXR0aW5ncyB9KTtcbn07XG5cbmNvbW1hbmRzLmdldFNldHRpbmdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0U2V0dGluZ3MgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vc2V0dGluZ3NgLCAnR0VUJyk7XG59O1xuXG4vLyBTdG9wIHByb3h5aW5nIHRvIGFueSBDaHJvbWVkcml2ZXIgYW5kIHJlZGlyZWN0IHRvIEVzcHJlc3NvXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmVzcHJlc3NvLnByb3h5Q29tbWFuZC5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogIFN0YXJ0cyB0aGUgZ2l2ZW4gYWN0aXZpdHkgd2l0aCBpbnRlbnQgb3B0aW9ucywgYWN0aXZpdHkgb3B0aW9ucyBhbmQgbG9jYWxlLlxuICogIEFjdGl2aXR5IGNvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgaW4gc2NvcGUgb2YgdGhlIGN1cnJlbnQgYXBwIHBhY2thZ2UuXG4gKlxuICogIGFwcEFjdGl2aXR5IGlzIG1hbmRhdG9yeVxuICpcbiAqICBsb2NhbGUsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzIGFyZSBvcHRpb25hbFxuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RhcnRBY3Rpdml0eSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGFwcFBhY2thZ2UgPSB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgY29uc3Qge1xuICAgIGFwcEFjdGl2aXR5LFxuICAgIGxvY2FsZSxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBvcHRpb25hbEFjdGl2aXR5QXJndW1lbnRzXG4gIH0gPSBhc3NlcnRSZXF1aXJlZE9wdGlvbnMob3B0cywgWydhcHBBY3Rpdml0eSddKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKGAvYXBwaXVtL2RldmljZS9zdGFydF9hY3Rpdml0eWAsICdQT1NUJywge1xuICAgIGFwcFBhY2thZ2UsXG4gICAgYXBwQWN0aXZpdHksXG4gICAgbG9jYWxlLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIG9wdGlvbmFsQWN0aXZpdHlBcmd1bWVudHNcbiAgfSk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHkpIHtcbiAgLy8gaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXRcbiAgLy8gcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBFc3ByZXNzb1xuICBhcHBQYWNrYWdlID0gYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgYXBwV2FpdFBhY2thZ2UgPSBhcHBXYWl0UGFja2FnZSB8fCBhcHBQYWNrYWdlO1xuICBhcHBBY3Rpdml0eSA9IHF1YWxpZnlBY3Rpdml0eU5hbWUoYXBwQWN0aXZpdHksIGFwcFBhY2thZ2UpO1xuICBhcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9JyBmb3IgcGFja2FnZSAnJHthcHBQYWNrYWdlfSdgKTtcbiAgYXdhaXQgdGhpcy5lc3ByZXNzby5qd3Byb3h5LmNvbW1hbmQoYC9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5YCwgJ1BPU1QnLCB7XG4gICAgYXBwUGFja2FnZSxcbiAgICBhcHBBY3Rpdml0eSxcbiAgfSk7XG4gIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eShhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5KTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZURpc21pc3NBdXRvZmlsbCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURpc21pc3NBdXRvZmlsbCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtlbGVtZW50fSA9IGFzc2VydFJlcXVpcmVkT3B0aW9ucyhvcHRzLCBbJ2VsZW1lbnQnXSk7XG4gIGF3YWl0IHRoaXMuZXNwcmVzc28uandwcm94eS5jb21tYW5kKFxuICAgIGAvc2Vzc2lvbi86c2Vzc2lvbklkL2FwcGl1bS9leGVjdXRlX21vYmlsZS8ke3V0aWwudW53cmFwRWxlbWVudChlbGVtZW50KX0vZGlzbWlzc19hdXRvZmlsbGAsICdQT1NUJywge30pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQztBQUFBO0FBRW5ELFNBQVNDLHFCQUFxQixDQUFFQyxPQUFPLEVBQUVDLG1CQUFtQixFQUFFO0VBQzVELElBQUksQ0FBQ0MsZUFBQyxDQUFDQyxPQUFPLENBQUNGLG1CQUFtQixDQUFDLEVBQUU7SUFDbkNBLG1CQUFtQixHQUFHLENBQUNBLG1CQUFtQixDQUFDO0VBQzdDO0VBQ0EsTUFBTUcsa0JBQWtCLEdBQUdGLGVBQUMsQ0FBQ0csSUFBSSxDQUFDTCxPQUFPLENBQUM7RUFDMUMsTUFBTU0sa0JBQWtCLEdBQUdKLGVBQUMsQ0FBQ0ssVUFBVSxDQUFDTixtQkFBbUIsRUFBRUcsa0JBQWtCLENBQUM7RUFDaEYsSUFBSUYsZUFBQyxDQUFDTSxPQUFPLENBQUNGLGtCQUFrQixDQUFDLEVBQUU7SUFDakMsT0FBT04sT0FBTztFQUNoQjtFQUNBLE1BQU0sSUFBSVMsS0FBSyxDQUFFLHVDQUFzQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNMLGtCQUFrQixDQUFFLElBQUcsR0FDMUYsMkJBQTBCSSxJQUFJLENBQUNDLFNBQVMsQ0FBQ1Asa0JBQWtCLENBQUUsRUFBQyxDQUFDO0FBQ3BFOztBQUdBUixRQUFRLENBQUNnQixTQUFTLEdBQUcsZUFBZUEsU0FBUyxHQUFJO0VBQy9DLE1BQU0sSUFBSUMsY0FBTSxDQUFDQyx5QkFBeUIsQ0FBQywyRUFBMkUsQ0FBQztBQUN6SCxDQUFDOztBQUdEbEIsUUFBUSxDQUFDbUIsUUFBUSxHQUFHLGVBQWVBLFFBQVEsR0FBSTtFQUM3QyxNQUFNLElBQUlGLGNBQU0sQ0FBQ0MseUJBQXlCLENBQUMsc0VBQXNFLENBQUM7QUFDcEgsQ0FBQzs7QUFHRGxCLFFBQVEsQ0FBQ29CLEtBQUssR0FBRyxlQUFlQSxLQUFLLEdBQUk7RUFDdkMsTUFBTSxJQUFJSCxjQUFNLENBQUNDLHlCQUF5QixDQUN4QywrQ0FBK0MsR0FDL0MseURBQXlELENBQUM7QUFDOUQsQ0FBQztBQUVEbEIsUUFBUSxDQUFDcUIsWUFBWSxHQUFHLGVBQWVBLFlBQVksR0FBSTtFQUNyRCxPQUFRLE9BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNDLFdBQVcsRUFBRSxJQUFHLEVBQUUsR0FDcEMsTUFBTSxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQy9FLE1BQU0sSUFBSSxDQUFDSixHQUFHLENBQUNELFlBQVksRUFBRztBQUNyQyxDQUFDO0FBRURyQixRQUFRLENBQUMyQix5QkFBeUIsR0FBRyxlQUFlQSx5QkFBeUIsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3hGLE1BQU07SUFBQ0M7RUFBTSxDQUFDLEdBQUcxQixxQkFBcUIsQ0FBQ3lCLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ3hELE9BQU8sTUFBTSxJQUFJLENBQUNKLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsc0NBQXNDLEVBQUUsTUFBTSxFQUFFO0lBQUNHO0VBQU0sQ0FBQyxDQUFDO0FBQ3RHLENBQUM7QUFFRDdCLFFBQVEsQ0FBQzhCLFdBQVcsR0FBRyxlQUFlQSxXQUFXLENBQUVGLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUM1RCxNQUFNO0lBQUNHLFNBQVM7SUFBRUMsT0FBTztJQUFFQyxNQUFNO0lBQUVDLGdCQUFnQjtJQUFFQyxjQUFjO0lBQUVDO0VBQWtCLENBQUMsR0FBR2pDLHFCQUFxQixDQUFDeUIsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDbkksT0FBTyxNQUFNLElBQUksQ0FBQ0osUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBRSwwQkFBeUJXLGFBQUksQ0FBQ0MsYUFBYSxDQUFDTixPQUFPLENBQUUsUUFBTyxFQUFFLE1BQU0sRUFBRTtJQUNoSEQsU0FBUztJQUFFQyxPQUFPO0lBQUVDLE1BQU07SUFBRUMsZ0JBQWdCO0lBQUVDLGNBQWM7SUFBRUM7RUFDaEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEcEMsUUFBUSxDQUFDdUMsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLEdBQUk7RUFDbkUsT0FBTyxNQUFNLElBQUksQ0FBQ2YsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUM7QUFDMUUsQ0FBQztBQUVEMUIsUUFBUSxDQUFDd0Msb0JBQW9CLEdBQUcsZUFBZUEsb0JBQW9CLENBQUVaLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUM5RSxNQUFNO0lBQUNhLElBQUk7SUFBRUM7RUFBUSxDQUFDLEdBQUdkLElBQUk7RUFDN0IsSUFBSSxDQUFDUyxhQUFJLENBQUNNLFFBQVEsQ0FBQ0YsSUFBSSxDQUFDLEVBQUU7SUFDeEIsTUFBTSxJQUFJeEIsY0FBTSxDQUFDMkIsb0JBQW9CLENBQUUsOEJBQTZCLENBQUM7RUFDdkU7RUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDcEIsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQywyQ0FBMkMsRUFBRSxNQUFNLEVBQUU7SUFDOUZlLElBQUk7SUFDSkM7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQxQyxRQUFRLENBQUM2QyxnQkFBZ0IsR0FBRyxlQUFlQSxnQkFBZ0IsQ0FBRWpCLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN0RSxNQUFNO0lBQUNJLE9BQU87SUFBRWM7RUFBTyxDQUFDLEdBQUczQyxxQkFBcUIsQ0FBQ3lCLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBRW5FLE9BQU8sTUFBTSxJQUFJLENBQUNKLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsMEJBQXlCVyxhQUFJLENBQUNDLGFBQWEsQ0FBQ04sT0FBTyxDQUFFLGNBQWEsRUFBRSxNQUFNLEVBQUU7SUFDdEhjO0VBQ0YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOUMsUUFBUSxDQUFDK0MsaUJBQWlCLEdBQUcsZUFBZUEsaUJBQWlCLENBQUVuQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDeEUsTUFBTTtJQUFDSSxPQUFPO0lBQUVjO0VBQU8sQ0FBQyxHQUFHM0MscUJBQXFCLENBQUN5QixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUVuRSxPQUFPLE1BQU0sSUFBSSxDQUFDSixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLDBCQUF5QlcsYUFBSSxDQUFDQyxhQUFhLENBQUNOLE9BQU8sQ0FBRSxlQUFjLEVBQUUsTUFBTSxFQUFFO0lBQ3ZIYztFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDlDLFFBQVEsQ0FBQ2dELGFBQWEsR0FBRyxlQUFlQSxhQUFhLENBQUVwQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDaEUsTUFBTTtJQUFDSSxPQUFPO0lBQUVpQixJQUFJO0lBQUVDLFdBQVc7SUFBRUM7RUFBVSxDQUFDLEdBQUdoRCxxQkFBcUIsQ0FBQ3lCLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0VBRTlILE9BQU8sTUFBTSxJQUFJLENBQUNKLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsMEJBQXlCVyxhQUFJLENBQUNDLGFBQWEsQ0FBQ04sT0FBTyxDQUFFLFdBQVUsRUFBRSxNQUFNLEVBQUU7SUFDbkhpQixJQUFJO0lBQ0pDLFdBQVc7SUFDWEM7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBRURuRCxRQUFRLENBQUNvRCxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFeEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2hFLE1BQU07SUFBQ0ksT0FBTztJQUFFcUIsS0FBSztJQUFFQztFQUFPLENBQUMsR0FBR25ELHFCQUFxQixDQUFDeUIsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztFQUU5RixPQUFPLE1BQU0sSUFBSSxDQUFDSixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLDBCQUF5QlcsYUFBSSxDQUFDQyxhQUFhLENBQUNOLE9BQU8sQ0FBRSxXQUFVLEVBQUUsTUFBTSxFQUFFO0lBQ25IcUIsS0FBSztJQUNMQztFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRHRELFFBQVEsQ0FBQ3VELGdCQUFnQixHQUFHLGVBQWVBLGdCQUFnQixDQUFFM0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3RFLElBQUk7SUFBQ0ksT0FBTztJQUFFd0I7RUFBVSxDQUFDLEdBQUdyRCxxQkFBcUIsQ0FBQ3lCLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztFQUVsRixJQUFJNkIsa0JBQWtCLEdBQUdDLFFBQVEsQ0FBQ0YsVUFBVSxFQUFFLEVBQUUsQ0FBQztFQUNqRCxJQUFJbEQsZUFBQyxDQUFDcUQsS0FBSyxDQUFDRixrQkFBa0IsQ0FBQyxJQUFJQSxrQkFBa0IsR0FBRyxDQUFDLEVBQUU7SUFDekQsTUFBTSxJQUFJeEMsY0FBTSxDQUFDMkIsb0JBQW9CLENBQUUscURBQW9EWSxVQUFXLEVBQUMsQ0FBQztFQUMxRztFQUVBLE9BQU8sTUFBTSxJQUFJLENBQUNoQyxRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLDBCQUF5QlcsYUFBSSxDQUFDQyxhQUFhLENBQUNOLE9BQU8sQ0FBRSxjQUFhLEVBQUUsTUFBTSxFQUFFO0lBQ3RId0I7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDOztBQWlCRHhELFFBQVEsQ0FBQzRELGNBQWMsR0FBRyxlQUFlQSxjQUFjLENBQUVoQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbEVBLElBQUksR0FBR3pCLHFCQUFxQixDQUFDeUIsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7RUFDbkQsT0FBTyxNQUFNLElBQUksQ0FBQ0osUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBRSxrQ0FBaUMsRUFBRSxNQUFNLEVBQUVFLElBQUksQ0FBQztBQUM5RixDQUFDO0FBRUQ1QixRQUFRLENBQUM2RCxpQkFBaUIsR0FBRyxlQUFlQSxpQkFBaUIsR0FBSTtFQUMvRCxPQUFPLE1BQU0sSUFBSSxDQUFDckMsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUVEMUIsUUFBUSxDQUFDOEQsa0JBQWtCLEdBQUcsZUFBZUEsa0JBQWtCLENBQUVsQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFHMUUsTUFBTW1DLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztFQUN4RCxNQUFNQyxHQUFHLEdBQUcsSUFBQUMsaUJBQVEsRUFBQ3JDLElBQUksRUFBRTtJQUN6QkksT0FBTyxFQUFFO01BQUNrQyxRQUFRLEVBQUU7SUFBSSxDQUFDO0lBQ3pCQyxRQUFRLEVBQUU7TUFDUkMsU0FBUyxFQUFFO1FBQ1RDLE1BQU0sRUFBRU4sYUFBYTtRQUNyQk8sT0FBTyxFQUFHLDhCQUE2QlAsYUFBYSxDQUFDUSxJQUFJLENBQUMsSUFBSSxDQUFFO01BQ2xFO0lBQ0YsQ0FBQztJQUNEQyxZQUFZLEVBQUU7TUFDWkMsWUFBWSxFQUFFO1FBQ1pDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZCTCxPQUFPLEVBQUc7TUFDWjtJQUNGO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsSUFBSWpDLGFBQUksQ0FBQ00sUUFBUSxDQUFDcUIsR0FBRyxDQUFDLEVBQUU7SUFDdEIsTUFBTSxJQUFJL0MsY0FBTSxDQUFDMkIsb0JBQW9CLENBQUUsZ0NBQStCOUIsSUFBSSxDQUFDQyxTQUFTLENBQUNpRCxHQUFHLENBQUUsRUFBQyxDQUFDO0VBQzlGO0VBRUEsTUFBTTtJQUFDaEMsT0FBTztJQUFFbUMsUUFBUTtJQUFFSyxZQUFZO0lBQUVJO0VBQVksQ0FBQyxHQUFHaEQsSUFBSTtFQUU1RCxJQUFJUyxhQUFJLENBQUNNLFFBQVEsQ0FBQ3dCLFFBQVEsQ0FBQyxJQUFJOUIsYUFBSSxDQUFDTSxRQUFRLENBQUM2QixZQUFZLENBQUMsRUFBRTtJQUMxRCxJQUFJLENBQUNLLEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLDZFQUE0RSxDQUFDO0VBQzlGO0VBRUEsT0FBTyxNQUFNLElBQUksQ0FBQ3RELFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsMEJBQXlCVyxhQUFJLENBQUNDLGFBQWEsQ0FBQ04sT0FBTyxDQUFFLGlCQUFnQixFQUFFLE1BQU0sRUFBRTtJQUN6SG1DLFFBQVE7SUFDUkssWUFBWTtJQUNaSTtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7O0FBNkNENUUsUUFBUSxDQUFDK0UsY0FBYyxHQUFHLGVBQWVBLGNBQWMsQ0FBRW5ELElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNsRXpCLHFCQUFxQixDQUFDeUIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0VBQ2xELE1BQU07SUFBQ29ELE1BQU07SUFBRUM7RUFBTyxDQUFDLEdBQUdyRCxJQUFJO0VBQzlCLElBQUlvRCxNQUFNLEtBQUssU0FBUyxFQUFFO0lBQ3hCN0UscUJBQXFCLENBQUN5QixJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUM1QztFQUNBLE1BQU07SUFBQ3NELFNBQVMsRUFBRUM7RUFBYSxDQUFDLEdBQUd2RCxJQUFJO0VBQ3ZDLE9BQU8sTUFBTSxJQUFJLENBQUNKLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsaUNBQWdDLEVBQUUsTUFBTSxFQUFFO0lBQUNzRCxNQUFNO0lBQUVDLE9BQU87SUFBRUU7RUFBYSxDQUFDLENBQUM7QUFDekgsQ0FBQzs7QUFZRG5GLFFBQVEsQ0FBQ29GLGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQixDQUFFeEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3hFLE1BQU07SUFBQ3lELFFBQVE7SUFBRUMsT0FBTztJQUFFekQsTUFBTTtJQUFFMEQ7RUFBSyxDQUFDLEdBQUdwRixxQkFBcUIsQ0FBQ3lCLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDekcsT0FBTyxNQUFNLElBQUksQ0FBQ0osUUFBUSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBRSxvQ0FBbUMsRUFBRSxNQUFNLEVBQUU7SUFBQzJELFFBQVE7SUFBRUMsT0FBTztJQUFFQyxLQUFLO0lBQUUxRDtFQUFNLENBQUMsQ0FBQztBQUM5SCxDQUFDOztBQU9EN0IsUUFBUSxDQUFDd0YsMkJBQTJCLEdBQUcsZUFBZUEsMkJBQTJCLEdBQUk7RUFDbkYsT0FBTyxNQUFNLElBQUksQ0FBQ2hFLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsZ0RBQStDLEVBQUUsS0FBSyxDQUFDO0FBQ3JHLENBQUM7O0FBT0QxQixRQUFRLENBQUN5RixrQkFBa0IsR0FBRyxlQUFlQSxrQkFBa0IsQ0FBRTdELElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUMxRSxNQUFNO0lBQUNJO0VBQU8sQ0FBQyxHQUFHN0IscUJBQXFCLENBQUN5QixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUMxRCxNQUFNO0lBQUM4RCxjQUFjO0lBQUVDO0VBQVcsQ0FBQyxHQUFHL0QsSUFBSTtFQUMxQyxPQUFPLE1BQU0sSUFBSSxDQUFDSixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLDBCQUF5QlcsYUFBSSxDQUFDQyxhQUFhLENBQUNOLE9BQU8sQ0FBRSxRQUFPLEVBQUUsTUFBTSxFQUFFO0lBQ2hIMEQsY0FBYztJQUNkQztFQUNGLENBQUMsQ0FBQztBQUNKLENBQUM7O0FBS0QzRixRQUFRLENBQUM0RixpQkFBaUIsR0FBRyxlQUFlQSxpQkFBaUIsQ0FBRWhFLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN4RSxNQUFNO0lBQUNJLE9BQU87SUFBRTZELE1BQU07SUFBRUMsbUJBQW1CO0lBQUUxRCxrQkFBa0I7SUFDeEQyRCxXQUFXO0lBQUVDO0VBQVcsQ0FBQyxHQUFHN0YscUJBQXFCLENBQUN5QixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUMzRSxPQUFPLE1BQU0sSUFBSSxDQUFDSixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLDBCQUF5QlcsYUFBSSxDQUFDQyxhQUFhLENBQUNOLE9BQU8sQ0FBRSxlQUFjLEVBQUUsTUFBTSxFQUFFO0lBQ3ZINkQsTUFBTTtJQUFFQyxtQkFBbUI7SUFBRTFELGtCQUFrQjtJQUFFMkQsV0FBVztJQUFFQztFQUNoRSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRURoRyxRQUFRLENBQUNpRyxjQUFjLEdBQUcsZUFBZUEsY0FBYyxDQUFFQyxRQUFRLEVBQUU7RUFDakUsT0FBTyxNQUFNLElBQUksQ0FBQzFFLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsa0JBQWlCLEVBQUUsTUFBTSxFQUFFO0lBQUV3RTtFQUFTLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRURsRyxRQUFRLENBQUNtRyxXQUFXLEdBQUcsZUFBZUEsV0FBVyxHQUFJO0VBQ25ELE9BQU8sTUFBTSxJQUFJLENBQUMzRSxRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLGtCQUFpQixFQUFFLEtBQUssQ0FBQztBQUN2RSxDQUFDOztBQUdEekIsT0FBTyxDQUFDbUcsd0JBQXdCLEdBQUcsU0FBU0Esd0JBQXdCLEdBQUk7RUFDdEUsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSTtFQUN4QixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJLENBQUM5RSxRQUFRLENBQUM4RSxXQUFXLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMvRSxRQUFRLENBQUM7RUFDaEUsSUFBSSxDQUFDZ0YsWUFBWSxHQUFHLElBQUksQ0FBQ2hGLFFBQVEsQ0FBQ2dGLFlBQVksQ0FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQy9FLFFBQVEsQ0FBQztFQUNsRSxJQUFJLENBQUNpRixjQUFjLEdBQUcsSUFBSTtBQUM1QixDQUFDOztBQVVEekcsUUFBUSxDQUFDMEcsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLENBQUU5RSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDNUUsTUFBTStFLFVBQVUsR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQ0QsVUFBVTtFQUN2QyxNQUFNO0lBQ0pFLFdBQVc7SUFDWEMsTUFBTTtJQUNOQyx1QkFBdUI7SUFDdkJDO0VBQ0YsQ0FBQyxHQUFHN0cscUJBQXFCLENBQUN5QixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztFQUNoRCxPQUFPLE1BQU0sSUFBSSxDQUFDSixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLCtCQUE4QixFQUFFLE1BQU0sRUFBRTtJQUNsRmlGLFVBQVU7SUFDVkUsV0FBVztJQUNYQyxNQUFNO0lBQ05DLHVCQUF1QjtJQUN2QkM7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBRURoSCxRQUFRLENBQUNpSCxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFTixVQUFVLEVBQUVFLFdBQVcsRUFDNUVLLGNBQWMsRUFBRUMsZUFBZSxFQUFFO0VBR2pDUixVQUFVLEdBQUdBLFVBQVUsSUFBSSxJQUFJLENBQUNDLElBQUksQ0FBQ0QsVUFBVTtFQUMvQ08sY0FBYyxHQUFHQSxjQUFjLElBQUlQLFVBQVU7RUFDN0NFLFdBQVcsR0FBRyxJQUFBTywwQkFBbUIsRUFBQ1AsV0FBVyxFQUFFRixVQUFVLENBQUM7RUFDMURRLGVBQWUsR0FBRyxJQUFBQywwQkFBbUIsRUFBQ0QsZUFBZSxJQUFJTixXQUFXLEVBQUVLLGNBQWMsQ0FBQztFQUNyRixJQUFJLENBQUNyQyxHQUFHLENBQUN3QyxLQUFLLENBQUUsc0JBQXFCUixXQUFZLGtCQUFpQkYsVUFBVyxHQUFFLENBQUM7RUFDaEYsTUFBTSxJQUFJLENBQUNuRixRQUFRLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLCtCQUE4QixFQUFFLE1BQU0sRUFBRTtJQUMzRWlGLFVBQVU7SUFDVkU7RUFDRixDQUFDLENBQUM7RUFDRixNQUFNLElBQUksQ0FBQ3ZGLEdBQUcsQ0FBQ2dHLGVBQWUsQ0FBQ0osY0FBYyxFQUFFQyxlQUFlLENBQUM7QUFDakUsQ0FBQztBQUVEbkgsUUFBUSxDQUFDdUgscUJBQXFCLEdBQUcsZUFBZUEscUJBQXFCLENBQUUzRixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDaEYsTUFBTTtJQUFDSTtFQUFPLENBQUMsR0FBRzdCLHFCQUFxQixDQUFDeUIsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7RUFDMUQsTUFBTSxJQUFJLENBQUNKLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQ2hDLDZDQUE0Q1csYUFBSSxDQUFDQyxhQUFhLENBQUNOLE9BQU8sQ0FBRSxtQkFBa0IsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUcsQ0FBQztBQUVEd0YsTUFBTSxDQUFDQyxNQUFNLENBQUN2SCxVQUFVLEVBQUVGLFFBQVEsRUFBRUMsT0FBTyxDQUFDO0FBQUMsZUFFOUJDLFVBQVU7QUFBQSJ9