appium-uiautomator2-driver 2.7.0 → 2.8.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/README.md +241 -25
- package/build/index.js +1 -4
- package/build/lib/commands/actions.js +3 -12
- package/build/lib/commands/actions.js.map +1 -0
- package/build/lib/commands/alert.js +3 -9
- package/build/lib/commands/alert.js.map +1 -0
- package/build/lib/commands/battery.js +3 -5
- package/build/lib/commands/battery.js.map +1 -0
- package/build/lib/commands/element.js +3 -36
- package/build/lib/commands/element.js.map +1 -0
- package/build/lib/commands/find.js +2 -9
- package/build/lib/commands/find.js.map +1 -0
- package/build/lib/commands/general.js +5 -36
- package/build/lib/commands/general.js.map +1 -0
- package/build/lib/commands/gestures.js +1 -15
- package/build/lib/commands/gestures.js.map +1 -0
- package/build/lib/commands/index.js +3 -15
- package/build/lib/commands/index.js.map +1 -0
- package/build/lib/commands/screenshot.js +1 -8
- package/build/lib/commands/screenshot.js.map +1 -0
- package/build/lib/commands/touch.js +2 -8
- package/build/lib/commands/touch.js.map +1 -0
- package/build/lib/commands/viewport.js +3 -9
- package/build/lib/commands/viewport.js.map +1 -0
- package/build/lib/css-converter.js +1 -42
- package/build/lib/css-converter.js.map +1 -0
- package/build/lib/desired-caps.js +1 -4
- package/build/lib/desired-caps.js.map +1 -0
- package/build/lib/driver.js +24 -102
- package/build/lib/driver.js.map +1 -0
- package/build/lib/extensions.js +1 -3
- package/build/lib/extensions.js.map +1 -0
- package/build/lib/helpers.js +1 -15
- package/build/lib/helpers.js.map +1 -0
- package/build/lib/logger.js +1 -5
- package/build/lib/logger.js.map +1 -0
- package/build/lib/uiautomator2.js +1 -70
- package/build/lib/uiautomator2.js.map +1 -0
- package/npm-shrinkwrap.json +402 -309
- package/package.json +3 -3
|
@@ -1,62 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.helpers = exports.default = exports.commands = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
var _support = require("appium/support");
|
|
15
|
-
|
|
16
11
|
var _driver = require("appium/driver");
|
|
17
|
-
|
|
18
12
|
let commands = {},
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
helpers = {},
|
|
14
|
+
extensions = {};
|
|
21
15
|
exports.helpers = helpers;
|
|
22
16
|
exports.commands = commands;
|
|
23
|
-
|
|
24
17
|
function toBool(s) {
|
|
25
18
|
return _lodash.default.isString(s) ? s.toLowerCase() === 'true' : !!s;
|
|
26
19
|
}
|
|
27
|
-
|
|
28
20
|
commands.active = async function active() {
|
|
29
21
|
return await this.uiautomator2.jwproxy.command('/element/active', 'GET');
|
|
30
22
|
};
|
|
31
|
-
|
|
32
23
|
commands.getAttribute = async function (attribute, elementId) {
|
|
33
24
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/attribute/${attribute}`, 'GET', {});
|
|
34
25
|
};
|
|
35
|
-
|
|
36
26
|
commands.elementDisplayed = async function (elementId) {
|
|
37
27
|
return toBool(await this.getAttribute('displayed', elementId));
|
|
38
28
|
};
|
|
39
|
-
|
|
40
29
|
commands.elementEnabled = async function (elementId) {
|
|
41
30
|
return toBool(await this.getAttribute('enabled', elementId));
|
|
42
31
|
};
|
|
43
|
-
|
|
44
32
|
commands.elementSelected = async function (elementId) {
|
|
45
33
|
return toBool(await this.getAttribute('selected', elementId));
|
|
46
34
|
};
|
|
47
|
-
|
|
48
35
|
commands.getName = async function (elementId) {
|
|
49
36
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/name`, 'GET', {});
|
|
50
37
|
};
|
|
51
|
-
|
|
52
38
|
commands.getLocation = async function (elementId) {
|
|
53
39
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/location`, 'GET', {});
|
|
54
40
|
};
|
|
55
|
-
|
|
56
41
|
commands.getSize = async function (elementId) {
|
|
57
42
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/size`, 'GET', {});
|
|
58
43
|
};
|
|
59
|
-
|
|
60
44
|
commands.touchLongClick = async function (element, x, y, duration) {
|
|
61
45
|
let params = {
|
|
62
46
|
element,
|
|
@@ -68,7 +52,6 @@ commands.touchLongClick = async function (element, x, y, duration) {
|
|
|
68
52
|
params
|
|
69
53
|
});
|
|
70
54
|
};
|
|
71
|
-
|
|
72
55
|
commands.touchDown = async function (element, x, y) {
|
|
73
56
|
let params = {
|
|
74
57
|
element,
|
|
@@ -79,7 +62,6 @@ commands.touchDown = async function (element, x, y) {
|
|
|
79
62
|
params
|
|
80
63
|
});
|
|
81
64
|
};
|
|
82
|
-
|
|
83
65
|
commands.touchUp = async function (element, x, y) {
|
|
84
66
|
let params = {
|
|
85
67
|
element,
|
|
@@ -90,7 +72,6 @@ commands.touchUp = async function (element, x, y) {
|
|
|
90
72
|
params
|
|
91
73
|
});
|
|
92
74
|
};
|
|
93
|
-
|
|
94
75
|
commands.touchMove = async function (element, x, y) {
|
|
95
76
|
let params = {
|
|
96
77
|
element,
|
|
@@ -101,11 +82,9 @@ commands.touchMove = async function (element, x, y) {
|
|
|
101
82
|
params
|
|
102
83
|
});
|
|
103
84
|
};
|
|
104
|
-
|
|
105
85
|
helpers.doSetElementValue = async function (params) {
|
|
106
86
|
return await this.uiautomator2.jwproxy.command(`/element/${params.elementId}/value`, 'POST', params);
|
|
107
87
|
};
|
|
108
|
-
|
|
109
88
|
commands.setValueImmediate = async function (keys, elementId) {
|
|
110
89
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {
|
|
111
90
|
elementId,
|
|
@@ -114,28 +93,22 @@ commands.setValueImmediate = async function (keys, elementId) {
|
|
|
114
93
|
unicodeKeyboard: this.opts.unicodeKeyboard
|
|
115
94
|
});
|
|
116
95
|
};
|
|
117
|
-
|
|
118
96
|
commands.getText = async function (elementId) {
|
|
119
97
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/text`, 'GET', {});
|
|
120
98
|
};
|
|
121
|
-
|
|
122
99
|
commands.click = async function (element) {
|
|
123
100
|
return await this.uiautomator2.jwproxy.command(`/element/${element}/click`, 'POST', {
|
|
124
101
|
element
|
|
125
102
|
});
|
|
126
103
|
};
|
|
127
|
-
|
|
128
104
|
commands.getElementScreenshot = async function (element) {
|
|
129
105
|
return await this.uiautomator2.jwproxy.command(`/element/${element}/screenshot`, 'GET', {});
|
|
130
106
|
};
|
|
131
|
-
|
|
132
107
|
commands.tap = async function (elementId = null, x = null, y = null, count = 1) {
|
|
133
108
|
const areCoordinatesDefined = _support.util.hasValue(x) && _support.util.hasValue(y);
|
|
134
|
-
|
|
135
109
|
if (!_support.util.hasValue(elementId) && !areCoordinatesDefined) {
|
|
136
110
|
throw new Error(`Either element id to tap or both absolute coordinates should be defined`);
|
|
137
111
|
}
|
|
138
|
-
|
|
139
112
|
for (let i = 0; i < count; i++) {
|
|
140
113
|
if (_support.util.hasValue(elementId) && !areCoordinatesDefined) {
|
|
141
114
|
await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');
|
|
@@ -148,17 +121,14 @@ commands.tap = async function (elementId = null, x = null, y = null, count = 1)
|
|
|
148
121
|
}
|
|
149
122
|
}
|
|
150
123
|
};
|
|
151
|
-
|
|
152
124
|
commands.clear = async function (elementId) {
|
|
153
125
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/clear`, 'POST', {
|
|
154
126
|
elementId
|
|
155
127
|
});
|
|
156
128
|
};
|
|
157
|
-
|
|
158
129
|
commands.getElementRect = async function (elementId) {
|
|
159
130
|
if (this.isWebContext()) {
|
|
160
131
|
this.log.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);
|
|
161
|
-
|
|
162
132
|
if (this.chromedriver.jwproxy.downstreamProtocol === _driver.PROTOCOLS.MJSONWP) {
|
|
163
133
|
const {
|
|
164
134
|
x,
|
|
@@ -175,14 +145,11 @@ commands.getElementRect = async function (elementId) {
|
|
|
175
145
|
height
|
|
176
146
|
};
|
|
177
147
|
}
|
|
178
|
-
|
|
179
148
|
return await this.chromedriver.jwproxy.command(`/element/${elementId}/rect`, 'GET');
|
|
180
149
|
}
|
|
181
|
-
|
|
182
150
|
return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');
|
|
183
151
|
};
|
|
184
|
-
|
|
185
152
|
Object.assign(extensions, commands, helpers);
|
|
186
153
|
var _default = extensions;
|
|
187
154
|
exports.default = _default;
|
|
188
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwidG9Cb29sIiwicyIsIl8iLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiYWN0aXZlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJnZXROYW1lIiwiZ2V0TG9jYXRpb24iLCJnZXRTaXplIiwidG91Y2hMb25nQ2xpY2siLCJlbGVtZW50IiwieCIsInkiLCJkdXJhdGlvbiIsInBhcmFtcyIsInRvdWNoRG93biIsInRvdWNoVXAiLCJ0b3VjaE1vdmUiLCJkb1NldEVsZW1lbnRWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwia2V5cyIsInRleHQiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJsb2ciLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgUFJPVE9DT0xTLCBXM0NfRUxFTUVOVF9LRVkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiB0b0Jvb2wgKHMpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcocykgPyAocy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIDogISFzO1xufVxuXG5jb21tYW5kcy5hY3RpdmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvZWxlbWVudC9hY3RpdmUnLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiAoYXR0cmlidXRlLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2F0dHJpYnV0ZS8ke2F0dHJpYnV0ZX1gLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZWxlbWVudERpc3BsYXllZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzcGxheWVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZW5hYmxlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZ2V0TmFtZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L25hbWVgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0TG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRTaXplID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy50b3VjaExvbmdDbGljayA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHksIGR1cmF0aW9ufTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2xvbmdjbGlja2AsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hEb3duID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2Rvd25gLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoVXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvdXBgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTW92ZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9tb3ZlYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5oZWxwZXJzLmRvU2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke3BhcmFtcy5lbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWVJbW1lZGlhdGUgPSBhc3luYyBmdW5jdGlvbiAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS92YWx1ZWAsICdQT1NUJywge1xuICAgIGVsZW1lbnRJZCxcbiAgICB0ZXh0OiBfLmlzQXJyYXkoa2V5cykgPyBrZXlzLmpvaW4oJycpIDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZSxcbiAgICB1bmljb2RlS2V5Ym9hcmQ6IHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQsXG4gIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RleHRgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L2NsaWNrYCwgJ1BPU1QnLCB7ZWxlbWVudH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L3NjcmVlbnNob3RgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMudGFwID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCA9IG51bGwsIHggPSBudWxsLCB5ID0gbnVsbCwgY291bnQgPSAxKSB7XG4gIGNvbnN0IGFyZUNvb3JkaW5hdGVzRGVmaW5lZCA9IHV0aWwuaGFzVmFsdWUoeCkgJiYgdXRpbC5oYXNWYWx1ZSh5KTtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIGVsZW1lbnQgaWQgdG8gdGFwIG9yIGJvdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIGRlZmluZWRgKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgICAgLy8gd2UgYXJlIGVpdGhlciB0YXBwaW5nIG9uIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50XG4gICAgICAvLyBvciBhbiBvZmZzZXQgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyXG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGlja2AsICdQT1NUJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS90YXBgLCAnUE9TVCcsIHtcbiAgICAgICAgeCwgeSxcbiAgICAgICAgW1czQ19FTEVNRU5UX0tFWV06IGVsZW1lbnRJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGVhcmAsICdQT1NUJywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFJlY3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYERldGVjdGVkIGRvd25zdHJlYW0gY2hyb21lZHJpdmVyIHByb3RvY29sOiAke3RoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sfWApO1xuICAgIGlmICh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgIGNvbnN0IHt4LCB5fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnKTtcbiAgICAgIHJldHVybiB7eCwgeSwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFJQSxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUEsU0FBU0MsTUFBVCxDQUFpQkMsQ0FBakIsRUFBb0I7RUFDbEIsT0FBT0MsZUFBQSxDQUFFQyxRQUFGLENBQVdGLENBQVgsSUFBaUJBLENBQUMsQ0FBQ0csV0FBRixPQUFvQixNQUFyQyxHQUErQyxDQUFDLENBQUNILENBQXhEO0FBQ0Q7O0FBRURKLFFBQVEsQ0FBQ1EsTUFBVCxHQUFrQixlQUFlQSxNQUFmLEdBQXlCO0VBQ3pDLE9BQU8sTUFBTSxLQUFLQyxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0MsaUJBQWxDLEVBQXFELEtBQXJELENBQWI7QUFDRCxDQUZEOztBQUlBWCxRQUFRLENBQUNZLFlBQVQsR0FBd0IsZ0JBQWdCQyxTQUFoQixFQUEyQkMsU0FBM0IsRUFBc0M7RUFDNUQsT0FBTyxNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFtQyxZQUFXRyxTQUFVLGNBQWFELFNBQVUsRUFBL0UsRUFBa0YsS0FBbEYsRUFBeUYsRUFBekYsQ0FBYjtBQUNELENBRkQ7O0FBSUFiLFFBQVEsQ0FBQ2UsZ0JBQVQsR0FBNEIsZ0JB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
|
|
155
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwidG9Cb29sIiwicyIsIl8iLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiYWN0aXZlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJnZXROYW1lIiwiZ2V0TG9jYXRpb24iLCJnZXRTaXplIiwidG91Y2hMb25nQ2xpY2siLCJlbGVtZW50IiwieCIsInkiLCJkdXJhdGlvbiIsInBhcmFtcyIsInRvdWNoRG93biIsInRvdWNoVXAiLCJ0b3VjaE1vdmUiLCJkb1NldEVsZW1lbnRWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwia2V5cyIsInRleHQiLCJpc0FycmF5Iiwiam9pbiIsInJlcGxhY2UiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZ2V0VGV4dCIsImNsaWNrIiwiZ2V0RWxlbWVudFNjcmVlbnNob3QiLCJ0YXAiLCJjb3VudCIsImFyZUNvb3JkaW5hdGVzRGVmaW5lZCIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiaSIsIlczQ19FTEVNRU5UX0tFWSIsImNsZWFyIiwiZ2V0RWxlbWVudFJlY3QiLCJpc1dlYkNvbnRleHQiLCJsb2ciLCJkZWJ1ZyIsImNocm9tZWRyaXZlciIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJ3aWR0aCIsImhlaWdodCIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgUFJPVE9DT0xTLCBXM0NfRUxFTUVOVF9LRVkgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiB0b0Jvb2wgKHMpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcocykgPyAocy50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIDogISFzO1xufVxuXG5jb21tYW5kcy5hY3RpdmUgPSBhc3luYyBmdW5jdGlvbiBhY3RpdmUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvZWxlbWVudC9hY3RpdmUnLCAnR0VUJyk7XG59O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiAoYXR0cmlidXRlLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2F0dHJpYnV0ZS8ke2F0dHJpYnV0ZX1gLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZWxlbWVudERpc3BsYXllZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzcGxheWVkJywgZWxlbWVudElkKSk7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHRvQm9vbChhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnZW5hYmxlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gdG9Cb29sKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkpO1xufTtcblxuY29tbWFuZHMuZ2V0TmFtZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L25hbWVgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0TG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9sb2NhdGlvbmAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRTaXplID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy50b3VjaExvbmdDbGljayA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHksIGR1cmF0aW9ufTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2xvbmdjbGlja2AsICdQT1NUJywge3BhcmFtc30pO1xufTtcblxuY29tbWFuZHMudG91Y2hEb3duID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnQsIHgsIHkpIHtcbiAgbGV0IHBhcmFtcyA9IHtlbGVtZW50LCB4LCB5fTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL3RvdWNoL2Rvd25gLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoVXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnQsIHgsIHl9O1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvdG91Y2gvdXBgLCAnUE9TVCcsIHtwYXJhbXN9KTtcbn07XG5cbmNvbW1hbmRzLnRvdWNoTW92ZSA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50LCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudCwgeCwgeX07XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC90b3VjaC9tb3ZlYCwgJ1BPU1QnLCB7cGFyYW1zfSk7XG59O1xuXG5oZWxwZXJzLmRvU2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke3BhcmFtcy5lbGVtZW50SWR9L3ZhbHVlYCwgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuc2V0VmFsdWVJbW1lZGlhdGUgPSBhc3luYyBmdW5jdGlvbiAoa2V5cywgZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS92YWx1ZWAsICdQT1NUJywge1xuICAgIGVsZW1lbnRJZCxcbiAgICB0ZXh0OiBfLmlzQXJyYXkoa2V5cykgPyBrZXlzLmpvaW4oJycpIDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZSxcbiAgICB1bmljb2RlS2V5Ym9hcmQ6IHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQsXG4gIH0pO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L3RleHRgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuY2xpY2sgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L2NsaWNrYCwgJ1BPU1QnLCB7ZWxlbWVudH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnR9L3NjcmVlbnNob3RgLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMudGFwID0gYXN5bmMgZnVuY3Rpb24gKGVsZW1lbnRJZCA9IG51bGwsIHggPSBudWxsLCB5ID0gbnVsbCwgY291bnQgPSAxKSB7XG4gIGNvbnN0IGFyZUNvb3JkaW5hdGVzRGVmaW5lZCA9IHV0aWwuaGFzVmFsdWUoeCkgJiYgdXRpbC5oYXNWYWx1ZSh5KTtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIGVsZW1lbnQgaWQgdG8gdGFwIG9yIGJvdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMgc2hvdWxkIGJlIGRlZmluZWRgKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIWFyZUNvb3JkaW5hdGVzRGVmaW5lZCkge1xuICAgICAgLy8gd2UgYXJlIGVpdGhlciB0YXBwaW5nIG9uIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBlbGVtZW50XG4gICAgICAvLyBvciBhbiBvZmZzZXQgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyXG4gICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGlja2AsICdQT1NUJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS90YXBgLCAnUE9TVCcsIHtcbiAgICAgICAgeCwgeSxcbiAgICAgICAgW1czQ19FTEVNRU5UX0tFWV06IGVsZW1lbnRJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9jbGVhcmAsICdQT1NUJywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuZ2V0RWxlbWVudFJlY3QgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkKSB7XG4gIGlmICh0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoYERldGVjdGVkIGRvd25zdHJlYW0gY2hyb21lZHJpdmVyIHByb3RvY29sOiAke3RoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sfWApO1xuICAgIGlmICh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1ApIHtcbiAgICAgIGNvbnN0IHt4LCB5fSA9IGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChgL2VsZW1lbnQvJHtlbGVtZW50SWR9L2xvY2F0aW9uYCwgJ0dFVCcpO1xuICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGAvZWxlbWVudC8ke2VsZW1lbnRJZH0vc2l6ZWAsICdHRVQnKTtcbiAgICAgIHJldHVybiB7eCwgeSwgd2lkdGgsIGhlaWdodH07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50LyR7ZWxlbWVudElkfS9yZWN0YCwgJ0dFVCcpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDO0FBQUE7QUFFakQsU0FBU0MsTUFBTSxDQUFFQyxDQUFDLEVBQUU7RUFDbEIsT0FBT0MsZUFBQyxDQUFDQyxRQUFRLENBQUNGLENBQUMsQ0FBQyxHQUFJQSxDQUFDLENBQUNHLFdBQVcsRUFBRSxLQUFLLE1BQU0sR0FBSSxDQUFDLENBQUNILENBQUM7QUFDM0Q7QUFFQUosUUFBUSxDQUFDUSxNQUFNLEdBQUcsZUFBZUEsTUFBTSxHQUFJO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0FBQzFFLENBQUM7QUFFRFgsUUFBUSxDQUFDWSxZQUFZLEdBQUcsZ0JBQWdCQyxTQUFTLEVBQUVDLFNBQVMsRUFBRTtFQUM1RCxPQUFPLE1BQU0sSUFBSSxDQUFDTCxZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLFlBQVdHLFNBQVUsY0FBYUQsU0FBVSxFQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNHLENBQUM7QUFFRGIsUUFBUSxDQUFDZSxnQkFBZ0IsR0FBRyxnQkFBZ0JE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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","names":["commands","helpers","extensions","toBool","s","_","isString","toLowerCase","active","uiautomator2","jwproxy","command","getAttribute","attribute","elementId","elementDisplayed","elementEnabled","elementSelected","getName","getLocation","getSize","touchLongClick","element","x","y","duration","params","touchDown","touchUp","touchMove","doSetElementValue","setValueImmediate","keys","text","isArray","join","replace","unicodeKeyboard","opts","getText","click","getElementScreenshot","tap","count","areCoordinatesDefined","util","hasValue","Error","i","W3C_ELEMENT_KEY","clear","getElementRect","isWebContext","log","debug","chromedriver","downstreamProtocol","PROTOCOLS","MJSONWP","width","height","Object","assign"],"sources":["../../../lib/commands/element.js"],"sourcesContent":["import _ from 'lodash';\nimport { util } from 'appium/support';\nimport { PROTOCOLS, W3C_ELEMENT_KEY } from 'appium/driver';\n\nlet commands = {}, helpers = {}, extensions = {};\n\nfunction toBool (s) {\n return _.isString(s) ? (s.toLowerCase() === 'true') : !!s;\n}\n\ncommands.active = async function active () {\n return await this.uiautomator2.jwproxy.command('/element/active', 'GET');\n};\n\ncommands.getAttribute = async function (attribute, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/attribute/${attribute}`, 'GET', {});\n};\n\ncommands.elementDisplayed = async function (elementId) {\n return toBool(await this.getAttribute('displayed', elementId));\n};\n\ncommands.elementEnabled = async function (elementId) {\n return toBool(await this.getAttribute('enabled', elementId));\n};\n\ncommands.elementSelected = async function (elementId) {\n return toBool(await this.getAttribute('selected', elementId));\n};\n\ncommands.getName = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/name`, 'GET', {});\n};\n\ncommands.getLocation = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/location`, 'GET', {});\n};\n\ncommands.getSize = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/size`, 'GET', {});\n};\n\ncommands.touchLongClick = async function (element, x, y, duration) {\n let params = {element, x, y, duration};\n return await this.uiautomator2.jwproxy.command(`/touch/longclick`, 'POST', {params});\n};\n\ncommands.touchDown = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/down`, 'POST', {params});\n};\n\ncommands.touchUp = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/up`, 'POST', {params});\n};\n\ncommands.touchMove = async function (element, x, y) {\n let params = {element, x, y};\n return await this.uiautomator2.jwproxy.command(`/touch/move`, 'POST', {params});\n};\n\nhelpers.doSetElementValue = async function (params) {\n return await this.uiautomator2.jwproxy.command(`/element/${params.elementId}/value`, 'POST', params);\n};\n\ncommands.setValueImmediate = async function (keys, elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/value`, 'POST', {\n elementId,\n text: _.isArray(keys) ? keys.join('') : keys,\n replace: false,\n unicodeKeyboard: this.opts.unicodeKeyboard,\n });\n};\n\ncommands.getText = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/text`, 'GET', {});\n};\n\ncommands.click = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/click`, 'POST', {element});\n};\n\ncommands.getElementScreenshot = async function (element) {\n return await this.uiautomator2.jwproxy.command(`/element/${element}/screenshot`, 'GET', {});\n};\n\ncommands.tap = async function (elementId = null, x = null, y = null, count = 1) {\n const areCoordinatesDefined = util.hasValue(x) && util.hasValue(y);\n if (!util.hasValue(elementId) && !areCoordinatesDefined) {\n throw new Error(`Either element id to tap or both absolute coordinates should be defined`);\n }\n\n for (let i = 0; i < count; i++) {\n if (util.hasValue(elementId) && !areCoordinatesDefined) {\n // we are either tapping on the default location of the element\n // or an offset from the top left corner\n await this.uiautomator2.jwproxy.command(`/element/${elementId}/click`, 'POST');\n } else {\n await this.uiautomator2.jwproxy.command(`/appium/tap`, 'POST', {\n x, y,\n [W3C_ELEMENT_KEY]: elementId,\n });\n }\n }\n};\n\ncommands.clear = async function (elementId) {\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/clear`, 'POST', {elementId});\n};\n\ncommands.getElementRect = async function (elementId) {\n if (this.isWebContext()) {\n this.log.debug(`Detected downstream chromedriver protocol: ${this.chromedriver.jwproxy.downstreamProtocol}`);\n if (this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP) {\n const {x, y} = await this.chromedriver.jwproxy.command(`/element/${elementId}/location`, 'GET');\n const {width, height} = await this.chromedriver.jwproxy.command(`/element/${elementId}/size`, 'GET');\n return {x, y, width, height};\n }\n return await this.chromedriver.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n }\n return await this.uiautomator2.jwproxy.command(`/element/${elementId}/rect`, 'GET');\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.helpers = exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _cssConverter = _interopRequireDefault(require("../css-converter"));
|
|
13
|
-
|
|
14
10
|
const helpers = {};
|
|
11
|
+
|
|
15
12
|
exports.helpers = helpers;
|
|
16
13
|
const MAGIC_FIRST_VIS_CHILD_SEL = /\/\*\[@firstVisible ?= ?('|")true\1\]/;
|
|
17
14
|
const MAGIC_SCROLLABLE_SEL = /\/\/\*\[@scrollable ?= ?('|")true\1\]/;
|
|
@@ -22,20 +19,16 @@ helpers.doFindElementOrEls = async function (params) {
|
|
|
22
19
|
let elementId = params.context;
|
|
23
20
|
return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {
|
|
27
23
|
params.strategy = '-android uiautomator';
|
|
28
24
|
params.selector = MAGIC_SCROLLABLE_BY;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
26
|
if (params.strategy === 'css selector') {
|
|
32
27
|
params.strategy = '-android uiautomator';
|
|
33
28
|
params.selector = new _cssConverter.default(params.selector, this.opts.appPackage).toUiAutomatorSelector();
|
|
34
29
|
}
|
|
35
|
-
|
|
36
30
|
return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);
|
|
37
31
|
};
|
|
38
|
-
|
|
39
32
|
var _default = helpers;
|
|
40
33
|
exports.default = _default;
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCIsIk1BR0lDX1NDUk9MTEFCTEVfU0VMIiwiTUFHSUNfU0NST0xMQUJMRV9CWSIsImRvRmluZEVsZW1lbnRPckVscyIsInBhcmFtcyIsInN0cmF0ZWd5IiwidGVzdCIsInNlbGVjdG9yIiwiZWxlbWVudElkIiwiY29udGV4dCIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiQ3NzQ29udmVydGVyIiwib3B0cyIsImFwcFBhY2thZ2UiLCJ0b1VpQXV0b21hdG9yU2VsZWN0b3IiLCJtdWx0aXBsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9maW5kLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NDb252ZXJ0ZXIgZnJvbSAnLi4vY3NzLWNvbnZlcnRlcic7XG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuLy8gd2Ugb3ZlcnJpZGUgdGhlIHhwYXRoIHNlYXJjaCBmb3IgdGhpcyBmaXJzdC12aXNpYmxlLWNoaWxkIHNlbGVjdG9yLCB3aGljaFxuLy8gbG9va3MgbGlrZSAvKltAZmlyc3RWaXNpYmxlPVwidHJ1ZVwiXVxuY29uc3QgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTCA9IC9cXC9cXCpcXFtAZmlyc3RWaXNpYmxlID89ID8oJ3xcIil0cnVlXFwxXFxdLztcblxuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9TRUwgPSAvXFwvXFwvXFwqXFxbQHNjcm9sbGFibGUgPz0gPygnfFwiKXRydWVcXDFcXF0vO1xuY29uc3QgTUFHSUNfU0NST0xMQUJMRV9CWSA9ICduZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgZnVuY3Rpb25hbGl0eSBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZXIsXG4gKiB0aGlzLmVsZW1lbnQgaW5pdGlhbGl6ZWQgaW4gZmluZC5qcyBvZiBhcHBpdW0tYW5kcm9pZC1kcml2ZS5cbiAqL1xuaGVscGVycy5kb0ZpbmRFbGVtZW50T3JFbHMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGlmIChwYXJhbXMuc3RyYXRlZ3kgPT09ICd4cGF0aCcgJiYgTUFHSUNfRklSU1RfVklTX0NISUxEX1NFTC50ZXN0KHBhcmFtcy5zZWxlY3RvcikpIHtcbiAgICBsZXQgZWxlbWVudElkID0gcGFyYW1zLmNvbnRleHQ7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZChgL2FwcGl1bS9lbGVtZW50LyR7ZWxlbWVudElkfS9maXJzdF92aXNpYmxlYCwgJ0dFVCcsIHt9KTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAneHBhdGgnICYmIE1BR0lDX1NDUk9MTEFCTEVfU0VMLnRlc3QocGFyYW1zLnNlbGVjdG9yKSkge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gTUFHSUNfU0NST0xMQUJMRV9CWTtcbiAgfVxuICBpZiAocGFyYW1zLnN0cmF0ZWd5ID09PSAnY3NzIHNlbGVjdG9yJykge1xuICAgIHBhcmFtcy5zdHJhdGVneSA9ICctYW5kcm9pZCB1aWF1dG9tYXRvcic7XG4gICAgcGFyYW1zLnNlbGVjdG9yID0gbmV3IENzc0NvbnZlcnRlcihwYXJhbXMuc2VsZWN0b3IsIHRoaXMub3B0cy5hcHBQYWNrYWdlKVxuICAgICAgLnRvVWlBdXRvbWF0b3JTZWxlY3RvcigpO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoYC9lbGVtZW50JHtwYXJhbXMubXVsdGlwbGUgPyAncycgOiAnJ31gLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG5leHBvcnQgeyBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBoZWxwZXJzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBRUEsTUFBTUEsT0FBTyxHQUFHLENBQUMsQ0FBQzs7QUFBQztBQUluQixNQUFNQyx5QkFBeUIsR0FBRyx1Q0FBdUM7QUFFekUsTUFBTUMsb0JBQW9CLEdBQUcsdUNBQXVDO0FBQ3BFLE1BQU1DLG1CQUFtQixHQUFHLG1DQUFtQzs7QUFNL0RILE9BQU8sQ0FBQ0ksa0JBQWtCLEdBQUcsZ0JBQWdCQyxNQUFNLEVBQUU7RUFDbkQsSUFBSUEsTUFBTSxDQUFDQyxRQUFRLEtBQUssT0FBTyxJQUFJTCx5QkFBeUIsQ0FBQ00sSUFBSSxDQUFDRixNQUFNLENBQUNHLFFBQVEsQ0FBQyxFQUFFO0lBQ2xGLElBQUlDLFNBQVMsR0FBR0osTUFBTSxDQUFDSyxPQUFPO0lBQzlCLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUUsbUJBQWtCSixTQUFVLGdCQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ3pHO0VBQ0EsSUFBSUosTUFBTSxDQUFDQyxRQUFRLEtBQUssT0FBTyxJQUFJSixvQkFBb0IsQ0FBQ0ssSUFBSSxDQUFDRixNQUFNLENBQUNHLFFBQVEsQ0FBQyxFQUFFO0lBQzdFSCxNQUFNLENBQUNDLFFBQVEsR0FBRyxzQkFBc0I7SUFDeENELE1BQU0sQ0FBQ0csUUFBUSxHQUFHTCxtQkFBbUI7RUFDdkM7RUFDQSxJQUFJRSxNQUFNLENBQUNDLFFBQVEsS0FBSyxjQUFjLEVBQUU7SUFDdENELE1BQU0sQ0FBQ0MsUUFBUSxHQUFHLHNCQUFzQjtJQUN4Q0QsTUFBTSxDQUFDRyxRQUFRLEdBQUcsSUFBSU0scUJBQVksQ0FBQ1QsTUFBTSxDQUFDRyxRQUFRLEVBQUUsSUFBSSxDQUFDTyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUN0RUMscUJBQXFCLEVBQUU7RUFDNUI7RUFDQSxPQUFPLE1BQU0sSUFBSSxDQUFDTixZQUFZLENBQUNDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFLFdBQVVSLE1BQU0sQ0FBQ2EsUUFBUSxHQUFHLEdBQUcsR0FBRyxFQUFHLEVBQUMsRUFBRSxNQUFNLEVBQUViLE1BQU0sQ0FBQztBQUN6RyxDQUFDO0FBQUMsZUFHYUwsT0FBTztBQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.js","names":["helpers","MAGIC_FIRST_VIS_CHILD_SEL","MAGIC_SCROLLABLE_SEL","MAGIC_SCROLLABLE_BY","doFindElementOrEls","params","strategy","test","selector","elementId","context","uiautomator2","jwproxy","command","CssConverter","opts","appPackage","toUiAutomatorSelector","multiple"],"sources":["../../../lib/commands/find.js"],"sourcesContent":["import CssConverter from '../css-converter';\n\nconst helpers = {};\n\n// we override the xpath search for this first-visible-child selector, which\n// looks like /*[@firstVisible=\"true\"]\nconst MAGIC_FIRST_VIS_CHILD_SEL = /\\/\\*\\[@firstVisible ?= ?('|\")true\\1\\]/;\n\nconst MAGIC_SCROLLABLE_SEL = /\\/\\/\\*\\[@scrollable ?= ?('|\")true\\1\\]/;\nconst MAGIC_SCROLLABLE_BY = 'new UiSelector().scrollable(true)';\n\n/**\n * Overriding helpers.doFindElementOrEls functionality of appium-android-driver,\n * this.element initialized in find.js of appium-android-drive.\n */\nhelpers.doFindElementOrEls = async function (params) {\n if (params.strategy === 'xpath' && MAGIC_FIRST_VIS_CHILD_SEL.test(params.selector)) {\n let elementId = params.context;\n return await this.uiautomator2.jwproxy.command(`/appium/element/${elementId}/first_visible`, 'GET', {});\n }\n if (params.strategy === 'xpath' && MAGIC_SCROLLABLE_SEL.test(params.selector)) {\n params.strategy = '-android uiautomator';\n params.selector = MAGIC_SCROLLABLE_BY;\n }\n if (params.strategy === 'css selector') {\n params.strategy = '-android uiautomator';\n params.selector = new CssConverter(params.selector, this.opts.appPackage)\n .toUiAutomatorSelector();\n }\n return await this.uiautomator2.jwproxy.command(`/element${params.multiple ? 's' : ''}`, 'POST', params);\n};\n\nexport { helpers };\nexport default helpers;\n"],"mappings":";;;;;;;;AAAA;AAEA,MAAMA,OAAO,GAAG,CAAC,CAAC;;AAAC;AAInB,MAAMC,yBAAyB,GAAG,uCAAuC;AAEzE,MAAMC,oBAAoB,GAAG,uCAAuC;AACpE,MAAMC,mBAAmB,GAAG,mCAAmC;;AAM/DH,OAAO,CAACI,kBAAkB,GAAG,gBAAgBC,MAAM,EAAE;EACnD,IAAIA,MAAM,CAACC,QAAQ,KAAK,OAAO,IAAIL,yBAAyB,CAACM,IAAI,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;IAClF,IAAIC,SAAS,GAAGJ,MAAM,CAACK,OAAO;IAC9B,OAAO,MAAM,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,mBAAkBJ,SAAU,gBAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EACzG;EACA,IAAIJ,MAAM,CAACC,QAAQ,KAAK,OAAO,IAAIJ,oBAAoB,CAACK,IAAI,CAACF,MAAM,CAACG,QAAQ,CAAC,EAAE;IAC7EH,MAAM,CAACC,QAAQ,GAAG,sBAAsB;IACxCD,MAAM,CAACG,QAAQ,GAAGL,mBAAmB;EACvC;EACA,IAAIE,MAAM,CAACC,QAAQ,KAAK,cAAc,EAAE;IACtCD,MAAM,CAACC,QAAQ,GAAG,sBAAsB;IACxCD,MAAM,CAACG,QAAQ,GAAG,IAAIM,qBAAY,CAACT,MAAM,CAACG,QAAQ,EAAE,IAAI,CAACO,IAAI,CAACC,UAAU,CAAC,CACtEC,qBAAqB,EAAE;EAC5B;EACA,OAAO,MAAM,IAAI,CAACN,YAAY,CAACC,OAAO,CAACC,OAAO,CAAE,WAAUR,MAAM,CAACa,QAAQ,GAAG,GAAG,GAAG,EAAG,EAAC,EAAE,MAAM,EAAEb,MAAM,CAAC;AACzG,CAAC;AAAC,eAGaL,OAAO;AAAA"}
|
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
require("source-map-support/register");
|
|
11
|
-
|
|
12
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
10
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
15
|
-
|
|
16
11
|
var _driver = require("appium/driver");
|
|
17
|
-
|
|
18
12
|
var _support = require("appium/support");
|
|
19
|
-
|
|
20
13
|
var _extensions = require("../extensions");
|
|
21
|
-
|
|
22
14
|
let extensions = {},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
commands = {},
|
|
16
|
+
helpers = {};
|
|
26
17
|
commands.getPageSource = async function () {
|
|
27
18
|
return await this.uiautomator2.jwproxy.command('/source', 'GET', {});
|
|
28
19
|
};
|
|
29
|
-
|
|
30
20
|
commands.getClipboard = async function () {
|
|
31
21
|
return (await this.adb.getApiLevel()) < 29 ? await this.uiautomator2.jwproxy.command('/appium/device/get_clipboard', 'POST', {}) : await this.adb.getClipboard();
|
|
32
22
|
};
|
|
@@ -43,7 +33,6 @@ commands.keyevent = async function (keycode, metastate) {
|
|
|
43
33
|
commands.back = async function () {
|
|
44
34
|
await this.adb.keyevent(4);
|
|
45
35
|
};
|
|
46
|
-
|
|
47
36
|
commands.getStrings = async function (language) {
|
|
48
37
|
if (!language) {
|
|
49
38
|
language = await this.adb.getDeviceLanguage();
|
|
@@ -52,25 +41,19 @@ commands.getStrings = async function (language) {
|
|
|
52
41
|
|
|
53
42
|
const preprocessStringsMap = function (mapping) {
|
|
54
43
|
const result = {};
|
|
55
|
-
|
|
56
44
|
for (const [key, value] of _lodash.default.toPairs(mapping)) {
|
|
57
45
|
result[key] = _lodash.default.isString(value) ? value : JSON.stringify(value);
|
|
58
46
|
}
|
|
59
|
-
|
|
60
47
|
return result;
|
|
61
48
|
};
|
|
62
|
-
|
|
63
49
|
if (this.apkStrings[language]) {
|
|
64
50
|
return preprocessStringsMap(this.apkStrings[language]);
|
|
65
51
|
}
|
|
66
|
-
|
|
67
52
|
if (!this.opts.app && !this.opts.appPackage) {
|
|
68
53
|
this.log.errorAndThrow("One of 'app' or 'appPackage' capabilities should must be specified");
|
|
69
54
|
}
|
|
70
|
-
|
|
71
55
|
let app = this.opts.app;
|
|
72
56
|
const tmpRoot = await _support.tempDir.openDir();
|
|
73
|
-
|
|
74
57
|
try {
|
|
75
58
|
if (!app) {
|
|
76
59
|
try {
|
|
@@ -79,11 +62,9 @@ commands.getStrings = async function (language) {
|
|
|
79
62
|
this.log.errorAndThrow(`Failed to pull an apk from '${this.opts.appPackage}'. Original error: ${err.message}`);
|
|
80
63
|
}
|
|
81
64
|
}
|
|
82
|
-
|
|
83
65
|
if (!(await _support.fs.exists(app))) {
|
|
84
66
|
this.log.errorAndThrow(`The app at '${app}' does not exist`);
|
|
85
67
|
}
|
|
86
|
-
|
|
87
68
|
try {
|
|
88
69
|
const {
|
|
89
70
|
apkStrings
|
|
@@ -97,7 +78,6 @@ commands.getStrings = async function (language) {
|
|
|
97
78
|
await _support.fs.rimraf(tmpRoot);
|
|
98
79
|
}
|
|
99
80
|
};
|
|
100
|
-
|
|
101
81
|
commands.getDisplayDensity = async function getDisplayDensity() {
|
|
102
82
|
return await this.uiautomator2.jwproxy.command('/appium/device/display_density', 'GET', {});
|
|
103
83
|
};
|
|
@@ -118,7 +98,6 @@ commands.getWindowRect = async function () {
|
|
|
118
98
|
y: 0
|
|
119
99
|
};
|
|
120
100
|
};
|
|
121
|
-
|
|
122
101
|
extensions.executeMobile = async function (mobileCommand, opts = {}) {
|
|
123
102
|
const mobileCommandsMapping = {
|
|
124
103
|
shell: 'mobileShell',
|
|
@@ -176,14 +155,11 @@ extensions.executeMobile = async function (mobileCommand, opts = {}) {
|
|
|
176
155
|
isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
|
|
177
156
|
stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording'
|
|
178
157
|
};
|
|
179
|
-
|
|
180
158
|
if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
|
|
181
159
|
throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
|
|
182
160
|
}
|
|
183
|
-
|
|
184
161
|
return await this[mobileCommandsMapping[mobileCommand]](opts);
|
|
185
162
|
};
|
|
186
|
-
|
|
187
163
|
commands.mobileViewportScreenshot = async function () {
|
|
188
164
|
return await this.getViewportScreenshot();
|
|
189
165
|
};
|
|
@@ -191,7 +167,6 @@ commands.mobileViewportScreenshot = async function () {
|
|
|
191
167
|
commands.mobileViewPortRect = async function mobileViewPortRect() {
|
|
192
168
|
return await this.getViewPortRect();
|
|
193
169
|
};
|
|
194
|
-
|
|
195
170
|
commands.setUrl = async function (url) {
|
|
196
171
|
await this.adb.startUri(url, this.opts.appPackage);
|
|
197
172
|
};
|
|
@@ -206,22 +181,20 @@ commands.mobileDeepLink = async function (opts = {}) {
|
|
|
206
181
|
waitForLaunch
|
|
207
182
|
});
|
|
208
183
|
};
|
|
209
|
-
|
|
210
184
|
commands.openNotifications = async function () {
|
|
211
185
|
return await this.uiautomator2.jwproxy.command('/appium/device/open_notifications', 'POST', {});
|
|
212
186
|
};
|
|
213
|
-
|
|
214
187
|
commands.updateSettings = async function (settings) {
|
|
215
188
|
await this.settings.update(settings);
|
|
216
189
|
await this.uiautomator2.jwproxy.command('/appium/settings', 'POST', {
|
|
217
190
|
settings
|
|
218
191
|
});
|
|
219
192
|
};
|
|
220
|
-
|
|
221
193
|
commands.getSettings = async function () {
|
|
222
194
|
const driverSettings = this.settings.getSettings();
|
|
223
195
|
const serverSettings = await this.uiautomator2.jwproxy.command('/appium/settings', 'GET');
|
|
224
|
-
return {
|
|
196
|
+
return {
|
|
197
|
+
...driverSettings,
|
|
225
198
|
...serverSettings
|
|
226
199
|
};
|
|
227
200
|
};
|
|
@@ -245,11 +218,9 @@ commands.mobileType = async function mobileType(opts = {}) {
|
|
|
245
218
|
const {
|
|
246
219
|
text
|
|
247
220
|
} = opts;
|
|
248
|
-
|
|
249
221
|
if (_lodash.default.isUndefined(text)) {
|
|
250
222
|
this.log.errorAndThrow(`The 'text' argument is mandatory`);
|
|
251
223
|
}
|
|
252
|
-
|
|
253
224
|
return await this.adb.typeUnicode(text);
|
|
254
225
|
};
|
|
255
226
|
|
|
@@ -257,12 +228,10 @@ commands.mobileInstallMultipleApks = async function (opts = {}) {
|
|
|
257
228
|
if (!_lodash.default.isArray(opts.apks) || _lodash.default.isEmpty(opts.apks)) {
|
|
258
229
|
throw new _driver.errors.InvalidArgumentError('No apks are given to install');
|
|
259
230
|
}
|
|
260
|
-
|
|
261
231
|
const apks = await _bluebird.default.all(opts.apks.map(app => this.helpers.configureApp(app, [_extensions.APK_EXTENSION])));
|
|
262
232
|
await this.adb.installMultipleApks(apks, opts.options);
|
|
263
233
|
};
|
|
264
|
-
|
|
265
234
|
Object.assign(extensions, commands, helpers);
|
|
266
235
|
var _default = extensions;
|
|
267
236
|
exports.default = _default;
|
|
268
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7RUFDekMsT0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtFQUN4QyxPQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtFQUM1QyxNQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFsQyxFQUEyQyxNQUEzQyxFQUFtREssTUFBbkQsQ0FBTjtBQUNELENBRkQ7O0FBS0FWLFFBQVEsQ0FBQ1csUUFBVCxHQUFvQixnQkFBZ0JDLE9BQWhCLEVBQXlCQyxTQUF6QixFQUFvQztFQUN0RCxLQUFLQyxHQUFMLENBQVNDLEtBQVQsQ0FBZ0Isc0JBQXFCRixTQUFVLEVBQS9DO0VBQ0EsTUFBTSxLQUFLTixHQUFMLENBQVNJLFFBQVQsQ0FBa0JDLE9BQWxCLENBQU47QUFDRCxDQUhEOztBQU1BWixRQUFRLENBQUNnQixJQUFULEdBQWdCLGtCQUFrQjtFQUNoQyxNQUFNLEtBQUtULEdBQUwsQ0FBU0ksUUFBVCxDQUFrQixDQUFsQixDQUFOO0FBQ0QsQ0FGRDs7QUFJQVgsUUFBUSxDQUFDaUIsVUFBVCxHQUFzQixnQkFBZ0JDLFFBQWhCLEVBQTBCO0VBQzlDLElBQUksQ0FBQ0EsUUFBTCxFQUFlO0lBQ2JBLFFBQVEsR0FBRyxNQUFNLEtBQUtYLEdBQUwsQ0FBU1ksaUJBQVQsRUFBakI7SUFDQSxLQUFLTCxHQUFMLENBQVNNLElBQVQsQ0FBZSxpREFBZ0RGLFFBQVMsRUFBeEU7RUFDRDs7RUFJRCxNQUFNRyxvQkFBb0IsR0FBRyxVQUFVQyxPQUFWLEVBQW1CO0lBQzlDLE1BQU1DLE1BQU0sR0FBRyxFQUFmOztJQUNBLEtBQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLEtBQU4sQ0FBWCxJQUEyQkMsZUFBQSxDQUFFQyxPQUFGLENBQVVMLE9BQVYsQ0FBM0IsRUFBK0M7TUFDN0NDLE1BQU0sQ0FBQ0MsR0FBRCxDQUFOLEdBQWNFLGVBQUEsQ0FBRUUsUUFBRixDQUFXSCxLQUFYLElBQW9CQSxLQUFwQixHQUE0QkksSUFBSSxDQUFDQyxTQUFMLENBQWVMLEtBQWYsQ0FBMUM7SUFDRDs7SUFDRCxPQUFPRixNQUFQO0VBQ0QsQ0FORDs7RUFRQSxJQUFJLEtBQUtRLFVBQUwsQ0FBZ0JiLFFBQWhCLENBQUosRUFBK0I7SUFFN0IsT0FBT0csb0JBQW9CLENBQUMsS0FBS1UsVUFBTCxDQUFnQmIsUUFBaEIsQ0FBRCxDQUEzQjtFQUNEOztFQUVELElBQUksQ0FBQyxLQUFLYyxJQUFMLENBQVVDLEdBQVgsSUFBa0IsQ0FBQyxLQUFLRCxJQUFMLENBQVVFLFVBQWpDLEVBQTZDO0lBQzNDLEtBQUtwQixHQUFMLENBQVNxQixhQUFULENBQXVCLG9FQUF2QjtFQUNEOztFQUVELElBQUlGLEdBQUcsR0FBRyxLQUFLRCxJQUFMLENBQVVDLEdBQXBCO0VBQ0EsTUFBTUcsT0FBTyxHQUFHLE1BQU1DLGdCQUFBLENBQVFDLE9BQVIsRUFBdEI7O0VBQ0EsSUFBSTtJQUNGLElBQUksQ0FBQ0wsR0FBTCxFQUFVO01BQ1IsSUFBSTtRQUNGQSxHQUFHLEdBQUcsTUFBTSxLQUFLMUIsR0FBTCxDQUFTZ0MsT0FBVCxDQUFpQixLQUFLUCxJQUFMLENBQVVFLFVBQTNCLEVBQXVDRSxPQUF2QyxDQUFaO01BQ0QsQ0FGRCxDQUVFLE9BQU9JLEdBQVAsRUFBWTtRQUNaLEtBQUsxQixHQUFMLENBQVNxQixhQUFULENBQXdCLCtCQUE4QixLQUFLSCxJQUFMLENBQVVFLFVBQVcsc0JBQXFCTSxHQUFHLENBQUNDLE9BQVEsRUFBNUc7TUFDRDtJQUNGOztJQUVELElBQUksRUFBQyxNQUFNQyxXQUFBLENBQUdDLE1BQUgsQ0FBVVYsR0FBVixDQUFQLENBQUosRUFBMkI7TUFDekIsS0FBS25CLEdBQUwsQ0FBU3FCLGFBQVQsQ0FBd0IsZUFBY0YsR0FBSSxrQkFBMUM7SUFDRDs7SUFFRCxJQUFJO01BQ0YsTUFBTTtRQUFDRjtNQUFELElBQWUsTUFBTSxLQUFLeEIsR0FBTCxDQUFTcUMscUJBQVQsQ0FBK0JYLEdBQS9CLEVBQW9DZixRQUFwQyxFQUE4Q2tCLE9BQTlDLENBQTNCO01BQ0EsS0FBS0wsVUFBTCxDQUFnQmIsUUFBaEIsSUFBNEJhLFVBQTVCO01BQ0EsT0FBT1Ysb0JBQW9CLENBQUNVLFVBQUQsQ0FBM0I7SUFDRCxDQUpELENBSUUsT0FBT1MsR0FBUCxFQUFZO01BQ1osS0FBSzFCLEdBQUwsQ0FBU3FCLGFBQVQsQ0FBd0IsZ0NBQStCRixHQUFJLHNCQUFxQk8sR0FBRyxDQUFDQyxPQUFRLEVBQTVGO0lBQ0Q7RUFDRixDQXBCRCxTQW9CVTtJQUNSLE1BQU1DLFdBQUEsQ0FBR0csTUFBSCxDQUFVVCxPQUFWLENBQU47RUFDRDtBQUNGLENBbEREOztBQW9EQXBDLFFBQVEsQ0FBQzhDLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0VBQy9ELE9BQU8sTUFBTSxLQUFLM0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLGdDQUFsQyxFQUFvRSxLQUFwRSxFQUEyRSxFQUEzRSxDQUFiO0FBQ0QsQ0FGRDs7QUFLQUwsUUFBUSxDQUFDK0MsYUFBVCxHQUF5QixrQkFBa0I7RUFDekMsT0FBTyxNQUFNLEtBQUs1QyxZQUFMLENBQWtCQyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0Msc0JBQWxDLEVBQTBELEtBQTFELEVBQWlFLEVBQWpFLENBQWI7QUFDRCxDQUZEOztBQUtBTCxRQUFRLENBQUNnRCxhQUFULEdBQXlCLGtCQUFrQjtFQUN6QyxNQUFNO0lBQUNDLEtBQUQ7SUFBUUM7RUFBUixJQUFrQixNQUFNLEtBQUtILGFBQUwsRUFBOUI7RUFDQSxPQUFPO0lBQ0xFLEtBREs7SUFFTEMsTUFGSztJQUdMQyxDQUFDLEVBQUUsQ0FIRTtJQUlMQyxDQUFDLEVBQUU7RUFKRSxDQUFQO0FBTUQsQ0FSRDs7QUFVQXJELFVBQVUsQ0FBQ3NELGFBQVgsR0FBMkIsZ0JBQWdCQyxhQUFoQixFQUErQnRCLElBQUksR0FBRyxFQUF0QyxFQUEwQztFQUNuRSxNQUFNdUIscUJBQXFCLEdBQUc7SUFDNUJDLEtBQUssRUFBRSxhQURxQjtJQUc1QkMscUJBQXFCLEVBQUUsNkJBSEs7SUFLNUJDLFdBQVcsRUFBRSxtQkFMZTtJQU01QkMsWUFBWSxFQUFFLG9CQU5jO0lBTzVCQyxrQkFBa0IsRUFBRSwwQkFQUTtJQVE1QkMsWUFBWSxFQUFFLG9CQVJjO0lBUzVCQyxnQkFBZ0IsRUFBRSx3QkFUVTtJQVU1QkMsaUJBQWlCLEVBQUUseUJBVlM7SUFXNUJDLGdCQUFnQixFQUFFLHdCQVhVO0lBWTVCQyxZQUFZLEVBQUUsb0JBWmM7SUFhNUJDLGFBQWEsRUFBRSxxQkFiYTtJQWM1QkMsWUFBWSxFQUFFLG9CQWRjO0lBZTVCQyxNQUFNLEVBQUUsY0Fmb0I7SUFnQjVCQyxrQkFBa0IsRUFBRSwwQkFoQlE7SUFpQjVCQyxZQUFZLEVBQUUsb0JBakJjO0lBbUI1QkMsUUFBUSxFQUFFLGdCQW5Ca0I7SUFxQjVCQyxrQkFBa0IsRUFBRSwwQkFyQlE7SUFzQjVCQyxpQkFBaUIsRUFBRSx5QkF0QlM7SUF3QjVCQyxXQUFXLEVBQUUsbUJBeEJlO0lBeUI1QkMsWUFBWSxFQUFFLG9CQXpCYztJQTJCNUJDLFdBQVcsRUFBRSxzQkEzQmU7SUE2QjVCQyxVQUFVLEVBQUUscUJBN0JnQjtJQStCNUJDLGFBQWEsRUFBRSxxQkEvQmE7SUFpQzVCQyxpQkFBaUIsRUFBRSx5QkFqQ1M7SUFrQzVCQyxjQUFjLEVBQUUsc0JBbENZO0lBb0M1QkMsbUJBQW1CLEVBQUUsMkJBcENPO0lBc0M1QkMsb0JBQW9CLEVBQUUsNEJBdENNO0lBdUM1QkMsbUJBQW1CLEVBQUUsMkJBdkNPO0lBeUM1QkMsZ0JBQWdCLEVBQUUsd0JBekNVO0lBMkM1QkMsT0FBTyxFQUFFLGVBM0NtQjtJQTZDNUJDLElBQUksRUFBRSxZQTdDc0I7SUE4QzVCQyxTQUFTLEVBQUUsV0E5Q2lCO0lBZ0Q1QkMsUUFBUSxFQUFFLGdCQWhEa0I7SUFpRDVCQyxRQUFRLEVBQUUsZ0JBakRrQjtJQWtENUJDLFVBQVUsRUFBRSxrQkFsRGdCO0lBbUQ1QkMsVUFBVSxFQUFFLGtCQW5EZ0I7SUFxRDVCQyxjQUFjLEVBQUUsc0JBckRZO0lBc0Q1QkMsYUFBYSxFQUFFLHFCQXREYTtJQXVENUJDLFdBQVcsRUFBRSxtQkF2RGU7SUF3RDVCQyxTQUFTLEVBQUUsaUJBeERpQjtJQXlENUJDLFlBQVksRUFBRSxvQkF6RGM7SUEwRDVCQyxVQUFVLEVBQUUsa0JBMURnQjtJQTJENUJDLFFBQVEsRUFBRSxnQkEzRGtCO0lBNkQ1QkMsYUFBYSxFQUFFLHFCQTdEYTtJQThENUJDLFlBQVksRUFBRSxvQkE5RGM7SUErRDVCQyxXQUFXLEVBQUUsbUJBL0RlO0lBZ0U1QkMsU0FBUyxFQUFFLGlCQWhFaUI7SUFrRTVCQyxXQUFXLEVBQUUsbUJBbEVlO0lBb0U1QkMsbUJBQW1CLEVBQUUsMkJBcEVPO0lBc0U1QkMsTUFBTSxFQUFFLGNBdEVvQjtJQXdFNUJDLGVBQWUsRUFBRSx1QkF4RVc7SUEwRTVCQyw2QkFBNkIsRUFBRSxxQ0ExRUg7SUEyRTVCQyxpQ0FBaUMsRUFBRSx5Q0EzRVA7SUE0RTVCQyw0QkFBNEIsRUFBRTtFQTVFRixDQUE5Qjs7RUErRUEsSUFBSSxDQUFDbkYsZUFBQSxDQUFFb0YsR0FBRixDQUFNdkQscUJBQU4sRUFBNkJELGFBQTdCLENBQUwsRUFBa0Q7SUFDaEQsTUFBTSxJQUFJeUQsY0FBQSxDQUFPQyxtQkFBWCxDQUFnQywyQkFBMEIxRCxhQUFjLEtBQXpDLEdBQ2xDLFFBQU81QixlQUFBLENBQUV1RixJQUFGLENBQU8xRCxxQkFBUCxDQUE4QiwwQkFEbEMsQ0FBTjtFQUVEOztFQUNELE9BQU8sTUFBTSxLQUFLQSxxQkFBcUIsQ0FBQ0QsYUFBRCxDQUExQixFQUEyQ3RCLElBQTNDLENBQWI7QUFDRCxDQXJGRDs7QUF1RkFoQyxRQUFRLENBQUNrSCx3QkFBVCxHQUFvQyxrQkFBa0I7RUFDcEQsT0FBTyxNQUFNLEtBQUtDLHFCQUFMLEVBQWI7QUFDRCxDQUZEOztBQWdCQW5ILFFBQVEsQ0FBQ29ILGtCQUFULEdBQThCLGVBQWVBLGtCQUFmLEdBQXFDO0VBQ2pFLE9BQU8sTUFBTSxLQUFLQyxlQUFMLEVBQWI7QUFDRCxDQUZEOztBQUlBckgsUUFBUSxDQUFDc0gsTUFBVCxHQUFrQixnQkFBZ0JDLEdBQWhCLEVBQXFCO0VBQ3JDLE1BQU0sS0FBS2hILEdBQUwsQ0FBU2lILFFBQVQsQ0FBa0JELEdBQWxCLEVBQXVCLEtBQUt2RixJQUFMLENBQVVFLFVBQWpDLENBQU47QUFDRCxDQUZEOztBQWdCQWxDLFFBQVEsQ0FBQ3lILGNBQVQsR0FBMEIsZ0JBQWdCekYsSUFBSSxHQUFHLEVBQXZCLEVBQTJCO0VBQ25ELE1BQU07SUFDSnVGLEdBREk7SUFFSkcsT0FBTyxFQUFFQyxHQUZMO0lBR0pDO0VBSEksSUFJRjVGLElBSko7RUFLQSxPQUFPLE1BQU0sS0FBS3pCLEdBQUwsQ0FBU2lILFFBQVQsQ0FBa0JELEdBQWxCLEVBQXVCSSxHQUF2QixFQUE0QjtJQUFFQztFQUFGLENBQTVCLENBQWI7QUFDRCxDQVBEOztBQVNBNUgsUUFBUSxDQUFDNkgsaUJBQVQsR0FBNkIsa0JBQWtCO0VBQzdDLE9BQU8sTUFBTSxLQUFLMUgsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLG1DQUFsQyxFQUF1RSxNQUF2RSxFQUErRSxFQUEvRSxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDOEgsY0FBVCxHQUEwQixnQkFBZ0JDLFFBQWhCLEVBQTBCO0VBQ2xELE1BQU0sS0FBS0EsUUFBTCxDQUFjQyxNQUFkLENBQXFCRCxRQUFyQixDQUFOO0VBQ0EsTUFBTSxLQUFLNUgsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLGtCQUFsQyxFQUFzRCxNQUF0RCxFQUE4RDtJQUFDMEg7RUFBRCxDQUE5RCxDQUFOO0FBQ0QsQ0FIRDs7QUFLQS9ILFFBQVEsQ0FBQ2lJLFdBQVQsR0FBdUIsa0JBQWtCO0VBQ3ZDLE1BQU1DLGNBQWMsR0FBRyxLQUFLSCxRQUFMLENBQWNFLFdBQWQsRUFBdkI7RUFDQSxNQUFNRSxjQUFjLEdBQUcsTUFBTSxLQUFLaEksWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLGtCQUFsQyxFQUFzRCxLQUF0RCxDQUE3QjtFQUNBLE9BQU8sRUFBQyxHQUFHNkgsY0FBSjtJQUFvQixHQUFHQztFQUF2QixDQUFQO0FBQ0QsQ0FKRDs7QUFXQWxJLE9BQU8sQ0FBQ21JLHVCQUFSLEdBQWtDLGdCQUFnQkMsT0FBaEIsRUFBeUI7RUFDekQsTUFBTUEsT0FBTyxFQUFiO0FBQ0QsQ0FGRDs7QUFLQXBJLE9BQU8sQ0FBQ3FJLHdCQUFSLEdBQW1DLFlBQVk7RUFDN0MsS0FBS0MsWUFBTCxHQUFvQixJQUFwQjtFQUNBLEtBQUtDLFdBQUwsR0FBbUIsS0FBS3JJLFlBQUwsQ0FBa0JxSSxXQUFsQixDQUE4QkMsSUFBOUIsQ0FBbUMsS0FBS3RJLFlBQXhDLENBQW5CO0VBQ0EsS0FBS3VJLFlBQUwsR0FBb0IsS0FBS3ZJLFlBQUwsQ0FBa0J1SSxZQUFsQixDQUErQkQsSUFBL0IsQ0FBb0MsS0FBS3RJLFlBQXpDLENBQXBCO0VBQ0EsS0FBS3dJLGNBQUwsR0FBc0IsSUFBdEI7QUFDRCxDQUxEOztBQVdBM0ksUUFBUSxDQUFDNEksbUJBQVQsR0FBK0Isa0JBQWtCO0VBQy9DLE9BQU8sTUFBTSxLQUFLekksWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDLHFCQUFsQyxFQUF5RCxLQUF6RCxDQUFiO0FBQ0QsQ0FGRDs7QUFrQkFMLFFBQVEsQ0FBQzZJLFVBQVQsR0FBc0IsZUFBZUEsVUFBZixDQUEyQjdHLElBQUksR0FBRyxFQUFsQyxFQUFzQztFQUMxRCxNQUFNO0lBQ0o4RztFQURJLElBRUY5RyxJQUZKOztFQUdBLElBQUlOLGVBQUEsQ0FBRXFILFdBQUYsQ0FBY0QsSUFBZCxDQUFKLEVBQXlCO0lBQ3ZCLEtBQUtoSSxHQUFMLENBQVNxQixhQUFULENBQXdCLGtDQUF4QjtFQUNEOztFQUNELE9BQU8sTUFBTSxLQUFLNUIsR0FBTCxDQUFTeUksV0FBVCxDQUFxQkYsSUFBckIsQ0FBYjtBQUNELENBUkQ7O0FBeUNBOUksUUFBUSxDQUFDaUoseUJBQVQsR0FBcUMsZ0JBQWdCakgsSUFBSSxHQUFHLEVBQXZCLEVBQTJCO0VBQzlELElBQUksQ0FBQ04sZUFBQSxDQUFFd0gsT0FBRixDQUFVbEgsSUFBSSxDQUFDbUgsSUFBZixDQUFELElBQXlCekgsZUFBQSxDQUFFMEgsT0FBRixDQUFVcEgsSUFBSSxDQUFDbUgsSUFBZixDQUE3QixFQUFtRDtJQUNqRCxNQUFNLElBQUlwQyxjQUFBLENBQU9zQyxvQkFBWCxDQUFnQyw4QkFBaEMsQ0FBTjtFQUNEOztFQUNELE1BQU1GLElBQUksR0FBRyxNQUFNRyxpQkFBQSxDQUFFQyxHQUFGLENBQU12SCxJQUFJLENBQUNtSCxJQUFMLENBQ3RCSyxHQURzQixDQUNqQnZILEdBQUQsSUFBUyxLQUFLaEMsT0FBTCxDQUFhd0osWUFBYixDQUEwQnhILEdBQTFCLEVBQStCLENBQUN5SCx5QkFBRCxDQUEvQixDQURTLENBQU4sQ0FBbkI7RUFFQSxNQUFNLEtBQUtuSixHQUFMLENBQVNpRyxtQkFBVCxDQUE2QjJDLElBQTdCLEVBQW1DbkgsSUFBSSxDQUFDMkgsT0FBeEMsQ0FBTjtBQUNELENBUEQ7O0FBU0FDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjOUosVUFBZCxFQUEwQkMsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVGLFUifQ==
|
|
237
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZ2V0UGFnZVNvdXJjZSIsInVpYXV0b21hdG9yMiIsImp3cHJveHkiLCJjb21tYW5kIiwiZ2V0Q2xpcGJvYXJkIiwiYWRiIiwiZ2V0QXBpTGV2ZWwiLCJkb1NlbmRLZXlzIiwicGFyYW1zIiwia2V5ZXZlbnQiLCJrZXljb2RlIiwibWV0YXN0YXRlIiwibG9nIiwiZGVidWciLCJiYWNrIiwiZ2V0U3RyaW5ncyIsImxhbmd1YWdlIiwiZ2V0RGV2aWNlTGFuZ3VhZ2UiLCJpbmZvIiwicHJlcHJvY2Vzc1N0cmluZ3NNYXAiLCJtYXBwaW5nIiwicmVzdWx0Iiwia2V5IiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwa1N0cmluZ3MiLCJvcHRzIiwiYXBwIiwiYXBwUGFja2FnZSIsImVycm9yQW5kVGhyb3ciLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsQXBrIiwiZXJyIiwibWVzc2FnZSIsImZzIiwiZXhpc3RzIiwiZXh0cmFjdFN0cmluZ3NGcm9tQXBrIiwicmltcmFmIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJnZXRXaW5kb3dTaXplIiwiZ2V0V2luZG93UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwieCIsInkiLCJleGVjdXRlTW9iaWxlIiwibW9iaWxlQ29tbWFuZCIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwiZHJhZ0dlc3R1cmUiLCJmbGluZ0dlc3R1cmUiLCJkb3VibGVDbGlja0dlc3R1cmUiLCJjbGlja0dlc3R1cmUiLCJsb25nQ2xpY2tHZXN0dXJlIiwicGluY2hDbG9zZUdlc3R1cmUiLCJwaW5jaE9wZW5HZXN0dXJlIiwic3dpcGVHZXN0dXJlIiwic2Nyb2xsR2VzdHVyZSIsInNjcm9sbEJhY2tUbyIsInNjcm9sbCIsInZpZXdwb3J0U2NyZWVuc2hvdCIsInZpZXdwb3J0UmVjdCIsImRlZXBMaW5rIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJhY2NlcHRBbGVydCIsImRpc21pc3NBbGVydCIsImJhdHRlcnlJbmZvIiwiZGV2aWNlSW5mbyIsImdldERldmljZVRpbWUiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwidHlwZSIsInNlbnNvclNldCIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwicmVmcmVzaEdwc0NhY2hlIiwic3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJzdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsImRyaXZlclNldHRpbmdzIiwic2VydmVyU2V0dGluZ3MiLCJ3cmFwQm9vdHN0cmFwRGlzY29ubmVjdCIsIndyYXBwZWQiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJwcm94eUNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIm1vYmlsZUdldERldmljZUluZm8iLCJtb2JpbGVUeXBlIiwidGV4dCIsImlzVW5kZWZpbmVkIiwidHlwZVVuaWNvZGUiLCJtb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzIiwiaXNBcnJheSIsImFwa3MiLCJpc0VtcHR5IiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJCIiwiYWxsIiwibWFwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIm9wdGlvbnMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZ2VuZXJhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04gfSBmcm9tICcuLi9leHRlbnNpb25zJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fSxcbiAgICBjb21tYW5kcyA9IHt9LFxuICAgIGhlbHBlcnMgPSB7fTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3NvdXJjZScsICdHRVQnLCB7fSk7XG59O1xuXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA8IDI5KVxuICAgID8gKGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2UvZ2V0X2NsaXBib2FyZCcsICdQT1NUJywge30pKVxuICAgIDogKGF3YWl0IHRoaXMuYWRiLmdldENsaXBib2FyZCgpKTtcbn07XG5cbi8vIE5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBmb3IgY29ycmVjdCB1bmljb2RlIHN1cHBvcnRcbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiAocGFyYW1zKSB7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2tleXMnLCAnUE9TVCcsIHBhcmFtcyk7XG59O1xuXG4vLyB1aWF1dG9tYXRvcjIgZG9lc24ndCBzdXBwb3J0IG1ldGFzdGF0ZSBmb3Iga2V5ZXZlbnRzXG5jb21tYW5kcy5rZXlldmVudCA9IGFzeW5jIGZ1bmN0aW9uIChrZXljb2RlLCBtZXRhc3RhdGUpIHtcbiAgdGhpcy5sb2cuZGVidWcoYElnbm9yaW5nIG1ldGFzdGF0ZSAke21ldGFzdGF0ZX1gKTtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoa2V5Y29kZSk7XG59O1xuXG4vLyBVc2UgQURCIHNpbmNlIHdlIGRvbid0IGhhdmUgVWlBdXRvbWF0b3JcbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmtleWV2ZW50KDQpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KFwiT25lIG9mICdhcHAnIG9yICdhcHBQYWNrYWdlJyBjYXBhYmlsaXRpZXMgc2hvdWxkIG11c3QgYmUgc3BlY2lmaWVkXCIpO1xuICB9XG5cbiAgbGV0IGFwcCA9IHRoaXMub3B0cy5hcHA7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoIWFwcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwID0gYXdhaXQgdGhpcy5hZGIucHVsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSwgdG1wUm9vdCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwKSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBleHRyYWN0IHN0cmluZ3MgZnJvbSAnJHthcHB9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgfVxufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScsICdHRVQnLCB7fSk7XG59O1xuXG4vLyBtZW1vaXplZCBpbiBjb25zdHJ1Y3RvclxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL3dpbmRvdy9jdXJyZW50L3NpemUnLCAnR0VUJywge30pO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgfTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIGRyYWdHZXN0dXJlOiAnbW9iaWxlRHJhZ0dlc3R1cmUnLFxuICAgIGZsaW5nR2VzdHVyZTogJ21vYmlsZUZsaW5nR2VzdHVyZScsXG4gICAgZG91YmxlQ2xpY2tHZXN0dXJlOiAnbW9iaWxlRG91YmxlQ2xpY2tHZXN0dXJlJyxcbiAgICBjbGlja0dlc3R1cmU6ICdtb2JpbGVDbGlja0dlc3R1cmUnLFxuICAgIGxvbmdDbGlja0dlc3R1cmU6ICdtb2JpbGVMb25nQ2xpY2tHZXN0dXJlJyxcbiAgICBwaW5jaENsb3NlR2VzdHVyZTogJ21vYmlsZVBpbmNoQ2xvc2VHZXN0dXJlJyxcbiAgICBwaW5jaE9wZW5HZXN0dXJlOiAnbW9iaWxlUGluY2hPcGVuR2VzdHVyZScsXG4gICAgc3dpcGVHZXN0dXJlOiAnbW9iaWxlU3dpcGVHZXN0dXJlJyxcbiAgICBzY3JvbGxHZXN0dXJlOiAnbW9iaWxlU2Nyb2xsR2VzdHVyZScsXG4gICAgc2Nyb2xsQmFja1RvOiAnbW9iaWxlU2Nyb2xsQmFja1RvJyxcbiAgICBzY3JvbGw6ICdtb2JpbGVTY3JvbGwnLFxuICAgIHZpZXdwb3J0U2NyZWVuc2hvdDogJ21vYmlsZVZpZXdwb3J0U2NyZWVuc2hvdCcsXG4gICAgdmlld3BvcnRSZWN0OiAnbW9iaWxlVmlld1BvcnRSZWN0JyxcblxuICAgIGRlZXBMaW5rOiAnbW9iaWxlRGVlcExpbmsnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGFjY2VwdEFsZXJ0OiAnbW9iaWxlQWNjZXB0QWxlcnQnLFxuICAgIGRpc21pc3NBbGVydDogJ21vYmlsZURpc21pc3NBbGVydCcsXG5cbiAgICBiYXR0ZXJ5SW5mbzogJ21vYmlsZUdldEJhdHRlcnlJbmZvJyxcblxuICAgIGRldmljZUluZm86ICdtb2JpbGVHZXREZXZpY2VJbmZvJyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgdHlwZTogJ21vYmlsZVR5cGUnLFxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICBhd2FpdCB0aGlzLnNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncyk7XG4gIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge3NldHRpbmdzfSk7XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZHJpdmVyU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlclNldHRpbmdzLCAuLi5zZXJ2ZXJTZXR0aW5nc307XG59O1xuXG4vKipcbiAqIE92ZXJyaWRpbmcgYXBwaXVtLWFuZHJvaWQtZHJpdmVyJ3Mgd3JhcEJvb3RzdHJhcERpc2Nvbm5lY3QsXG4gKiB1bmxpa2UgaW4gYXBwaXVtLWFuZHJvaWQtZHJpdmVyIGF2b2lkaW5nIGFkYiByZXN0YXJ0aW5nIGFzIGl0IGludGVyblxuICoga2lsbHMgVWlBdXRvbWF0b3IyIHNlcnZlciBydW5uaW5nIGluIHRoZSBkZXZpY2UuXG4gKiovXG5oZWxwZXJzLndyYXBCb290c3RyYXBEaXNjb25uZWN0ID0gYXN5bmMgZnVuY3Rpb24gKHdyYXBwZWQpIHtcbiAgYXdhaXQgd3JhcHBlZCgpO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyIGFuZCByZWRpcmVjdCB0byB1aWF1dG9tYXRvcjJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eVJlcVJlcy5iaW5kKHRoaXMudWlhdXRvbWF0b3IyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgJ3RleHQnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi50eXBlVW5pY29kZSh0ZXh0KTtcbn07XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBhcnRpYWxJbnN0YWxsIFtmYWxzZV0gLSBJbnN0YWxsIGFwa3MgcGFydGlhbGx5LiBJdCBpcyB1c2VkIGZvciAnaW5zdGFsbC1tdWx0aXBsZScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vYW5kcm9pZC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMTExMDY0L3doYXQtaXMtYS1wYXJ0aWFsLWFwcGxpY2F0aW9uLWluc3RhbGwtdmlhLWFkYlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gYXBrcyAtIFRoZSBsaXN0IG9mIEFQS3MgdG8gaW5zdGFsbC4gRWFjaCBBUEsgc2hvdWxkIGJlIGEgcGF0aCB0byBhIGFwa1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZG93bmxvYWRhYmxlIFVSTCBhcyBIVFRQL0hUVFBTLlxuICogQHByb3BlcnR5IHtJbnN0YWxsT3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogSW5zdGFsbCBtdWx0aXBsZSBBUEtzIHdpdGggYGluc3RhbGwtbXVsdGlwbGVgIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0luc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBpbnN0YWxsaW5nIHRoZSBnaXZlbiBBUEtzLlxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsTXVsdGlwbGVBcGtzID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBpZiAoIV8uaXNBcnJheShvcHRzLmFwa3MpIHx8IF8uaXNFbXB0eShvcHRzLmFwa3MpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcignTm8gYXBrcyBhcmUgZ2l2ZW4gdG8gaW5zdGFsbCcpO1xuICB9XG4gIGNvbnN0IGFwa3MgPSBhd2FpdCBCLmFsbChvcHRzLmFwa3NcbiAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTl0pKSk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGxNdWx0aXBsZUFwa3MoYXBrcywgb3B0cy5vcHRpb25zKTtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQ2ZDLFFBQVEsR0FBRyxDQUFDLENBQUM7RUFDYkMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQkQsUUFBUSxDQUFDRSxhQUFhLEdBQUcsa0JBQWtCO0VBQ3pDLE9BQU8sTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUss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
|