appium-uiautomator2-driver 2.13.0 → 2.15.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [2.15.0](https://github.com/appium/appium-uiautomator2-driver/compare/v2.14.0...v2.15.0) (2023-04-15)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add 'mobile: getAppStrings' extension ([#593](https://github.com/appium/appium-uiautomator2-driver/issues/593)) ([0705269](https://github.com/appium/appium-uiautomator2-driver/commit/07052696f9926b24a0343e2ab7aa7656cffc860b))
7
+
8
+ ## [2.14.0](https://github.com/appium/appium-uiautomator2-driver/compare/v2.13.0...v2.14.0) (2023-04-04)
9
+
10
+
11
+ ### Features
12
+
13
+ * add shouldTerminateApp capability ([#591](https://github.com/appium/appium-uiautomator2-driver/issues/591)) ([853acb3](https://github.com/appium/appium-uiautomator2-driver/commit/853acb3d9848361a86b9d3246fada138f07434ce))
14
+
1
15
  ## [2.13.0](https://github.com/appium/appium-uiautomator2-driver/compare/v2.12.7...v2.13.0) (2023-04-04)
2
16
 
3
17
 
package/README.md CHANGED
@@ -73,8 +73,9 @@ appium:intentCategory | Set an optional intent category to be applied when start
73
73
  appium:intentAction | Set an optional intent action to be applied when starting the given appActivity by [Activity Manager](https://developer.android.com/studio/command-line/adb#am). Dfaults to `android.intent.action.MAIN`. Please use [mobile:startActivity](#mobile-startactivity) in case you don't set an explicit value.
74
74
  appium:intentFlags | Set an optional intent flags to be applied when starting the given appActivity by [Activity Manager](https://developer.android.com/studio/command-line/adb#am). Defaults to `0x10200000` (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flags). Please use [mobile:startActivity](#mobile-startactivity) in case you don't set an explicit value.
75
75
  appium:optionalIntentArguments | Set an optional intent arguments to be applied when starting the given appActivity by [Activity Manager](https://developer.android.com/studio/command-line/adb#am)
76
- appium:dontStopAppOnReset | Set it to `true` if you don't want the application to be restarted if it was already running. If `appium:noReset` is falsy, then the app under test is going to be restarted if either this capability is falsy (the default behavior) or `appium:forceAppLaunch` is set to `true`.
77
- appium:forceAppLaunch | Set it to `true` if you want the application under test to be always forcefully restarted on session startup even if `appium:noReset` is `true`, and the app was already running. If `noReset` is falsy, then the app under test is going to be restarted if either this capability set to `true` or `appium:dontStopAppOnReset` is falsy (the default behavior). Available since driver version 2.12
76
+ appium:dontStopAppOnReset | Set it to `true` if you don't want the application to be restarted if it was already running. If `appium:noReset` is falsy, then the app under test is going to be restarted if either this capability is falsy (the default behavior) or `appium:forceAppLaunch` is set to `true`. `false` by default
77
+ appium:forceAppLaunch | Set it to `true` if you want the application under test to be always forcefully restarted on session startup even if `appium:noReset` is `true`, and the app was already running. If `noReset` is falsy, then the app under test is going to be restarted if either this capability set to `true` or `appium:dontStopAppOnReset` is falsy (the default behavior). `false` by default. Available since driver version 2.12
78
+ appium:shouldTerminateApp | Set it to `true` if you want the application under test to be always terminated on session end even if `appium:noReset` is `true`. If `noReset` is falsy, then the app under test is going to be terminated if `appium:dontStopAppOnReset` is also falsy (the default behavior). `false` by default
78
79
  appium:autoLaunch | Whether to launch the application under test automatically (`true`, the default value) after a test starts
79
80
  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 reinstalled to grant permissions, for example, by setting the `appium:fullReset` capability as `true` for Android 6+ devices. If your app needs some special security permissions, like access to notifications or media recording, consider using [mobile: changePermissions](#mobile-changepermissions) extension with `appops` target. `false` by default
80
81
  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
@@ -1043,20 +1044,34 @@ wifi | booolean | no | Either to enable or disable Wi-Fi. | false
1043
1044
  data | booolean | no | Either to enable or disable mobile data. | false
1044
1045
  airplaneMode | booolean | no | Either to enable or disable Airplane Mode. | false
1045
1046
 
1047
+ ### mobile: getAppStrings
1048
+
1049
+ Retrieves string resources for the given app language. An error is thrown if strings cannot be fetched or no strings exist
1050
+ for the given language abbreviation. Available since driver version 2.15.0
1051
+
1052
+ #### Arguments
1053
+
1054
+ Name | Type | Required | Description | Example
1055
+ --- | --- | --- | --- | ---
1056
+ language | string | no | The language abbreviation to fetch app strings mapping for. If no language is provided then strings for the default language on the device under test would be returned | fr
1057
+
1058
+ #### Returned Result
1059
+
1060
+ App strings map, where keys are resource identifiers.
1046
1061
 
1047
1062
  ## Applications Management
1048
1063
 
1049
1064
  UiAutomator2 driver supports Appium endpoints for applications management:
1050
- - Check if app is installed (`POST /appium/device/app_installed`)
1051
- - Install/upgrade app (`POST /appium/device/install_app`)
1052
- - Activate app (`POST /appium/device/activate_app`)
1065
+ - Check if app is installed ([mobile: isAppInstalled](#mobile-isappinstalled))
1066
+ - Install/upgrade app ([mobile: installApp](#mobile-installapp))
1067
+ - Activate app ([mobile: activateApp](#mobile-activateapp))
1053
1068
  - Since UIAutomator2 driver v2.2.0, the server calls `am start`/`am start-activity` to start the application on devices with API level 24+. [monkey](https://developer.android.com/studio/test/other-testing-tools/monkey) tool is called on devices below API level 24.
1054
1069
  - UIAutomator2 driver v2.1.2 and lower versions call the `monkey` tool on all devices.
1055
1070
  - The `monkey` tool [turns on auto rotation](https://stackoverflow.com/questions/56684778/adb-shell-monkey-command-changing-device-orientation-lock), so please consider using [mobile: startActivity](#mobile-startactivity) if you would like to keep your current rotation preferences.
1056
- - Uninstall app (`POST /appium/device/remove_app`)
1057
- - Terminate app (`POST /appium/device/terminate_app`)
1058
- - Start app activity (`POST /appium/device/start_activity`)
1059
- - Query the current app state (`POST /appium/device/app_state`)
1071
+ - Uninstall app ([mobile: removeApp](#mobile-removeapp))
1072
+ - Terminate app ([mobile: terminateApp](#mobile-terminateapp))
1073
+ - Start app activity ([mobile: startActivity](#mobile-startactivity))
1074
+ - Query the current app state ([mobile: queryAppState](#mobile-queryappstate))
1060
1075
 
1061
1076
  Refer to the corresponding Appium client tutorial to find out the names of the corresponding wrappers for these APIs.
1062
1077
 
@@ -1069,9 +1084,9 @@ Useful links:
1069
1084
  ## Files Management
1070
1085
 
1071
1086
  UiAutomator2 driver supports Appium endpoints for files management:
1072
- - Push file (`POST /appium/device/push_file`)
1073
- - Pull file (`POST /appium/device/pull_file`)
1074
- - Pull folder (`POST /appium/device/pull_folder`)
1087
+ - Push file ([mobile: pushFile](#mobile-pushfile))
1088
+ - Pull file ([mobile: pullFile](#mobile-pullfile))
1089
+ - Pull folder ([mobile: pullFolder](#mobile-pullfolder))
1075
1090
 
1076
1091
  Refer to the corresponding Appium client tutorial to find out the names of the corresponding wrappers for these APIs.
1077
1092
 
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ require("source-map-support/register");
9
+ var _lodash = _interopRequireDefault(require("lodash"));
10
+ var _support = require("appium/support");
11
+ const commands = {};
12
+ commands.getStrings = async function (language) {
13
+ if (!language) {
14
+ language = await this.adb.getDeviceLanguage();
15
+ this.log.info(`No language specified, returning strings for: ${language}`);
16
+ }
17
+ const preprocessStringsMap = function (mapping) {
18
+ const result = {};
19
+ for (const [key, value] of _lodash.default.toPairs(mapping)) {
20
+ result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
21
+ }
22
+ return result;
23
+ };
24
+ if (this.apkStrings[language]) {
25
+ return preprocessStringsMap(this.apkStrings[language]);
26
+ }
27
+ if (!this.opts.app && !this.opts.appPackage) {
28
+ this.log.errorAndThrow("One of 'app' or 'appPackage' capabilities should must be specified");
29
+ }
30
+ let app = this.opts.app;
31
+ const tmpRoot = await _support.tempDir.openDir();
32
+ try {
33
+ if (!app) {
34
+ try {
35
+ app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);
36
+ } catch (err) {
37
+ this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);
38
+ }
39
+ }
40
+ if (!(await _support.fs.exists(app))) {
41
+ this.log.errorAndThrow(`The app at '${app}' does not exist`);
42
+ }
43
+ try {
44
+ const {
45
+ apkStrings
46
+ } = await this.adb.extractStringsFromApk(app, language, tmpRoot);
47
+ this.apkStrings[language] = apkStrings;
48
+ return preprocessStringsMap(apkStrings);
49
+ } catch (err) {
50
+ this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);
51
+ }
52
+ } finally {
53
+ await _support.fs.rimraf(tmpRoot);
54
+ }
55
+ };
56
+ commands.mobileGetAppStrings = async function mobileGetAppStrings(opts = {}) {
57
+ return await this.getStrings(opts.language);
58
+ };
59
+ var _default = commands;
60
+ exports.default = _default;
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc3VwcG9ydCIsImNvbW1hbmRzIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiYWRiIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJsb2ciLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwibW9iaWxlR2V0QXBwU3RyaW5ncyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvYXBwLXN0cmluZ3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG5jb21tYW5kcy5nZXRTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgTm8gbGFuZ3VhZ2Ugc3BlY2lmaWVkLCByZXR1cm5pbmcgc3RyaW5ncyBmb3I6ICR7bGFuZ3VhZ2V9YCk7XG4gIH1cblxuICAvLyBDbGllbnRzIHJlcXVpcmUgdGhlIHJlc3VsdGluZyBtYXBwaW5nIHRvIGhhdmUgYm90aCBrZXlzXG4gIC8vIGFuZCB2YWx1ZXMgb2YgdHlwZSBzdHJpbmdcbiAgY29uc3QgcHJlcHJvY2Vzc1N0cmluZ3NNYXAgPSBmdW5jdGlvbiAobWFwcGluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBfLmlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGlmICh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBzdHJpbmdzXG4gICAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xuICB9XG5cbiAgaWYgKCF0aGlzLm9wdHMuYXBwICYmICF0aGlzLm9wdHMuYXBwUGFja2FnZSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coXCJPbmUgb2YgJ2FwcCcgb3IgJ2FwcFBhY2thZ2UnIGNhcGFiaWxpdGllcyBzaG91bGQgbXVzdCBiZSBzcGVjaWZpZWRcIik7XG4gIH1cblxuICBsZXQgYXBwID0gdGhpcy5vcHRzLmFwcDtcbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICB0cnkge1xuICAgIGlmICghYXBwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhcHAgPSBhd2FpdCB0aGlzLmFkYi5wdWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlLCB0bXBSb290KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhcHApKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgYXBwIGF0ICcke2FwcH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHthcGtTdHJpbmdzfSA9IGF3YWl0IHRoaXMuYWRiLmV4dHJhY3RTdHJpbmdzRnJvbUFwayhhcHAsIGxhbmd1YWdlLCB0bXBSb290KTtcbiAgICAgIHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0gPSBhcGtTdHJpbmdzO1xuICAgICAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKGFwa1N0cmluZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGV4dHJhY3Qgc3RyaW5ncyBmcm9tICcke2FwcH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdldEFwcFN0cmluZ3NPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZz99IGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24gdG8gZmV0Y2ggYXBwIHN0cmluZ3MgbWFwcGluZyBmb3IuIElmIG5vXG4gKiBsYW5ndWFnZSBpcyBwcm92aWRlZCB0aGVuIHN0cmluZ3MgZm9yIHRoZSBkZWZhdWx0IGxhbmd1YWdlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICogd291bGQgYmUgcmV0dXJuZWQuIEV4YW1wbGVzOiBlbiwgZnJcbiAqL1xuXG4vKipcbiAqIFJldHJpdmVzIGFwcCBzdHJpbmdzIGZyb20gaXRzIHJlc291cmNlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlXG4gKiBvciB0aGUgZGVmYXVsdCBkZXZpY2UgbGFuZ3VhZ2UuXG4gKlxuICogQHBhcmFtIHtHZXRBcHBTdHJpbmdzT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gQXBwIHN0cmluZ3MgbWFwXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldEFwcFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRBcHBTdHJpbmdzIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RyaW5ncyhvcHRzLmxhbmd1YWdlKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxNQUFNRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRW5CQSxRQUFRLENBQUNDLFVBQVUsR0FBRyxnQkFBZ0JDLFFBQVEsRUFBRTtFQUM5QyxJQUFJLENBQUNBLFFBQVEsRUFBRTtJQUNiQSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsaUJBQWlCLEVBQUU7SUFDN0MsSUFBSSxDQUFDQyxHQUFHLENBQUNDLElBQUksQ0FBRSxpREFBZ0RKLFFBQVMsRUFBQyxDQUFDO0VBQzVFO0VBSUEsTUFBTUssb0JBQW9CLEdBQUcsU0FBQUEsQ0FBVUMsT0FBTyxFQUFFO0lBQzlDLE1BQU1DLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakIsS0FBSyxNQUFNLENBQUNDLEdBQUcsRUFBRUMsS0FBSyxDQUFDLElBQUlDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDTCxPQUFPLENBQUMsRUFBRTtNQUM3Q0MsTUFBTSxDQUFDQyxHQUFHLENBQUMsR0FBR0UsZUFBQyxDQUFDRSxRQUFRLENBQUNILEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUdJLElBQUksQ0FBQ0MsU0FBUyxDQUFDTCxLQUFLLENBQUM7SUFDakU7SUFDQSxPQUFPRixNQUFNO0VBQ2YsQ0FBQztFQUVELElBQUksSUFBSSxDQUFDUSxVQUFVLENBQUNmLFFBQVEsQ0FBQyxFQUFFO0lBRTdCLE9BQU9LLG9CQUFvQixDQUFDLElBQUksQ0FBQ1UsVUFBVSxDQUFDZixRQUFRLENBQUMsQ0FBQztFQUN4RDtFQUVBLElBQUksQ0FBQyxJQUFJLENBQUNnQixJQUFJLENBQUNDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQ0QsSUFBSSxDQUFDRSxVQUFVLEVBQUU7SUFDM0MsSUFBSSxDQUFDZixHQUFHLENBQUNnQixhQUFhLENBQUMsb0VBQW9FLENBQUM7RUFDOUY7RUFFQSxJQUFJRixHQUFHLEdBQUcsSUFBSSxDQUFDRCxJQUFJLENBQUNDLEdBQUc7RUFDdkIsTUFBTUcsT0FBTyxHQUFHLE1BQU1DLGdCQUFPLENBQUNDLE9BQU8sRUFBRTtFQUN2QyxJQUFJO0lBQ0YsSUFBSSxDQUFDTCxHQUFHLEVBQUU7TUFDUixJQUFJO1FBQ0ZBLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQ2hCLEdBQUcsQ0FBQ3NCLE9BQU8sQ0FBQyxJQUFJLENBQUNQLElBQUksQ0FBQ0UsVUFBVSxFQUFFRSxPQUFPLENBQUM7TUFDN0QsQ0FBQyxDQUFDLE9BQU9JLEdBQUcsRUFBRTtRQUNaLElBQUksQ0FBQ3JCLEdBQUcsQ0FBQ2dCLGFBQWEsQ0FBRSwrQkFBOEIsSUFBSSxDQUFDSCxJQUFJLENBQUNFLFVBQVcsc0JBQXFCTSxHQUFHLENBQUNDLE9BQVEsRUFBQyxDQUFDO01BQ2hIO0lBQ0Y7SUFFQSxJQUFJLEVBQUMsTUFBTUMsV0FBRSxDQUFDQyxNQUFNLENBQUNWLEdBQUcsQ0FBQyxHQUFFO01BQ3pCLElBQUksQ0FBQ2QsR0FBRyxDQUFDZ0IsYUFBYSxDQUFFLGVBQWNGLEdBQUksa0JBQWlCLENBQUM7SUFDOUQ7SUFFQSxJQUFJO01BQ0YsTUFBTTtRQUFDRjtNQUFVLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQ2QsR0FBRyxDQUFDMkIscUJBQXFCLENBQUNYLEdBQUcsRUFBRWpCLFFBQVEsRUFBRW9CLE9BQU8sQ0FBQztNQUNqRixJQUFJLENBQUNMLFVBQVUsQ0FBQ2YsUUFBUSxDQUFDLEdBQUdlLFVBQVU7TUFDdEMsT0FBT1Ysb0JBQW9CLENBQUNVLFVBQVUsQ0FBQztJQUN6QyxDQUFDLENBQUMsT0FBT1MsR0FBRyxFQUFFO01BQ1osSUFBSSxDQUFDckIsR0FBRyxDQUFDZ0IsYUFBYSxDQUFFLGdDQUErQkYsR0FBSSxzQkFBcUJPLEdBQUcsQ0FBQ0MsT0FBUSxFQUFDLENBQUM7SUFDaEc7RUFDRixDQUFDLFNBQVM7SUFDUixNQUFNQyxXQUFFLENBQUNHLE1BQU0sQ0FBQ1QsT0FBTyxDQUFDO0VBQzFCO0FBQ0YsQ0FBQztBQWdCRHRCLFFBQVEsQ0FBQ2dDLG1CQUFtQixHQUFHLGVBQWVBLG1CQUFtQkEsQ0FBRWQsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzVFLE9BQU8sTUFBTSxJQUFJLENBQUNqQixVQUFVLENBQUNpQixJQUFJLENBQUNoQixRQUFRLENBQUM7QUFDN0MsQ0FBQztBQUFDLElBQUErQixRQUFBLEdBRWFqQyxRQUFRO0FBQUFrQyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-strings.js","names":["_lodash","_interopRequireDefault","require","_support","commands","getStrings","language","adb","getDeviceLanguage","log","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","mobileGetAppStrings","_default","exports","default"],"sources":["../../../lib/commands/app-strings.js"],"sourcesContent":["import _ from 'lodash';\nimport { fs, tempDir } from 'appium/support';\n\nconst commands = {};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\n/**\n * @typedef {Object} GetAppStringsOptions\n * @property {string?} language The language abbreviation to fetch app strings mapping for. If no\n * language is provided then strings for the default language on the device under test\n * would be returned. Examples: en, fr\n */\n\n/**\n * Retrives app strings from its resources for the given language\n * or the default device language.\n *\n * @param {GetAppStringsOptions} opts\n * @returns {Promise<object>} App strings map\n */\ncommands.mobileGetAppStrings = async function mobileGetAppStrings (opts = {}) {\n return await this.getStrings(opts.language);\n};\n\nexport default commands;"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,MAAME,QAAQ,GAAG,CAAC,CAAC;AAEnBA,QAAQ,CAACC,UAAU,GAAG,gBAAgBC,QAAQ,EAAE;EAC9C,IAAI,CAACA,QAAQ,EAAE;IACbA,QAAQ,GAAG,MAAM,IAAI,CAACC,GAAG,CAACC,iBAAiB,EAAE;IAC7C,IAAI,CAACC,GAAG,CAACC,IAAI,CAAE,iDAAgDJ,QAAS,EAAC,CAAC;EAC5E;EAIA,MAAMK,oBAAoB,GAAG,SAAAA,CAAUC,OAAO,EAAE;IAC9C,MAAMC,MAAM,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,eAAC,CAACC,OAAO,CAACL,OAAO,CAAC,EAAE;MAC7CC,MAAM,CAACC,GAAG,CAAC,GAAGE,eAAC,CAACE,QAAQ,CAACH,KAAK,CAAC,GAAGA,KAAK,GAAGI,IAAI,CAACC,SAAS,CAACL,KAAK,CAAC;IACjE;IACA,OAAOF,MAAM;EACf,CAAC;EAED,IAAI,IAAI,CAACQ,UAAU,CAACf,QAAQ,CAAC,EAAE;IAE7B,OAAOK,oBAAoB,CAAC,IAAI,CAACU,UAAU,CAACf,QAAQ,CAAC,CAAC;EACxD;EAEA,IAAI,CAAC,IAAI,CAACgB,IAAI,CAACC,GAAG,IAAI,CAAC,IAAI,CAACD,IAAI,CAACE,UAAU,EAAE;IAC3C,IAAI,CAACf,GAAG,CAACgB,aAAa,CAAC,oEAAoE,CAAC;EAC9F;EAEA,IAAIF,GAAG,GAAG,IAAI,CAACD,IAAI,CAACC,GAAG;EACvB,MAAMG,OAAO,GAAG,MAAMC,gBAAO,CAACC,OAAO,EAAE;EACvC,IAAI;IACF,IAAI,CAACL,GAAG,EAAE;MACR,IAAI;QACFA,GAAG,GAAG,MAAM,IAAI,CAAChB,GAAG,CAACsB,OAAO,CAAC,IAAI,CAACP,IAAI,CAACE,UAAU,EAAEE,OAAO,CAAC;MAC7D,CAAC,CAAC,OAAOI,GAAG,EAAE;QACZ,IAAI,CAACrB,GAAG,CAACgB,aAAa,CAAE,+BAA8B,IAAI,CAACH,IAAI,CAACE,UAAW,sBAAqBM,GAAG,CAACC,OAAQ,EAAC,CAAC;MAChH;IACF;IAEA,IAAI,EAAC,MAAMC,WAAE,CAACC,MAAM,CAACV,GAAG,CAAC,GAAE;MACzB,IAAI,CAACd,GAAG,CAACgB,aAAa,CAAE,eAAcF,GAAI,kBAAiB,CAAC;IAC9D;IAEA,IAAI;MACF,MAAM;QAACF;MAAU,CAAC,GAAG,MAAM,IAAI,CAACd,GAAG,CAAC2B,qBAAqB,CAACX,GAAG,EAAEjB,QAAQ,EAAEoB,OAAO,CAAC;MACjF,IAAI,CAACL,UAAU,CAACf,QAAQ,CAAC,GAAGe,UAAU;MACtC,OAAOV,oBAAoB,CAACU,UAAU,CAAC;IACzC,CAAC,CAAC,OAAOS,GAAG,EAAE;MACZ,IAAI,CAACrB,GAAG,CAACgB,aAAa,CAAE,gCAA+BF,GAAI,sBAAqBO,GAAG,CAACC,OAAQ,EAAC,CAAC;IAChG;EACF,CAAC,SAAS;IACR,MAAMC,WAAE,CAACG,MAAM,CAACT,OAAO,CAAC;EAC1B;AACF,CAAC;AAgBDtB,QAAQ,CAACgC,mBAAmB,GAAG,eAAeA,mBAAmBA,CAAEd,IAAI,GAAG,CAAC,CAAC,EAAE;EAC5E,OAAO,MAAM,IAAI,CAACjB,UAAU,CAACiB,IAAI,CAAChB,QAAQ,CAAC;AAC7C,CAAC;AAAC,IAAA+B,QAAA,GAEajC,QAAQ;AAAAkC,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -9,7 +9,6 @@ require("source-map-support/register");
9
9
  var _lodash = _interopRequireDefault(require("lodash"));
10
10
  var _bluebird = _interopRequireDefault(require("bluebird"));
11
11
  var _driver = require("appium/driver");
12
- var _support = require("appium/support");
13
12
  var _extensions = require("../extensions");
14
13
  let extensions = {},
15
14
  commands = {},
@@ -30,50 +29,6 @@ commands.keyevent = async function (keycode, metastate) {
30
29
  commands.back = async function () {
31
30
  await this.adb.keyevent(4);
32
31
  };
33
- commands.getStrings = async function (language) {
34
- if (!language) {
35
- language = await this.adb.getDeviceLanguage();
36
- this.log.info(`No language specified, returning strings for: ${language}`);
37
- }
38
- const preprocessStringsMap = function (mapping) {
39
- const result = {};
40
- for (const [key, value] of _lodash.default.toPairs(mapping)) {
41
- result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
42
- }
43
- return result;
44
- };
45
- if (this.apkStrings[language]) {
46
- return preprocessStringsMap(this.apkStrings[language]);
47
- }
48
- if (!this.opts.app && !this.opts.appPackage) {
49
- this.log.errorAndThrow("One of 'app' or 'appPackage' capabilities should must be specified");
50
- }
51
- let app = this.opts.app;
52
- const tmpRoot = await _support.tempDir.openDir();
53
- try {
54
- if (!app) {
55
- try {
56
- app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);
57
- } catch (err) {
58
- this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);
59
- }
60
- }
61
- if (!(await _support.fs.exists(app))) {
62
- this.log.errorAndThrow(`The app at '${app}' does not exist`);
63
- }
64
- try {
65
- const {
66
- apkStrings
67
- } = await this.adb.extractStringsFromApk(app, language, tmpRoot);
68
- this.apkStrings[language] = apkStrings;
69
- return preprocessStringsMap(apkStrings);
70
- } catch (err) {
71
- this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);
72
- }
73
- } finally {
74
- await _support.fs.rimraf(tmpRoot);
75
- }
76
- };
77
32
  commands.getDisplayDensity = async function getDisplayDensity() {
78
33
  return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});
79
34
  };
@@ -142,6 +97,7 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
142
97
  stopService: 'mobileStopService',
143
98
  broadcast: 'mobileBroadcast',
144
99
  getContexts: 'mobileGetContexts',
100
+ getAppStrings: 'mobileGetAppStrings',
145
101
  installMultipleApks: 'mobileInstallMultipleApks',
146
102
  unlock: 'mobileUnlock',
147
103
  refreshGpsCache: 'mobileRefreshGpsCache',
@@ -223,4 +179,4 @@ commands.mobileInstallMultipleApks = async function (opts = {}) {
223
179
  Object.assign(extensions, commands, helpers);
224
180
  var _default = extensions;
225
181
  exports.default = _default;
226
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJfZHJpdmVyIiwiX3N1cHBvcnQiLCJfZXh0ZW5zaW9ucyIsImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJnZXRQYWdlU291cmNlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImRvU2VuZEtleXMiLCJwYXJhbXMiLCJrZXlldmVudCIsImtleWNvZGUiLCJtZXRhc3RhdGUiLCJsb2ciLCJkZWJ1ZyIsImJhY2siLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXBrU3RyaW5ncyIsIm9wdHMiLCJhcHAiLCJhcHBQYWNrYWdlIiwiZXJyb3JBbmRUaHJvdyIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInB1bGxBcGsiLCJlcnIiLCJtZXNzYWdlIiwiZnMiLCJleGlzdHMiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJyaW1yYWYiLCJnZXREaXNwbGF5RGVuc2l0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJkcmFnR2VzdHVyZSIsImZsaW5nR2VzdHVyZSIsImRvdWJsZUNsaWNrR2VzdHVyZSIsImNsaWNrR2VzdHVyZSIsImxvbmdDbGlja0dlc3R1cmUiLCJwaW5jaENsb3NlR2VzdHVyZSIsInBpbmNoT3Blbkdlc3R1cmUiLCJzd2lwZUdlc3R1cmUiLCJzY3JvbGxHZXN0dXJlIiwic2Nyb2xsQmFja1RvIiwic2Nyb2xsIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0IiwiZGVlcExpbmsiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImFjY2VwdEFsZXJ0IiwiZGlzbWlzc0FsZXJ0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJ0eXBlIiwic2Vuc29yU2V0IiwicHVzaEZpbGUiLCJwdWxsRmlsZSIsInB1bGxGb2xkZXIiLCJkZWxldGVGaWxlIiwiaXNBcHBJbnN0YWxsZWQiLCJxdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJpbnN0YWxsQXBwIiwiY2xlYXJBcHAiLCJzdGFydEFjdGl2aXR5Iiwic3RhcnRTZXJ2aWNlIiwic3RvcFNlcnZpY2UiLCJicm9hZGNhc3QiLCJnZXRDb250ZXh0cyIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJ1bmxvY2siLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJnZXRDb25uZWN0aXZpdHkiLCJzZXRDb25uZWN0aXZpdHkiLCJoYXMiLCJlcnJvcnMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsIm1vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCIsImdldFZpZXdwb3J0U2NyZWVuc2hvdCIsIm1vYmlsZVZpZXdQb3J0UmVjdCIsImdldFZpZXdQb3J0UmVjdCIsInNldFVybCIsInVybCIsInN0YXJ0VXJpIiwibW9iaWxlRGVlcExpbmsiLCJwYWNrYWdlIiwicGtnIiwid2FpdEZvckxhdW5jaCIsIm9wZW5Ob3RpZmljYXRpb25zIiwidXBkYXRlU2V0dGluZ3MiLCJzZXR0aW5ncyIsInVwZGF0ZSIsImdldFNldHRpbmdzIiwiZHJpdmVyU2V0dGluZ3MiLCJzZXJ2ZXJTZXR0aW5ncyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZVR5cGUiLCJ0ZXh0IiwiaXNVbmRlZmluZWQiLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsImlzRW1wdHkiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkIiLCJhbGwiLCJtYXAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwib3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuXG4gICAgZ2V0Q29ubmVjdGl2aXR5OiAnbW9iaWxlR2V0Q29ubmVjdGl2aXR5JyxcbiAgICBzZXRDb25uZWN0aXZpdHk6ICdtb2JpbGVTZXRDb25uZWN0aXZpdHknLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVs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
182
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYmx1ZWJpcmQiLCJfZHJpdmVyIiwiX2V4dGVuc2lvbnMiLCJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJtb2JpbGVDb21tYW5kc01hcHBpbmciLCJzaGVsbCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsImRyYWdHZXN0dXJlIiwiZmxpbmdHZXN0dXJlIiwiZG91YmxlQ2xpY2tHZXN0dXJlIiwiY2xpY2tHZXN0dXJlIiwibG9uZ0NsaWNrR2VzdHVyZSIsInBpbmNoQ2xvc2VHZXN0dXJlIiwicGluY2hPcGVuR2VzdHVyZSIsInN3aXBlR2VzdHVyZSIsInNjcm9sbEdlc3R1cmUiLCJzY3JvbGxCYWNrVG8iLCJzY3JvbGwiLCJ2aWV3cG9ydFNjcmVlbnNob3QiLCJ2aWV3cG9ydFJlY3QiLCJkZWVwTGluayIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiYWNjZXB0QWxlcnQiLCJkaXNtaXNzQWxlcnQiLCJiYXR0ZXJ5SW5mbyIsImRldmljZUluZm8iLCJnZXREZXZpY2VUaW1lIiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInR5cGUiLCJzZW5zb3JTZXQiLCJwdXNoRmlsZSIsInB1bGxGaWxlIiwicHVsbEZvbGRlciIsImRlbGV0ZUZpbGUiLCJpc0FwcEluc3RhbGxlZCIsInF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsInJlbW92ZUFwcCIsInRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJjbGVhckFwcCIsInN0YXJ0QWN0aXZpdHkiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsImJyb2FkY2FzdCIsImdldENvbnRleHRzIiwiZ2V0QXBwU3RyaW5ncyIsImluc3RhbGxNdWx0aXBsZUFwa3MiLCJ1bmxvY2siLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJnZXRDb25uZWN0aXZpdHkiLCJzZXRDb25uZWN0aXZpdHkiLCJfIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsImFwcFBhY2thZ2UiLCJtb2JpbGVEZWVwTGluayIsInBhY2thZ2UiLCJwa2ciLCJ3YWl0Rm9yTGF1bmNoIiwib3Blbk5vdGlmaWNhdGlvbnMiLCJ1cGRhdGVTZXR0aW5ncyIsInNldHRpbmdzIiwidXBkYXRlIiwiZ2V0U2V0dGluZ3MiLCJkcml2ZXJTZXR0aW5ncyIsInNlcnZlclNldHRpbmdzIiwid3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QiLCJ3cmFwcGVkIiwic3VzcGVuZENocm9tZWRyaXZlclByb3h5IiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwibW9iaWxlVHlwZSIsInRleHQiLCJpc1VuZGVmaW5lZCIsImVycm9yQW5kVGhyb3ciLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsImlzRW1wdHkiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIkIiLCJhbGwiLCJtYXAiLCJhcHAiLCJjb25maWd1cmVBcHAiLCJBUEtfRVhURU5TSU9OIiwib3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBJZ25vcmluZyBtZXRhc3RhdGUgJHttZXRhc3RhdGV9YCk7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KGtleWNvZGUpO1xufTtcblxuLy8gVXNlIEFEQiBzaW5jZSB3ZSBkb24ndCBoYXZlIFVpQXV0b21hdG9yXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudCg0KTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgcHVzaEZpbGU6ICdtb2JpbGVQdXNoRmlsZScsXG4gICAgcHVsbEZpbGU6ICdtb2JpbGVQdWxsRmlsZScsXG4gICAgcHVsbEZvbGRlcjogJ21vYmlsZVB1bGxGb2xkZXInLFxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICByZW1vdmVBcHA6ICdtb2JpbGVSZW1vdmVBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRBY3Rpdml0eTogJ21vYmlsZVN0YXJ0QWN0aXZpdHknLFxuICAgIHN0YXJ0U2VydmljZTogJ21vYmlsZVN0YXJ0U2VydmljZScsXG4gICAgc3RvcFNlcnZpY2U6ICdtb2JpbGVTdG9wU2VydmljZScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgZ2V0QXBwU3RyaW5nczogJ21vYmlsZUdldEFwcFN0cmluZ3MnLFxuXG4gICAgaW5zdGFsbE11bHRpcGxlQXBrczogJ21vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcblxuICAgIGdldENvbm5lY3Rpdml0eTogJ21vYmlsZUdldENvbm5lY3Rpdml0eScsXG4gICAgc2V0Q29ubmVjdGl2aXR5OiAnbW9iaWxlU2V0Q29ubmVjdGl2aXR5JyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuY29tbWFuZHMubW9iaWxlVmlld3BvcnRTY3JlZW5zaG90ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3cG9ydFNjcmVlbnNob3QoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUmVjdGFuZ2xlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIFRoZSBsZWZ0IGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aCBvZiBSZWN0YW5nbGUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodCBvZiBSZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqIEByZXR1cm5zIHtSZWN0YW5nbGV9IFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlVmlld1BvcnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVmlld1BvcnRSZWN0ICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Vmlld1BvcnRSZWN0KCk7XG59O1xuXG5jb21tYW5kcy5zZXRVcmwgPSBhc3luYyBmdW5jdGlvbiAodXJsKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEZWVwTGlua09wdHNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gdXJsIC0gVGhlIG5hbWUgb2YgVVJMIHRvIHN0YXJ0LlxuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYWNrYWdlIC0gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gc3RhcnQgdGhlIFVSSSB3aXRoLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gd2FpdEZvckxhdW5jaCBbdHJ1ZV0gLSBpZiBgZmFsc2VgIHRoZW4gYWRiIHdvbid0IHdhaXRcbiAqIGZvciB0aGUgc3RhcnRlZCBhY3Rpdml0eSB0byByZXR1cm4gdGhlIGNvbnRyb2xcbiAqL1xuXG4vKipcbiAqIFN0YXJ0IFVSTCB0aGF0IHRha2UgdXNlcnMgZGlyZWN0bHkgdG8gc3BlY2lmaWMgY29udGVudCBpbiB0aGUgYXBwXG4gKiBAcGFyYW0ge0RlZXBMaW5rT3B0c30gb3B0c1xuICovXG5jb21tYW5kcy5tb2JpbGVEZWVwTGluayA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHVybCxcbiAgICBwYWNrYWdlOiBwa2csXG4gICAgd2FpdEZvckxhdW5jaCxcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydFVyaSh1cmwsIHBrZywgeyB3YWl0Rm9yTGF1bmNoIH0pO1xufTtcblxuY29tbWFuZHMub3Blbk5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL29wZW5fbm90aWZpY2F0aW9ucycsICdQT1NUJywge30pO1xufTtcblxuY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoc2V0dGluZ3MpIHtcbiAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoc2V0dGluZ3MpO1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vc2V0dGluZ3MnLCAnUE9TVCcsIHtzZXR0aW5nc30pO1xufTtcblxuY29tbWFuZHMuZ2V0U2V0dGluZ3MgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRyaXZlclNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5nZXRTZXR0aW5ncygpO1xuICBjb25zdCBzZXJ2ZXJTZXR0aW5ncyA9IGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdHRVQnKTtcbiAgcmV0dXJuIHsuLi5kcml2ZXJTZXR0aW5ncywgLi4uc2VydmVyU2V0dGluZ3N9O1xufTtcblxuLyoqXG4gKiBPdmVycmlkaW5nIGFwcGl1bS1hbmRyb2lkLWRyaXZlcidzIHdyYXBCb290c3RyYXBEaXNjb25uZWN0LFxuICogdW5saWtlIGluIGFwcGl1bS1hbmRyb2lkLWRyaXZlciBhdm9pZGluZyBhZGIgcmVzdGFydGluZyBhcyBpdCBpbnRlcm5cbiAqIGtpbGxzIFVpQXV0b21hdG9yMiBzZXJ2ZXIgcnVubmluZyBpbiB0aGUgZGV2aWNlLlxuICoqL1xuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uICh3cmFwcGVkKSB7XG4gIGF3YWl0IHdyYXBwZWQoKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gdWlhdXRvbWF0b3IyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGluZm8gZW50cmllcyBjYW4gYmUgZm91bmQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXIvYmxvYi9tYXN0ZXIvYXBwL3NyYy9tYWluL2phdmEvaW8vYXBwaXVtL3VpYXV0b21hdG9yMi9oYW5kbGVyL0dldERldmljZUluZm8uamF2YVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUeXBpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd8bnVtYmVyfGJvb2xlYW59IHRleHQgLSBUaGUgdGV4dCB0byB0eXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtUeXBpbmdPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICogQHRocm93cyB7RXJyb3J9IGlmIGB0ZXh0YCBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gcHJvdmlkZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVHlwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR5cGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGV4dCxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHRleHQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlICd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudHlwZVVuaWNvZGUodGV4dCk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGFwa3MgLSBUaGUgbGlzdCBvZiBBUEtzIHRvIGluc3RhbGwuIEVhY2ggQVBLIHNob3VsZCBiZSBhIHBhdGggdG8gYSBhcGtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRvd25sb2FkYWJsZSBVUkwgYXMgSFRUUC9IVFRQUy5cbiAqIEBwcm9wZXJ0eSB7SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEluc3RhbGwgbXVsdGlwbGUgQVBLcyB3aXRoIGBpbnN0YWxsLW11bHRpcGxlYCBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIG9jY3VyZWQgd2hpbGUgaW5zdGFsbGluZyB0aGUgZ2l2ZW4gQVBLcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzQXJyYXkob3B0cy5hcGtzKSB8fCBfLmlzRW1wdHkob3B0cy5hcGtzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ05vIGFwa3MgYXJlIGdpdmVuIHRvIGluc3RhbGwnKTtcbiAgfVxuICBjb25zdCBhcGtzID0gYXdhaXQgQi5hbGwob3B0cy5hcGtzXG4gICAgLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgW0FQS19FWFRFTlNJT05dKSkpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsTXVsdGlwbGVBcGtzKGFwa3MsIG9wdHMub3B0aW9ucyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFJSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ2ZDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDYkMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQkQsUUFBUSxDQUFDRSxhQUFhLEdBQUcsa0JBQWtCO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRURMLFFBQVEsQ0FBQ00sWUFBWSxHQUFHLGtCQUFrQjtFQUN4QyxPQUFRLE9BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNDLFdBQVcsRUFBRSxJQUFHLEVBQUUsR0FDcEMsTUFBTSxJQUFJLENBQUNMLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQ25GLE1BQU0sSUFBSSxDQUFDRSxHQUFHLENBQUNELFlBQVksRUFBRztBQUNyQyxDQUFDO0FBR0ROLFFBQVEsQ0FBQ1MsVUFBVSxHQUFHLGdCQUFnQkMsTUFBTSxFQUFFO0VBQzVDLE1BQU0sSUFBSSxDQUFDUCxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUVLLE1BQU0sQ0FBQztBQUNsRSxDQUFDO0FBR0RWLFFBQVEsQ0FBQ1csUUFBUSxHQUFHLGdCQUFnQkMsT0FBTyxFQUFFQyxTQUFTLEVBQUU7RUFDdEQsSUFBSSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBRSxzQkFBcUJGLFNBQVUsRUFBQyxDQUFDO0VBQ2pELE1BQU0sSUFBSSxDQUFDTixHQUFHLENBQUNJLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDO0FBQ2xDLENBQUM7QUFHRFosUUFBUSxDQUFDZ0IsSUFBSSxHQUFHLGtCQUFrQjtFQUNoQyxNQUFNLElBQUksQ0FBQ1QsR0FBRyxDQUFDSSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFFRFgsUUFBUSxDQUFDaUIsaUJBQWlCLEdBQUcsZUFBZUEsaUJBQWlCQSxDQUFBLEVBQUk7RUFDL0QsT0FBTyxNQUFNLElBQUksQ0FBQ2QsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUdETCxRQUFRLENBQUNrQixhQUFhLEdBQUcsa0JBQWtCO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNmLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFHREwsUUFBUSxDQUFDbUIsYUFBYSxHQUFHLGtCQUFrQjtFQUN6QyxNQUFNO0lBQUNDLEtBQUs7SUFBRUM7RUFBTSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNILGFBQWEsRUFBRTtFQUNsRCxPQUFPO0lBQ0xFLEtBQUs7SUFDTEMsTUFBTTtJQUNOQyxDQUFDLEVBQUUsQ0FBQztJQUNKQyxDQUFDLEVBQUU7RUFDTCxDQUFDO0FBQ0gsQ0FBQztBQUVEeEIsVUFBVSxDQUFDeUIsYUFBYSxHQUFHLGdCQUFnQkMsYUFBYSxFQUFFQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbkUsTUFBTUMscUJBQXFCLEdBQUc7SUFDNUJDLEtBQUssRUFBRSxhQUFhO0lBRXBCQyxxQkFBcUIsRUFBRSw2QkFBNkI7SUFFcERDLFdBQVcsRUFBRSxtQkFBbUI7SUFDaENDLFlBQVksRUFBRSxvQkFBb0I7SUFDbENDLGtCQUFrQixFQUFFLDBCQUEwQjtJQUM5Q0MsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsZ0JBQWdCLEVBQUUsd0JBQXdCO0lBQzFDQyxpQkFBaUIsRUFBRSx5QkFBeUI7SUFDNUNDLGdCQUFnQixFQUFFLHdCQUF3QjtJQUMxQ0MsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsYUFBYSxFQUFFLHFCQUFxQjtJQUNwQ0MsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQ0MsTUFBTSxFQUFFLGNBQWM7SUFDdEJDLGtCQUFrQixFQUFFLDBCQUEwQjtJQUM5Q0MsWUFBWSxFQUFFLG9CQUFvQjtJQUVsQ0MsUUFBUSxFQUFFLGdCQUFnQjtJQUUxQkMsa0JBQWtCLEVBQUUsMEJBQTBCO0lBQzlDQyxpQkFBaUIsRUFBRSx5QkFBeUI7SUFFNUNDLFdBQVcsRUFBRSxtQkFBbUI7SUFDaENDLFlBQVksRUFBRSxvQkFBb0I7SUFFbENDLFdBQVcsRUFBRSxzQkFBc0I7SUFFbkNDLFVBQVUsRUFBRSxxQkFBcUI7SUFFakNDLGFBQWEsRUFBRSxxQkFBcUI7SUFFcENDLGlCQUFpQixFQUFFLHlCQUF5QjtJQUM1Q0MsY0FBYyxFQUFFLHNCQUFzQjtJQUV0Q0MsbUJBQW1CLEVBQUUsMkJBQTJCO0lBRWhEQyxvQkFBb0IsRUFBRSw0QkFBNEI7SUFDbERDLG1CQUFtQixFQUFFLDJCQUEyQjtJQUVoREMsZ0JBQWdCLEVBQUUsd0JBQXdCO0lBRTFDQyxPQUFPLEVBQUUsZUFBZTtJQUV4QkMsSUFBSSxFQUFFLFlBQVk7SUFDbEJDLFNBQVMsRUFBRSxXQUFXO0lBRXRCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxVQUFVLEVBQUUsa0JBQWtCO0lBRTlCQyxjQUFjLEVBQUUsc0JBQXNCO0lBQ3RDQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBQzVCQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxRQUFRLEVBQUUsZ0JBQWdCO0lBRTFCQyxhQUFhLEVBQUUscUJBQXFCO0lBQ3BDQyxZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDQyxXQUFXLEVBQUUsbUJBQW1CO0lBQ2hDQyxTQUFTLEVBQUUsaUJBQWlCO0lBRTVCQyxXQUFXLEVBQUUsbUJBQW1CO0lBRWhDQyxhQUFhLEVBQUUscUJBQXFCO0lBRXBDQyxtQkFBbUIsRUFBRSwyQkFBMkI7SUFFaERDLE1BQU0sRUFBRSxjQUFjO0lBRXRCQyxlQUFlLEVBQUUsdUJBQXVCO0lBRXhDQyw2QkFBNkIsRUFBRSxxQ0FBcUM7SUFDcEVDLGlDQUFpQyxFQUFFLHlDQUF5QztJQUM1RUMsNEJBQTRCLEVBQUUsb0NBQW9DO0lBRWxFQyxlQUFlLEVBQUUsdUJBQXVCO0lBQ3hDQyxlQUFlLEVBQUU7RUFDbkIsQ0FBQztFQUVELElBQUksQ0FBQ0MsZUFBQyxDQUFDQyxHQUFHLENBQUMzRCxxQkFBcUIsRUFBRUYsYUFBYSxDQUFDLEVBQUU7SUFDaEQsTUFBTSxJQUFJOEQsY0FBTSxDQUFDQyxtQkFBbUIsQ0FBRSwyQkFBMEIvRCxhQUFjLEtBQUksR0FDL0UsUUFBTzRELGVBQUMsQ0FBQ0ksSUFBSSxDQUFDOUQscUJBQXFCLENBQUUsMEJBQXlCLENBQUM7RUFDcEU7RUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDQSxxQkFBcUIsQ0FBQ0YsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDO0FBQy9ELENBQUM7QUFFRDFCLFFBQVEsQ0FBQzBGLHdCQUF3QixHQUFHLGtCQUFrQjtFQUNwRCxPQUFPLE1BQU0sSUFBSSxDQUFDQyxxQkFBcUIsRUFBRTtBQUMzQyxDQUFDO0FBY0QzRixRQUFRLENBQUM0RixrQkFBa0IsR0FBRyxlQUFlQSxrQkFBa0JBLENBQUEsRUFBSTtFQUNqRSxPQUFPLE1BQU0sSUFBSSxDQUFDQyxlQUFlLEVBQUU7QUFDckMsQ0FBQztBQUVEN0YsUUFBUSxDQUFDOEYsTUFBTSxHQUFHLGdCQUFnQkMsR0FBRyxFQUFFO0VBQ3JDLE1BQU0sSUFBSSxDQUFDeEYsR0FBRyxDQUFDeUYsUUFBUSxDQUFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDckUsSUFBSSxDQUFDdUUsVUFBVSxDQUFDO0FBQ3BELENBQUM7QUFjRGpHLFFBQVEsQ0FBQ2tHLGNBQWMsR0FBRyxnQkFBZ0J4RSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDbkQsTUFBTTtJQUNKcUUsR0FBRztJQUNISSxPQUFPLEVBQUVDLEdBQUc7SUFDWkM7RUFDRixDQUFDLEdBQUczRSxJQUFJO0VBQ1IsT0FBTyxNQUFNLElBQUksQ0FBQ25CLEdBQUcsQ0FBQ3lGLFFBQVEsQ0FBQ0QsR0FBRyxFQUFFSyxHQUFHLEVBQUU7SUFBRUM7RUFBYyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEckcsUUFBUSxDQUFDc0csaUJBQWlCLEdBQUcsa0JBQWtCO0VBQzdDLE9BQU8sTUFBTSxJQUFJLENBQUNuRyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLG1DQUFtQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRURMLFFBQVEsQ0FBQ3VHLGNBQWMsR0FBRyxnQkFBZ0JDLFFBQVEsRUFBRTtFQUNsRCxNQUFNLElBQUksQ0FBQ0EsUUFBUSxDQUFDQyxNQUFNLENBQUNELFFBQVEsQ0FBQztFQUNwQyxNQUFNLElBQUksQ0FBQ3JHLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFO0lBQUNtRztFQUFRLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUR4RyxRQUFRLENBQUMwRyxXQUFXLEdBQUcsa0JBQWtCO0VBQ3ZDLE1BQU1DLGNBQWMsR0FBRyxJQUFJLENBQUNILFFBQVEsQ0FBQ0UsV0FBVyxFQUFFO0VBQ2xELE1BQU1FLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQ3pHLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDO0VBQ3pGLE9BQU87SUFBQyxHQUFHc0csY0FBYztJQUFFLEdBQUdDO0VBQWMsQ0FBQztBQUMvQyxDQUFDO0FBT0QzRyxPQUFPLENBQUM0Ryx1QkFBdUIsR0FBRyxnQkFBZ0JDLE9BQU8sRUFBRTtFQUN6RCxNQUFNQSxPQUFPLEVBQUU7QUFDakIsQ0FBQztBQUdEN0csT0FBTyxDQUFDOEcsd0JBQXdCLEdBQUcsWUFBWTtFQUM3QyxJQUFJLENBQUNDLFlBQVksR0FBRyxJQUFJO0VBQ3hCLElBQUksQ0FBQ0MsV0FBVyxHQUFHLElBQUksQ0FBQzlHLFlBQVksQ0FBQzhHLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQy9HLFlBQVksQ0FBQztFQUN4RSxJQUFJLENBQUNnSCxZQUFZLEdBQUcsSUFBSSxDQUFDaEgsWUFBWSxDQUFDZ0gsWUFBWSxDQUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDL0csWUFBWSxDQUFDO0VBQzFFLElBQUksQ0FBQ2lILGNBQWMsR0FBRyxJQUFJO0FBQzVCLENBQUM7QUFNRHBILFFBQVEsQ0FBQ3FILG1CQUFtQixHQUFHLGtCQUFrQjtFQUMvQyxPQUFPLE1BQU0sSUFBSSxDQUFDbEgsWUFBWSxDQUFDQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUM7QUFDOUUsQ0FBQztBQWdCREwsUUFBUSxDQUFDc0gsVUFBVSxHQUFHLGVBQWVBLFVBQVVBLENBQUU1RixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDMUQsTUFBTTtJQUNKNkY7RUFDRixDQUFDLEdBQUc3RixJQUFJO0VBQ1IsSUFBSTJELGVBQUMsQ0FBQ21DLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDekcsR0FBRyxDQUFDMkcsYUFBYSxDQUFFLGtDQUFpQyxDQUFDO0VBQzVEO0VBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQ2xILEdBQUcsQ0FBQ21ILFdBQVcsQ0FBQ0gsSUFBSSxDQUFDO0FBQ3pDLENBQUM7QUFpQ0R2SCxRQUFRLENBQUMySCx5QkFBeUIsR0FBRyxnQkFBZ0JqRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDOUQsSUFBSSxDQUFDMkQsZUFBQyxDQUFDdUMsT0FBTyxDQUFDbEcsSUFBSSxDQUFDbUcsSUFBSSxDQUFDLElBQUl4QyxlQUFDLENBQUN5QyxPQUFPLENBQUNwRyxJQUFJLENBQUNtRyxJQUFJLENBQUMsRUFBRTtJQUNqRCxNQUFNLElBQUl0QyxjQUFNLENBQUN3QyxvQkFBb0IsQ0FBQyw4QkFBOEIsQ0FBQztFQUN2RTtFQUNBLE1BQU1GLElBQUksR0FBRyxNQUFNRyxpQkFBQyxDQUFDQyxHQUFHLENBQUN2RyxJQUFJLENBQUNtRyxJQUFJLENBQy9CSyxHQUFHLENBQUVDLEdBQUcsSUFBSyxJQUFJLENBQUNsSSxPQUFPLENBQUNtSSxZQUFZLENBQUNELEdBQUcsRUFBRSxDQUFDRSx5QkFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2pFLE1BQU0sSUFBSSxDQUFDOUgsR0FBRyxDQUFDc0UsbUJBQW1CLENBQUNnRCxJQUFJLEVBQUVuRyxJQUFJLENBQUM0RyxPQUFPLENBQUM7QUFDeEQsQ0FBQztBQUVEQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ3pJLFVBQVUsRUFBRUMsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFBQyxJQUFBd0ksUUFBQSxHQUU5QjFJLFVBQVU7QUFBQTJJLE9BQUEsQ0FBQUMsT0FBQSxHQUFBRixRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_bluebird","_driver","_support","_extensions","extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","_","toPairs","isString","JSON","stringify","apkStrings","opts","app","appPackage","errorAndThrow","tmpRoot","tempDir","openDir","pullApk","err","message","fs","exists","extractStringsFromApk","rimraf","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","configureApp","APK_EXTENSION","options","Object","assign","_default","exports","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { fs, tempDir } from 'appium/support';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getStrings = async function (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = function (mapping) {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n if (!this.opts.app && !this.opts.appPackage) {\n this.log.errorAndThrow(\"One of 'app' or 'appPackage' capabilities should must be specified\");\n }\n\n let app = this.opts.app;\n const tmpRoot = await tempDir.openDir();\n try {\n if (!app) {\n try {\n app = await this.adb.pullApk(this.opts.appPackage, tmpRoot);\n } catch (err) {\n this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);\n }\n }\n\n if (!await fs.exists(app)) {\n this.log.errorAndThrow(`The app at '${app}' does not exist`);\n }\n\n try {\n const {apkStrings} = await this.adb.extractStringsFromApk(app, language, tmpRoot);\n this.apkStrings[language] = apkStrings;\n return preprocessStringsMap(apkStrings);\n } catch (err) {\n this.log.errorAndThrow(`Cannot extract strings from '${app}'. Original error: ${err.message}`);\n }\n } finally {\n await fs.rimraf(tmpRoot);\n }\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
1
+ {"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_bluebird","_driver","_extensions","extensions","commands","helpers","getPageSource","uiautomator2","jwproxy","command","getClipboard","adb","getApiLevel","doSendKeys","params","keyevent","keycode","metastate","log","debug","back","getDisplayDensity","getWindowSize","getWindowRect","width","height","x","y","executeMobile","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","dragGesture","flingGesture","doubleClickGesture","clickGesture","longClickGesture","pinchCloseGesture","pinchOpenGesture","swipeGesture","scrollGesture","scrollBackTo","scroll","viewportScreenshot","viewportRect","deepLink","startLogsBroadcast","stopLogsBroadcast","acceptAlert","dismissAlert","batteryInfo","deviceInfo","getDeviceTime","changePermissions","getPermissions","performEditorAction","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","type","sensorSet","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startActivity","startService","stopService","broadcast","getContexts","getAppStrings","installMultipleApks","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","_","has","errors","UnknownCommandError","keys","mobileViewportScreenshot","getViewportScreenshot","mobileViewPortRect","getViewPortRect","setUrl","url","startUri","appPackage","mobileDeepLink","package","pkg","waitForLaunch","openNotifications","updateSettings","settings","update","getSettings","driverSettings","serverSettings","wrapBootstrapDisconnect","wrapped","suspendChromedriverProxy","chromedriver","proxyReqRes","bind","proxyCommand","jwpProxyActive","mobileGetDeviceInfo","mobileType","text","isUndefined","errorAndThrow","typeUnicode","mobileInstallMultipleApks","isArray","apks","isEmpty","InvalidArgumentError","B","all","map","app","configureApp","APK_EXTENSION","options","Object","assign","_default","exports","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport { errors } from 'appium/driver';\nimport { APK_EXTENSION } from '../extensions';\n\nlet extensions = {},\n commands = {},\n helpers = {};\n\ncommands.getPageSource = async function () {\n return await this.uiautomator2.jwproxy.command('/source', 'GET', {});\n};\n\ncommands.getClipboard = async function () {\n return (await this.adb.getApiLevel() < 29)\n ? (await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}))\n : (await this.adb.getClipboard());\n};\n\n// Need to override this for correct unicode support\ncommands.doSendKeys = async function (params) {\n await this.uiautomator2.jwproxy.command('/keys', 'POST', params);\n};\n\n// uiautomator2 doesn't support metastate for keyevents\ncommands.keyevent = async function (keycode, metastate) {\n this.log.debug(`Ignoring metastate ${metastate}`);\n await this.adb.keyevent(keycode);\n};\n\n// Use ADB since we don't have UiAutomator\ncommands.back = async function () {\n await this.adb.keyevent(4);\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});\n};\n\n// memoized in constructor\ncommands.getWindowSize = async function () {\n return await this.uiautomator2.jwproxy.command('/window/current/size', 'GET', {});\n};\n\n// For W3C\ncommands.getWindowRect = async function () {\n const {width, height} = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0,\n };\n};\n\nextensions.executeMobile = async function (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n dragGesture: 'mobileDragGesture',\n flingGesture: 'mobileFlingGesture',\n doubleClickGesture: 'mobileDoubleClickGesture',\n clickGesture: 'mobileClickGesture',\n longClickGesture: 'mobileLongClickGesture',\n pinchCloseGesture: 'mobilePinchCloseGesture',\n pinchOpenGesture: 'mobilePinchOpenGesture',\n swipeGesture: 'mobileSwipeGesture',\n scrollGesture: 'mobileScrollGesture',\n scrollBackTo: 'mobileScrollBackTo',\n scroll: 'mobileScroll',\n viewportScreenshot: 'mobileViewportScreenshot',\n viewportRect: 'mobileViewPortRect',\n\n deepLink: 'mobileDeepLink',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n acceptAlert: 'mobileAcceptAlert',\n dismissAlert: 'mobileDismissAlert',\n\n batteryInfo: 'mobileGetBatteryInfo',\n\n deviceInfo: 'mobileGetDeviceInfo',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n type: 'mobileType',\n sensorSet: 'sensorSet',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startActivity: 'mobileStartActivity',\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n getAppStrings: 'mobileGetAppStrings',\n\n installMultipleApks: 'mobileInstallMultipleApks',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\ncommands.mobileViewportScreenshot = async function () {\n return await this.getViewportScreenshot();\n};\n\n/**\n * @typedef {object} Rectangle\n * @property {number} left - The left coordinate of the Rectangle.\n * @property {number} top - The top coordinate of the Rectangle.\n * @property {number} width - The width of Rectangle.\n * @property {number} height - The height of Rectangle.\n */\n\n/**\n * Returns the viewport coordinates.\n * @returns {Rectangle} The viewport coordinates.\n */\ncommands.mobileViewPortRect = async function mobileViewPortRect () {\n return await this.getViewPortRect();\n};\n\ncommands.setUrl = async function (url) {\n await this.adb.startUri(url, this.opts.appPackage);\n};\n\n/**\n * @typedef {object} DeepLinkOpts\n * @property {!string} url - The name of URL to start.\n * @property {!string} package - The name of the package to start the URI with.\n * @property {?boolean} waitForLaunch [true] - if `false` then adb won't wait\n * for the started activity to return the control\n */\n\n/**\n * Start URL that take users directly to specific content in the app\n * @param {DeepLinkOpts} opts\n */\ncommands.mobileDeepLink = async function (opts = {}) {\n const {\n url,\n package: pkg,\n waitForLaunch,\n } = opts;\n return await this.adb.startUri(url, pkg, { waitForLaunch });\n};\n\ncommands.openNotifications = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});\n};\n\ncommands.updateSettings = async function (settings) {\n await this.settings.update(settings);\n await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {settings});\n};\n\ncommands.getSettings = async function () {\n const driverSettings = this.settings.getSettings();\n const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');\n return {...driverSettings, ...serverSettings};\n};\n\n/**\n * Overriding appium-android-driver's wrapBootstrapDisconnect,\n * unlike in appium-android-driver avoiding adb restarting as it intern\n * kills UiAutomator2 server running in the device.\n **/\nhelpers.wrapBootstrapDisconnect = async function (wrapped) {\n await wrapped();\n};\n\n// Stop proxying to any Chromedriver and redirect to uiautomator2\nhelpers.suspendChromedriverProxy = function () {\n this.chromedriver = null;\n this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);\n this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);\n this.jwpProxyActive = true;\n};\n\n/**\n * The list of available info entries can be found at\n * https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/GetDeviceInfo.java\n */\ncommands.mobileGetDeviceInfo = async function () {\n return await this.uiautomator2.jwproxy.command('/appium/device/info', 'GET');\n};\n\n/**\n * @typedef {Object} TypingOptions\n * @property {!string|number|boolean} text - The text to type\n */\n\n/**\n * Types the given Unicode string.\n * It is expected that the focus is already put\n * to the destination input field before this method is called.\n *\n * @param {TypingOptions} opts\n * @returns {boolean} `true` if the input text has been successfully sent to adb\n * @throws {Error} if `text` property has not been provided\n */\ncommands.mobileType = async function mobileType (opts = {}) {\n const {\n text,\n } = opts;\n if (_.isUndefined(text)) {\n this.log.errorAndThrow(`The 'text' argument is mandatory`);\n }\n return await this.adb.typeUnicode(text);\n};\n\n\n/**\n * @typedef {Object} InstallOptions\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n * @property {boolean} partialInstall [false] - Install apks partially. It is used for 'install-multiple'.\n * https://android.stackexchange.com/questions/111064/what-is-a-partial-application-install-via-adb\n */\n\n/**\n * @typedef {Object} InstallMultipleApksOptions\n * @property {Array<string>} apks - The list of APKs to install. Each APK should be a path to a apk\n * or downloadable URL as HTTP/HTTPS.\n * @property {InstallOptions} options\n */\n\n/**\n * Install multiple APKs with `install-multiple` option.\n *\n * @param {InstallMultipleApksOptions} opts\n * @throws {Error} if an error occured while installing the given APKs.\n */\ncommands.mobileInstallMultipleApks = async function (opts = {}) {\n if (!_.isArray(opts.apks) || _.isEmpty(opts.apks)) {\n throw new errors.InvalidArgumentError('No apks are given to install');\n }\n const apks = await B.all(opts.apks\n .map((app) => this.helpers.configureApp(app, [APK_EXTENSION])));\n await this.adb.installMultipleApks(apks, opts.options);\n};\n\nObject.assign(extensions, commands, helpers);\n\nexport default extensions;\n"],"mappings":"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"}
@@ -16,8 +16,9 @@ var _viewport = _interopRequireDefault(require("./viewport"));
16
16
  var _screenshot = _interopRequireDefault(require("./screenshot"));
17
17
  var _battery = _interopRequireDefault(require("./battery"));
18
18
  var _gestures = _interopRequireDefault(require("./gestures"));
19
+ var _appStrings = _interopRequireDefault(require("./app-strings"));
19
20
  let commands = {};
20
- Object.assign(commands, _alert.default, _find.default, _general.default, _touch.default, _actions.default, _element.default, _viewport.default, _screenshot.default, _battery.default, _gestures.default);
21
+ Object.assign(commands, _alert.default, _find.default, _general.default, _touch.default, _actions.default, _element.default, _viewport.default, _screenshot.default, _battery.default, _gestures.default, _appStrings.default);
21
22
  var _default = commands;
22
23
  exports.default = _default;
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWxlcnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9maW5kIiwiX2dlbmVyYWwiLCJfdG91Y2giLCJfZWxlbWVudCIsIl9hY3Rpb25zIiwiX3ZpZXdwb3J0IiwiX3NjcmVlbnNob3QiLCJfYmF0dGVyeSIsIl9nZXN0dXJlcyIsImNvbW1hbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiYWxlcnRDbWRzIiwiZmluZENtZHMiLCJnZW5lcmFsQ21kcyIsInRvdWNoQ21kcyIsImFjdGlvbnNDbWRzIiwiZWxlbWVudENtZHMiLCJ2aWV3cG9ydENtZHMiLCJzY3JlZW5zaG90Q21kcyIsImJhdHRlcnlDbWRzIiwiZ2VzdHVyZXNDbWRzIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYWxlcnRDbWRzIGZyb20gJy4vYWxlcnQnO1xuaW1wb3J0IGZpbmRDbWRzIGZyb20gJy4vZmluZCc7XG5pbXBvcnQgZ2VuZXJhbENtZHMgZnJvbSAnLi9nZW5lcmFsJztcbmltcG9ydCB0b3VjaENtZHMgZnJvbSAnLi90b3VjaCc7XG5pbXBvcnQgZWxlbWVudENtZHMgZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCBhY3Rpb25zQ21kcyBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHZpZXdwb3J0Q21kcyBmcm9tICcuL3ZpZXdwb3J0JztcbmltcG9ydCBzY3JlZW5zaG90Q21kcyBmcm9tICcuL3NjcmVlbnNob3QnO1xuaW1wb3J0IGJhdHRlcnlDbWRzIGZyb20gJy4vYmF0dGVyeSc7XG5pbXBvcnQgZ2VzdHVyZXNDbWRzIGZyb20gJy4vZ2VzdHVyZXMnO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBhbGVydENtZHMsXG4gIGZpbmRDbWRzLFxuICBnZW5lcmFsQ21kcyxcbiAgdG91Y2hDbWRzLFxuICBhY3Rpb25zQ21kcyxcbiAgZWxlbWVudENtZHMsXG4gIHZpZXdwb3J0Q21kcyxcbiAgc2NyZWVuc2hvdENtZHMsXG4gIGJhdHRlcnlDbWRzLFxuICBnZXN0dXJlc0NtZHMsXG4gIC8vIGFkZCBvdGhlciBjb21tYW5kIHR5cGVzIGhlcmVcbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sU0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBSVUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQkMsTUFBTSxDQUFDQyxNQUFNLENBQ1hGLFFBQVEsRUFDUkcsY0FBUyxFQUNUQyxhQUFRLEVBQ1JDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsZ0JBQVcsRUFDWEMsZ0JBQVcsRUFDWEMsaUJBQVksRUFDWkMsbUJBQWMsRUFDZEMsZ0JBQVcsRUFDWEMsaUJBQVksQ0FFYjtBQUFDLElBQUFDLFFBQUEsR0FFYWIsUUFBUTtBQUFBYyxPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWxlcnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9maW5kIiwiX2dlbmVyYWwiLCJfdG91Y2giLCJfZWxlbWVudCIsIl9hY3Rpb25zIiwiX3ZpZXdwb3J0IiwiX3NjcmVlbnNob3QiLCJfYmF0dGVyeSIsIl9nZXN0dXJlcyIsIl9hcHBTdHJpbmdzIiwiY29tbWFuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJhbGVydENtZHMiLCJmaW5kQ21kcyIsImdlbmVyYWxDbWRzIiwidG91Y2hDbWRzIiwiYWN0aW9uc0NtZHMiLCJlbGVtZW50Q21kcyIsInZpZXdwb3J0Q21kcyIsInNjcmVlbnNob3RDbWRzIiwiYmF0dGVyeUNtZHMiLCJnZXN0dXJlc0NtZHMiLCJhcHBTdHJpbmdzQ21kcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFsZXJ0Q21kcyBmcm9tICcuL2FsZXJ0JztcbmltcG9ydCBmaW5kQ21kcyBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IGdlbmVyYWxDbWRzIGZyb20gJy4vZ2VuZXJhbCc7XG5pbXBvcnQgdG91Y2hDbWRzIGZyb20gJy4vdG91Y2gnO1xuaW1wb3J0IGVsZW1lbnRDbWRzIGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgYWN0aW9uc0NtZHMgZnJvbSAnLi9hY3Rpb25zJztcbmltcG9ydCB2aWV3cG9ydENtZHMgZnJvbSAnLi92aWV3cG9ydCc7XG5pbXBvcnQgc2NyZWVuc2hvdENtZHMgZnJvbSAnLi9zY3JlZW5zaG90JztcbmltcG9ydCBiYXR0ZXJ5Q21kcyBmcm9tICcuL2JhdHRlcnknO1xuaW1wb3J0IGdlc3R1cmVzQ21kcyBmcm9tICcuL2dlc3R1cmVzJztcbmltcG9ydCBhcHBTdHJpbmdzQ21kcyBmcm9tICcuL2FwcC1zdHJpbmdzJztcblxubGV0IGNvbW1hbmRzID0ge307XG5PYmplY3QuYXNzaWduKFxuICBjb21tYW5kcyxcbiAgYWxlcnRDbWRzLFxuICBmaW5kQ21kcyxcbiAgZ2VuZXJhbENtZHMsXG4gIHRvdWNoQ21kcyxcbiAgYWN0aW9uc0NtZHMsXG4gIGVsZW1lbnRDbWRzLFxuICB2aWV3cG9ydENtZHMsXG4gIHNjcmVlbnNob3RDbWRzLFxuICBiYXR0ZXJ5Q21kcyxcbiAgZ2VzdHVyZXNDbWRzLFxuICBhcHBTdHJpbmdzQ21kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxTQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxXQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFJVyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCQyxNQUFNLENBQUNDLE1BQU0sQ0FDWEYsUUFBUSxFQUNSRyxjQUFTLEVBQ1RDLGFBQVEsRUFDUkMsZ0JBQVcsRUFDWEMsY0FBUyxFQUNUQyxnQkFBVyxFQUNYQyxnQkFBVyxFQUNYQyxpQkFBWSxFQUNaQyxtQkFBYyxFQUNkQyxnQkFBVyxFQUNYQyxpQkFBWSxFQUNaQyxtQkFBYyxDQUVmO0FBQUMsSUFBQUMsUUFBQSxHQUVhZCxRQUFRO0FBQUFlLE9BQUEsQ0FBQUMsT0FBQSxHQUFBRixRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_alert","_interopRequireDefault","require","_find","_general","_touch","_element","_actions","_viewport","_screenshot","_battery","_gestures","commands","Object","assign","alertCmds","findCmds","generalCmds","touchCmds","actionsCmds","elementCmds","viewportCmds","screenshotCmds","batteryCmds","gesturesCmds","_default","exports","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import alertCmds from './alert';\nimport findCmds from './find';\nimport generalCmds from './general';\nimport touchCmds from './touch';\nimport elementCmds from './element';\nimport actionsCmds from './actions';\nimport viewportCmds from './viewport';\nimport screenshotCmds from './screenshot';\nimport batteryCmds from './battery';\nimport gesturesCmds from './gestures';\n\nlet commands = {};\nObject.assign(\n commands,\n alertCmds,\n findCmds,\n generalCmds,\n touchCmds,\n actionsCmds,\n elementCmds,\n viewportCmds,\n screenshotCmds,\n batteryCmds,\n gesturesCmds,\n // add other command types here\n);\n\nexport default commands;\n\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,SAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,WAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,SAAA,GAAAV,sBAAA,CAAAC,OAAA;AAEA,IAAIU,QAAQ,GAAG,CAAC,CAAC;AACjBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,cAAS,EACTC,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,iBAAY,EACZC,mBAAc,EACdC,gBAAW,EACXC,iBAAY,CAEb;AAAC,IAAAC,QAAA,GAEab,QAAQ;AAAAc,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"file":"index.js","names":["_alert","_interopRequireDefault","require","_find","_general","_touch","_element","_actions","_viewport","_screenshot","_battery","_gestures","_appStrings","commands","Object","assign","alertCmds","findCmds","generalCmds","touchCmds","actionsCmds","elementCmds","viewportCmds","screenshotCmds","batteryCmds","gesturesCmds","appStringsCmds","_default","exports","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import alertCmds from './alert';\nimport findCmds from './find';\nimport generalCmds from './general';\nimport touchCmds from './touch';\nimport elementCmds from './element';\nimport actionsCmds from './actions';\nimport viewportCmds from './viewport';\nimport screenshotCmds from './screenshot';\nimport batteryCmds from './battery';\nimport gesturesCmds from './gestures';\nimport appStringsCmds from './app-strings';\n\nlet commands = {};\nObject.assign(\n commands,\n alertCmds,\n findCmds,\n generalCmds,\n touchCmds,\n actionsCmds,\n elementCmds,\n viewportCmds,\n screenshotCmds,\n batteryCmds,\n gesturesCmds,\n appStringsCmds,\n // add other command types here\n);\n\nexport default commands;\n\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,SAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,WAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,SAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,WAAA,GAAAX,sBAAA,CAAAC,OAAA;AAEA,IAAIW,QAAQ,GAAG,CAAC,CAAC;AACjBC,MAAM,CAACC,MAAM,CACXF,QAAQ,EACRG,cAAS,EACTC,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,iBAAY,EACZC,mBAAc,EACdC,gBAAW,EACXC,iBAAY,EACZC,mBAAc,CAEf;AAAC,IAAAC,QAAA,GAEad,QAAQ;AAAAe,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
@@ -61,10 +61,13 @@ let uiautomatorCapConstraints = {
61
61
  },
62
62
  forceAppLaunch: {
63
63
  isBoolean: true
64
+ },
65
+ shouldTerminateApp: {
66
+ isBoolean: true
64
67
  }
65
68
  };
66
69
  let desiredCapConstraints = {};
67
70
  Object.assign(desiredCapConstraints, uiautomatorCapConstraints, _appiumAndroidDriver.commonCapConstraints);
68
71
  var _default = desiredCapConstraints;
69
72
  exports.default = _default;
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXBwaXVtQW5kcm9pZERyaXZlciIsInJlcXVpcmUiLCJ1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzIiwiYXBwIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsImF1dG9tYXRpb25OYW1lIiwiYnJvd3Nlck5hbWUiLCJsYXVuY2hUaW1lb3V0IiwiaXNOdW1iZXIiLCJza2lwVW5sb2NrIiwiaXNCb29sZWFuIiwidWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCIsInVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0IiwidWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic3lzdGVtUG9ydCIsIm1qcGVnU2VydmVyUG9ydCIsIm1qcGVnU2NyZWVuc2hvdFVybCIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJ1c2VyUHJvZmlsZSIsImFwcFdhaXRGb3JMYXVuY2giLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsImZvcmNlQXBwTGF1bmNoIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiT2JqZWN0IiwiYXNzaWduIiwiY29tbW9uQ2FwQ29uc3RyYWludHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2Rlc2lyZWQtY2Fwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21tb25DYXBDb25zdHJhaW50cyB9IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5cbmxldCB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzID0ge1xuICBhcHA6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgbGF1bmNoVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHNraXBVbmxvY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgdWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlV2luZG93QW5pbWF0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHN5c3RlbVBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtanBlZ1NlcnZlclBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtanBlZ1NjcmVlbnNob3RVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBza2lwU2VydmVySW5zdGFsbGF0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZUVuZEludGVudDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVzZXJQcm9maWxlOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXBwV2FpdEZvckxhdW5jaDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBmb3JjZUFwcExhdW5jaDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzID0ge307XG5PYmplY3QuYXNzaWduKFxuICBkZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gIHVpYXV0b21hdG9yQ2FwQ29uc3RyYWludHMsXG4gIGNvbW1vbkNhcENvbnN0cmFpbnRzXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxvQkFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBSUMseUJBQXlCLEdBQUc7RUFDOUJDLEdBQUcsRUFBRTtJQUNIQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RDLGNBQWMsRUFBRTtJQUNkRCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RFLFdBQVcsRUFBRTtJQUNYRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RHLGFBQWEsRUFBRTtJQUNiQyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RDLFVBQVUsRUFBRTtJQUNWQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RDLCtCQUErQixFQUFFO0lBQy9CSCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RJLGdDQUFnQyxFQUFFO0lBQ2hDSixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RLLDZCQUE2QixFQUFFO0lBQzdCTCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RNLHNCQUFzQixFQUFFO0lBQ3RCSixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RLLFVBQVUsRUFBRTtJQUNWUCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RRLGVBQWUsRUFBRTtJQUNmUixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RTLGtCQUFrQixFQUFFO0lBQ2xCYixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RjLHNCQUFzQixFQUFFO0lBQ3RCUixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RTLHdCQUF3QixFQUFFO0lBQ3hCZixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RnQixXQUFXLEVBQUU7SUFDWFosUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEYSxnQkFBZ0IsRUFBRTtJQUNoQlgsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEWSxtQ0FBbUMsRUFBRTtJQUNuQ1osU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEYSxjQUFjLEVBQUU7SUFDZGIsU0FBUyxFQUFFO0VBQ2I7QUFDRixDQUFDO0FBRUQsSUFBSWMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQzlCQyxNQUFNLENBQUNDLE1BQU0sQ0FDWEYscUJBQXFCLEVBQ3JCdkIseUJBQXlCLEVBQ3pCMEIseUNBQW9CLENBQ3JCO0FBQUMsSUFBQUMsUUFBQSxHQUVhSixxQkFBcUI7QUFBQUssT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
73
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXBwaXVtQW5kcm9pZERyaXZlciIsInJlcXVpcmUiLCJ1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzIiwiYXBwIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsImF1dG9tYXRpb25OYW1lIiwiYnJvd3Nlck5hbWUiLCJsYXVuY2hUaW1lb3V0IiwiaXNOdW1iZXIiLCJza2lwVW5sb2NrIiwiaXNCb29sZWFuIiwidWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCIsInVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0IiwidWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic3lzdGVtUG9ydCIsIm1qcGVnU2VydmVyUG9ydCIsIm1qcGVnU2NyZWVuc2hvdFVybCIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJ1c2VyUHJvZmlsZSIsImFwcFdhaXRGb3JMYXVuY2giLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsImZvcmNlQXBwTGF1bmNoIiwic2hvdWxkVGVybWluYXRlQXBwIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiT2JqZWN0IiwiYXNzaWduIiwiY29tbW9uQ2FwQ29uc3RyYWludHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2Rlc2lyZWQtY2Fwcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21tb25DYXBDb25zdHJhaW50cyB9IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5cbmxldCB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzID0ge1xuICBhcHA6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgbGF1bmNoVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHNraXBVbmxvY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHVpYXV0b21hdG9yMlNlcnZlckluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgdWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlV2luZG93QW5pbWF0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHN5c3RlbVBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtanBlZ1NlcnZlclBvcnQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtanBlZ1NjcmVlbnNob3RVcmw6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBza2lwU2VydmVySW5zdGFsbGF0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZUVuZEludGVudDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVzZXJQcm9maWxlOiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXBwV2FpdEZvckxhdW5jaDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZToge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBmb3JjZUFwcExhdW5jaDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBzaG91bGRUZXJtaW5hdGVBcHA6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfVxufTtcblxubGV0IGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IHt9O1xuT2JqZWN0LmFzc2lnbihcbiAgZGVzaXJlZENhcENvbnN0cmFpbnRzLFxuICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzLFxuICBjb21tb25DYXBDb25zdHJhaW50c1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsb0JBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUlDLHlCQUF5QixHQUFHO0VBQzlCQyxHQUFHLEVBQUU7SUFDSEMsUUFBUSxFQUFFLElBQUk7SUFDZEMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEQyxjQUFjLEVBQUU7SUFDZEQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNERSxXQUFXLEVBQUU7SUFDWEYsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNERyxhQUFhLEVBQUU7SUFDYkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEQyxVQUFVLEVBQUU7SUFDVkMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEQywrQkFBK0IsRUFBRTtJQUMvQkgsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNESSxnQ0FBZ0MsRUFBRTtJQUNoQ0osUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNESyw2QkFBNkIsRUFBRTtJQUM3QkwsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNETSxzQkFBc0IsRUFBRTtJQUN0QkosU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNESyxVQUFVLEVBQUU7SUFDVlAsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUSxlQUFlLEVBQUU7SUFDZlIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUyxrQkFBa0IsRUFBRTtJQUNsQmIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEYyxzQkFBc0IsRUFBRTtJQUN0QlIsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEUyx3QkFBd0IsRUFBRTtJQUN4QmYsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEZ0IsV0FBVyxFQUFFO0lBQ1haLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGEsZ0JBQWdCLEVBQUU7SUFDaEJYLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRFksbUNBQW1DLEVBQUU7SUFDbkNaLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGEsY0FBYyxFQUFFO0lBQ2RiLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGMsa0JBQWtCLEVBQUU7SUFDbEJkLFNBQVMsRUFBRTtFQUNiO0FBQ0YsQ0FBQztBQUVELElBQUllLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUM5QkMsTUFBTSxDQUFDQyxNQUFNLENBQ1hGLHFCQUFxQixFQUNyQnhCLHlCQUF5QixFQUN6QjJCLHlDQUFvQixDQUNyQjtBQUFDLElBQUFDLFFBQUEsR0FFYUoscUJBQXFCO0FBQUFLLE9BQUEsQ0FBQUMsT0FBQSxHQUFBRixRQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"desired-caps.js","names":["_appiumAndroidDriver","require","uiautomatorCapConstraints","app","presence","isString","automationName","browserName","launchTimeout","isNumber","skipUnlock","isBoolean","uiautomator2ServerLaunchTimeout","uiautomator2ServerInstallTimeout","uiautomator2ServerReadTimeout","disableWindowAnimation","systemPort","mjpegServerPort","mjpegScreenshotUrl","skipServerInstallation","androidCoverageEndIntent","userProfile","appWaitForLaunch","disableSuppressAccessibilityService","forceAppLaunch","desiredCapConstraints","Object","assign","commonCapConstraints","_default","exports","default"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["import { commonCapConstraints } from 'appium-android-driver';\n\nlet uiautomatorCapConstraints = {\n app: {\n presence: true,\n isString: true\n },\n automationName: {\n isString: true\n },\n browserName: {\n isString: true\n },\n launchTimeout: {\n isNumber: true\n },\n skipUnlock: {\n isBoolean: true\n },\n uiautomator2ServerLaunchTimeout: {\n isNumber: true\n },\n uiautomator2ServerInstallTimeout: {\n isNumber: true\n },\n uiautomator2ServerReadTimeout: {\n isNumber: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n systemPort: {\n isNumber: true\n },\n mjpegServerPort: {\n isNumber: true\n },\n mjpegScreenshotUrl: {\n isString: true\n },\n skipServerInstallation: {\n isBoolean: true\n },\n androidCoverageEndIntent: {\n isString: true\n },\n userProfile: {\n isNumber: true\n },\n appWaitForLaunch: {\n isBoolean: true\n },\n disableSuppressAccessibilityService: {\n isBoolean: true\n },\n forceAppLaunch: {\n isBoolean: true\n }\n};\n\nlet desiredCapConstraints = {};\nObject.assign(\n desiredCapConstraints,\n uiautomatorCapConstraints,\n commonCapConstraints\n);\n\nexport default desiredCapConstraints;\n"],"mappings":";;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AAEA,IAAIC,yBAAyB,GAAG;EAC9BC,GAAG,EAAE;IACHC,QAAQ,EAAE,IAAI;IACdC,QAAQ,EAAE;EACZ,CAAC;EACDC,cAAc,EAAE;IACdD,QAAQ,EAAE;EACZ,CAAC;EACDE,WAAW,EAAE;IACXF,QAAQ,EAAE;EACZ,CAAC;EACDG,aAAa,EAAE;IACbC,QAAQ,EAAE;EACZ,CAAC;EACDC,UAAU,EAAE;IACVC,SAAS,EAAE;EACb,CAAC;EACDC,+BAA+B,EAAE;IAC/BH,QAAQ,EAAE;EACZ,CAAC;EACDI,gCAAgC,EAAE;IAChCJ,QAAQ,EAAE;EACZ,CAAC;EACDK,6BAA6B,EAAE;IAC7BL,QAAQ,EAAE;EACZ,CAAC;EACDM,sBAAsB,EAAE;IACtBJ,SAAS,EAAE;EACb,CAAC;EACDK,UAAU,EAAE;IACVP,QAAQ,EAAE;EACZ,CAAC;EACDQ,eAAe,EAAE;IACfR,QAAQ,EAAE;EACZ,CAAC;EACDS,kBAAkB,EAAE;IAClBb,QAAQ,EAAE;EACZ,CAAC;EACDc,sBAAsB,EAAE;IACtBR,SAAS,EAAE;EACb,CAAC;EACDS,wBAAwB,EAAE;IACxBf,QAAQ,EAAE;EACZ,CAAC;EACDgB,WAAW,EAAE;IACXZ,QAAQ,EAAE;EACZ,CAAC;EACDa,gBAAgB,EAAE;IAChBX,SAAS,EAAE;EACb,CAAC;EACDY,mCAAmC,EAAE;IACnCZ,SAAS,EAAE;EACb,CAAC;EACDa,cAAc,EAAE;IACdb,SAAS,EAAE;EACb;AACF,CAAC;AAED,IAAIc,qBAAqB,GAAG,CAAC,CAAC;AAC9BC,MAAM,CAACC,MAAM,CACXF,qBAAqB,EACrBvB,yBAAyB,EACzB0B,yCAAoB,CACrB;AAAC,IAAAC,QAAA,GAEaJ,qBAAqB;AAAAK,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"file":"desired-caps.js","names":["_appiumAndroidDriver","require","uiautomatorCapConstraints","app","presence","isString","automationName","browserName","launchTimeout","isNumber","skipUnlock","isBoolean","uiautomator2ServerLaunchTimeout","uiautomator2ServerInstallTimeout","uiautomator2ServerReadTimeout","disableWindowAnimation","systemPort","mjpegServerPort","mjpegScreenshotUrl","skipServerInstallation","androidCoverageEndIntent","userProfile","appWaitForLaunch","disableSuppressAccessibilityService","forceAppLaunch","shouldTerminateApp","desiredCapConstraints","Object","assign","commonCapConstraints","_default","exports","default"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["import { commonCapConstraints } from 'appium-android-driver';\n\nlet uiautomatorCapConstraints = {\n app: {\n presence: true,\n isString: true\n },\n automationName: {\n isString: true\n },\n browserName: {\n isString: true\n },\n launchTimeout: {\n isNumber: true\n },\n skipUnlock: {\n isBoolean: true\n },\n uiautomator2ServerLaunchTimeout: {\n isNumber: true\n },\n uiautomator2ServerInstallTimeout: {\n isNumber: true\n },\n uiautomator2ServerReadTimeout: {\n isNumber: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n systemPort: {\n isNumber: true\n },\n mjpegServerPort: {\n isNumber: true\n },\n mjpegScreenshotUrl: {\n isString: true\n },\n skipServerInstallation: {\n isBoolean: true\n },\n androidCoverageEndIntent: {\n isString: true\n },\n userProfile: {\n isNumber: true\n },\n appWaitForLaunch: {\n isBoolean: true\n },\n disableSuppressAccessibilityService: {\n isBoolean: true\n },\n forceAppLaunch: {\n isBoolean: true\n },\n shouldTerminateApp: {\n isBoolean: true\n }\n};\n\nlet desiredCapConstraints = {};\nObject.assign(\n desiredCapConstraints,\n uiautomatorCapConstraints,\n commonCapConstraints\n);\n\nexport default desiredCapConstraints;\n"],"mappings":";;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AAEA,IAAIC,yBAAyB,GAAG;EAC9BC,GAAG,EAAE;IACHC,QAAQ,EAAE,IAAI;IACdC,QAAQ,EAAE;EACZ,CAAC;EACDC,cAAc,EAAE;IACdD,QAAQ,EAAE;EACZ,CAAC;EACDE,WAAW,EAAE;IACXF,QAAQ,EAAE;EACZ,CAAC;EACDG,aAAa,EAAE;IACbC,QAAQ,EAAE;EACZ,CAAC;EACDC,UAAU,EAAE;IACVC,SAAS,EAAE;EACb,CAAC;EACDC,+BAA+B,EAAE;IAC/BH,QAAQ,EAAE;EACZ,CAAC;EACDI,gCAAgC,EAAE;IAChCJ,QAAQ,EAAE;EACZ,CAAC;EACDK,6BAA6B,EAAE;IAC7BL,QAAQ,EAAE;EACZ,CAAC;EACDM,sBAAsB,EAAE;IACtBJ,SAAS,EAAE;EACb,CAAC;EACDK,UAAU,EAAE;IACVP,QAAQ,EAAE;EACZ,CAAC;EACDQ,eAAe,EAAE;IACfR,QAAQ,EAAE;EACZ,CAAC;EACDS,kBAAkB,EAAE;IAClBb,QAAQ,EAAE;EACZ,CAAC;EACDc,sBAAsB,EAAE;IACtBR,SAAS,EAAE;EACb,CAAC;EACDS,wBAAwB,EAAE;IACxBf,QAAQ,EAAE;EACZ,CAAC;EACDgB,WAAW,EAAE;IACXZ,QAAQ,EAAE;EACZ,CAAC;EACDa,gBAAgB,EAAE;IAChBX,SAAS,EAAE;EACb,CAAC;EACDY,mCAAmC,EAAE;IACnCZ,SAAS,EAAE;EACb,CAAC;EACDa,cAAc,EAAE;IACdb,SAAS,EAAE;EACb,CAAC;EACDc,kBAAkB,EAAE;IAClBd,SAAS,EAAE;EACb;AACF,CAAC;AAED,IAAIe,qBAAqB,GAAG,CAAC,CAAC;AAC9BC,MAAM,CAACC,MAAM,CACXF,qBAAqB,EACrBxB,yBAAyB,EACzB2B,yCAAoB,CACrB;AAAC,IAAAC,QAAA,GAEaJ,qBAAqB;AAAAK,OAAA,CAAAC,OAAA,GAAAF,QAAA"}