appium-android-driver 4.52.1 → 5.0.1
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/build/index.js +6 -4
- package/build/lib/android-helpers.js +12 -9
- package/build/lib/bootstrap.js +7 -7
- package/build/lib/commands/actions.js +13 -13
- package/build/lib/commands/alert.js +7 -7
- package/build/lib/commands/app-management.js +6 -6
- package/build/lib/commands/context.js +10 -8
- package/build/lib/commands/element.js +5 -5
- package/build/lib/commands/execute.js +7 -6
- package/build/lib/commands/file-actions.js +27 -20
- package/build/lib/commands/find.js +6 -6
- package/build/lib/commands/general.js +8 -8
- package/build/lib/commands/ime.js +4 -4
- package/build/lib/commands/intent.js +7 -7
- package/build/lib/commands/log.js +6 -6
- package/build/lib/commands/network.js +11 -4
- package/build/lib/commands/performance.js +1 -1
- package/build/lib/commands/recordscreen.js +15 -15
- package/build/lib/commands/shell.js +3 -3
- package/build/lib/commands/streamscreen.js +7 -7
- package/build/lib/commands/touch.js +8 -8
- package/build/lib/desired-caps.js +1 -1
- package/build/lib/driver.js +12 -12
- package/build/lib/logger.js +3 -3
- package/build/lib/server.js +4 -4
- package/build/lib/uiautomator.js +3 -3
- package/build/lib/unlock-helpers.js +8 -8
- package/build/lib/webview-helpers.js +7 -7
- package/lib/android-helpers.js +1 -1
- package/lib/bootstrap.js +2 -2
- package/lib/commands/actions.js +1 -1
- package/lib/commands/alert.js +1 -1
- package/lib/commands/app-management.js +4 -2
- package/lib/commands/context.js +2 -2
- package/lib/commands/element.js +1 -1
- package/lib/commands/execute.js +3 -1
- package/lib/commands/file-actions.js +28 -8
- package/lib/commands/find.js +2 -2
- package/lib/commands/general.js +1 -1
- package/lib/commands/ime.js +1 -1
- package/lib/commands/intent.js +1 -1
- package/lib/commands/log.js +1 -1
- package/lib/commands/network.js +22 -1
- package/lib/commands/recordscreen.js +1 -1
- package/lib/commands/shell.js +1 -1
- package/lib/commands/streamscreen.js +1 -1
- package/lib/commands/touch.js +2 -2
- package/lib/driver.js +2 -2
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/lib/uiautomator.js +1 -1
- package/lib/unlock-helpers.js +1 -1
- package/lib/webview-helpers.js +1 -1
- package/package.json +21 -15
- package/lib/.DS_Store +0 -0
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
4
|
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
exports.
|
|
8
|
+
exports.setupNewChromedriver = exports.helpers = exports.default = exports.commands = void 0;
|
|
11
9
|
|
|
12
10
|
require("source-map-support/register");
|
|
13
11
|
|
|
@@ -21,14 +19,18 @@ var _portfinder = _interopRequireDefault(require("portfinder"));
|
|
|
21
19
|
|
|
22
20
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
23
21
|
|
|
24
|
-
var
|
|
22
|
+
var _support = require("@appium/support");
|
|
25
23
|
|
|
26
|
-
var
|
|
24
|
+
var _baseDriver = require("@appium/base-driver");
|
|
27
25
|
|
|
28
26
|
var _webviewHelpers = _interopRequireWildcard(require("../webview-helpers"));
|
|
29
27
|
|
|
30
28
|
var _androidHelpers = require("../android-helpers");
|
|
31
29
|
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
|
|
32
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
|
+
|
|
32
34
|
const CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';
|
|
33
35
|
let commands = {},
|
|
34
36
|
helpers = {},
|
|
@@ -49,7 +51,7 @@ commands.getContexts = async function getContexts() {
|
|
|
49
51
|
};
|
|
50
52
|
|
|
51
53
|
commands.setContext = async function setContext(name) {
|
|
52
|
-
if (!
|
|
54
|
+
if (!_support.util.hasValue(name)) {
|
|
53
55
|
name = this.defaultContextName();
|
|
54
56
|
} else if (name === _webviewHelpers.WEBVIEW_WIN) {
|
|
55
57
|
name = this.defaultWebviewName();
|
|
@@ -66,7 +68,7 @@ commands.setContext = async function setContext(name) {
|
|
|
66
68
|
const contexts = this.assignContexts(webviewsMapping);
|
|
67
69
|
|
|
68
70
|
if (!_lodash.default.includes(contexts, name)) {
|
|
69
|
-
throw new
|
|
71
|
+
throw new _baseDriver.errors.NoSuchContextError();
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
await this.switchContext(name, webviewsMapping);
|
|
@@ -423,4 +425,4 @@ var _default = extensions;
|
|
|
423
425
|
exports.default = _default;require('source-map-support').install();
|
|
424
426
|
|
|
425
427
|
|
|
426
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsImFzc2lnbkNvbnRleHRzIiwic2V0Q29udGV4dCIsIm5hbWUiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXRUJWSUVXX1dJTiIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNvbnRleHRzIiwiXyIsImluY2x1ZGVzIiwiZXJyb3JzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwic3dpdGNoQ29udGV4dCIsIm1vYmlsZUdldENvbnRleHRzIiwiYW5kcm9pZERldmljZVNvY2tldCIsImVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIiwid2Vidmlld0RldnRvb2xzUG9ydCIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsIndlYnZpZXdzIiwicGFyc2VXZWJ2aWV3TmFtZXMiLCJOQVRJVkVfV0lOIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJoYXMiLCJtYXAiLCJ3bSIsIndlYnZpZXdOYW1lIiwia25vd25QYWNrYWdlIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJhcHBTdGF0ZSIsInF1ZXJ5QXBwU3RhdGUiLCJBUFBfU1RBVEUiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJpbmZvIiwic2V0dXBOZXdDaHJvbWVkcml2ZXIiLCJjdXJEZXZpY2VJZCIsIm9uIiwiQ2hyb21lZHJpdmVyIiwiRVZFTlRfQ0hBTkdFRCIsIm1zZyIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIm9uQ2hyb21lZHJpdmVyU3RvcCIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwicHJveHlSZXEiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwcm94eSIsImNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwiQ0hST01JVU1fV0lOIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImFjdGl2aXR5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZWwiLCJmaW5kRWxPckVscyIsImNsaWNrIiwiRUxFTUVOVCIsImUiLCJzdGFydENocm9tZVNlc3Npb24iLCJrbm93blBhY2thZ2VzIiwiY2hyb21lQnVuZGxlSWQiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhcHBBY3Rpdml0eSIsImhhc1dvcmtpbmdXZWJ2aWV3IiwicmVzdGFydCIsImdldENocm9tZWRyaXZlclBvcnQiLCJwb3J0U3BlYyIsImdldFBvcnQiLCJCIiwicHJvbWlzaWZ5IiwiUG9ydEZpbmRlciIsInBvcnQiLCJmb3VuZFBvcnQiLCJwb3RlbnRpYWxQb3J0Iiwic3RvcFBvcnQiLCJwYXJzZUludCIsImlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCIsImlzRmVhdHVyZUVuYWJsZWQiLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiZGV0YWlscyIsImdldFdlYnZpZXdEZXRhaWxzIiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY21kQXJncyIsImNocm9tZWRyaXZlckFyZ3MiLCJ2ZXJib3NlIiwic2hvd0Nocm9tZWRyaXZlckxvZyIsImV4ZWN1dGFibGVEaXIiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyIiwibWFwcGluZ1BhdGgiLCJjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSIsImJ1bmRsZUlkIiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUiLCJkaXNhYmxlQnVpbGRDaGVjayIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwib3B0IiwiZW5kc1dpdGgiLCJtZXJnZSIsImNhcHMiLCJjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIiwic3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFFQSxNQUFNQSxpQ0FBaUMsR0FBRywyQkFBMUM7QUFFQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBTUFGLFFBQVEsQ0FBQ0csaUJBQVQsR0FBNkIsZUFBZUEsaUJBQWYsR0FBb0M7QUFHL0QsU0FBTyxLQUFLQyxVQUFMLElBQW1CLEtBQUtDLGtCQUFMLEVBQTFCO0FBQ0QsQ0FKRDs7QUFNQUwsUUFBUSxDQUFDTSxXQUFULEdBQXVCLGVBQWVBLFdBQWYsR0FBOEI7QUFDbkQsUUFBTUMsSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUFDQyxJQUFBQSxlQUFlLEVBQUUsS0FBS0E7QUFBdkIsR0FBZCxFQUF1RCxLQUFLSCxJQUE1RCxDQUFiO0FBQ0EsUUFBTUksZUFBZSxHQUFHLE1BQU1DLHdCQUFlQyxrQkFBZixDQUFrQyxLQUFLQyxHQUF2QyxFQUE0Q1AsSUFBNUMsQ0FBOUI7QUFDQSxTQUFPLEtBQUtRLGNBQUwsQ0FBb0JKLGVBQXBCLENBQVA7QUFDRCxDQUpEOztBQU1BWCxRQUFRLENBQUNnQixVQUFULEdBQXNCLGVBQWVBLFVBQWYsQ0FBMkJDLElBQTNCLEVBQWlDO0FBQ3JELE1BQUksQ0FBQ0Msb0JBQUtDLFFBQUwsQ0FBY0YsSUFBZCxDQUFMLEVBQTBCO0FBQ3hCQSxJQUFBQSxJQUFJLEdBQUcsS0FBS1osa0JBQUwsRUFBUDtBQUNELEdBRkQsTUFFTyxJQUFJWSxJQUFJLEtBQUtHLDJCQUFiLEVBQTBCO0FBRS9CSCxJQUFBQSxJQUFJLEdBQUcsS0FBS0ksa0JBQUwsRUFBUDtBQUNEOztBQUVELE1BQUlKLElBQUksS0FBSyxLQUFLYixVQUFsQixFQUE4QjtBQUM1QjtBQUNEOztBQUVELFFBQU1HLElBQUksR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFBQ0MsSUFBQUEsZUFBZSxFQUFFLEtBQUtBO0FBQXZCLEdBQWQsRUFBdUQsS0FBS0gsSUFBNUQsQ0FBYjtBQUNBLFFBQU1JLGVBQWUsR0FBRyxNQUFNQyx3QkFBZUMsa0JBQWYsQ0FBa0MsS0FBS0MsR0FBdkMsRUFBNENQLElBQTVDLENBQTlCO0FBQ0EsUUFBTWUsUUFBUSxHQUFHLEtBQUtQLGNBQUwsQ0FBb0JKLGVBQXBCLENBQWpCOztBQUVBLE1BQUksQ0FBQ1ksZ0JBQUVDLFFBQUYsQ0FBV0YsUUFBWCxFQUFxQkwsSUFBckIsQ0FBTCxFQUFpQztBQUMvQixVQUFNLElBQUlRLHlCQUFPQyxrQkFBWCxFQUFOO0FBQ0Q7O0FBRUQsUUFBTSxLQUFLQyxhQUFMLENBQW1CVixJQUFuQixFQUF5Qk4sZUFBekIsQ0FBTjtBQUNBLE9BQUtQLFVBQUwsR0FBa0JhLElBQWxCO0FBQ0QsQ0F0QkQ7O0FBc0VBakIsUUFBUSxDQUFDNEIsaUJBQVQsR0FBNkIsZUFBZUEsaUJBQWYsR0FBb0M7QUFDL0QsUUFBTXJCLElBQUksR0FBRztBQUNYc0IsSUFBQUEsbUJBQW1CLEVBQUUsS0FBS3RCLElBQUwsQ0FBVXNCLG1CQURwQjtBQUVYQyxJQUFBQSx1QkFBdUIsRUFBRSxJQUZkO0FBR1hDLElBQUFBLG1CQUFtQixFQUFFLEtBQUt4QixJQUFMLENBQVV3QixtQkFIcEI7QUFJWEMsSUFBQUEsOEJBQThCLEVBQUUsSUFKckI7QUFLWHRCLElBQUFBLGVBQWUsRUFBRSxLQUFLQTtBQUxYLEdBQWI7QUFPQSxTQUFPLE1BQU1FLHdCQUFlQyxrQkFBZixDQUFrQyxLQUFLQyxHQUF2QyxFQUE0Q1AsSUFBNUMsQ0FBYjtBQUNELENBVEQ7O0FBV0FOLE9BQU8sQ0FBQ2MsY0FBUixHQUF5QixTQUFTQSxjQUFULENBQXlCSixlQUF6QixFQUEwQztBQUNqRSxRQUFNSixJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQUNDLElBQUFBLGVBQWUsRUFBRSxLQUFLQTtBQUF2QixHQUFkLEVBQXVELEtBQUtILElBQTVELENBQWI7O0FBQ0EsUUFBTTBCLFFBQVEsR0FBR3JCLHdCQUFlc0IsaUJBQWYsQ0FBaUN2QixlQUFqQyxFQUFrREosSUFBbEQsQ0FBakI7O0FBQ0EsT0FBS2UsUUFBTCxHQUFnQixDQUFDYSwwQkFBRCxFQUFhLEdBQUdGLFFBQWhCLENBQWhCOztBQUNBRyxrQkFBSUMsS0FBSixDQUFXLHVCQUFzQkMsSUFBSSxDQUFDQyxTQUFMLENBQWUsS0FBS2pCLFFBQXBCLENBQThCLEVBQS9EOztBQUNBLFNBQU8sS0FBS0EsUUFBWjtBQUNELENBTkQ7O0FBUUFyQixPQUFPLENBQUMwQixhQUFSLEdBQXdCLGVBQWVBLGFBQWYsQ0FBOEJWLElBQTlCLEVBQW9DTixlQUFwQyxFQUFxRDtBQUczRSxNQUFJLEtBQUs2QixxQkFBTCxDQUEyQnZCLElBQTNCLENBQUosRUFBc0M7QUFFcEMsVUFBTSxLQUFLd0Isc0JBQUwsQ0FBNEJ4QixJQUE1QixFQUFrQ04sZUFBbEMsQ0FBTjtBQUNELEdBSEQsTUFHTyxJQUFJLEtBQUs2QixxQkFBTCxDQUEyQixLQUFLcEMsVUFBaEMsQ0FBSixFQUFpRDtBQUt0RCxRQUFJLEtBQUtHLElBQUwsQ0FBVW1DLDRCQUFkLEVBQTRDO0FBQzFDTixzQkFBSUMsS0FBSixDQUFVLDBFQUFWOztBQUNBLFlBQU0sS0FBS00sdUJBQUwsRUFBTjtBQUNELEtBSEQsTUFHTztBQUNMLFlBQU0sS0FBS0Msd0JBQUwsRUFBTjtBQUNEO0FBQ0YsR0FYTSxNQVdBO0FBQ0wsVUFBTSxJQUFJQyxLQUFKLENBQVcsbURBQWtENUIsSUFBSyxHQUFsRSxDQUFOO0FBQ0Q7QUFDRixDQXBCRDs7QUE4QkFoQixPQUFPLENBQUNJLGtCQUFSLEdBQTZCLFNBQVNBLGtCQUFULEdBQStCO0FBQzFELFNBQU84QiwwQkFBUDtBQUNELENBRkQ7O0FBSUFsQyxPQUFPLENBQUNvQixrQkFBUixHQUE2QixTQUFTQSxrQkFBVCxHQUErQjtBQUMxRCxTQUFPeUIsK0JBQWUsS0FBS3ZDLElBQUwsQ0FBVXdDLFVBQWhDO0FBQ0QsQ0FGRDs7QUFJQTlDLE9BQU8sQ0FBQytDLFlBQVIsR0FBdUIsU0FBU0EsWUFBVCxHQUF5QjtBQUM5QyxTQUFPLEtBQUs1QyxVQUFMLEtBQW9CLElBQXBCLElBQTRCLEtBQUtBLFVBQUwsS0FBb0IrQiwwQkFBdkQ7QUFDRCxDQUZEOztBQUtBbEMsT0FBTyxDQUFDd0Msc0JBQVIsR0FBaUMsZUFBZUEsc0JBQWYsQ0FBdUNRLE9BQXZDLEVBQWdEdEMsZUFBaEQsRUFBaUU7QUFDaEd5QixrQkFBSUMsS0FBSixDQUFXLGdEQUErQ1ksT0FBUSxHQUFsRTs7QUFFQSxNQUFJQyxFQUFKOztBQUNBLE1BQUksS0FBS0Msb0JBQUwsQ0FBMEJGLE9BQTFCLENBQUosRUFBd0M7QUFHdENiLG9CQUFJQyxLQUFKLENBQVcsNENBQTJDWSxPQUFRLGNBQTlEOztBQUNBQyxJQUFBQSxFQUFFLEdBQUcsS0FBS0Msb0JBQUwsQ0FBMEJGLE9BQTFCLENBQUw7QUFDQSxVQUFNRyx5QkFBeUIsQ0FBQ0YsRUFBRCxDQUEvQjtBQUNELEdBTkQsTUFNTztBQUNMLFFBQUkzQyxJQUFJLEdBQUdnQixnQkFBRThCLFNBQUYsQ0FBWSxLQUFLOUMsSUFBakIsQ0FBWDs7QUFDQUEsSUFBQUEsSUFBSSxDQUFDK0MsbUJBQUwsR0FBMkIsSUFBM0I7O0FBT0EsUUFBSS9DLElBQUksQ0FBQ2dELDBDQUFMLElBQW1ETixPQUFPLEtBQU0sR0FBRUgsNEJBQWEsUUFBbkYsRUFBNEY7QUFDMUYsVUFBSVUsY0FBYyxHQUFHUCxPQUFPLENBQUNRLEtBQVIsQ0FBZSxHQUFFWCw0QkFBYSxNQUE5QixDQUFyQjs7QUFDQSxVQUFJVSxjQUFjLElBQUlBLGNBQWMsQ0FBQ0UsTUFBZixHQUF3QixDQUE5QyxFQUFpRDtBQUMvQ25ELFFBQUFBLElBQUksQ0FBQ29ELG9CQUFMLEdBQTRCSCxjQUFjLENBQUMsQ0FBRCxDQUExQztBQUNEOztBQUNELFVBQUksQ0FBQ2pELElBQUksQ0FBQ2dELDBDQUFWLEVBQXNEO0FBQ3BELFlBQUloQyxnQkFBRXFDLEdBQUYsQ0FBTSxLQUFLckQsSUFBWCxFQUFpQixnQ0FBakIsS0FBc0QsQ0FBQyxLQUFLQSxJQUFMLENBQVV5Qiw4QkFBckUsRUFBcUc7QUFJbkcsZ0JBQU1WLFFBQVEsR0FBR1gsZUFBZSxDQUFDa0QsR0FBaEIsQ0FBcUJDLEVBQUQsSUFBUUEsRUFBRSxDQUFDQyxXQUEvQixDQUFqQjs7QUFDQSxlQUFLLE1BQU1DLFlBQVgsSUFBMkJDLDBDQUEzQixFQUF1RDtBQUNyRCxnQkFBSTFDLGdCQUFFQyxRQUFGLENBQVdGLFFBQVgsRUFBc0IsR0FBRXdCLDRCQUFhLEdBQUVrQixZQUFhLEVBQXBELENBQUosRUFBNEQ7QUFDMUQ7QUFDRDs7QUFDRCxrQkFBTUUsUUFBUSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxDQUFtQkgsWUFBbkIsQ0FBdkI7O0FBQ0EsZ0JBQUl6QyxnQkFBRUMsUUFBRixDQUFXLENBQUM0QywwQkFBVUMscUJBQVgsRUFBa0NELDBCQUFVRSxxQkFBNUMsQ0FBWCxFQUErRUosUUFBL0UsQ0FBSixFQUE4RjtBQUM1RjNELGNBQUFBLElBQUksQ0FBQ29ELG9CQUFMLEdBQTRCSyxZQUE1Qjs7QUFDQTVCLDhCQUFJQyxLQUFKLENBQVcsdUNBQXNDOUIsSUFBSSxDQUFDb0Qsb0JBQXFCLElBQWpFLEdBQ1AsZ0JBQWVWLE9BQVEsNkNBRDFCOztBQUVBO0FBQ0Q7QUFDRjtBQUNGLFNBakJELE1BaUJPO0FBQ0wsZUFBSyxNQUFNYSxFQUFYLElBQWlCbkQsZUFBakIsRUFBa0M7QUFDaEMsZ0JBQUltRCxFQUFFLENBQUNDLFdBQUgsS0FBbUJkLE9BQW5CLElBQThCMUIsZ0JBQUVxQyxHQUFGLENBQU1FLEVBQU4sYUFBTUEsRUFBTix1QkFBTUEsRUFBRSxDQUFFUyxJQUFWLEVBQWdCLGlCQUFoQixDQUFsQyxFQUFzRTtBQUNwRWhFLGNBQUFBLElBQUksQ0FBQ29ELG9CQUFMLEdBQTRCRyxFQUFFLENBQUNTLElBQUgsQ0FBUSxpQkFBUixDQUE1Qjs7QUFDQW5DLDhCQUFJQyxLQUFKLENBQVcsdUNBQXNDOUIsSUFBSSxDQUFDb0Qsb0JBQXFCLElBQWpFLEdBQ1AsZ0JBQWVWLE9BQVEsVUFEMUI7O0FBRUE7QUFDRDtBQUNGO0FBQ0Y7QUFDRjtBQUNGOztBQUVEQyxJQUFBQSxFQUFFLEdBQUcsTUFBTSxLQUFLc0Isb0JBQUwsQ0FBMEJqRSxJQUExQixFQUFnQyxLQUFLTyxHQUFMLENBQVMyRCxXQUF6QyxFQUFzRCxLQUFLM0QsR0FBM0QsRUFBZ0VtQyxPQUFoRSxDQUFYO0FBR0FDLElBQUFBLEVBQUUsQ0FBQ3dCLEVBQUgsQ0FBTUMsNEJBQWFDLGFBQW5CLEVBQW1DQyxHQUFELElBQVM7QUFDekMsVUFBSUEsR0FBRyxDQUFDQyxLQUFKLEtBQWNILDRCQUFhSSxhQUEvQixFQUE4QztBQUM1QyxhQUFLQyxrQkFBTCxDQUF3Qi9CLE9BQXhCO0FBQ0Q7QUFDRixLQUpEO0FBTUEsU0FBS0Usb0JBQUwsQ0FBMEJGLE9BQTFCLElBQXFDQyxFQUFyQztBQUNEOztBQUVELE9BQUsrQixZQUFMLEdBQW9CL0IsRUFBcEI7QUFDQSxPQUFLZ0MsV0FBTCxHQUFtQixLQUFLRCxZQUFMLENBQWtCRSxRQUFsQixDQUEyQkMsSUFBM0IsQ0FBZ0MsS0FBS0gsWUFBckMsQ0FBbkI7QUFDQSxPQUFLSSxZQUFMLEdBQW9CLEtBQUtKLFlBQUwsQ0FBa0JLLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQ0gsSUFBbEMsQ0FBdUMsS0FBS0gsWUFBTCxDQUFrQkssT0FBekQsQ0FBcEI7QUFDQSxPQUFLRSxjQUFMLEdBQXNCLElBQXRCO0FBQ0QsQ0F2RUQ7O0FBMEVBdkYsT0FBTyxDQUFDMkMsd0JBQVIsR0FBbUMsU0FBU0Esd0JBQVQsR0FBcUM7QUFDdEUsT0FBS3FDLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxPQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsT0FBS0csWUFBTCxHQUFvQixJQUFwQjtBQUNBLE9BQUtHLGNBQUwsR0FBc0IsS0FBdEI7QUFDRCxDQUxEOztBQVFBdkYsT0FBTyxDQUFDK0Usa0JBQVIsR0FBNkIsZUFBZUEsa0JBQWYsQ0FBbUMvQixPQUFuQyxFQUE0QztBQUN2RWIsa0JBQUlxRCxJQUFKLENBQVUsNEJBQTJCeEMsT0FBUSx1QkFBN0M7O0FBQ0EsTUFBSUEsT0FBTyxLQUFLLEtBQUs3QyxVQUFyQixFQUFpQztBQUcvQixRQUFJc0YsR0FBRyxHQUFHLElBQUk3QyxLQUFKLENBQVUsK0NBQVYsQ0FBVjtBQUNBLFVBQU0sS0FBSzhDLHVCQUFMLENBQTZCRCxHQUE3QixDQUFOO0FBQ0QsR0FMRCxNQUtPO0FBR0x0RCxvQkFBSXFELElBQUosQ0FBUyw4REFDRyxtQkFEWjs7QUFFQSxXQUFPLEtBQUt0QyxvQkFBTCxDQUEwQkYsT0FBMUIsQ0FBUDtBQUNEO0FBQ0YsQ0FkRDs7QUFrQkFoRCxPQUFPLENBQUMwQyx1QkFBUixHQUFrQyxlQUFlQSx1QkFBZixHQUEwQztBQUMxRSxPQUFLQyx3QkFBTDs7QUFDQSxPQUFLLElBQUlLLE9BQVQsSUFBb0IxQixnQkFBRXFFLElBQUYsQ0FBTyxLQUFLekMsb0JBQVosQ0FBcEIsRUFBdUQ7QUFDckQsUUFBSUQsRUFBRSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCRixPQUExQixDQUFUOztBQUNBYixvQkFBSUMsS0FBSixDQUFXLHFDQUFvQ1ksT0FBUSxFQUF2RDs7QUFFQUMsSUFBQUEsRUFBRSxDQUFDMkMsa0JBQUgsQ0FBc0JsQiw0QkFBYUMsYUFBbkM7O0FBQ0EsUUFBSTtBQUNGLFlBQU0xQixFQUFFLENBQUM0QyxJQUFILEVBQU47QUFDRCxLQUZELENBRUUsT0FBT0osR0FBUCxFQUFZO0FBQ1p0RCxzQkFBSXFELElBQUosQ0FBVSxnQ0FBK0JDLEdBQUcsQ0FBQ0ssT0FBUSxFQUFyRDtBQUNEOztBQUNELFdBQU8sS0FBSzVDLG9CQUFMLENBQTBCRixPQUExQixDQUFQO0FBQ0Q7QUFDRixDQWREOztBQWdCQWhELE9BQU8sQ0FBQ3VDLHFCQUFSLEdBQWdDLFNBQVNBLHFCQUFULENBQWdDd0QsUUFBaEMsRUFBMEM7QUFDeEUsU0FBT3pFLGdCQUFFQyxRQUFGLENBQVd3RSxRQUFYLEVBQXFCNUUsMkJBQXJCLEtBQXFDNEUsUUFBUSxLQUFLQyw0QkFBekQ7QUFDRCxDQUZEOztBQUlBaEcsT0FBTyxDQUFDaUcsMEJBQVIsR0FBcUMsU0FBU0EsMEJBQVQsR0FBdUM7QUFDMUUsU0FBTyxDQUFDLENBQUMsS0FBSzNGLElBQUwsQ0FBVTRGLGFBQVosSUFDQTVFLGdCQUFFNkUsT0FBRixDQUFVLEtBQUs3RixJQUFMLENBQVU0RixhQUFWLENBQXdCRSxJQUFsQyxDQURBLElBRUEsS0FBSzlGLElBQUwsQ0FBVTRGLGFBQVYsQ0FBd0JFLElBQXhCLENBQTZCN0UsUUFBN0IsQ0FBc0MsZ0JBQXRDLENBRlA7QUFHRCxDQUpEOztBQU1BdkIsT0FBTyxDQUFDcUcsb0JBQVIsR0FBK0IsZUFBZUEsb0JBQWYsR0FBdUM7QUFDcEVsRSxrQkFBSW1DLElBQUosQ0FBUyxrQ0FBVDs7QUFDQSxNQUFJZ0MsUUFBUSxHQUFHLE1BQU0sS0FBS0Msa0JBQUwsRUFBckI7O0FBQ0EsTUFBSUQsUUFBUSxLQUFLLHVEQUFqQixFQUEwRTtBQUN4RW5FLG9CQUFJbUMsSUFBSixDQUFTLG1EQUFUOztBQUNBO0FBQ0Q7O0FBQ0QsTUFBSWtDLEVBQUUsR0FBRyxNQUFNLEtBQUtDLFdBQUwsQ0FBaUIsSUFBakIsRUFBdUIsb0NBQXZCLEVBQTZELEtBQTdELENBQWY7QUFDQSxRQUFNLEtBQUtDLEtBQUwsQ0FBV0YsRUFBRSxDQUFDRyxPQUFkLENBQU47O0FBQ0EsTUFBSTtBQUNGLFFBQUlILEVBQUUsR0FBRyxNQUFNLEtBQUtDLFdBQUwsQ0FBaUIsSUFBakIsRUFBdUIsdUNBQXZCLEVBQWdFLEtBQWhFLENBQWY7QUFDQSxVQUFNLEtBQUtDLEtBQUwsQ0FBV0YsRUFBRSxDQUFDRyxPQUFkLENBQU47QUFDRCxHQUhELENBR0UsT0FBT0MsQ0FBUCxFQUFVO0FBR1Z6RSxvQkFBSXFELElBQUosQ0FBVSxrREFBaURvQixDQUFDLENBQUNkLE9BQVEsRUFBckU7QUFDRDtBQUNGLENBakJEOztBQW1CQTlGLE9BQU8sQ0FBQzZHLGtCQUFSLEdBQTZCLGVBQWVBLGtCQUFmLEdBQXFDO0FBQ2hFMUUsa0JBQUltQyxJQUFKLENBQVMseUNBQVQ7O0FBQ0EsTUFBSWhFLElBQUksR0FBR2dCLGdCQUFFOEIsU0FBRixDQUFZLEtBQUs5QyxJQUFqQixDQUFYOztBQUVBLFFBQU13RyxhQUFhLEdBQUcsQ0FDcEIsMkJBRG9CLEVBRXBCLG9CQUZvQixFQUdwQixpQkFIb0IsRUFJcEIscUJBSm9CLEVBS3BCLDRCQUxvQixDQUF0Qjs7QUFRQSxNQUFJeEYsZ0JBQUVDLFFBQUYsQ0FBV3VGLGFBQVgsRUFBMEIsS0FBS3hHLElBQUwsQ0FBVXdDLFVBQXBDLENBQUosRUFBcUQ7QUFDbkR4QyxJQUFBQSxJQUFJLENBQUN5RyxjQUFMLEdBQXNCLEtBQUt6RyxJQUFMLENBQVV3QyxVQUFoQztBQUNELEdBRkQsTUFFTztBQUNMeEMsSUFBQUEsSUFBSSxDQUFDMEcscUJBQUwsR0FBNkIsS0FBSzFHLElBQUwsQ0FBVTJHLFdBQXZDO0FBQ0Q7O0FBQ0QsT0FBS2pDLFlBQUwsR0FBb0IsTUFBTSxLQUFLVCxvQkFBTCxDQUEwQmpFLElBQTFCLEVBQWdDLEtBQUtPLEdBQUwsQ0FBUzJELFdBQXpDLEVBQXNELEtBQUszRCxHQUEzRCxDQUExQjtBQUNBLE9BQUttRSxZQUFMLENBQWtCUCxFQUFsQixDQUFxQkMsNEJBQWFDLGFBQWxDLEVBQWtEQyxHQUFELElBQVM7QUFDeEQsUUFBSUEsR0FBRyxDQUFDQyxLQUFKLEtBQWNILDRCQUFhSSxhQUEvQixFQUE4QztBQUM1QyxXQUFLQyxrQkFBTCxDQUF3QmlCLDRCQUF4QjtBQUNEO0FBQ0YsR0FKRDtBQVNBLE9BQUs3RixVQUFMLEdBQWtCNkYsNEJBQWxCO0FBQ0EsT0FBSzlDLG9CQUFMLENBQTBCOEMsNEJBQTFCLElBQTBDLEtBQUtoQixZQUEvQztBQUNBLE9BQUtDLFdBQUwsR0FBbUIsS0FBS0QsWUFBTCxDQUFrQkUsUUFBbEIsQ0FBMkJDLElBQTNCLENBQWdDLEtBQUtILFlBQXJDLENBQW5CO0FBQ0EsT0FBS0ksWUFBTCxHQUFvQixLQUFLSixZQUFMLENBQWtCSyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0NILElBQWxDLENBQXVDLEtBQUtILFlBQUwsQ0FBa0JLLE9BQXpELENBQXBCO0FBQ0EsT0FBS0UsY0FBTCxHQUFzQixJQUF0Qjs7QUFFQSxNQUFJLEtBQUtVLDBCQUFMLEVBQUosRUFBdUM7QUFFckMsVUFBTSxLQUFLSSxvQkFBTCxFQUFOO0FBQ0Q7QUFDRixDQXJDRDs7QUE0Q0EsZUFBZWxELHlCQUFmLENBQTBDNkIsWUFBMUMsRUFBd0Q7QUFHdEQsTUFBSSxFQUFDLE1BQU1BLFlBQVksQ0FBQ2tDLGlCQUFiLEVBQVAsQ0FBSixFQUE2QztBQUMzQy9FLG9CQUFJQyxLQUFKLENBQVUsbURBQ0csOEJBRGI7O0FBRUEsVUFBTTRDLFlBQVksQ0FBQ21DLE9BQWIsRUFBTjtBQUNEOztBQUNELFNBQU9uQyxZQUFQO0FBQ0Q7O0FBY0QsZUFBZW9DLG1CQUFmLENBQW9DQyxRQUFwQyxFQUE4QztBQUM1QyxRQUFNQyxPQUFPLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLG9CQUFXSCxPQUF2QixFQUFnQztBQUFDdEUsSUFBQUEsT0FBTyxFQUFFeUU7QUFBVixHQUFoQyxDQUFoQjs7QUFJQSxNQUFJLENBQUNKLFFBQUwsRUFBZTtBQUNiLFVBQU1LLElBQUksR0FBRyxNQUFNSixPQUFPLEVBQTFCOztBQUNBbkYsb0JBQUlDLEtBQUosQ0FBVyxpREFBZ0RzRixJQUFLLEVBQWhFOztBQUNBLFdBQU9BLElBQVA7QUFDRDs7QUFHRHZGLGtCQUFJQyxLQUFKLENBQVcsbURBQWtEQyxJQUFJLENBQUNDLFNBQUwsQ0FBZStFLFFBQWYsQ0FBeUIsRUFBdEY7O0FBQ0EsTUFBSU0sU0FBUyxHQUFHLElBQWhCOztBQUNBLE9BQUssTUFBTUMsYUFBWCxJQUE0QlAsUUFBNUIsRUFBc0M7QUFDcEMsUUFBSUssSUFBSixFQUFVRyxRQUFWOztBQUNBLFFBQUl2RyxnQkFBRTZFLE9BQUYsQ0FBVXlCLGFBQVYsQ0FBSixFQUE4QjtBQUMzQixPQUFDRixJQUFELEVBQU9HLFFBQVAsSUFBbUJELGFBQXBCO0FBQ0QsS0FGRCxNQUVPO0FBQ0xGLE1BQUFBLElBQUksR0FBR0ksUUFBUSxDQUFDRixhQUFELEVBQWdCLEVBQWhCLENBQWY7QUFDQUMsTUFBQUEsUUFBUSxHQUFHSCxJQUFYO0FBQ0Q7O0FBQ0QsUUFBSTtBQUNGdkYsc0JBQUlDLEtBQUosQ0FBVyx1QkFBc0JzRixJQUFLLElBQUdHLFFBQVMsRUFBbEQ7O0FBQ0FGLE1BQUFBLFNBQVMsR0FBRyxNQUFNTCxPQUFPLENBQUM7QUFBQ0ksUUFBQUEsSUFBRDtBQUFPRyxRQUFBQTtBQUFQLE9BQUQsQ0FBekI7QUFDQTtBQUNELEtBSkQsQ0FJRSxPQUFPakIsQ0FBUCxFQUFVO0FBQ1Z6RSxzQkFBSUMsS0FBSixDQUFXLHlCQUF3QnNGLElBQUssSUFBR0csUUFBUyxnQkFBcEQ7QUFDRDtBQUNGOztBQUVELE1BQUlGLFNBQVMsS0FBSyxJQUFsQixFQUF3QjtBQUN0QixVQUFNLElBQUkvRSxLQUFKLENBQVcsb0RBQUQsR0FDQywwQkFBeUJQLElBQUksQ0FBQ0MsU0FBTCxDQUFlK0UsUUFBZixDQUF5QixFQUQ3RCxDQUFOO0FBRUQ7O0FBRURsRixrQkFBSUMsS0FBSixDQUFXLG1CQUFrQnVGLFNBQVUsbUJBQXZDOztBQUNBLFNBQU9BLFNBQVA7QUFDRDs7QUFFRDNILE9BQU8sQ0FBQytILGlDQUFSLEdBQTRDLFNBQVNBLGlDQUFULEdBQThDO0FBQ3hGLE1BQUksS0FBS0MsZ0JBQUwsQ0FBc0JsSSxpQ0FBdEIsQ0FBSixFQUE4RDtBQUM1RCxXQUFPLElBQVA7QUFDRDs7QUFDRHFDLGtCQUFJQyxLQUFKLENBQVcsK0NBQUQsR0FDUCxRQUFPdEMsaUNBQWtDLCtCQUQ1Qzs7QUFFQSxTQUFPLEtBQVA7QUFDRCxDQVBEOztBQVNBRSxPQUFPLENBQUN1RSxvQkFBUixHQUErQixlQUFlQSxvQkFBZixDQUFxQ2pFLElBQXJDLEVBQTJDa0UsV0FBM0MsRUFBd0QzRCxHQUF4RCxFQUE2RG1DLE9BQU8sR0FBRyxJQUF2RSxFQUE2RTtBQUMxRyxNQUFJMUMsSUFBSSxDQUFDMkgsZ0JBQVQsRUFBMkI7QUFDekI5RixvQkFBSXFELElBQUosQ0FBVSx3RkFBVjs7QUFDQWxGLElBQUFBLElBQUksQ0FBQzRILGdCQUFMLEdBQXdCNUgsSUFBSSxDQUFDMkgsZ0JBQTdCO0FBQ0Q7O0FBRUQsTUFBSTNILElBQUksQ0FBQzRILGdCQUFULEVBQTJCO0FBQ3pCL0Ysb0JBQUlDLEtBQUosQ0FBVyw2QkFBNEI5QixJQUFJLENBQUM0SCxnQkFBaUIsbUJBQTdEO0FBQ0QsR0FGRCxNQUVPO0FBRUw1SCxJQUFBQSxJQUFJLENBQUM0SCxnQkFBTCxHQUF3QixNQUFNZCxtQkFBbUIsQ0FBQzlHLElBQUksQ0FBQzZILGlCQUFOLENBQWpEO0FBQ0Q7O0FBRUQsUUFBTUMsT0FBTyxHQUFHcEYsT0FBTyxHQUFHckMsd0JBQWUwSCxpQkFBZixDQUFpQ3hILEdBQWpDLEVBQXNDbUMsT0FBdEMsQ0FBSCxHQUFvRHNGLFNBQTNFOztBQUNBLE1BQUksQ0FBQ2hILGdCQUFFaUgsT0FBRixDQUFVSCxPQUFWLENBQUwsRUFBeUI7QUFDdkJqRyxvQkFBSUMsS0FBSixDQUFVLCtEQUNSQyxJQUFJLENBQUNDLFNBQUwsQ0FBZThGLE9BQWYsRUFBd0IsSUFBeEIsRUFBOEIsQ0FBOUIsQ0FERjtBQUVEOztBQUVELFFBQU1wRCxZQUFZLEdBQUcsSUFBSU4sMkJBQUosQ0FBaUI7QUFDcENnRCxJQUFBQSxJQUFJLEVBQUVwSCxJQUFJLENBQUM0SCxnQkFEeUI7QUFFcENNLElBQUFBLFVBQVUsRUFBRWxJLElBQUksQ0FBQ21JLHNCQUZtQjtBQUdwQzVILElBQUFBLEdBSG9DO0FBSXBDNkgsSUFBQUEsT0FBTyxFQUFFcEksSUFBSSxDQUFDcUksZ0JBSnNCO0FBS3BDQyxJQUFBQSxPQUFPLEVBQUUsQ0FBQyxDQUFDdEksSUFBSSxDQUFDdUksbUJBTG9CO0FBTXBDQyxJQUFBQSxhQUFhLEVBQUV4SSxJQUFJLENBQUN5SSx5QkFOZ0I7QUFPcENDLElBQUFBLFdBQVcsRUFBRTFJLElBQUksQ0FBQzJJLDZCQVBrQjtBQVFwQ0MsSUFBQUEsUUFBUSxFQUFFNUksSUFBSSxDQUFDeUcsY0FScUI7QUFTcENvQyxJQUFBQSxtQkFBbUIsRUFBRTdJLElBQUksQ0FBQzhJLCtCQVRVO0FBVXBDQyxJQUFBQSxpQkFBaUIsRUFBRS9JLElBQUksQ0FBQ2dKLDZCQVZZO0FBV3BDbEIsSUFBQUEsT0FYb0M7QUFZcENtQixJQUFBQSxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsRUFBVCxFQUFheEIsaUNBQWIsR0FDbkIsS0FBS0EsaUNBQUwsRUFEbUIsR0FDd0JPO0FBYlgsR0FBakIsQ0FBckI7QUFpQkFoSSxFQUFBQSxJQUFJLENBQUM0RixhQUFMLEdBQXFCNUYsSUFBSSxDQUFDNEYsYUFBTCxJQUFzQixFQUEzQzs7QUFHQSxPQUFLLE1BQU1zRCxHQUFYLElBQWtCbEksZ0JBQUVxRSxJQUFGLENBQU9yRixJQUFQLENBQWxCLEVBQWdDO0FBQzlCLFFBQUlrSixHQUFHLENBQUNDLFFBQUosQ0FBYSxnQkFBYixDQUFKLEVBQW9DO0FBQ2xDdEgsc0JBQUlxRCxJQUFKLENBQVUsWUFBV2dFLEdBQUksNERBQXpCOztBQUNBbEksc0JBQUVvSSxLQUFGLENBQVFwSixJQUFJLENBQUM0RixhQUFiLEVBQTRCNUYsSUFBSSxDQUFDa0osR0FBRCxDQUFoQztBQUNEO0FBQ0Y7O0FBRUQsUUFBTUcsSUFBSSxHQUFHaEosd0JBQWVpSixzQkFBZixDQUFzQ3RKLElBQXRDLEVBQTRDa0UsV0FBNUMsRUFBeUQ0RCxPQUF6RCxDQUFiOztBQUNBakcsa0JBQUlDLEtBQUosQ0FBVyxvREFBbUR1SCxJQUFJLENBQUN6RCxhQUFMLENBQW1CM0MsY0FBZSxHQUFoRzs7QUFDQSxRQUFNeUIsWUFBWSxDQUFDNkUsS0FBYixDQUFtQkYsSUFBbkIsQ0FBTjtBQUNBLFNBQU8zRSxZQUFQO0FBQ0QsQ0FsREQ7O0FBbURBLE1BQU1ULG9CQUFvQixHQUFHdkUsT0FBTyxDQUFDdUUsb0JBQXJDOztBQUdBaEUsTUFBTSxDQUFDQyxNQUFQLENBQWNQLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBDaHJvbWVkcml2ZXIgZnJvbSAnYXBwaXVtLWNocm9tZWRyaXZlcic7XG5pbXBvcnQgUG9ydEZpbmRlciBmcm9tICdwb3J0ZmluZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB3ZWJ2aWV3SGVscGVycyxcbiAgTkFUSVZFX1dJTiwgV0VCVklFV19CQVNFLCBXRUJWSUVXX1dJTiwgQ0hST01JVU1fV0lOLCBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FU1xufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIHJldHVybiB0aGlzLmFzc2lnbkNvbnRleHRzKHdlYnZpZXdzTWFwcGluZyk7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIGNvbnN0IGNvbnRleHRzID0gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWUsXG4gICAgaXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvblxuICB9O1xuICByZXR1cm4gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbn07XG5cbmhlbHBlcnMuYXNzaWduQ29udGV4dHMgPSBmdW5jdGlvbiBhc3NpZ25Db250ZXh0cyAod2Vidmlld3NNYXBwaW5nKSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3MgPSB3ZWJ2aWV3SGVscGVycy5wYXJzZVdlYnZpZXdOYW1lcyh3ZWJ2aWV3c01hcHBpbmcsIG9wdHMpO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU4sIC4uLndlYnZpZXdzXTtcbiAgbG9nLmRlYnVnKGBBdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb250ZXh0cyl9YCk7XG4gIHJldHVybiB0aGlzLmNvbnRleHRzO1xufTtcblxuaGVscGVycy5zd2l0Y2hDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ29udGV4dCAobmFtZSwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIC8vIFdlIGhhdmUgc29tZSBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gd2Vidmlld3MuIElmIHdlIHdhbnQgYVxuICAvLyBDaHJvbWVkcml2ZXIgd2Vidmlldywgd2UgY2FuIG9ubHkgY29udHJvbCBvbmUgYXQgYSB0aW1lLlxuICBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQobmFtZSkpIHtcbiAgICAvLyBzdGFydCBwcm94eWluZyBjb21tYW5kcyBkaXJlY3RseSB0byBjaHJvbWVkcml2ZXJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgLy8gaWYgd2UncmUgbW92aW5nIHRvIGEgbm9uLWNocm9tZWRyaXZlciB3ZWJ2aWV3LCBhbmQgb3VyIGN1cnJlbnQgY29udGV4dFxuICAgIC8vIF9pc18gYSBjaHJvbWVkcml2ZXIgd2VidmlldywgaWYgY2FwcyByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIGlzIHNldFxuICAgIC8vIHRvIHRydWUgdGhlbiBraWxsIGNocm9tZWRyaXZlciBzZXNzaW9uIHVzaW5nIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIG9yXG4gICAgLy8gZWxzZSBzaW1wbHkgc3VzcGVuZCBwcm94eWluZyB0byB0aGUgbGF0dGVyXG4gICAgaWYgKHRoaXMub3B0cy5yZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zKSB7XG4gICAgICBsb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArIHRoaXMub3B0cy5hcHBQYWNrYWdlO1xufTtcblxuaGVscGVycy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ICE9PSBudWxsICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbi8vIFR1cm4gb24gcHJveHlpbmcgdG8gYW4gZXhpc3RpbmcgQ2hyb21lZHJpdmVyIHNlc3Npb24gb3IgYSBuZXcgb25lXG5oZWxwZXJzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZWRyaXZlclByb3h5IChjb250ZXh0LCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIGxvZy5kZWJ1ZyhgRm91bmQgZXhpc3RpbmcgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICcke2NvbnRleHR9Jy4gVXNpbmcgaXQuYCk7XG4gICAgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGF3YWl0IHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIoY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgcXVlcnlpbmcgc3RhdGVzIG9mIENocm9tZSBhcHAgcGFja2FnZXNgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3Qgd20gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAod20ud2Vidmlld05hbWUgPT09IGNvbnRleHQgJiYgXy5oYXMod20/LmluZm8sICdBbmRyb2lkLVBhY2thZ2UnKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gd20uaW5mb1snQW5kcm9pZC1QYWNrYWdlJ107XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBDRFBgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMucHJveHlDb21tYW5kID0gbnVsbDtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xufTtcblxuLy8gSGFuZGxlIGFuIG91dC1vZi1iYW5kIENocm9tZWRyaXZlciBzdG9wIGV2ZW50XG5oZWxwZXJzLm9uQ2hyb21lZHJpdmVyU3RvcCA9IGFzeW5jIGZ1bmN0aW9uIG9uQ2hyb21lZHJpdmVyU3RvcCAoY29udGV4dCkge1xuICBsb2cud2FybihgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH0gc3RvcHBlZCB1bmV4cGVjdGVkbHlgKTtcbiAgaWYgKGNvbnRleHQgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIC8vIHdlIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2hpbGUgYXV0b21hdGluZyB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzbyB3YW50XG4gICAgLy8gdG8gc2h1dCBkb3duIHRoZSBzZXNzaW9uIGFuZCByZXNwb25kIHdpdGggYW4gZXJyb3JcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKCdDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHkgZHVyaW5nIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBDaHJvbWVkcml2ZXIgaW4gdGhlIG5vbi1hY3RpdmUgY29udGV4dCBiYXJmcywgd2UgZG9uJ3QgcmVhbGx5XG4gICAgLy8gY2FyZSwgd2UnbGwganVzdCBtYWtlIGEgbmV3IG9uZSBuZXh0IHRpbWUgd2UgbmVlZCB0aGUgY29udGV4dC5cbiAgICBsb2cud2FybihcIkNocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSwgYnV0IGl0IHdhc24ndCB0aGUgYWN0aXZlIFwiICtcbiAgICAgICAgICAgICAgICAnY29udGV4dCwgaWdub3JpbmcnKTtcbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuLy8gSW50ZW50aW9uYWxseSBzdG9wIGFsbCB0aGUgY2hyb21lZHJpdmVycyBjdXJyZW50bHkgYWN0aXZlLCBhbmQgaWdub3JlXG4vLyB0aGVpciBleGl0IGV2ZW50c1xuaGVscGVycy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcyA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzICgpIHtcbiAgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTsgLy8gbWFrZSBzdXJlIHdlIHR1cm4gb2ZmIHRoZSBwcm94eSBmbGFnXG4gIGZvciAobGV0IGNvbnRleHQgb2YgXy5rZXlzKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMpKSB7XG4gICAgbGV0IGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICBsb2cuZGVidWcoYFN0b3BwaW5nIGNocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9YCk7XG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBzdG9wcGVkIHN0YXRlIGV2ZW50XG4gICAgY2QucmVtb3ZlQWxsTGlzdGVuZXJzKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2Quc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHN0b3BwaW5nIENocm9tZWRyaXZlcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJDb250ZXh0ID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJDb250ZXh0ICh2aWV3TmFtZSkge1xuICByZXR1cm4gXy5pbmNsdWRlcyh2aWV3TmFtZSwgV0VCVklFV19XSU4pIHx8IHZpZXdOYW1lID09PSBDSFJPTUlVTV9XSU47XG59O1xuXG5oZWxwZXJzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lID0gZnVuY3Rpb24gc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICByZXR1cm4gISF0aGlzLm9wdHMuY2hyb21lT3B0aW9ucyAmJlxuICAgICAgICAgXy5pc0FycmF5KHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MpICYmXG4gICAgICAgICB0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzLmluY2x1ZGVzKCctLW5vLWZpcnN0LXJ1bicpO1xufTtcblxuaGVscGVycy5kaXNtaXNzQ2hyb21lV2VsY29tZSA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgbG9nLmluZm8oJ1RyeWluZyB0byBkaXNtaXNzIENocm9tZSB3ZWxjb21lJyk7XG4gIGxldCBhY3Rpdml0eSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudEFjdGl2aXR5KCk7XG4gIGlmIChhY3Rpdml0eSAhPT0gJ29yZy5jaHJvbWl1bS5jaHJvbWUuYnJvd3Nlci5maXJzdHJ1bi5GaXJzdFJ1bkFjdGl2aXR5Jykge1xuICAgIGxvZy5pbmZvKCdDaHJvbWUgd2VsY29tZSBkaWFsb2cgbmV2ZXIgc2hvd2VkIHVwISBDb250aW51aW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC90ZXJtc19hY2NlcHQnLCBmYWxzZSk7XG4gIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIHRyeSB7XG4gICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL25lZ2F0aXZlX2J1dHRvbicsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRE8gTk9USElORywgVEhJUyBERVZJQ0UgRElETlQgTEFVTkNIIFRIRSBTSUdOSU4gRElBTE9HXG4gICAgLy8gSVQgTVVTVCBCRSBBIE5PTiBHTVMgREVWSUNFXG4gICAgbG9nLndhcm4oYFRoaXMgZGV2aWNlIGRpZCBub3Qgc2hvdyBDaHJvbWUgU2lnbkluIGRpYWxvZywgJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuc3RhcnRDaHJvbWVTZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVTZXNzaW9uICgpIHtcbiAgbG9nLmluZm8oJ1N0YXJ0aW5nIGEgY2hyb21lLWJhc2VkIGJyb3dzZXIgc2Vzc2lvbicpO1xuICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgY29uc3Qga25vd25QYWNrYWdlcyA9IFtcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgJ2NvbS5jaHJvbWUuYmV0YScsXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gIF07XG5cbiAgaWYgKF8uaW5jbHVkZXMoa25vd25QYWNrYWdlcywgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgb3B0cy5jaHJvbWVCdW5kbGVJZCA9IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICB9IGVsc2Uge1xuICAgIG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5ID0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuICB9XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIpO1xuICB0aGlzLmNocm9tZWRyaXZlci5vbihDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChDSFJPTUlVTV9XSU4pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIENocm9tZSBzZXNzaW9uLCB3ZSBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBpc1xuICAvLyBhcHByb3ByaWF0ZWx5IHNldCBhbmQgdGhhdCB0aGlzIGNocm9tZWRyaXZlciBpcyBhZGRlZCB0byB0aGUgbGlzdFxuICAvLyBvZiBzZXNzaW9uIGNocm9tZWRyaXZlcnMgc28gd2UgY2FuIHN3aXRjaCBiYWNrIGFuZCBmb3J0aFxuICB0aGlzLmN1ckNvbnRleHQgPSBDSFJPTUlVTV9XSU47XG4gIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbQ0hST01JVU1fV0lOXSA9IHRoaXMuY2hyb21lZHJpdmVyO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lKCkpIHtcbiAgICAvLyBkaXNtaXNzIENocm9tZSB3ZWxjb21lIGRpYWxvZ1xuICAgIGF3YWl0IHRoaXMuZGlzbWlzc0Nocm9tZVdlbGNvbWUoKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogSW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIgKGNocm9tZWRyaXZlcikge1xuICAvLyBjaGVjayB0aGUgc3RhdHVzIGJ5IHNlbmRpbmcgYSBzaW1wbGUgd2luZG93LWJhc2VkIGNvbW1hbmQgdG8gQ2hyb21lRHJpdmVyXG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSB3YW50IHRvIHJlY3JlYXRlIHRoZSBDaHJvbWVEcml2ZXIgc2Vzc2lvblxuICBpZiAoIWF3YWl0IGNocm9tZWRyaXZlci5oYXNXb3JraW5nV2VidmlldygpKSB7XG4gICAgbG9nLmRlYnVnKCdDaHJvbWVEcml2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICdSZS1pbml0aWFsaXppbmcgdGhlIHNlc3Npb24uJyk7XG4gICAgYXdhaXQgY2hyb21lZHJpdmVyLnJlc3RhcnQoKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufVxuXG4vKipcbiAqIEZpbmQgYSBmcmVlIHBvcnQgdG8gaGF2ZSBDaHJvbWVkcml2ZXIgbGlzdGVuIG9uLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IFtwb3J0U3BlY10gLSBBcnJheSB3aGljaCBpcyBhIGxpc3Qgb2YgcG9ydHMuIEEgbGlzdCBpdGVtIG1heVxuICogYWxzbyBpdHNlbGYgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDIgc3BlY2lmeWluZyBhIHN0YXJ0IGFuZCBlbmQgcG9ydCBvZlxuICogYSByYW5nZS4gU29tZSB2YWxpZCBwb3J0IHNwZWNzOlxuICogICAgLSBbODAwMCwgODAwMSwgODAwMl1cbiAqICAgIC0gW1s4MDAwLCA4MDA1XV1cbiAqICAgIC0gWzgwMDAsIFs5MDAwLCA5MTAwXV1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgZnJlZSBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlclBvcnQgKHBvcnRTcGVjKSB7XG4gIGNvbnN0IGdldFBvcnQgPSBCLnByb21pc2lmeShQb3J0RmluZGVyLmdldFBvcnQsIHtjb250ZXh0OiBQb3J0RmluZGVyfSk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgZGlkbid0IGdpdmUgdXMgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGNocm9tZWRyaXZlclxuICAvLyBwb3J0IHJhbmdlcywganVzdCBmaW5kIGFueSBmcmVlIHBvcnRcbiAgaWYgKCFwb3J0U3BlYykge1xuICAgIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KCk7XG4gICAgbG9nLmRlYnVnKGBBIHBvcnQgd2FzIG5vdCBnaXZlbiwgdXNpbmcgcmFuZG9tIGZyZWUgcG9ydDogJHtwb3J0fWApO1xuICAgIHJldHVybiBwb3J0O1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIGZyZWUgcG9ydCBiYXNlZCBvbiBhIGxpc3Qgb3IgcmFuZ2UgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgbG9nLmRlYnVnKGBGaW5kaW5nIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgbGV0IGZvdW5kUG9ydCA9IG51bGw7XG4gIGZvciAoY29uc3QgcG90ZW50aWFsUG9ydCBvZiBwb3J0U3BlYykge1xuICAgIGxldCBwb3J0LCBzdG9wUG9ydDtcbiAgICBpZiAoXy5pc0FycmF5KHBvdGVudGlhbFBvcnQpKSB7XG4gICAgICAoW3BvcnQsIHN0b3BQb3J0XSA9IHBvdGVudGlhbFBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3J0ID0gcGFyc2VJbnQocG90ZW50aWFsUG9ydCwgMTApOyAvLyBlbnN1cmUgd2UgaGF2ZSBhIG51bWJlciBhbmQgbm90IGEgc3RyaW5nXG4gICAgICBzdG9wUG9ydCA9IHBvcnQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYENoZWNraW5nIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fWApO1xuICAgICAgZm91bmRQb3J0ID0gYXdhaXQgZ2V0UG9ydCh7cG9ydCwgc3RvcFBvcnR9KTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTm90aGluZyBpbiBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH0gd2FzIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZFBvcnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgIGBjaHJvbWVkcml2ZXJQb3J0cyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBVc2luZyBmcmVlIHBvcnQgJHtmb3VuZFBvcnR9IGZvciBjaHJvbWVkcml2ZXJgKTtcbiAgcmV0dXJuIGZvdW5kUG9ydDtcbn1cblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQgKCkge1xuICBpZiAodGhpcy5pc0ZlYXR1cmVFbmFibGVkKENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsb2cuZGVidWcoYEF1dG9tYXRlZCBDaHJvbWVkcml2ZXIgZG93bmxvYWQgaXMgZGlzYWJsZWQuIGAgK1xuICAgIGBVc2UgJyR7Q0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFfScgc2VydmVyIGZlYXR1cmUgdG8gZW5hYmxlIGl0YCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBhc3luYyBmdW5jdGlvbiBzZXR1cE5ld0Nocm9tZWRyaXZlciAob3B0cywgY3VyRGV2aWNlSWQsIGFkYiwgY29udGV4dCA9IG51bGwpIHtcbiAgaWYgKG9wdHMuY2hyb21lRHJpdmVyUG9ydCkge1xuICAgIGxvZy53YXJuKGBUaGUgJ2Nocm9tZURyaXZlclBvcnQnIGNhcGFiaWxpdHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnY2hyb21lZHJpdmVyUG9ydCcgaW5zdGVhZGApO1xuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IG9wdHMuY2hyb21lRHJpdmVyUG9ydDtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZWRyaXZlclBvcnQpIHtcbiAgICBsb2cuZGVidWcoYFVzaW5nIHVzZXItc3BlY2lmaWVkIHBvcnQgJHtvcHRzLmNocm9tZWRyaXZlclBvcnR9IGZvciBjaHJvbWVkcml2ZXJgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIHNpbmdsZSBwb3J0IHdhc24ndCBnaXZlbiwgd2UnbGwgbG9vayBmb3IgYSBmcmVlIG9uZVxuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IGF3YWl0IGdldENocm9tZWRyaXZlclBvcnQob3B0cy5jaHJvbWVkcml2ZXJQb3J0cyk7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gY29udGV4dCA/IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdEZXRhaWxzKGFkYiwgY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGlmICghXy5pc0VtcHR5KGRldGFpbHMpKSB7XG4gICAgbG9nLmRlYnVnKCdQYXNzaW5nIHdlYiB2aWV3IGRldGFpbHMgdG8gdGhlIENocm9tZWRyaXZlciBjb25zdHJ1Y3RvcjogJyArXG4gICAgICBKU09OLnN0cmluZ2lmeShkZXRhaWxzLCBudWxsLCAyKSk7XG4gIH1cblxuICBjb25zdCBjaHJvbWVkcml2ZXIgPSBuZXcgQ2hyb21lZHJpdmVyKHtcbiAgICBwb3J0OiBvcHRzLmNocm9tZWRyaXZlclBvcnQsXG4gICAgZXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJFeGVjdXRhYmxlLFxuICAgIGFkYixcbiAgICBjbWRBcmdzOiBvcHRzLmNocm9tZWRyaXZlckFyZ3MsXG4gICAgdmVyYm9zZTogISFvcHRzLnNob3dDaHJvbWVkcml2ZXJMb2csXG4gICAgZXhlY3V0YWJsZURpcjogb3B0cy5jaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyLFxuICAgIG1hcHBpbmdQYXRoOiBvcHRzLmNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlLFxuICAgIGJ1bmRsZUlkOiBvcHRzLmNocm9tZUJ1bmRsZUlkLFxuICAgIHVzZVN5c3RlbUV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSxcbiAgICBkaXNhYmxlQnVpbGRDaGVjazogb3B0cy5jaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayxcbiAgICBkZXRhaWxzLFxuICAgIGlzQXV0b2Rvd25sb2FkRW5hYmxlZDogKHRoaXMgfHwge30pLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyB0aGlzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCgpIDogdW5kZWZpbmVkLFxuICB9KTtcblxuICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIGNocm9tZU9wdGlvbnNcbiAgb3B0cy5jaHJvbWVPcHRpb25zID0gb3B0cy5jaHJvbWVPcHRpb25zIHx8IHt9O1xuICAvLyB0cnkgb3V0IGFueSBwcmVmaXhlZCBjaHJvbWVPcHRpb25zLFxuICAvLyBhbmQgc3RyaXAgdGhlIHByZWZpeFxuICBmb3IgKGNvbnN0IG9wdCBvZiBfLmtleXMob3B0cykpIHtcbiAgICBpZiAob3B0LmVuZHNXaXRoKCc6Y2hyb21lT3B0aW9ucycpKSB7XG4gICAgICBsb2cud2FybihgTWVyZ2luZyAnJHtvcHR9JyBpbnRvICdjaHJvbWVPcHRpb25zJy4gVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcmApO1xuICAgICAgXy5tZXJnZShvcHRzLmNocm9tZU9wdGlvbnMsIG9wdHNbb3B0XSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FwcyA9IHdlYnZpZXdIZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMob3B0cywgY3VyRGV2aWNlSWQsIGRldGFpbHMpO1xuICBsb2cuZGVidWcoYEJlZm9yZSBzdGFydGluZyBjaHJvbWVkcml2ZXIsIGFuZHJvaWRQYWNrYWdlIGlzICcke2NhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZX0nYCk7XG4gIGF3YWl0IGNocm9tZWRyaXZlci5zdGFydChjYXBzKTtcbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn07XG5jb25zdCBzZXR1cE5ld0Nocm9tZWRyaXZlciA9IGhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXI7XG5cblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycywgc2V0dXBOZXdDaHJvbWVkcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
428
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsImFzc2lnbkNvbnRleHRzIiwic2V0Q29udGV4dCIsIm5hbWUiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXRUJWSUVXX1dJTiIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNvbnRleHRzIiwiXyIsImluY2x1ZGVzIiwiZXJyb3JzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwic3dpdGNoQ29udGV4dCIsIm1vYmlsZUdldENvbnRleHRzIiwiYW5kcm9pZERldmljZVNvY2tldCIsImVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIiwid2Vidmlld0RldnRvb2xzUG9ydCIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsIndlYnZpZXdzIiwicGFyc2VXZWJ2aWV3TmFtZXMiLCJOQVRJVkVfV0lOIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJoYXMiLCJtYXAiLCJ3bSIsIndlYnZpZXdOYW1lIiwia25vd25QYWNrYWdlIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJhcHBTdGF0ZSIsInF1ZXJ5QXBwU3RhdGUiLCJBUFBfU1RBVEUiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJpbmZvIiwic2V0dXBOZXdDaHJvbWVkcml2ZXIiLCJjdXJEZXZpY2VJZCIsIm9uIiwiQ2hyb21lZHJpdmVyIiwiRVZFTlRfQ0hBTkdFRCIsIm1zZyIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIm9uQ2hyb21lZHJpdmVyU3RvcCIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwicHJveHlSZXEiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwcm94eSIsImNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwiQ0hST01JVU1fV0lOIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImFjdGl2aXR5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZWwiLCJmaW5kRWxPckVscyIsImNsaWNrIiwiRUxFTUVOVCIsImUiLCJzdGFydENocm9tZVNlc3Npb24iLCJrbm93blBhY2thZ2VzIiwiY2hyb21lQnVuZGxlSWQiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhcHBBY3Rpdml0eSIsImhhc1dvcmtpbmdXZWJ2aWV3IiwicmVzdGFydCIsImdldENocm9tZWRyaXZlclBvcnQiLCJwb3J0U3BlYyIsImdldFBvcnQiLCJCIiwicHJvbWlzaWZ5IiwiUG9ydEZpbmRlciIsInBvcnQiLCJmb3VuZFBvcnQiLCJwb3RlbnRpYWxQb3J0Iiwic3RvcFBvcnQiLCJwYXJzZUludCIsImlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCIsImlzRmVhdHVyZUVuYWJsZWQiLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiZGV0YWlscyIsImdldFdlYnZpZXdEZXRhaWxzIiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY21kQXJncyIsImNocm9tZWRyaXZlckFyZ3MiLCJ2ZXJib3NlIiwic2hvd0Nocm9tZWRyaXZlckxvZyIsImV4ZWN1dGFibGVEaXIiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyIiwibWFwcGluZ1BhdGgiLCJjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSIsImJ1bmRsZUlkIiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUiLCJkaXNhYmxlQnVpbGRDaGVjayIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwib3B0IiwiZW5kc1dpdGgiLCJtZXJnZSIsImNhcHMiLCJjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIiwic3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7OztBQUVBLE1BQU1BLGlDQUFpQyxHQUFHLDJCQUExQztBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7Ozs7QUFNQUYsUUFBUSxDQUFDRyxpQkFBVCxHQUE2QixlQUFlQSxpQkFBZixHQUFvQztBQUcvRCxTQUFPLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0Msa0JBQUwsRUFBMUI7QUFDRCxDQUpEOztBQU1BTCxRQUFRLENBQUNNLFdBQVQsR0FBdUIsZUFBZUEsV0FBZixHQUE4QjtBQUNuRCxRQUFNQyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQUNDLElBQUFBLGVBQWUsRUFBRSxLQUFLQTtBQUF2QixHQUFkLEVBQXVELEtBQUtILElBQTVELENBQWI7QUFDQSxRQUFNSSxlQUFlLEdBQUcsTUFBTUMsd0JBQWVDLGtCQUFmLENBQWtDLEtBQUtDLEdBQXZDLEVBQTRDUCxJQUE1QyxDQUE5QjtBQUNBLFNBQU8sS0FBS1EsY0FBTCxDQUFvQkosZUFBcEIsQ0FBUDtBQUNELENBSkQ7O0FBTUFYLFFBQVEsQ0FBQ2dCLFVBQVQsR0FBc0IsZUFBZUEsVUFBZixDQUEyQkMsSUFBM0IsRUFBaUM7QUFDckQsTUFBSSxDQUFDQyxjQUFLQyxRQUFMLENBQWNGLElBQWQsQ0FBTCxFQUEwQjtBQUN4QkEsSUFBQUEsSUFBSSxHQUFHLEtBQUtaLGtCQUFMLEVBQVA7QUFDRCxHQUZELE1BRU8sSUFBSVksSUFBSSxLQUFLRywyQkFBYixFQUEwQjtBQUUvQkgsSUFBQUEsSUFBSSxHQUFHLEtBQUtJLGtCQUFMLEVBQVA7QUFDRDs7QUFFRCxNQUFJSixJQUFJLEtBQUssS0FBS2IsVUFBbEIsRUFBOEI7QUFDNUI7QUFDRDs7QUFFRCxRQUFNRyxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQUNDLElBQUFBLGVBQWUsRUFBRSxLQUFLQTtBQUF2QixHQUFkLEVBQXVELEtBQUtILElBQTVELENBQWI7QUFDQSxRQUFNSSxlQUFlLEdBQUcsTUFBTUMsd0JBQWVDLGtCQUFmLENBQWtDLEtBQUtDLEdBQXZDLEVBQTRDUCxJQUE1QyxDQUE5QjtBQUNBLFFBQU1lLFFBQVEsR0FBRyxLQUFLUCxjQUFMLENBQW9CSixlQUFwQixDQUFqQjs7QUFFQSxNQUFJLENBQUNZLGdCQUFFQyxRQUFGLENBQVdGLFFBQVgsRUFBcUJMLElBQXJCLENBQUwsRUFBaUM7QUFDL0IsVUFBTSxJQUFJUSxtQkFBT0Msa0JBQVgsRUFBTjtBQUNEOztBQUVELFFBQU0sS0FBS0MsYUFBTCxDQUFtQlYsSUFBbkIsRUFBeUJOLGVBQXpCLENBQU47QUFDQSxPQUFLUCxVQUFMLEdBQWtCYSxJQUFsQjtBQUNELENBdEJEOztBQXNFQWpCLFFBQVEsQ0FBQzRCLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0FBQy9ELFFBQU1yQixJQUFJLEdBQUc7QUFDWHNCLElBQUFBLG1CQUFtQixFQUFFLEtBQUt0QixJQUFMLENBQVVzQixtQkFEcEI7QUFFWEMsSUFBQUEsdUJBQXVCLEVBQUUsSUFGZDtBQUdYQyxJQUFBQSxtQkFBbUIsRUFBRSxLQUFLeEIsSUFBTCxDQUFVd0IsbUJBSHBCO0FBSVhDLElBQUFBLDhCQUE4QixFQUFFLElBSnJCO0FBS1h0QixJQUFBQSxlQUFlLEVBQUUsS0FBS0E7QUFMWCxHQUFiO0FBT0EsU0FBTyxNQUFNRSx3QkFBZUMsa0JBQWYsQ0FBa0MsS0FBS0MsR0FBdkMsRUFBNENQLElBQTVDLENBQWI7QUFDRCxDQVREOztBQVdBTixPQUFPLENBQUNjLGNBQVIsR0FBeUIsU0FBU0EsY0FBVCxDQUF5QkosZUFBekIsRUFBMEM7QUFDakUsUUFBTUosSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUFDQyxJQUFBQSxlQUFlLEVBQUUsS0FBS0E7QUFBdkIsR0FBZCxFQUF1RCxLQUFLSCxJQUE1RCxDQUFiOztBQUNBLFFBQU0wQixRQUFRLEdBQUdyQix3QkFBZXNCLGlCQUFmLENBQWlDdkIsZUFBakMsRUFBa0RKLElBQWxELENBQWpCOztBQUNBLE9BQUtlLFFBQUwsR0FBZ0IsQ0FBQ2EsMEJBQUQsRUFBYSxHQUFHRixRQUFoQixDQUFoQjs7QUFDQUcsa0JBQUlDLEtBQUosQ0FBVyx1QkFBc0JDLElBQUksQ0FBQ0MsU0FBTCxDQUFlLEtBQUtqQixRQUFwQixDQUE4QixFQUEvRDs7QUFDQSxTQUFPLEtBQUtBLFFBQVo7QUFDRCxDQU5EOztBQVFBckIsT0FBTyxDQUFDMEIsYUFBUixHQUF3QixlQUFlQSxhQUFmLENBQThCVixJQUE5QixFQUFvQ04sZUFBcEMsRUFBcUQ7QUFHM0UsTUFBSSxLQUFLNkIscUJBQUwsQ0FBMkJ2QixJQUEzQixDQUFKLEVBQXNDO0FBRXBDLFVBQU0sS0FBS3dCLHNCQUFMLENBQTRCeEIsSUFBNUIsRUFBa0NOLGVBQWxDLENBQU47QUFDRCxHQUhELE1BR08sSUFBSSxLQUFLNkIscUJBQUwsQ0FBMkIsS0FBS3BDLFVBQWhDLENBQUosRUFBaUQ7QUFLdEQsUUFBSSxLQUFLRyxJQUFMLENBQVVtQyw0QkFBZCxFQUE0QztBQUMxQ04sc0JBQUlDLEtBQUosQ0FBVSwwRUFBVjs7QUFDQSxZQUFNLEtBQUtNLHVCQUFMLEVBQU47QUFDRCxLQUhELE1BR087QUFDTCxZQUFNLEtBQUtDLHdCQUFMLEVBQU47QUFDRDtBQUNGLEdBWE0sTUFXQTtBQUNMLFVBQU0sSUFBSUMsS0FBSixDQUFXLG1EQUFrRDVCLElBQUssR0FBbEUsQ0FBTjtBQUNEO0FBQ0YsQ0FwQkQ7O0FBOEJBaEIsT0FBTyxDQUFDSSxrQkFBUixHQUE2QixTQUFTQSxrQkFBVCxHQUErQjtBQUMxRCxTQUFPOEIsMEJBQVA7QUFDRCxDQUZEOztBQUlBbEMsT0FBTyxDQUFDb0Isa0JBQVIsR0FBNkIsU0FBU0Esa0JBQVQsR0FBK0I7QUFDMUQsU0FBT3lCLCtCQUFlLEtBQUt2QyxJQUFMLENBQVV3QyxVQUFoQztBQUNELENBRkQ7O0FBSUE5QyxPQUFPLENBQUMrQyxZQUFSLEdBQXVCLFNBQVNBLFlBQVQsR0FBeUI7QUFDOUMsU0FBTyxLQUFLNUMsVUFBTCxLQUFvQixJQUFwQixJQUE0QixLQUFLQSxVQUFMLEtBQW9CK0IsMEJBQXZEO0FBQ0QsQ0FGRDs7QUFLQWxDLE9BQU8sQ0FBQ3dDLHNCQUFSLEdBQWlDLGVBQWVBLHNCQUFmLENBQXVDUSxPQUF2QyxFQUFnRHRDLGVBQWhELEVBQWlFO0FBQ2hHeUIsa0JBQUlDLEtBQUosQ0FBVyxnREFBK0NZLE9BQVEsR0FBbEU7O0FBRUEsTUFBSUMsRUFBSjs7QUFDQSxNQUFJLEtBQUtDLG9CQUFMLENBQTBCRixPQUExQixDQUFKLEVBQXdDO0FBR3RDYixvQkFBSUMsS0FBSixDQUFXLDRDQUEyQ1ksT0FBUSxjQUE5RDs7QUFDQUMsSUFBQUEsRUFBRSxHQUFHLEtBQUtDLG9CQUFMLENBQTBCRixPQUExQixDQUFMO0FBQ0EsVUFBTUcseUJBQXlCLENBQUNGLEVBQUQsQ0FBL0I7QUFDRCxHQU5ELE1BTU87QUFDTCxRQUFJM0MsSUFBSSxHQUFHZ0IsZ0JBQUU4QixTQUFGLENBQVksS0FBSzlDLElBQWpCLENBQVg7O0FBQ0FBLElBQUFBLElBQUksQ0FBQytDLG1CQUFMLEdBQTJCLElBQTNCOztBQU9BLFFBQUkvQyxJQUFJLENBQUNnRCwwQ0FBTCxJQUFtRE4sT0FBTyxLQUFNLEdBQUVILDRCQUFhLFFBQW5GLEVBQTRGO0FBQzFGLFVBQUlVLGNBQWMsR0FBR1AsT0FBTyxDQUFDUSxLQUFSLENBQWUsR0FBRVgsNEJBQWEsTUFBOUIsQ0FBckI7O0FBQ0EsVUFBSVUsY0FBYyxJQUFJQSxjQUFjLENBQUNFLE1BQWYsR0FBd0IsQ0FBOUMsRUFBaUQ7QUFDL0NuRCxRQUFBQSxJQUFJLENBQUNvRCxvQkFBTCxHQUE0QkgsY0FBYyxDQUFDLENBQUQsQ0FBMUM7QUFDRDs7QUFDRCxVQUFJLENBQUNqRCxJQUFJLENBQUNnRCwwQ0FBVixFQUFzRDtBQUNwRCxZQUFJaEMsZ0JBQUVxQyxHQUFGLENBQU0sS0FBS3JELElBQVgsRUFBaUIsZ0NBQWpCLEtBQXNELENBQUMsS0FBS0EsSUFBTCxDQUFVeUIsOEJBQXJFLEVBQXFHO0FBSW5HLGdCQUFNVixRQUFRLEdBQUdYLGVBQWUsQ0FBQ2tELEdBQWhCLENBQXFCQyxFQUFELElBQVFBLEVBQUUsQ0FBQ0MsV0FBL0IsQ0FBakI7O0FBQ0EsZUFBSyxNQUFNQyxZQUFYLElBQTJCQywwQ0FBM0IsRUFBdUQ7QUFDckQsZ0JBQUkxQyxnQkFBRUMsUUFBRixDQUFXRixRQUFYLEVBQXNCLEdBQUV3Qiw0QkFBYSxHQUFFa0IsWUFBYSxFQUFwRCxDQUFKLEVBQTREO0FBQzFEO0FBQ0Q7O0FBQ0Qsa0JBQU1FLFFBQVEsR0FBRyxNQUFNLEtBQUtDLGFBQUwsQ0FBbUJILFlBQW5CLENBQXZCOztBQUNBLGdCQUFJekMsZ0JBQUVDLFFBQUYsQ0FBVyxDQUFDNEMsMEJBQVVDLHFCQUFYLEVBQWtDRCwwQkFBVUUscUJBQTVDLENBQVgsRUFBK0VKLFFBQS9FLENBQUosRUFBOEY7QUFDNUYzRCxjQUFBQSxJQUFJLENBQUNvRCxvQkFBTCxHQUE0QkssWUFBNUI7O0FBQ0E1Qiw4QkFBSUMsS0FBSixDQUFXLHVDQUFzQzlCLElBQUksQ0FBQ29ELG9CQUFxQixJQUFqRSxHQUNQLGdCQUFlVixPQUFRLDZDQUQxQjs7QUFFQTtBQUNEO0FBQ0Y7QUFDRixTQWpCRCxNQWlCTztBQUNMLGVBQUssTUFBTWEsRUFBWCxJQUFpQm5ELGVBQWpCLEVBQWtDO0FBQ2hDLGdCQUFJbUQsRUFBRSxDQUFDQyxXQUFILEtBQW1CZCxPQUFuQixJQUE4QjFCLGdCQUFFcUMsR0FBRixDQUFNRSxFQUFOLGFBQU1BLEVBQU4sdUJBQU1BLEVBQUUsQ0FBRVMsSUFBVixFQUFnQixpQkFBaEIsQ0FBbEMsRUFBc0U7QUFDcEVoRSxjQUFBQSxJQUFJLENBQUNvRCxvQkFBTCxHQUE0QkcsRUFBRSxDQUFDUyxJQUFILENBQVEsaUJBQVIsQ0FBNUI7O0FBQ0FuQyw4QkFBSUMsS0FBSixDQUFXLHVDQUFzQzlCLElBQUksQ0FBQ29ELG9CQUFxQixJQUFqRSxHQUNQLGdCQUFlVixPQUFRLFVBRDFCOztBQUVBO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFREMsSUFBQUEsRUFBRSxHQUFHLE1BQU0sS0FBS3NCLG9CQUFMLENBQTBCakUsSUFBMUIsRUFBZ0MsS0FBS08sR0FBTCxDQUFTMkQsV0FBekMsRUFBc0QsS0FBSzNELEdBQTNELEVBQWdFbUMsT0FBaEUsQ0FBWDtBQUdBQyxJQUFBQSxFQUFFLENBQUN3QixFQUFILENBQU1DLDRCQUFhQyxhQUFuQixFQUFtQ0MsR0FBRCxJQUFTO0FBQ3pDLFVBQUlBLEdBQUcsQ0FBQ0MsS0FBSixLQUFjSCw0QkFBYUksYUFBL0IsRUFBOEM7QUFDNUMsYUFBS0Msa0JBQUwsQ0FBd0IvQixPQUF4QjtBQUNEO0FBQ0YsS0FKRDtBQU1BLFNBQUtFLG9CQUFMLENBQTBCRixPQUExQixJQUFxQ0MsRUFBckM7QUFDRDs7QUFFRCxPQUFLK0IsWUFBTCxHQUFvQi9CLEVBQXBCO0FBQ0EsT0FBS2dDLFdBQUwsR0FBbUIsS0FBS0QsWUFBTCxDQUFrQkUsUUFBbEIsQ0FBMkJDLElBQTNCLENBQWdDLEtBQUtILFlBQXJDLENBQW5CO0FBQ0EsT0FBS0ksWUFBTCxHQUFvQixLQUFLSixZQUFMLENBQWtCSyxPQUFsQixDQUEwQkMsT0FBMUIsQ0FBa0NILElBQWxDLENBQXVDLEtBQUtILFlBQUwsQ0FBa0JLLE9BQXpELENBQXBCO0FBQ0EsT0FBS0UsY0FBTCxHQUFzQixJQUF0QjtBQUNELENBdkVEOztBQTBFQXZGLE9BQU8sQ0FBQzJDLHdCQUFSLEdBQW1DLFNBQVNBLHdCQUFULEdBQXFDO0FBQ3RFLE9BQUtxQyxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsT0FBS0MsV0FBTCxHQUFtQixJQUFuQjtBQUNBLE9BQUtHLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxPQUFLRyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0QsQ0FMRDs7QUFRQXZGLE9BQU8sQ0FBQytFLGtCQUFSLEdBQTZCLGVBQWVBLGtCQUFmLENBQW1DL0IsT0FBbkMsRUFBNEM7QUFDdkViLGtCQUFJcUQsSUFBSixDQUFVLDRCQUEyQnhDLE9BQVEsdUJBQTdDOztBQUNBLE1BQUlBLE9BQU8sS0FBSyxLQUFLN0MsVUFBckIsRUFBaUM7QUFHL0IsUUFBSXNGLEdBQUcsR0FBRyxJQUFJN0MsS0FBSixDQUFVLCtDQUFWLENBQVY7QUFDQSxVQUFNLEtBQUs4Qyx1QkFBTCxDQUE2QkQsR0FBN0IsQ0FBTjtBQUNELEdBTEQsTUFLTztBQUdMdEQsb0JBQUlxRCxJQUFKLENBQVMsOERBQ0csbUJBRFo7O0FBRUEsV0FBTyxLQUFLdEMsb0JBQUwsQ0FBMEJGLE9BQTFCLENBQVA7QUFDRDtBQUNGLENBZEQ7O0FBa0JBaEQsT0FBTyxDQUFDMEMsdUJBQVIsR0FBa0MsZUFBZUEsdUJBQWYsR0FBMEM7QUFDMUUsT0FBS0Msd0JBQUw7O0FBQ0EsT0FBSyxJQUFJSyxPQUFULElBQW9CMUIsZ0JBQUVxRSxJQUFGLENBQU8sS0FBS3pDLG9CQUFaLENBQXBCLEVBQXVEO0FBQ3JELFFBQUlELEVBQUUsR0FBRyxLQUFLQyxvQkFBTCxDQUEwQkYsT0FBMUIsQ0FBVDs7QUFDQWIsb0JBQUlDLEtBQUosQ0FBVyxxQ0FBb0NZLE9BQVEsRUFBdkQ7O0FBRUFDLElBQUFBLEVBQUUsQ0FBQzJDLGtCQUFILENBQXNCbEIsNEJBQWFDLGFBQW5DOztBQUNBLFFBQUk7QUFDRixZQUFNMUIsRUFBRSxDQUFDNEMsSUFBSCxFQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9KLEdBQVAsRUFBWTtBQUNadEQsc0JBQUlxRCxJQUFKLENBQVUsZ0NBQStCQyxHQUFHLENBQUNLLE9BQVEsRUFBckQ7QUFDRDs7QUFDRCxXQUFPLEtBQUs1QyxvQkFBTCxDQUEwQkYsT0FBMUIsQ0FBUDtBQUNEO0FBQ0YsQ0FkRDs7QUFnQkFoRCxPQUFPLENBQUN1QyxxQkFBUixHQUFnQyxTQUFTQSxxQkFBVCxDQUFnQ3dELFFBQWhDLEVBQTBDO0FBQ3hFLFNBQU96RSxnQkFBRUMsUUFBRixDQUFXd0UsUUFBWCxFQUFxQjVFLDJCQUFyQixLQUFxQzRFLFFBQVEsS0FBS0MsNEJBQXpEO0FBQ0QsQ0FGRDs7QUFJQWhHLE9BQU8sQ0FBQ2lHLDBCQUFSLEdBQXFDLFNBQVNBLDBCQUFULEdBQXVDO0FBQzFFLFNBQU8sQ0FBQyxDQUFDLEtBQUszRixJQUFMLENBQVU0RixhQUFaLElBQ0E1RSxnQkFBRTZFLE9BQUYsQ0FBVSxLQUFLN0YsSUFBTCxDQUFVNEYsYUFBVixDQUF3QkUsSUFBbEMsQ0FEQSxJQUVBLEtBQUs5RixJQUFMLENBQVU0RixhQUFWLENBQXdCRSxJQUF4QixDQUE2QjdFLFFBQTdCLENBQXNDLGdCQUF0QyxDQUZQO0FBR0QsQ0FKRDs7QUFNQXZCLE9BQU8sQ0FBQ3FHLG9CQUFSLEdBQStCLGVBQWVBLG9CQUFmLEdBQXVDO0FBQ3BFbEUsa0JBQUltQyxJQUFKLENBQVMsa0NBQVQ7O0FBQ0EsTUFBSWdDLFFBQVEsR0FBRyxNQUFNLEtBQUtDLGtCQUFMLEVBQXJCOztBQUNBLE1BQUlELFFBQVEsS0FBSyx1REFBakIsRUFBMEU7QUFDeEVuRSxvQkFBSW1DLElBQUosQ0FBUyxtREFBVDs7QUFDQTtBQUNEOztBQUNELE1BQUlrQyxFQUFFLEdBQUcsTUFBTSxLQUFLQyxXQUFMLENBQWlCLElBQWpCLEVBQXVCLG9DQUF2QixFQUE2RCxLQUE3RCxDQUFmO0FBQ0EsUUFBTSxLQUFLQyxLQUFMLENBQVdGLEVBQUUsQ0FBQ0csT0FBZCxDQUFOOztBQUNBLE1BQUk7QUFDRixRQUFJSCxFQUFFLEdBQUcsTUFBTSxLQUFLQyxXQUFMLENBQWlCLElBQWpCLEVBQXVCLHVDQUF2QixFQUFnRSxLQUFoRSxDQUFmO0FBQ0EsVUFBTSxLQUFLQyxLQUFMLENBQVdGLEVBQUUsQ0FBQ0csT0FBZCxDQUFOO0FBQ0QsR0FIRCxDQUdFLE9BQU9DLENBQVAsRUFBVTtBQUdWekUsb0JBQUlxRCxJQUFKLENBQVUsa0RBQWlEb0IsQ0FBQyxDQUFDZCxPQUFRLEVBQXJFO0FBQ0Q7QUFDRixDQWpCRDs7QUFtQkE5RixPQUFPLENBQUM2RyxrQkFBUixHQUE2QixlQUFlQSxrQkFBZixHQUFxQztBQUNoRTFFLGtCQUFJbUMsSUFBSixDQUFTLHlDQUFUOztBQUNBLE1BQUloRSxJQUFJLEdBQUdnQixnQkFBRThCLFNBQUYsQ0FBWSxLQUFLOUMsSUFBakIsQ0FBWDs7QUFFQSxRQUFNd0csYUFBYSxHQUFHLENBQ3BCLDJCQURvQixFQUVwQixvQkFGb0IsRUFHcEIsaUJBSG9CLEVBSXBCLHFCQUpvQixFQUtwQiw0QkFMb0IsQ0FBdEI7O0FBUUEsTUFBSXhGLGdCQUFFQyxRQUFGLENBQVd1RixhQUFYLEVBQTBCLEtBQUt4RyxJQUFMLENBQVV3QyxVQUFwQyxDQUFKLEVBQXFEO0FBQ25EeEMsSUFBQUEsSUFBSSxDQUFDeUcsY0FBTCxHQUFzQixLQUFLekcsSUFBTCxDQUFVd0MsVUFBaEM7QUFDRCxHQUZELE1BRU87QUFDTHhDLElBQUFBLElBQUksQ0FBQzBHLHFCQUFMLEdBQTZCLEtBQUsxRyxJQUFMLENBQVUyRyxXQUF2QztBQUNEOztBQUNELE9BQUtqQyxZQUFMLEdBQW9CLE1BQU0sS0FBS1Qsb0JBQUwsQ0FBMEJqRSxJQUExQixFQUFnQyxLQUFLTyxHQUFMLENBQVMyRCxXQUF6QyxFQUFzRCxLQUFLM0QsR0FBM0QsQ0FBMUI7QUFDQSxPQUFLbUUsWUFBTCxDQUFrQlAsRUFBbEIsQ0FBcUJDLDRCQUFhQyxhQUFsQyxFQUFrREMsR0FBRCxJQUFTO0FBQ3hELFFBQUlBLEdBQUcsQ0FBQ0MsS0FBSixLQUFjSCw0QkFBYUksYUFBL0IsRUFBOEM7QUFDNUMsV0FBS0Msa0JBQUwsQ0FBd0JpQiw0QkFBeEI7QUFDRDtBQUNGLEdBSkQ7QUFTQSxPQUFLN0YsVUFBTCxHQUFrQjZGLDRCQUFsQjtBQUNBLE9BQUs5QyxvQkFBTCxDQUEwQjhDLDRCQUExQixJQUEwQyxLQUFLaEIsWUFBL0M7QUFDQSxPQUFLQyxXQUFMLEdBQW1CLEtBQUtELFlBQUwsQ0FBa0JFLFFBQWxCLENBQTJCQyxJQUEzQixDQUFnQyxLQUFLSCxZQUFyQyxDQUFuQjtBQUNBLE9BQUtJLFlBQUwsR0FBb0IsS0FBS0osWUFBTCxDQUFrQkssT0FBbEIsQ0FBMEJDLE9BQTFCLENBQWtDSCxJQUFsQyxDQUF1QyxLQUFLSCxZQUFMLENBQWtCSyxPQUF6RCxDQUFwQjtBQUNBLE9BQUtFLGNBQUwsR0FBc0IsSUFBdEI7O0FBRUEsTUFBSSxLQUFLVSwwQkFBTCxFQUFKLEVBQXVDO0FBRXJDLFVBQU0sS0FBS0ksb0JBQUwsRUFBTjtBQUNEO0FBQ0YsQ0FyQ0Q7O0FBNENBLGVBQWVsRCx5QkFBZixDQUEwQzZCLFlBQTFDLEVBQXdEO0FBR3RELE1BQUksRUFBQyxNQUFNQSxZQUFZLENBQUNrQyxpQkFBYixFQUFQLENBQUosRUFBNkM7QUFDM0MvRSxvQkFBSUMsS0FBSixDQUFVLG1EQUNHLDhCQURiOztBQUVBLFVBQU00QyxZQUFZLENBQUNtQyxPQUFiLEVBQU47QUFDRDs7QUFDRCxTQUFPbkMsWUFBUDtBQUNEOztBQWNELGVBQWVvQyxtQkFBZixDQUFvQ0MsUUFBcEMsRUFBOEM7QUFDNUMsUUFBTUMsT0FBTyxHQUFHQyxrQkFBRUMsU0FBRixDQUFZQyxvQkFBV0gsT0FBdkIsRUFBZ0M7QUFBQ3RFLElBQUFBLE9BQU8sRUFBRXlFO0FBQVYsR0FBaEMsQ0FBaEI7O0FBSUEsTUFBSSxDQUFDSixRQUFMLEVBQWU7QUFDYixVQUFNSyxJQUFJLEdBQUcsTUFBTUosT0FBTyxFQUExQjs7QUFDQW5GLG9CQUFJQyxLQUFKLENBQVcsaURBQWdEc0YsSUFBSyxFQUFoRTs7QUFDQSxXQUFPQSxJQUFQO0FBQ0Q7O0FBR0R2RixrQkFBSUMsS0FBSixDQUFXLG1EQUFrREMsSUFBSSxDQUFDQyxTQUFMLENBQWUrRSxRQUFmLENBQXlCLEVBQXRGOztBQUNBLE1BQUlNLFNBQVMsR0FBRyxJQUFoQjs7QUFDQSxPQUFLLE1BQU1DLGFBQVgsSUFBNEJQLFFBQTVCLEVBQXNDO0FBQ3BDLFFBQUlLLElBQUosRUFBVUcsUUFBVjs7QUFDQSxRQUFJdkcsZ0JBQUU2RSxPQUFGLENBQVV5QixhQUFWLENBQUosRUFBOEI7QUFDM0IsT0FBQ0YsSUFBRCxFQUFPRyxRQUFQLElBQW1CRCxhQUFwQjtBQUNELEtBRkQsTUFFTztBQUNMRixNQUFBQSxJQUFJLEdBQUdJLFFBQVEsQ0FBQ0YsYUFBRCxFQUFnQixFQUFoQixDQUFmO0FBQ0FDLE1BQUFBLFFBQVEsR0FBR0gsSUFBWDtBQUNEOztBQUNELFFBQUk7QUFDRnZGLHNCQUFJQyxLQUFKLENBQVcsdUJBQXNCc0YsSUFBSyxJQUFHRyxRQUFTLEVBQWxEOztBQUNBRixNQUFBQSxTQUFTLEdBQUcsTUFBTUwsT0FBTyxDQUFDO0FBQUNJLFFBQUFBLElBQUQ7QUFBT0csUUFBQUE7QUFBUCxPQUFELENBQXpCO0FBQ0E7QUFDRCxLQUpELENBSUUsT0FBT2pCLENBQVAsRUFBVTtBQUNWekUsc0JBQUlDLEtBQUosQ0FBVyx5QkFBd0JzRixJQUFLLElBQUdHLFFBQVMsZ0JBQXBEO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJRixTQUFTLEtBQUssSUFBbEIsRUFBd0I7QUFDdEIsVUFBTSxJQUFJL0UsS0FBSixDQUFXLG9EQUFELEdBQ0MsMEJBQXlCUCxJQUFJLENBQUNDLFNBQUwsQ0FBZStFLFFBQWYsQ0FBeUIsRUFEN0QsQ0FBTjtBQUVEOztBQUVEbEYsa0JBQUlDLEtBQUosQ0FBVyxtQkFBa0J1RixTQUFVLG1CQUF2Qzs7QUFDQSxTQUFPQSxTQUFQO0FBQ0Q7O0FBRUQzSCxPQUFPLENBQUMrSCxpQ0FBUixHQUE0QyxTQUFTQSxpQ0FBVCxHQUE4QztBQUN4RixNQUFJLEtBQUtDLGdCQUFMLENBQXNCbEksaUNBQXRCLENBQUosRUFBOEQ7QUFDNUQsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0RxQyxrQkFBSUMsS0FBSixDQUFXLCtDQUFELEdBQ1AsUUFBT3RDLGlDQUFrQywrQkFENUM7O0FBRUEsU0FBTyxLQUFQO0FBQ0QsQ0FQRDs7QUFTQUUsT0FBTyxDQUFDdUUsb0JBQVIsR0FBK0IsZUFBZUEsb0JBQWYsQ0FBcUNqRSxJQUFyQyxFQUEyQ2tFLFdBQTNDLEVBQXdEM0QsR0FBeEQsRUFBNkRtQyxPQUFPLEdBQUcsSUFBdkUsRUFBNkU7QUFDMUcsTUFBSTFDLElBQUksQ0FBQzJILGdCQUFULEVBQTJCO0FBQ3pCOUYsb0JBQUlxRCxJQUFKLENBQVUsd0ZBQVY7O0FBQ0FsRixJQUFBQSxJQUFJLENBQUM0SCxnQkFBTCxHQUF3QjVILElBQUksQ0FBQzJILGdCQUE3QjtBQUNEOztBQUVELE1BQUkzSCxJQUFJLENBQUM0SCxnQkFBVCxFQUEyQjtBQUN6Qi9GLG9CQUFJQyxLQUFKLENBQVcsNkJBQTRCOUIsSUFBSSxDQUFDNEgsZ0JBQWlCLG1CQUE3RDtBQUNELEdBRkQsTUFFTztBQUVMNUgsSUFBQUEsSUFBSSxDQUFDNEgsZ0JBQUwsR0FBd0IsTUFBTWQsbUJBQW1CLENBQUM5RyxJQUFJLENBQUM2SCxpQkFBTixDQUFqRDtBQUNEOztBQUVELFFBQU1DLE9BQU8sR0FBR3BGLE9BQU8sR0FBR3JDLHdCQUFlMEgsaUJBQWYsQ0FBaUN4SCxHQUFqQyxFQUFzQ21DLE9BQXRDLENBQUgsR0FBb0RzRixTQUEzRTs7QUFDQSxNQUFJLENBQUNoSCxnQkFBRWlILE9BQUYsQ0FBVUgsT0FBVixDQUFMLEVBQXlCO0FBQ3ZCakcsb0JBQUlDLEtBQUosQ0FBVSwrREFDUkMsSUFBSSxDQUFDQyxTQUFMLENBQWU4RixPQUFmLEVBQXdCLElBQXhCLEVBQThCLENBQTlCLENBREY7QUFFRDs7QUFFRCxRQUFNcEQsWUFBWSxHQUFHLElBQUlOLDJCQUFKLENBQWlCO0FBQ3BDZ0QsSUFBQUEsSUFBSSxFQUFFcEgsSUFBSSxDQUFDNEgsZ0JBRHlCO0FBRXBDTSxJQUFBQSxVQUFVLEVBQUVsSSxJQUFJLENBQUNtSSxzQkFGbUI7QUFHcEM1SCxJQUFBQSxHQUhvQztBQUlwQzZILElBQUFBLE9BQU8sRUFBRXBJLElBQUksQ0FBQ3FJLGdCQUpzQjtBQUtwQ0MsSUFBQUEsT0FBTyxFQUFFLENBQUMsQ0FBQ3RJLElBQUksQ0FBQ3VJLG1CQUxvQjtBQU1wQ0MsSUFBQUEsYUFBYSxFQUFFeEksSUFBSSxDQUFDeUkseUJBTmdCO0FBT3BDQyxJQUFBQSxXQUFXLEVBQUUxSSxJQUFJLENBQUMySSw2QkFQa0I7QUFRcENDLElBQUFBLFFBQVEsRUFBRTVJLElBQUksQ0FBQ3lHLGNBUnFCO0FBU3BDb0MsSUFBQUEsbUJBQW1CLEVBQUU3SSxJQUFJLENBQUM4SSwrQkFUVTtBQVVwQ0MsSUFBQUEsaUJBQWlCLEVBQUUvSSxJQUFJLENBQUNnSiw2QkFWWTtBQVdwQ2xCLElBQUFBLE9BWG9DO0FBWXBDbUIsSUFBQUEscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLEVBQVQsRUFBYXhCLGlDQUFiLEdBQ25CLEtBQUtBLGlDQUFMLEVBRG1CLEdBQ3dCTztBQWJYLEdBQWpCLENBQXJCO0FBaUJBaEksRUFBQUEsSUFBSSxDQUFDNEYsYUFBTCxHQUFxQjVGLElBQUksQ0FBQzRGLGFBQUwsSUFBc0IsRUFBM0M7O0FBR0EsT0FBSyxNQUFNc0QsR0FBWCxJQUFrQmxJLGdCQUFFcUUsSUFBRixDQUFPckYsSUFBUCxDQUFsQixFQUFnQztBQUM5QixRQUFJa0osR0FBRyxDQUFDQyxRQUFKLENBQWEsZ0JBQWIsQ0FBSixFQUFvQztBQUNsQ3RILHNCQUFJcUQsSUFBSixDQUFVLFlBQVdnRSxHQUFJLDREQUF6Qjs7QUFDQWxJLHNCQUFFb0ksS0FBRixDQUFRcEosSUFBSSxDQUFDNEYsYUFBYixFQUE0QjVGLElBQUksQ0FBQ2tKLEdBQUQsQ0FBaEM7QUFDRDtBQUNGOztBQUVELFFBQU1HLElBQUksR0FBR2hKLHdCQUFlaUosc0JBQWYsQ0FBc0N0SixJQUF0QyxFQUE0Q2tFLFdBQTVDLEVBQXlENEQsT0FBekQsQ0FBYjs7QUFDQWpHLGtCQUFJQyxLQUFKLENBQVcsb0RBQW1EdUgsSUFBSSxDQUFDekQsYUFBTCxDQUFtQjNDLGNBQWUsR0FBaEc7O0FBQ0EsUUFBTXlCLFlBQVksQ0FBQzZFLEtBQWIsQ0FBbUJGLElBQW5CLENBQU47QUFDQSxTQUFPM0UsWUFBUDtBQUNELENBbEREOztBQW1EQSxNQUFNVCxvQkFBb0IsR0FBR3ZFLE9BQU8sQ0FBQ3VFLG9CQUFyQzs7QUFHQWhFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjUCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyIGZyb20gJ2FwcGl1bS1jaHJvbWVkcml2ZXInO1xuaW1wb3J0IFBvcnRGaW5kZXIgZnJvbSAncG9ydGZpbmRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB3ZWJ2aWV3SGVscGVycyxcbiAgTkFUSVZFX1dJTiwgV0VCVklFV19CQVNFLCBXRUJWSUVXX1dJTiwgQ0hST01JVU1fV0lOLCBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FU1xufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIHJldHVybiB0aGlzLmFzc2lnbkNvbnRleHRzKHdlYnZpZXdzTWFwcGluZyk7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIGNvbnN0IGNvbnRleHRzID0gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWUsXG4gICAgaXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvblxuICB9O1xuICByZXR1cm4gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbn07XG5cbmhlbHBlcnMuYXNzaWduQ29udGV4dHMgPSBmdW5jdGlvbiBhc3NpZ25Db250ZXh0cyAod2Vidmlld3NNYXBwaW5nKSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3MgPSB3ZWJ2aWV3SGVscGVycy5wYXJzZVdlYnZpZXdOYW1lcyh3ZWJ2aWV3c01hcHBpbmcsIG9wdHMpO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU4sIC4uLndlYnZpZXdzXTtcbiAgbG9nLmRlYnVnKGBBdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb250ZXh0cyl9YCk7XG4gIHJldHVybiB0aGlzLmNvbnRleHRzO1xufTtcblxuaGVscGVycy5zd2l0Y2hDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ29udGV4dCAobmFtZSwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIC8vIFdlIGhhdmUgc29tZSBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gd2Vidmlld3MuIElmIHdlIHdhbnQgYVxuICAvLyBDaHJvbWVkcml2ZXIgd2Vidmlldywgd2UgY2FuIG9ubHkgY29udHJvbCBvbmUgYXQgYSB0aW1lLlxuICBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQobmFtZSkpIHtcbiAgICAvLyBzdGFydCBwcm94eWluZyBjb21tYW5kcyBkaXJlY3RseSB0byBjaHJvbWVkcml2ZXJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgLy8gaWYgd2UncmUgbW92aW5nIHRvIGEgbm9uLWNocm9tZWRyaXZlciB3ZWJ2aWV3LCBhbmQgb3VyIGN1cnJlbnQgY29udGV4dFxuICAgIC8vIF9pc18gYSBjaHJvbWVkcml2ZXIgd2VidmlldywgaWYgY2FwcyByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIGlzIHNldFxuICAgIC8vIHRvIHRydWUgdGhlbiBraWxsIGNocm9tZWRyaXZlciBzZXNzaW9uIHVzaW5nIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIG9yXG4gICAgLy8gZWxzZSBzaW1wbHkgc3VzcGVuZCBwcm94eWluZyB0byB0aGUgbGF0dGVyXG4gICAgaWYgKHRoaXMub3B0cy5yZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zKSB7XG4gICAgICBsb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArIHRoaXMub3B0cy5hcHBQYWNrYWdlO1xufTtcblxuaGVscGVycy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ICE9PSBudWxsICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbi8vIFR1cm4gb24gcHJveHlpbmcgdG8gYW4gZXhpc3RpbmcgQ2hyb21lZHJpdmVyIHNlc3Npb24gb3IgYSBuZXcgb25lXG5oZWxwZXJzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZWRyaXZlclByb3h5IChjb250ZXh0LCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIGxvZy5kZWJ1ZyhgRm91bmQgZXhpc3RpbmcgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICcke2NvbnRleHR9Jy4gVXNpbmcgaXQuYCk7XG4gICAgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGF3YWl0IHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIoY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgcXVlcnlpbmcgc3RhdGVzIG9mIENocm9tZSBhcHAgcGFja2FnZXNgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3Qgd20gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAod20ud2Vidmlld05hbWUgPT09IGNvbnRleHQgJiYgXy5oYXMod20/LmluZm8sICdBbmRyb2lkLVBhY2thZ2UnKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gd20uaW5mb1snQW5kcm9pZC1QYWNrYWdlJ107XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBDRFBgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMucHJveHlDb21tYW5kID0gbnVsbDtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xufTtcblxuLy8gSGFuZGxlIGFuIG91dC1vZi1iYW5kIENocm9tZWRyaXZlciBzdG9wIGV2ZW50XG5oZWxwZXJzLm9uQ2hyb21lZHJpdmVyU3RvcCA9IGFzeW5jIGZ1bmN0aW9uIG9uQ2hyb21lZHJpdmVyU3RvcCAoY29udGV4dCkge1xuICBsb2cud2FybihgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH0gc3RvcHBlZCB1bmV4cGVjdGVkbHlgKTtcbiAgaWYgKGNvbnRleHQgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIC8vIHdlIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2hpbGUgYXV0b21hdGluZyB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzbyB3YW50XG4gICAgLy8gdG8gc2h1dCBkb3duIHRoZSBzZXNzaW9uIGFuZCByZXNwb25kIHdpdGggYW4gZXJyb3JcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKCdDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHkgZHVyaW5nIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBDaHJvbWVkcml2ZXIgaW4gdGhlIG5vbi1hY3RpdmUgY29udGV4dCBiYXJmcywgd2UgZG9uJ3QgcmVhbGx5XG4gICAgLy8gY2FyZSwgd2UnbGwganVzdCBtYWtlIGEgbmV3IG9uZSBuZXh0IHRpbWUgd2UgbmVlZCB0aGUgY29udGV4dC5cbiAgICBsb2cud2FybihcIkNocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSwgYnV0IGl0IHdhc24ndCB0aGUgYWN0aXZlIFwiICtcbiAgICAgICAgICAgICAgICAnY29udGV4dCwgaWdub3JpbmcnKTtcbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuLy8gSW50ZW50aW9uYWxseSBzdG9wIGFsbCB0aGUgY2hyb21lZHJpdmVycyBjdXJyZW50bHkgYWN0aXZlLCBhbmQgaWdub3JlXG4vLyB0aGVpciBleGl0IGV2ZW50c1xuaGVscGVycy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcyA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzICgpIHtcbiAgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTsgLy8gbWFrZSBzdXJlIHdlIHR1cm4gb2ZmIHRoZSBwcm94eSBmbGFnXG4gIGZvciAobGV0IGNvbnRleHQgb2YgXy5rZXlzKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMpKSB7XG4gICAgbGV0IGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICBsb2cuZGVidWcoYFN0b3BwaW5nIGNocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9YCk7XG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBzdG9wcGVkIHN0YXRlIGV2ZW50XG4gICAgY2QucmVtb3ZlQWxsTGlzdGVuZXJzKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2Quc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oYEVycm9yIHN0b3BwaW5nIENocm9tZWRyaXZlcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJDb250ZXh0ID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJDb250ZXh0ICh2aWV3TmFtZSkge1xuICByZXR1cm4gXy5pbmNsdWRlcyh2aWV3TmFtZSwgV0VCVklFV19XSU4pIHx8IHZpZXdOYW1lID09PSBDSFJPTUlVTV9XSU47XG59O1xuXG5oZWxwZXJzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lID0gZnVuY3Rpb24gc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICByZXR1cm4gISF0aGlzLm9wdHMuY2hyb21lT3B0aW9ucyAmJlxuICAgICAgICAgXy5pc0FycmF5KHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MpICYmXG4gICAgICAgICB0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzLmluY2x1ZGVzKCctLW5vLWZpcnN0LXJ1bicpO1xufTtcblxuaGVscGVycy5kaXNtaXNzQ2hyb21lV2VsY29tZSA9IGFzeW5jIGZ1bmN0aW9uIGRpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgbG9nLmluZm8oJ1RyeWluZyB0byBkaXNtaXNzIENocm9tZSB3ZWxjb21lJyk7XG4gIGxldCBhY3Rpdml0eSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudEFjdGl2aXR5KCk7XG4gIGlmIChhY3Rpdml0eSAhPT0gJ29yZy5jaHJvbWl1bS5jaHJvbWUuYnJvd3Nlci5maXJzdHJ1bi5GaXJzdFJ1bkFjdGl2aXR5Jykge1xuICAgIGxvZy5pbmZvKCdDaHJvbWUgd2VsY29tZSBkaWFsb2cgbmV2ZXIgc2hvd2VkIHVwISBDb250aW51aW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC90ZXJtc19hY2NlcHQnLCBmYWxzZSk7XG4gIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIHRyeSB7XG4gICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL25lZ2F0aXZlX2J1dHRvbicsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRE8gTk9USElORywgVEhJUyBERVZJQ0UgRElETlQgTEFVTkNIIFRIRSBTSUdOSU4gRElBTE9HXG4gICAgLy8gSVQgTVVTVCBCRSBBIE5PTiBHTVMgREVWSUNFXG4gICAgbG9nLndhcm4oYFRoaXMgZGV2aWNlIGRpZCBub3Qgc2hvdyBDaHJvbWUgU2lnbkluIGRpYWxvZywgJHtlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuc3RhcnRDaHJvbWVTZXNzaW9uID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVTZXNzaW9uICgpIHtcbiAgbG9nLmluZm8oJ1N0YXJ0aW5nIGEgY2hyb21lLWJhc2VkIGJyb3dzZXIgc2Vzc2lvbicpO1xuICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgY29uc3Qga25vd25QYWNrYWdlcyA9IFtcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgJ2NvbS5jaHJvbWUuYmV0YScsXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gIF07XG5cbiAgaWYgKF8uaW5jbHVkZXMoa25vd25QYWNrYWdlcywgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgb3B0cy5jaHJvbWVCdW5kbGVJZCA9IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICB9IGVsc2Uge1xuICAgIG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5ID0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuICB9XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIpO1xuICB0aGlzLmNocm9tZWRyaXZlci5vbihDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChDSFJPTUlVTV9XSU4pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIENocm9tZSBzZXNzaW9uLCB3ZSBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBpc1xuICAvLyBhcHByb3ByaWF0ZWx5IHNldCBhbmQgdGhhdCB0aGlzIGNocm9tZWRyaXZlciBpcyBhZGRlZCB0byB0aGUgbGlzdFxuICAvLyBvZiBzZXNzaW9uIGNocm9tZWRyaXZlcnMgc28gd2UgY2FuIHN3aXRjaCBiYWNrIGFuZCBmb3J0aFxuICB0aGlzLmN1ckNvbnRleHQgPSBDSFJPTUlVTV9XSU47XG4gIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbQ0hST01JVU1fV0lOXSA9IHRoaXMuY2hyb21lZHJpdmVyO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lKCkpIHtcbiAgICAvLyBkaXNtaXNzIENocm9tZSB3ZWxjb21lIGRpYWxvZ1xuICAgIGF3YWl0IHRoaXMuZGlzbWlzc0Nocm9tZVdlbGNvbWUoKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogSW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIgKGNocm9tZWRyaXZlcikge1xuICAvLyBjaGVjayB0aGUgc3RhdHVzIGJ5IHNlbmRpbmcgYSBzaW1wbGUgd2luZG93LWJhc2VkIGNvbW1hbmQgdG8gQ2hyb21lRHJpdmVyXG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSB3YW50IHRvIHJlY3JlYXRlIHRoZSBDaHJvbWVEcml2ZXIgc2Vzc2lvblxuICBpZiAoIWF3YWl0IGNocm9tZWRyaXZlci5oYXNXb3JraW5nV2VidmlldygpKSB7XG4gICAgbG9nLmRlYnVnKCdDaHJvbWVEcml2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICdSZS1pbml0aWFsaXppbmcgdGhlIHNlc3Npb24uJyk7XG4gICAgYXdhaXQgY2hyb21lZHJpdmVyLnJlc3RhcnQoKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufVxuXG4vKipcbiAqIEZpbmQgYSBmcmVlIHBvcnQgdG8gaGF2ZSBDaHJvbWVkcml2ZXIgbGlzdGVuIG9uLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IFtwb3J0U3BlY10gLSBBcnJheSB3aGljaCBpcyBhIGxpc3Qgb2YgcG9ydHMuIEEgbGlzdCBpdGVtIG1heVxuICogYWxzbyBpdHNlbGYgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDIgc3BlY2lmeWluZyBhIHN0YXJ0IGFuZCBlbmQgcG9ydCBvZlxuICogYSByYW5nZS4gU29tZSB2YWxpZCBwb3J0IHNwZWNzOlxuICogICAgLSBbODAwMCwgODAwMSwgODAwMl1cbiAqICAgIC0gW1s4MDAwLCA4MDA1XV1cbiAqICAgIC0gWzgwMDAsIFs5MDAwLCA5MTAwXV1cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgZnJlZSBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlclBvcnQgKHBvcnRTcGVjKSB7XG4gIGNvbnN0IGdldFBvcnQgPSBCLnByb21pc2lmeShQb3J0RmluZGVyLmdldFBvcnQsIHtjb250ZXh0OiBQb3J0RmluZGVyfSk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgZGlkbid0IGdpdmUgdXMgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGNocm9tZWRyaXZlclxuICAvLyBwb3J0IHJhbmdlcywganVzdCBmaW5kIGFueSBmcmVlIHBvcnRcbiAgaWYgKCFwb3J0U3BlYykge1xuICAgIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KCk7XG4gICAgbG9nLmRlYnVnKGBBIHBvcnQgd2FzIG5vdCBnaXZlbiwgdXNpbmcgcmFuZG9tIGZyZWUgcG9ydDogJHtwb3J0fWApO1xuICAgIHJldHVybiBwb3J0O1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIGZyZWUgcG9ydCBiYXNlZCBvbiBhIGxpc3Qgb3IgcmFuZ2UgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgbG9nLmRlYnVnKGBGaW5kaW5nIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgbGV0IGZvdW5kUG9ydCA9IG51bGw7XG4gIGZvciAoY29uc3QgcG90ZW50aWFsUG9ydCBvZiBwb3J0U3BlYykge1xuICAgIGxldCBwb3J0LCBzdG9wUG9ydDtcbiAgICBpZiAoXy5pc0FycmF5KHBvdGVudGlhbFBvcnQpKSB7XG4gICAgICAoW3BvcnQsIHN0b3BQb3J0XSA9IHBvdGVudGlhbFBvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3J0ID0gcGFyc2VJbnQocG90ZW50aWFsUG9ydCwgMTApOyAvLyBlbnN1cmUgd2UgaGF2ZSBhIG51bWJlciBhbmQgbm90IGEgc3RyaW5nXG4gICAgICBzdG9wUG9ydCA9IHBvcnQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYENoZWNraW5nIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fWApO1xuICAgICAgZm91bmRQb3J0ID0gYXdhaXQgZ2V0UG9ydCh7cG9ydCwgc3RvcFBvcnR9KTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTm90aGluZyBpbiBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH0gd2FzIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZFBvcnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgIGBjaHJvbWVkcml2ZXJQb3J0cyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICB9XG5cbiAgbG9nLmRlYnVnKGBVc2luZyBmcmVlIHBvcnQgJHtmb3VuZFBvcnR9IGZvciBjaHJvbWVkcml2ZXJgKTtcbiAgcmV0dXJuIGZvdW5kUG9ydDtcbn1cblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQgKCkge1xuICBpZiAodGhpcy5pc0ZlYXR1cmVFbmFibGVkKENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsb2cuZGVidWcoYEF1dG9tYXRlZCBDaHJvbWVkcml2ZXIgZG93bmxvYWQgaXMgZGlzYWJsZWQuIGAgK1xuICAgIGBVc2UgJyR7Q0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFfScgc2VydmVyIGZlYXR1cmUgdG8gZW5hYmxlIGl0YCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBhc3luYyBmdW5jdGlvbiBzZXR1cE5ld0Nocm9tZWRyaXZlciAob3B0cywgY3VyRGV2aWNlSWQsIGFkYiwgY29udGV4dCA9IG51bGwpIHtcbiAgaWYgKG9wdHMuY2hyb21lRHJpdmVyUG9ydCkge1xuICAgIGxvZy53YXJuKGBUaGUgJ2Nocm9tZURyaXZlclBvcnQnIGNhcGFiaWxpdHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnY2hyb21lZHJpdmVyUG9ydCcgaW5zdGVhZGApO1xuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IG9wdHMuY2hyb21lRHJpdmVyUG9ydDtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZWRyaXZlclBvcnQpIHtcbiAgICBsb2cuZGVidWcoYFVzaW5nIHVzZXItc3BlY2lmaWVkIHBvcnQgJHtvcHRzLmNocm9tZWRyaXZlclBvcnR9IGZvciBjaHJvbWVkcml2ZXJgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIHNpbmdsZSBwb3J0IHdhc24ndCBnaXZlbiwgd2UnbGwgbG9vayBmb3IgYSBmcmVlIG9uZVxuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IGF3YWl0IGdldENocm9tZWRyaXZlclBvcnQob3B0cy5jaHJvbWVkcml2ZXJQb3J0cyk7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gY29udGV4dCA/IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdEZXRhaWxzKGFkYiwgY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGlmICghXy5pc0VtcHR5KGRldGFpbHMpKSB7XG4gICAgbG9nLmRlYnVnKCdQYXNzaW5nIHdlYiB2aWV3IGRldGFpbHMgdG8gdGhlIENocm9tZWRyaXZlciBjb25zdHJ1Y3RvcjogJyArXG4gICAgICBKU09OLnN0cmluZ2lmeShkZXRhaWxzLCBudWxsLCAyKSk7XG4gIH1cblxuICBjb25zdCBjaHJvbWVkcml2ZXIgPSBuZXcgQ2hyb21lZHJpdmVyKHtcbiAgICBwb3J0OiBvcHRzLmNocm9tZWRyaXZlclBvcnQsXG4gICAgZXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJFeGVjdXRhYmxlLFxuICAgIGFkYixcbiAgICBjbWRBcmdzOiBvcHRzLmNocm9tZWRyaXZlckFyZ3MsXG4gICAgdmVyYm9zZTogISFvcHRzLnNob3dDaHJvbWVkcml2ZXJMb2csXG4gICAgZXhlY3V0YWJsZURpcjogb3B0cy5jaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyLFxuICAgIG1hcHBpbmdQYXRoOiBvcHRzLmNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlLFxuICAgIGJ1bmRsZUlkOiBvcHRzLmNocm9tZUJ1bmRsZUlkLFxuICAgIHVzZVN5c3RlbUV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSxcbiAgICBkaXNhYmxlQnVpbGRDaGVjazogb3B0cy5jaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayxcbiAgICBkZXRhaWxzLFxuICAgIGlzQXV0b2Rvd25sb2FkRW5hYmxlZDogKHRoaXMgfHwge30pLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZFxuICAgICAgPyB0aGlzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCgpIDogdW5kZWZpbmVkLFxuICB9KTtcblxuICAvLyBtYWtlIHN1cmUgdGhlcmUgYXJlIGNocm9tZU9wdGlvbnNcbiAgb3B0cy5jaHJvbWVPcHRpb25zID0gb3B0cy5jaHJvbWVPcHRpb25zIHx8IHt9O1xuICAvLyB0cnkgb3V0IGFueSBwcmVmaXhlZCBjaHJvbWVPcHRpb25zLFxuICAvLyBhbmQgc3RyaXAgdGhlIHByZWZpeFxuICBmb3IgKGNvbnN0IG9wdCBvZiBfLmtleXMob3B0cykpIHtcbiAgICBpZiAob3B0LmVuZHNXaXRoKCc6Y2hyb21lT3B0aW9ucycpKSB7XG4gICAgICBsb2cud2FybihgTWVyZ2luZyAnJHtvcHR9JyBpbnRvICdjaHJvbWVPcHRpb25zJy4gVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcmApO1xuICAgICAgXy5tZXJnZShvcHRzLmNocm9tZU9wdGlvbnMsIG9wdHNbb3B0XSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FwcyA9IHdlYnZpZXdIZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMob3B0cywgY3VyRGV2aWNlSWQsIGRldGFpbHMpO1xuICBsb2cuZGVidWcoYEJlZm9yZSBzdGFydGluZyBjaHJvbWVkcml2ZXIsIGFuZHJvaWRQYWNrYWdlIGlzICcke2NhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZX0nYCk7XG4gIGF3YWl0IGNocm9tZWRyaXZlci5zdGFydChjYXBzKTtcbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn07XG5jb25zdCBzZXR1cE5ld0Nocm9tZWRyaXZlciA9IGhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXI7XG5cblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycywgc2V0dXBOZXdDaHJvbWVkcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.helpers = exports.default = exports.commands = void 0;
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
@@ -15,7 +15,7 @@ var _asyncbox = require("asyncbox");
|
|
|
15
15
|
|
|
16
16
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _support = require("@appium/support");
|
|
19
19
|
|
|
20
20
|
let commands = {},
|
|
21
21
|
helpers = {},
|
|
@@ -203,12 +203,12 @@ commands.complexTap = async function complexTap(tapCount, touchCount, duration,
|
|
|
203
203
|
};
|
|
204
204
|
|
|
205
205
|
commands.tap = async function (elementId = null, x = null, y = null, count = 1) {
|
|
206
|
-
if (!
|
|
206
|
+
if (!_support.util.hasValue(elementId) && !_support.util.hasValue(x) && !_support.util.hasValue(y)) {
|
|
207
207
|
throw new Error(`Either element to tap or both absolute coordinates should be defined`);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
for (let i = 0; i < count; i++) {
|
|
211
|
-
if (
|
|
211
|
+
if (_support.util.hasValue(elementId)) {
|
|
212
212
|
await this.bootstrap.sendAction('element:click', {
|
|
213
213
|
elementId,
|
|
214
214
|
x,
|
|
@@ -228,4 +228,4 @@ var _default = extensions;
|
|
|
228
228
|
exports.default = _default;require('source-map-support').install();
|
|
229
229
|
|
|
230
230
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJwIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImdldE5hbWUiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJzZXRFbGVtZW50VmFsdWUiLCJrZXlzIiwicmVwbGFjZSIsInRleHQiLCJBcnJheSIsImpvaW4iLCJwYXJhbXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZG9TZXRFbGVtZW50VmFsdWUiLCJzZXRWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwiY2xpY2siLCJhZGIiLCJpbnB1dFRleHQiLCJnZXRUZXh0IiwiY2xlYXIiLCJsZW5ndGgiLCJsb2dnZXIiLCJkZWJ1ZyIsInJlbWFpbmluZ0xlbmd0aCIsImxlbmd0aFRvU2VuZCIsImNsZWFyVGV4dEZpZWxkIiwiZ2V0TG9jYXRpb24iLCJnZXRMb2NhdGlvbkluVmlldyIsImdldFNpemUiLCJnZXRFbGVtZW50UmVjdCIsInRvdWNoTG9uZ0NsaWNrIiwieCIsInkiLCJkdXJhdGlvbiIsImFuZHJvaWRIZWxwZXJzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiY29tcGxleFRhcCIsInRhcENvdW50IiwidG91Y2hDb3VudCIsInRhcCIsImNvdW50IiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJpIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFB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RCxNQUdPO0FBQ0wsWUFBTSxLQUFLcEMsU0FBTCxDQUFlQyxVQUFmLENBQTBCLE9BQTFCLEVBQW1DO0FBQUNrQyxRQUFBQSxDQUFEO0FBQUlDLFFBQUFBO0FBQUosT0FBbkMsQ0FBTjtBQUNEO0FBQ0Y7QUFDRixDQVpEOztBQWNBZ0IsTUFBTSxDQUFDQyxNQUFQLENBQWMxRCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUgKGF0dHJpYnV0ZSwgZWxlbWVudElkKSB7XG4gIGxldCBwID0ge2F0dHJpYnV0ZSwgZWxlbWVudElkfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0QXR0cmlidXRlJywgcCk7XG59O1xuXG5jb21tYW5kcy5nZXROYW1lID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZSAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnY2xhc3NOYW1lJywgZWxlbWVudElkKTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnREaXNwbGF5ZWQgPSBhc3luYyBmdW5jdGlvbiBlbGVtZW50RGlzcGxheWVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdkaXNwbGF5ZWQnLCBlbGVtZW50SWQpID09PSAndHJ1ZSc7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIGVsZW1lbnRFbmFibGVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdlbmFibGVkJywgZWxlbWVudElkKSA9PT0gJ3RydWUnO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gZWxlbWVudFNlbGVjdGVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkgPT09ICd0cnVlJztcbn07XG5cbmhlbHBlcnMuc2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gc2V0RWxlbWVudFZhbHVlIChrZXlzLCBlbGVtZW50SWQsIHJlcGxhY2UgPSBmYWxzZSkge1xuICBsZXQgdGV4dCA9IGtleXM7XG4gIGlmIChrZXlzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICB0ZXh0ID0ga2V5cy5qb2luKCcnKTtcbiAgfVxuXG4gIGxldCBwYXJhbXMgPSB7XG4gICAgZWxlbWVudElkLFxuICAgIHRleHQsXG4gICAgcmVwbGFjZSxcbiAgICB1bmljb2RlS2V5Ym9hcmQ6IHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmRcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1NldEVsZW1lbnRWYWx1ZShwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb1NldEVsZW1lbnRWYWx1ZSBmcm9tIHNldEVsZW1lbnRWYWx1ZSBpcyBmb3IgcmV1c2luZyBzZXRFbGVtZW50VmFsdWVcbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIGFuZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLlxuICogT3RoZXIgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBuZWVkIHRvIG92ZXJyaWRlIGRvU2V0RWxlbWVudFZhbHVlXG4gKiB0byBmYWNpbGl0YXRlIHNldEVsZW1lbnRWYWx1ZS5cbiAqL1xuaGVscGVycy5kb1NldEVsZW1lbnRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIGRvU2V0RWxlbWVudFZhbHVlIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6c2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFZhbHVlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0RWxlbWVudFZhbHVlKGtleXMsIGVsZW1lbnRJZCwgZmFsc2UpO1xufTtcblxuY29tbWFuZHMucmVwbGFjZVZhbHVlID0gYXN5bmMgZnVuY3Rpb24gcmVwbGFjZVZhbHVlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0RWxlbWVudFZhbHVlKGtleXMsIGVsZW1lbnRJZCwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZUltbWVkaWF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFZhbHVlSW1tZWRpYXRlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgbGV0IHRleHQgPSBrZXlzO1xuICBpZiAoa2V5cyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgdGV4dCA9IGtleXMuam9pbignJyk7XG4gIH1cblxuICAvLyBmaXJzdCwgbWFrZSBzdXJlIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBlbGVtZW50XG4gIGF3YWl0IHRoaXMuY2xpY2soZWxlbWVudElkKTtcblxuICAvLyB0aGVuIHNlbmQgdGhyb3VnaCBhZGJcbiAgYXdhaXQgdGhpcy5hZGIuaW5wdXRUZXh0KHRleHQpO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldFRleHQgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRUZXh0Jywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiBjbGVhciAoZWxlbWVudElkKSB7XG4gIGxldCB0ZXh0ID0gKGF3YWl0IHRoaXMuZ2V0VGV4dChlbGVtZW50SWQpKSB8fCAnJztcbiAgbGV0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgLy8gaWYgbGVuZ3RoIGlzIHplcm8gdGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOlxuICAgIC8vICAgMS4gdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZFxuICAgIC8vICAgMi4gaXQgaXMgYSBwYXNzd29yZCBmaWVsZFxuICAgIC8vIHNpbmNlIHRoZXJlIGlzIGxpdHRsZSBvdmVyaGVhZCB0byB0aGUgYWRiIGNhbGwsIGRlbGV0ZSAxMDAgZWxlbWVudHNcbiAgICAvLyBpZiB3ZSBnZXQgemVybywganVzdCBpbiBjYXNlIGl0IGlzICMyXG4gICAgbGVuZ3RoID0gMTAwO1xuICB9XG4gIGF3YWl0IHRoaXMuY2xpY2soZWxlbWVudElkKTtcbiAgbG9nZ2VyLmRlYnVnKGBTZW5kaW5nIHVwIHRvICR7bGVuZ3RofSBjbGVhciBjaGFyYWN0ZXJzIHRvIGRldmljZWApO1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVtYWluaW5nTGVuZ3RoID0gbGVuZ3RoO1xuICAgIHdoaWxlIChyZW1haW5pbmdMZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbGVuZ3RoVG9TZW5kID0gcmVtYWluaW5nTGVuZ3RoIDwgNTAgPyByZW1haW5pbmdMZW5ndGggOiA1MDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2VuZGluZyAke2xlbmd0aFRvU2VuZH0gY2xlYXIgY2hhcmFjdGVycyB0byBkZXZpY2VgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmNsZWFyVGV4dEZpZWxkKGxlbmd0aFRvU2VuZCk7XG4gICAgICByZW1haW5pbmdMZW5ndGggLT0gbGVuZ3RoVG9TZW5kO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb21tYW5kcy5jbGljayA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Y2xpY2snLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldExvY2F0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0TG9jYXRpb24nLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbkluVmlldyA9IGFzeW5jIGZ1bmN0aW9uIGdldExvY2F0aW9uSW5WaWV3IChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24oZWxlbWVudElkKTtcbn07XG5cbmNvbW1hbmRzLmdldFNpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRTaXplIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0U2l6ZScsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RWxlbWVudFJlY3QgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRSZWN0Jywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMudG91Y2hMb25nQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiB0b3VjaExvbmdDbGljayAoZWxlbWVudElkLCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeSwgZHVyYXRpb259O1xuICBhbmRyb2lkSGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyhwYXJhbXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDp0b3VjaExvbmdDbGljaycsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaERvd24gPSBhc3luYyBmdW5jdGlvbiB0b3VjaERvd24gKGVsZW1lbnRJZCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeX07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoRG93bicsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaFVwID0gYXN5bmMgZnVuY3Rpb24gdG91Y2hVcCAoZWxlbWVudElkLCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudElkLCB4LCB5fTtcbiAgYW5kcm9pZEhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMocGFyYW1zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6dG91Y2hVcCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaE1vdmUgPSBhc3luYyBmdW5jdGlvbiB0b3VjaE1vdmUgKGVsZW1lbnRJZCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeX07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoTW92ZScsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5jb21wbGV4VGFwID0gYXN5bmMgZnVuY3Rpb24gY29tcGxleFRhcCAodGFwQ291bnQsIHRvdWNoQ291bnQsIGR1cmF0aW9uLCB4LCB5KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjbGljaycsIHt4LCB5fSk7XG59O1xuXG5jb21tYW5kcy50YXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkID0gbnVsbCwgeCA9IG51bGwsIHkgPSBudWxsLCBjb3VudCA9IDEpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIXV0aWwuaGFzVmFsdWUoeCkgJiYgIXV0aWwuaGFzVmFsdWUoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBlbGVtZW50IHRvIHRhcCBvciBib3RoIGFic29sdXRlIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudElkKSkge1xuICAgICAgLy8gRklYTUU6IGJvb3RzdHJhcCBpZ25vcmVzIHJlbGF0aXZlIGNvb3JkaW5hdGVzXG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmNsaWNrJywge2VsZW1lbnRJZCwgeCwgeX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjbGljaycsIHt4LCB5fSk7XG4gICAgfVxuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9lbGVtZW50LmpzIl0sIm5hbWVzIjpbImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJlbGVtZW50SWQiLCJwIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImdldE5hbWUiLCJlbGVtZW50RGlzcGxheWVkIiwiZWxlbWVudEVuYWJsZWQiLCJlbGVtZW50U2VsZWN0ZWQiLCJzZXRFbGVtZW50VmFsdWUiLCJrZXlzIiwicmVwbGFjZSIsInRleHQiLCJBcnJheSIsImpvaW4iLCJwYXJhbXMiLCJ1bmljb2RlS2V5Ym9hcmQiLCJvcHRzIiwiZG9TZXRFbGVtZW50VmFsdWUiLCJzZXRWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsInNldFZhbHVlSW1tZWRpYXRlIiwiY2xpY2siLCJhZGIiLCJpbnB1dFRleHQiLCJnZXRUZXh0IiwiY2xlYXIiLCJsZW5ndGgiLCJsb2dnZXIiLCJkZWJ1ZyIsInJlbWFpbmluZ0xlbmd0aCIsImxlbmd0aFRvU2VuZCIsImNsZWFyVGV4dEZpZWxkIiwiZ2V0TG9jYXRpb24iLCJnZXRMb2NhdGlvbkluVmlldyIsImdldFNpemUiLCJnZXRFbGVtZW50UmVjdCIsInRvdWNoTG9uZ0NsaWNrIiwieCIsInkiLCJkdXJhdGlvbiIsImFuZHJvaWRIZWxwZXJzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJ0b3VjaERvd24iLCJ0b3VjaFVwIiwidG91Y2hNb3ZlIiwiY29tcGxleFRhcCIsInRhcENvdW50IiwidG91Y2hDb3VudCIsInRhcCIsImNvdW50IiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJpIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLElBQUlBLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFB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R087QUFDTCxZQUFNLEtBQUtwQyxTQUFMLENBQWVDLFVBQWYsQ0FBMEIsT0FBMUIsRUFBbUM7QUFBQ2tDLFFBQUFBLENBQUQ7QUFBSUMsUUFBQUE7QUFBSixPQUFuQyxDQUFOO0FBQ0Q7QUFDRjtBQUNGLENBWkQ7O0FBY0FnQixNQUFNLENBQUNDLE1BQVAsQ0FBYzFELFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFuZHJvaWRIZWxwZXJzIGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5nZXRBdHRyaWJ1dGUgPSBhc3luYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUgKGF0dHJpYnV0ZSwgZWxlbWVudElkKSB7XG4gIGxldCBwID0ge2F0dHJpYnV0ZSwgZWxlbWVudElkfTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0QXR0cmlidXRlJywgcCk7XG59O1xuXG5jb21tYW5kcy5nZXROYW1lID0gYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZSAoZWxlbWVudElkKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldEF0dHJpYnV0ZSgnY2xhc3NOYW1lJywgZWxlbWVudElkKTtcbn07XG5cbmNvbW1hbmRzLmVsZW1lbnREaXNwbGF5ZWQgPSBhc3luYyBmdW5jdGlvbiBlbGVtZW50RGlzcGxheWVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdkaXNwbGF5ZWQnLCBlbGVtZW50SWQpID09PSAndHJ1ZSc7XG59O1xuXG5jb21tYW5kcy5lbGVtZW50RW5hYmxlZCA9IGFzeW5jIGZ1bmN0aW9uIGVsZW1lbnRFbmFibGVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdlbmFibGVkJywgZWxlbWVudElkKSA9PT0gJ3RydWUnO1xufTtcblxuY29tbWFuZHMuZWxlbWVudFNlbGVjdGVkID0gYXN5bmMgZnVuY3Rpb24gZWxlbWVudFNlbGVjdGVkIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIGVsZW1lbnRJZCkgPT09ICd0cnVlJztcbn07XG5cbmhlbHBlcnMuc2V0RWxlbWVudFZhbHVlID0gYXN5bmMgZnVuY3Rpb24gc2V0RWxlbWVudFZhbHVlIChrZXlzLCBlbGVtZW50SWQsIHJlcGxhY2UgPSBmYWxzZSkge1xuICBsZXQgdGV4dCA9IGtleXM7XG4gIGlmIChrZXlzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICB0ZXh0ID0ga2V5cy5qb2luKCcnKTtcbiAgfVxuXG4gIGxldCBwYXJhbXMgPSB7XG4gICAgZWxlbWVudElkLFxuICAgIHRleHQsXG4gICAgcmVwbGFjZSxcbiAgICB1bmljb2RlS2V5Ym9hcmQ6IHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmRcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgdGhpcy5kb1NldEVsZW1lbnRWYWx1ZShwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb1NldEVsZW1lbnRWYWx1ZSBmcm9tIHNldEVsZW1lbnRWYWx1ZSBpcyBmb3IgcmV1c2luZyBzZXRFbGVtZW50VmFsdWVcbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIGFuZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLlxuICogT3RoZXIgYW5kcm9pZC1kcml2ZXJzIChsaWtlIGFwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyKSBuZWVkIHRvIG92ZXJyaWRlIGRvU2V0RWxlbWVudFZhbHVlXG4gKiB0byBmYWNpbGl0YXRlIHNldEVsZW1lbnRWYWx1ZS5cbiAqL1xuaGVscGVycy5kb1NldEVsZW1lbnRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIGRvU2V0RWxlbWVudFZhbHVlIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6c2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFZhbHVlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0RWxlbWVudFZhbHVlKGtleXMsIGVsZW1lbnRJZCwgZmFsc2UpO1xufTtcblxuY29tbWFuZHMucmVwbGFjZVZhbHVlID0gYXN5bmMgZnVuY3Rpb24gcmVwbGFjZVZhbHVlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0RWxlbWVudFZhbHVlKGtleXMsIGVsZW1lbnRJZCwgdHJ1ZSk7XG59O1xuXG5jb21tYW5kcy5zZXRWYWx1ZUltbWVkaWF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFZhbHVlSW1tZWRpYXRlIChrZXlzLCBlbGVtZW50SWQpIHtcbiAgbGV0IHRleHQgPSBrZXlzO1xuICBpZiAoa2V5cyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgdGV4dCA9IGtleXMuam9pbignJyk7XG4gIH1cblxuICAvLyBmaXJzdCwgbWFrZSBzdXJlIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBlbGVtZW50XG4gIGF3YWl0IHRoaXMuY2xpY2soZWxlbWVudElkKTtcblxuICAvLyB0aGVuIHNlbmQgdGhyb3VnaCBhZGJcbiAgYXdhaXQgdGhpcy5hZGIuaW5wdXRUZXh0KHRleHQpO1xufTtcblxuY29tbWFuZHMuZ2V0VGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldFRleHQgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRUZXh0Jywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMuY2xlYXIgPSBhc3luYyBmdW5jdGlvbiBjbGVhciAoZWxlbWVudElkKSB7XG4gIGxldCB0ZXh0ID0gKGF3YWl0IHRoaXMuZ2V0VGV4dChlbGVtZW50SWQpKSB8fCAnJztcbiAgbGV0IGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgLy8gaWYgbGVuZ3RoIGlzIHplcm8gdGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOlxuICAgIC8vICAgMS4gdGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZFxuICAgIC8vICAgMi4gaXQgaXMgYSBwYXNzd29yZCBmaWVsZFxuICAgIC8vIHNpbmNlIHRoZXJlIGlzIGxpdHRsZSBvdmVyaGVhZCB0byB0aGUgYWRiIGNhbGwsIGRlbGV0ZSAxMDAgZWxlbWVudHNcbiAgICAvLyBpZiB3ZSBnZXQgemVybywganVzdCBpbiBjYXNlIGl0IGlzICMyXG4gICAgbGVuZ3RoID0gMTAwO1xuICB9XG4gIGF3YWl0IHRoaXMuY2xpY2soZWxlbWVudElkKTtcbiAgbG9nZ2VyLmRlYnVnKGBTZW5kaW5nIHVwIHRvICR7bGVuZ3RofSBjbGVhciBjaGFyYWN0ZXJzIHRvIGRldmljZWApO1xuICByZXR1cm4gYXdhaXQgcmV0cnlJbnRlcnZhbCg1LCA1MDAsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgcmVtYWluaW5nTGVuZ3RoID0gbGVuZ3RoO1xuICAgIHdoaWxlIChyZW1haW5pbmdMZW5ndGggPiAwKSB7XG4gICAgICBsZXQgbGVuZ3RoVG9TZW5kID0gcmVtYWluaW5nTGVuZ3RoIDwgNTAgPyByZW1haW5pbmdMZW5ndGggOiA1MDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgU2VuZGluZyAke2xlbmd0aFRvU2VuZH0gY2xlYXIgY2hhcmFjdGVycyB0byBkZXZpY2VgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmNsZWFyVGV4dEZpZWxkKGxlbmd0aFRvU2VuZCk7XG4gICAgICByZW1haW5pbmdMZW5ndGggLT0gbGVuZ3RoVG9TZW5kO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb21tYW5kcy5jbGljayA9IGFzeW5jIGZ1bmN0aW9uIGNsaWNrIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Y2xpY2snLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIGdldExvY2F0aW9uIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0TG9jYXRpb24nLCB7ZWxlbWVudElkfSk7XG59O1xuXG5jb21tYW5kcy5nZXRMb2NhdGlvbkluVmlldyA9IGFzeW5jIGZ1bmN0aW9uIGdldExvY2F0aW9uSW5WaWV3IChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0TG9jYXRpb24oZWxlbWVudElkKTtcbn07XG5cbmNvbW1hbmRzLmdldFNpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRTaXplIChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6Z2V0U2l6ZScsIHtlbGVtZW50SWR9KTtcbn07XG5cbmNvbW1hbmRzLmdldEVsZW1lbnRSZWN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RWxlbWVudFJlY3QgKGVsZW1lbnRJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDpnZXRSZWN0Jywge2VsZW1lbnRJZH0pO1xufTtcblxuY29tbWFuZHMudG91Y2hMb25nQ2xpY2sgPSBhc3luYyBmdW5jdGlvbiB0b3VjaExvbmdDbGljayAoZWxlbWVudElkLCB4LCB5LCBkdXJhdGlvbikge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeSwgZHVyYXRpb259O1xuICBhbmRyb2lkSGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyhwYXJhbXMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZWxlbWVudDp0b3VjaExvbmdDbGljaycsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaERvd24gPSBhc3luYyBmdW5jdGlvbiB0b3VjaERvd24gKGVsZW1lbnRJZCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeX07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoRG93bicsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaFVwID0gYXN5bmMgZnVuY3Rpb24gdG91Y2hVcCAoZWxlbWVudElkLCB4LCB5KSB7XG4gIGxldCBwYXJhbXMgPSB7ZWxlbWVudElkLCB4LCB5fTtcbiAgYW5kcm9pZEhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMocGFyYW1zKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2VsZW1lbnQ6dG91Y2hVcCcsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy50b3VjaE1vdmUgPSBhc3luYyBmdW5jdGlvbiB0b3VjaE1vdmUgKGVsZW1lbnRJZCwgeCwgeSkge1xuICBsZXQgcGFyYW1zID0ge2VsZW1lbnRJZCwgeCwgeX07XG4gIGFuZHJvaWRIZWxwZXJzLnJlbW92ZU51bGxQcm9wZXJ0aWVzKHBhcmFtcyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OnRvdWNoTW92ZScsIHBhcmFtcyk7XG59O1xuXG5jb21tYW5kcy5jb21wbGV4VGFwID0gYXN5bmMgZnVuY3Rpb24gY29tcGxleFRhcCAodGFwQ291bnQsIHRvdWNoQ291bnQsIGR1cmF0aW9uLCB4LCB5KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjbGljaycsIHt4LCB5fSk7XG59O1xuXG5jb21tYW5kcy50YXAgPSBhc3luYyBmdW5jdGlvbiAoZWxlbWVudElkID0gbnVsbCwgeCA9IG51bGwsIHkgPSBudWxsLCBjb3VudCA9IDEpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGVsZW1lbnRJZCkgJiYgIXV0aWwuaGFzVmFsdWUoeCkgJiYgIXV0aWwuaGFzVmFsdWUoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBlbGVtZW50IHRvIHRhcCBvciBib3RoIGFic29sdXRlIGNvb3JkaW5hdGVzIHNob3VsZCBiZSBkZWZpbmVkYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoZWxlbWVudElkKSkge1xuICAgICAgLy8gRklYTUU6IGJvb3RzdHJhcCBpZ25vcmVzIHJlbGF0aXZlIGNvb3JkaW5hdGVzXG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdlbGVtZW50OmNsaWNrJywge2VsZW1lbnRJZCwgeCwgeX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdjbGljaycsIHt4LCB5fSk7XG4gICAgfVxuICB9XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
@@ -11,7 +11,7 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _baseDriver = require("@appium/base-driver");
|
|
15
15
|
|
|
16
16
|
var _logger = _interopRequireDefault(require("../logger"));
|
|
17
17
|
|
|
@@ -26,10 +26,10 @@ extensions.execute = async function execute(script, args) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
if (!this.isWebContext()) {
|
|
29
|
-
throw new
|
|
29
|
+
throw new _baseDriver.errors.NotImplementedError();
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
const endpoint = this.chromedriver.jwproxy.downstreamProtocol ===
|
|
32
|
+
const endpoint = this.chromedriver.jwproxy.downstreamProtocol === _baseDriver.PROTOCOLS.MJSONWP ? '/execute' : '/execute/sync';
|
|
33
33
|
return await this.chromedriver.jwproxy.command(endpoint, 'POST', {
|
|
34
34
|
script,
|
|
35
35
|
args
|
|
@@ -58,11 +58,12 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
58
58
|
startActivity: 'mobileStartActivity',
|
|
59
59
|
broadcast: 'mobileBroadcast',
|
|
60
60
|
getContexts: 'mobileGetContexts',
|
|
61
|
-
unlock: 'mobileUnlock'
|
|
61
|
+
unlock: 'mobileUnlock',
|
|
62
|
+
refreshGpsCache: 'mobileRefreshGpsCache'
|
|
62
63
|
};
|
|
63
64
|
|
|
64
65
|
if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
|
|
65
|
-
throw new
|
|
66
|
+
throw new _baseDriver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
return await this[mobileCommandsMapping[mobileCommand]](opts);
|
|
@@ -72,4 +73,4 @@ var _default = extensions;
|
|
|
72
73
|
exports.default = _default;require('source-map-support').install();
|
|
73
74
|
|
|
74
75
|
|
|
75
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJleGVjdXRlIiwic2NyaXB0IiwiYXJncyIsIm1hdGNoIiwibG9nZ2VyIiwiaW5mbyIsInJlcGxhY2UiLCJ0cmltIiwiZXhlY3V0ZU1vYmlsZSIsIl8iLCJpc0FycmF5IiwiaXNXZWJDb250ZXh0IiwiZXJyb3JzIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsImVuZHBvaW50IiwiY2hyb21lZHJpdmVyIiwiandwcm94eSIsImRvd25zdHJlYW1Qcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJjb21tYW5kIiwibW9iaWxlQ29tbWFuZCIsIm9wdHMiLCJtb2JpbGVDb21tYW5kc01hcHBpbmciLCJzaGVsbCIsImV4ZWNFbXVDb25zb2xlQ29tbWFuZCIsInN0YXJ0TG9nc0Jyb2FkY2FzdCIsInN0b3BMb2dzQnJvYWRjYXN0IiwiY2hhbmdlUGVybWlzc2lvbnMiLCJnZXRQZXJtaXNzaW9ucyIsInBlcmZvcm1FZGl0b3JBY3Rpb24iLCJzZW5zb3JTZXQiLCJnZXREZXZpY2VUaW1lIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJkZWxldGVGaWxlIiwiY2xlYXJBcHAiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsInN0YXJ0QWN0aXZpdHkiLCJicm9hZGNhc3QiLCJnZXRDb250ZXh0cyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjs7QUFFQUEsVUFBVSxDQUFDQyxPQUFYLEdBQXFCLGVBQWVBLE9BQWYsQ0FBd0JDLE1BQXhCLEVBQWdDQyxJQUFoQyxFQUFzQztBQUN6RCxNQUFJRCxNQUFNLENBQUNFLEtBQVAsQ0FBYSxVQUFiLENBQUosRUFBOEI7QUFDNUJDLG9CQUFPQyxJQUFQLENBQWEsNkJBQTRCSixNQUFPLEdBQWhEOztBQUNBQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ssT0FBUCxDQUFlLFVBQWYsRUFBMkIsRUFBM0IsRUFBK0JDLElBQS9CLEVBQVQ7QUFDQSxXQUFPLE1BQU0sS0FBS0MsYUFBTCxDQUFtQlAsTUFBbkIsRUFBMkJRLGdCQUFFQyxPQUFGLENBQVVSLElBQVYsSUFBa0JBLElBQUksQ0FBQyxDQUFELENBQXRCLEdBQTRCQSxJQUF2RCxDQUFiO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDLEtBQUtTLFlBQUwsRUFBTCxFQUEwQjtBQUN4QixVQUFNLElBQUlDLG1CQUFPQyxtQkFBWCxFQUFOO0FBQ0Q7O0FBQ0QsUUFBTUMsUUFBUSxHQUFHLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxrQkFBMUIsS0FBaURDLHNCQUFVQyxPQUEzRCxHQUNiLFVBRGEsR0FFYixlQUZKO0FBR0EsU0FBTyxNQUFNLEtBQUtKLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCSSxPQUExQixDQUFrQ04sUUFBbEMsRUFBNEMsTUFBNUMsRUFBb0Q7QUFDL0RiLElBQUFBLE1BRCtEO0FBRS9EQyxJQUFBQTtBQUYrRCxHQUFwRCxDQUFiO0FBSUQsQ0FoQkQ7O0FBa0JBSCxVQUFVLENBQUNTLGFBQVgsR0FBMkIsZUFBZUEsYUFBZixDQUE4QmEsYUFBOUIsRUFBNkNDLElBQUksR0FBRyxFQUFwRCxFQUF3RDtBQUNqRixRQUFNQyxxQkFBcUIsR0FBRztBQUM1QkMsSUFBQUEsS0FBSyxFQUFFLGFBRHFCO0FBRzVCQyxJQUFBQSxxQkFBcUIsRUFBRSw2QkFISztBQUs1QkMsSUFBQUEsa0JBQWtCLEVBQUUsMEJBTFE7QUFNNUJDLElBQUFBLGlCQUFpQixFQUFFLHlCQU5TO0FBUTVCQyxJQUFBQSxpQkFBaUIsRUFBRSx5QkFSUztBQVM1QkMsSUFBQUEsY0FBYyxFQUFFLHNCQVRZO0FBVzVCQyxJQUFBQSxtQkFBbUIsRUFBRSwyQkFYTztBQWE1QkMsSUFBQUEsU0FBUyxFQUFFLFdBYmlCO0FBZTVCQyxJQUFBQSxhQUFhLEVBQUUscUJBZmE7QUFpQjVCQyxJQUFBQSxvQkFBb0IsRUFBRSw0QkFqQk07QUFrQjVCQyxJQUFBQSxtQkFBbUIsRUFBRSwyQkFsQk87QUFvQjVCQyxJQUFBQSxnQkFBZ0IsRUFBRSx3QkFwQlU7QUFzQjVCQyxJQUFBQSxPQUFPLEVBQUUsZUF0Qm1CO0FBd0I1QkMsSUFBQUEsVUFBVSxFQUFFLGtCQXhCZ0I7QUEwQjVCQyxJQUFBQSxRQUFRLEVBQUUsZ0JBMUJrQjtBQTRCNUJDLElBQUFBLFlBQVksRUFBRSxvQkE1QmM7QUE2QjVCQyxJQUFBQSxXQUFXLEVBQUUsbUJBN0JlO0FBOEI1QkMsSUFBQUEsYUFBYSxFQUFFLHFCQTlCYTtBQStCNUJDLElBQUFBLFNBQVMsRUFBRSxpQkEvQmlCO0FBaUM1QkMsSUFBQUEsV0FBVyxFQUFFLG1CQWpDZTtBQW1DNUJDLElBQUFBLE1BQU0sRUFBRSxjQW5Db0I7QUFxQzVCQyxJQUFBQSxlQUFlLEVBQUU7QUFyQ1csR0FBOUI7O0FBd0NBLE1BQUksQ0FBQ3BDLGdCQUFFcUMsR0FBRixDQUFNdkIscUJBQU4sRUFBNkJGLGFBQTdCLENBQUwsRUFBa0Q7QUFDaEQsVUFBTSxJQUFJVCxtQkFBT21DLG1CQUFYLENBQWdDLDJCQUEwQjFCLGFBQWMsS0FBekMsR0FDbEMsUUFBT1osZ0JBQUV1QyxJQUFGLENBQU96QixxQkFBUCxDQUE4QiwwQkFEbEMsQ0FBTjtBQUVEOztBQUNELFNBQU8sTUFBTSxLQUFLQSxxQkFBcUIsQ0FBQ0YsYUFBRCxDQUExQixFQUEyQ0MsSUFBM0MsQ0FBYjtBQUNELENBOUNEOztlQWdEZXZCLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzLCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxubGV0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICBsb2dnZXIuaW5mbyhgRXhlY3V0aW5nIG5hdGl2ZSBjb21tYW5kICcke3NjcmlwdH0nYCk7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQXG4gICAgPyAnL2V4ZWN1dGUnXG4gICAgOiAnL2V4ZWN1dGUvc3luYyc7XG4gIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHNjcmlwdCxcbiAgICBhcmdzLFxuICB9KTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBtb2JpbGVDb21tYW5kc01hcHBpbmcgPSB7XG4gICAgc2hlbGw6ICdtb2JpbGVTaGVsbCcsXG5cbiAgICBleGVjRW11Q29uc29sZUNvbW1hbmQ6ICdtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG4gIH07XG5cbiAgaWYgKCFfLmhhcyhtb2JpbGVDb21tYW5kc01hcHBpbmcsIG1vYmlsZUNvbW1hbmQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duQ29tbWFuZEVycm9yKGBVbmtub3duIG1vYmlsZSBjb21tYW5kIFwiJHttb2JpbGVDb21tYW5kfVwiLiBgICtcbiAgICAgIGBPbmx5ICR7Xy5rZXlzKG1vYmlsZUNvbW1hbmRzTWFwcGluZyl9IGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXNbbW9iaWxlQ29tbWFuZHNNYXBwaW5nW21vYmlsZUNvbW1hbmRdXShvcHRzKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9leGVjdXRlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|