testcafe 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/LICENSE +1 -1
- package/README.md +40 -46
- package/lib/api/test-controller/execution-context.js +4 -2
- package/lib/browser/connection/gateway.js +43 -1
- package/lib/browser/connection/index.js +24 -10
- package/lib/browser/connection/service-routes.js +3 -1
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +19 -5
- package/lib/browser/provider/index.js +4 -1
- package/lib/client/automation/deps/hammerhead.js +24 -0
- package/lib/client/automation/deps/testcafe-core.js +24 -0
- package/lib/client/automation/index.js +251 -54
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/automation/playback/press/get-key-info.js +44 -0
- package/lib/client/automation/playback/press/utils.js +142 -0
- package/lib/client/automation/utils/get-key-code.js +15 -0
- package/lib/client/automation/utils/get-key-identifier.js +14 -0
- package/lib/client/automation/utils/is-letter.js +7 -0
- package/lib/client/automation/utils/key-identifier-maps.js +93 -0
- package/lib/client/browser/idle-page/index.js +7 -2
- package/lib/client/core/index.js +46 -3
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/driver/index.js +45 -17
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/index.js.mustache +34 -30
- package/lib/client/ui/index.js +3230 -48
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +15 -0
- package/lib/client/ui/styles.css +183 -41
- package/lib/live/test-runner.js +4 -2
- package/lib/proxyless/api-base.js +3 -2
- package/lib/proxyless/client/event-descriptor.js +67 -0
- package/lib/proxyless/client/input.js +36 -0
- package/lib/proxyless/client/key-press/utils.js +31 -0
- package/lib/proxyless/client/types.js +1 -1
- package/lib/proxyless/client/utils.js +32 -2
- package/lib/proxyless/cookie-provider.js +31 -3
- package/lib/proxyless/errors.js +20 -0
- package/lib/proxyless/index.js +2 -10
- package/lib/proxyless/request-pipeline/index.js +32 -3
- package/lib/proxyless/resource-injector.js +5 -4
- package/lib/proxyless/types.js +3 -2
- package/lib/proxyless/utils/cdp.js +4 -3
- package/lib/reporter/index.js +2 -1
- package/lib/runner/bootstrapper.js +8 -1
- package/lib/runner/index.js +57 -44
- package/lib/shared/utils/is-file-protocol.js +2 -2
- package/lib/test-run/commands/actions.js +2 -2
- package/lib/test-run/cookies/base.js +4 -1
- package/lib/test-run/cookies/provider.js +9 -2
- package/lib/test-run/execute-js-expression/index.js +4 -2
- package/lib/test-run/index.js +17 -12
- package/lib/test-run/request/create-request-options.js +23 -12
- package/lib/test-run/request/send.js +2 -3
- package/lib/utils/check-is-vm.js +58 -0
- package/package.json +9 -6
- package/lib/proxyless/client/event-simulator.js +0 -40
|
@@ -8,4 +8,4 @@ var KeyModifierValues;
|
|
|
8
8
|
KeyModifierValues[KeyModifierValues["meta"] = 4] = "meta";
|
|
9
9
|
KeyModifierValues[KeyModifierValues["shift"] = 8] = "shift";
|
|
10
10
|
})(KeyModifierValues = exports.KeyModifierValues || (exports.KeyModifierValues = {}));
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJveHlsZXNzL2NsaWVudC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDekIsdURBQUssQ0FBQTtJQUNMLHlEQUFNLENBQUE7SUFDTix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtBQUNYLENBQUMsRUFMVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUs1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgS2V5TW9kaWZpZXJzIHtcbiAgICBjdHJsPzogYm9vbGVhbjtcbiAgICBhbHQ/
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJveHlsZXNzL2NsaWVudC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDekIsdURBQUssQ0FBQTtJQUNMLHlEQUFNLENBQUE7SUFDTix5REFBTSxDQUFBO0lBQ04sMkRBQU8sQ0FBQTtBQUNYLENBQUMsRUFMVyxpQkFBaUIsR0FBakIseUJBQWlCLEtBQWpCLHlCQUFpQixRQUs1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgS2V5TW9kaWZpZXJzIHtcbiAgICBjdHJsPzogYm9vbGVhbjtcbiAgICBhbHQ/OiBib29sZWFuO1xuICAgIHNoaWZ0PzogYm9vbGVhbjtcbiAgICBtZXRhPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gS2V5TW9kaWZpZXJWYWx1ZXMge1xuICAgIGFsdD0xLFxuICAgIGN0cmw9MixcbiAgICBtZXRhPTQsXG4gICAgc2hpZnQ9OFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc3BhdGNoRXZlbnRGbiB7XG4gICAgc2luZ2xlOiBGdW5jdGlvbjtcbiAgICBzZXF1ZW5jZTogRnVuY3Rpb247XG59XG4iXX0=
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateMouseButtonValue = exports.calculateKeyModifiersValue = void 0;
|
|
3
|
+
exports.calculateMouseButtonValue = exports.getModifiersBit = exports.getModifiersState = exports.calculateKeyModifiersValue = void 0;
|
|
4
4
|
const types_1 = require("./types");
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
const hammerhead_1 = require("../../client/core/deps/hammerhead");
|
|
7
|
+
const EMPTY_MODIFIERS = {
|
|
8
|
+
ctrl: false,
|
|
9
|
+
alt: false,
|
|
10
|
+
shift: false,
|
|
11
|
+
meta: false,
|
|
12
|
+
};
|
|
5
13
|
function calculateKeyModifiersValue(modifiers) {
|
|
6
14
|
let result = 0;
|
|
15
|
+
if (!modifiers)
|
|
16
|
+
return result;
|
|
7
17
|
if (modifiers.ctrl)
|
|
8
18
|
result |= types_1.KeyModifierValues.ctrl;
|
|
9
19
|
if (modifiers.alt)
|
|
@@ -15,10 +25,30 @@ function calculateKeyModifiersValue(modifiers) {
|
|
|
15
25
|
return result;
|
|
16
26
|
}
|
|
17
27
|
exports.calculateKeyModifiersValue = calculateKeyModifiersValue;
|
|
28
|
+
function getModifiersState(modifiersBit) {
|
|
29
|
+
const modifiers = hammerhead_1.utils.extend({}, EMPTY_MODIFIERS);
|
|
30
|
+
if (!modifiersBit)
|
|
31
|
+
return modifiers;
|
|
32
|
+
if (modifiersBit & types_1.KeyModifierValues.ctrl)
|
|
33
|
+
modifiers.ctrl = true;
|
|
34
|
+
if (modifiersBit & types_1.KeyModifierValues.alt)
|
|
35
|
+
modifiers.alt = true;
|
|
36
|
+
if (modifiersBit & types_1.KeyModifierValues.shift)
|
|
37
|
+
modifiers.shift = true;
|
|
38
|
+
if (modifiersBit & types_1.KeyModifierValues.meta)
|
|
39
|
+
modifiers.meta = true;
|
|
40
|
+
return modifiers;
|
|
41
|
+
}
|
|
42
|
+
exports.getModifiersState = getModifiersState;
|
|
43
|
+
function getModifiersBit(key) {
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
return types_1.KeyModifierValues[key] || 0;
|
|
46
|
+
}
|
|
47
|
+
exports.getModifiersBit = getModifiersBit;
|
|
18
48
|
function calculateMouseButtonValue(options) {
|
|
19
49
|
if (!options.button)
|
|
20
50
|
return 'left';
|
|
21
51
|
return 'right';
|
|
22
52
|
}
|
|
23
53
|
exports.calculateMouseButtonValue = calculateMouseButtonValue;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJveHlsZXNzL2NsaWVudC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBMEQ7QUFHMUQsYUFBYTtBQUNiLGtFQUEwRDtBQUUxRCxNQUFNLGVBQWUsR0FBRztJQUNwQixJQUFJLEVBQUcsS0FBSztJQUNaLEdBQUcsRUFBSSxLQUFLO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixJQUFJLEVBQUcsS0FBSztDQUNmLENBQUM7QUFFRixTQUFnQiwwQkFBMEIsQ0FBRSxTQUF3QjtJQUNoRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFZixJQUFJLENBQUMsU0FBUztRQUNWLE9BQU8sTUFBTSxDQUFDO0lBRWxCLElBQUksU0FBUyxDQUFDLElBQUk7UUFDZCxNQUFNLElBQUkseUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3JDLElBQUksU0FBUyxDQUFDLEdBQUc7UUFDYixNQUFNLElBQUkseUJBQWlCLENBQUMsR0FBRyxDQUFDO0lBQ3BDLElBQUksU0FBUyxDQUFDLEtBQUs7UUFDZixNQUFNLElBQUkseUJBQWlCLENBQUMsS0FBSyxDQUFDO0lBQ3RDLElBQUksU0FBUyxDQUFDLElBQUk7UUFDZCxNQUFNLElBQUkseUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBRXJDLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFoQkQsZ0VBZ0JDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUUsWUFBcUI7SUFDcEQsTUFBTSxTQUFTLEdBQUcsa0JBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBaUIsQ0FBQztJQUVwRSxJQUFJLENBQUMsWUFBWTtRQUNiLE9BQU8sU0FBUyxDQUFDO0lBRXJCLElBQUksWUFBWSxHQUFHLHlCQUFpQixDQUFDLElBQUk7UUFDckMsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDMUIsSUFBSSxZQUFZLEdBQUcseUJBQWlCLENBQUMsR0FBRztRQUNwQyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUN6QixJQUFJLFlBQVksR0FBRyx5QkFBaUIsQ0FBQyxLQUFLO1FBQ3RDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQzNCLElBQUksWUFBWSxHQUFHLHlCQUFpQixDQUFDLElBQUk7UUFDckMsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFFMUIsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQWhCRCw4Q0FnQkM7QUFFRCxTQUFnQixlQUFlLENBQUUsR0FBVztJQUN4QyxhQUFhO0lBQ2IsT0FBTyx5QkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUhELDBDQUdDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUUsT0FBWTtJQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07UUFDZixPQUFPLE1BQU0sQ0FBQztJQUVsQixPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBTEQsOERBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlNb2RpZmllcnMsIEtleU1vZGlmaWVyVmFsdWVzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IE1vdXNlQnV0dG9uID0gUHJvdG9jb2wuSW5wdXQuTW91c2VCdXR0b247XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJy4uLy4uL2NsaWVudC9jb3JlL2RlcHMvaGFtbWVyaGVhZCc7XG5cbmNvbnN0IEVNUFRZX01PRElGSUVSUyA9IHtcbiAgICBjdHJsOiAgZmFsc2UsXG4gICAgYWx0OiAgIGZhbHNlLFxuICAgIHNoaWZ0OiBmYWxzZSxcbiAgICBtZXRhOiAgZmFsc2UsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlS2V5TW9kaWZpZXJzVmFsdWUgKG1vZGlmaWVycz86IEtleU1vZGlmaWVycyk6IG51bWJlciB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG5cbiAgICBpZiAoIW1vZGlmaWVycylcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGlmIChtb2RpZmllcnMuY3RybClcbiAgICAgICAgcmVzdWx0IHw9IEtleU1vZGlmaWVyVmFsdWVzLmN0cmw7XG4gICAgaWYgKG1vZGlmaWVycy5hbHQpXG4gICAgICAgIHJlc3VsdCB8PSBLZXlNb2RpZmllclZhbHVlcy5hbHQ7XG4gICAgaWYgKG1vZGlmaWVycy5zaGlmdClcbiAgICAgICAgcmVzdWx0IHw9IEtleU1vZGlmaWVyVmFsdWVzLnNoaWZ0O1xuICAgIGlmIChtb2RpZmllcnMubWV0YSlcbiAgICAgICAgcmVzdWx0IHw9IEtleU1vZGlmaWVyVmFsdWVzLm1ldGE7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kaWZpZXJzU3RhdGUgKG1vZGlmaWVyc0JpdD86IG51bWJlcik6IEtleU1vZGlmaWVycyB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gdXRpbHMuZXh0ZW5kKHt9LCBFTVBUWV9NT0RJRklFUlMpIGFzIEtleU1vZGlmaWVycztcblxuICAgIGlmICghbW9kaWZpZXJzQml0KVxuICAgICAgICByZXR1cm4gbW9kaWZpZXJzO1xuXG4gICAgaWYgKG1vZGlmaWVyc0JpdCAmIEtleU1vZGlmaWVyVmFsdWVzLmN0cmwpXG4gICAgICAgIG1vZGlmaWVycy5jdHJsID0gdHJ1ZTtcbiAgICBpZiAobW9kaWZpZXJzQml0ICYgS2V5TW9kaWZpZXJWYWx1ZXMuYWx0KVxuICAgICAgICBtb2RpZmllcnMuYWx0ID0gdHJ1ZTtcbiAgICBpZiAobW9kaWZpZXJzQml0ICYgS2V5TW9kaWZpZXJWYWx1ZXMuc2hpZnQpXG4gICAgICAgIG1vZGlmaWVycy5zaGlmdCA9IHRydWU7XG4gICAgaWYgKG1vZGlmaWVyc0JpdCAmIEtleU1vZGlmaWVyVmFsdWVzLm1ldGEpXG4gICAgICAgIG1vZGlmaWVycy5tZXRhID0gdHJ1ZTtcblxuICAgIHJldHVybiBtb2RpZmllcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmllcnNCaXQgKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIEtleU1vZGlmaWVyVmFsdWVzW2tleV0gfHwgMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZU1vdXNlQnV0dG9uVmFsdWUgKG9wdGlvbnM6IGFueSk6IE1vdXNlQnV0dG9uIHtcbiAgICBpZiAoIW9wdGlvbnMuYnV0dG9uKVxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuXG4gICAgcmV0dXJuICdyaWdodCc7XG59XG4iXX0=
|
|
@@ -8,6 +8,8 @@ const url_1 = require("url");
|
|
|
8
8
|
const base_1 = require("../test-run/cookies/base");
|
|
9
9
|
const match_collection_1 = __importDefault(require("../utils/match-collection"));
|
|
10
10
|
const get_active_client_1 = require("./utils/get-active-client");
|
|
11
|
+
const set_cookie_parser_1 = require("set-cookie-parser");
|
|
12
|
+
const lodash_1 = require("lodash");
|
|
11
13
|
const MAX_TIMESTAMP = 8640000000000000;
|
|
12
14
|
class CdpCookieProvider extends base_1.CookieProviderBase {
|
|
13
15
|
async _getCdpClient() {
|
|
@@ -25,8 +27,12 @@ class CdpCookieProvider extends base_1.CookieProviderBase {
|
|
|
25
27
|
async setCookies(cookies, url) {
|
|
26
28
|
const client = await this._getCdpClient();
|
|
27
29
|
const { hostname = '', pathname = '/' } = url ? new url_1.URL(url) : {};
|
|
30
|
+
const cookiesArray = (0, lodash_1.castArray)(cookies);
|
|
31
|
+
const parsedCookies = this._isCookieOptionsArray(cookiesArray)
|
|
32
|
+
? cookiesArray
|
|
33
|
+
: this._parseSetCookieStrings(cookiesArray);
|
|
28
34
|
await client.Network.setCookies({
|
|
29
|
-
cookies:
|
|
35
|
+
cookies: parsedCookies.map(cookie => this._cookieOptionToCdpCookieParam(cookie, hostname, pathname)),
|
|
30
36
|
});
|
|
31
37
|
}
|
|
32
38
|
async deleteCookies(cookies = [], urls = []) {
|
|
@@ -42,13 +48,19 @@ class CdpCookieProvider extends base_1.CookieProviderBase {
|
|
|
42
48
|
existingCookies = (0, match_collection_1.default)(existingCookies, cookies);
|
|
43
49
|
for (const cookie of existingCookies) {
|
|
44
50
|
await client.Network.deleteCookies({
|
|
45
|
-
name: cookie.name,
|
|
51
|
+
name: cookie.name || '',
|
|
46
52
|
domain: cookie.domain,
|
|
47
53
|
path: cookie.path,
|
|
48
54
|
});
|
|
49
55
|
}
|
|
50
56
|
return void 0;
|
|
51
57
|
}
|
|
58
|
+
async getCookieHeader(url) {
|
|
59
|
+
const [{ domain, path }] = this._parseUrls([url]);
|
|
60
|
+
const cookies = await this.getCookies([{ domain }]);
|
|
61
|
+
const filteredCookies = cookies.filter(c => this._includesPath(c.path || '/', path));
|
|
62
|
+
return filteredCookies.map(c => `${c.name}=${c.value}`).join(';');
|
|
63
|
+
}
|
|
52
64
|
_cdpCookieToExternalCookie(cookie) {
|
|
53
65
|
var _a;
|
|
54
66
|
return {
|
|
@@ -82,6 +94,22 @@ class CdpCookieProvider extends base_1.CookieProviderBase {
|
|
|
82
94
|
return { domain: hostname, path: pathname };
|
|
83
95
|
});
|
|
84
96
|
}
|
|
97
|
+
_includesPath(cookiePath, urlPath) {
|
|
98
|
+
if (cookiePath === '/')
|
|
99
|
+
return true;
|
|
100
|
+
const cookieParts = cookiePath.split('/');
|
|
101
|
+
const urlParts = urlPath.split('/');
|
|
102
|
+
if (cookieParts.length > urlParts.length)
|
|
103
|
+
return false;
|
|
104
|
+
while (cookieParts.length) {
|
|
105
|
+
if (cookieParts.shift() !== urlParts.shift())
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
_parseSetCookieStrings(cookies) {
|
|
111
|
+
return (0, set_cookie_parser_1.parse)(cookies);
|
|
112
|
+
}
|
|
85
113
|
}
|
|
86
114
|
exports.CdpCookieProvider = CdpCookieProvider;
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3h5bGVzcy9jb29raWUtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsNkJBQTBCO0FBRTFCLG1EQUE4RTtBQUU5RSxpRkFBd0Q7QUFDeEQsaUVBQTREO0FBSTVELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDO0FBRXZDLE1BQWEsaUJBQWtCLFNBQVEseUJBQWtCO0lBQzdDLEtBQUssQ0FBQyxhQUFhO1FBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUV6RCxPQUFPLElBQUEsbUNBQWUsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFFLGVBQWtDO1FBQ2hELE1BQU0sTUFBTSxHQUFRLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQy9DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhELE9BQVEsSUFBQSwwQkFBZSxFQUFDLE9BQU8sRUFBRSxlQUFlLENBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUUsT0FBd0IsRUFBRSxHQUFXO1FBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLE1BQU0sRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFbEUsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM1QixPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2pHLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFFLFVBQTJCLEVBQUUsRUFBRSxPQUFpQixFQUFFO1FBQ25FLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUMzQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVoRCxNQUFNLFVBQVUsR0FBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsZUFBZSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVO2lCQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMvRTtRQUVELGVBQWUsR0FBRyxJQUFBLDBCQUFlLEVBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBc0IsQ0FBQztRQUVqRixLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFBRTtZQUNsQyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO2dCQUMvQixJQUFJLEVBQUksTUFBTSxDQUFDLElBQUk7Z0JBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtnQkFDckIsSUFBSSxFQUFJLE1BQU0sQ0FBQyxJQUFJO2FBQ3RCLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRU8sMEJBQTBCLENBQUUsTUFBYzs7UUFDOUMsT0FBTztZQUNILElBQUksRUFBTSxNQUFNLENBQUMsSUFBSTtZQUNyQixLQUFLLEVBQUssTUFBTSxDQUFDLEtBQUs7WUFDdEIsTUFBTSxFQUFJLE1BQU0sQ0FBQyxNQUFNO1lBQ3ZCLE1BQU0sRUFBSSxLQUFLLENBQUM7WUFDaEIsSUFBSSxFQUFNLE1BQU0sQ0FBQyxJQUFJO1lBQ3JCLE9BQU8sRUFBRyxLQUFLLENBQUM7WUFDaEIsTUFBTSxFQUFJLE1BQU0sQ0FBQyxNQUFNO1lBQ3ZCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixRQUFRLEVBQUUsTUFBQSxNQUFNLENBQUMsUUFBUSxtQ0FBSSxNQUFNO1NBQ1IsQ0FBQztJQUNwQyxDQUFDO0lBRU8sNkJBQTZCLENBQUUsTUFBcUIsRUFBRSxRQUFnQixFQUFFLFFBQWdCOztRQUM1RixPQUFPO1lBQ0gsSUFBSSxFQUFNLE1BQU0sQ0FBQyxJQUFJO1lBQ3JCLEtBQUssRUFBSyxNQUFNLENBQUMsS0FBSztZQUN0QixNQUFNLEVBQUksTUFBQSxNQUFNLENBQUMsTUFBTSxtQ0FBSSxRQUFRO1lBQ25DLElBQUksRUFBTSxNQUFBLE1BQU0sQ0FBQyxJQUFJLG1DQUFJLFFBQVE7WUFDakMsTUFBTSxFQUFJLE1BQU0sQ0FBQyxNQUFNO1lBQ3ZCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUEwQjtZQUMzQyxPQUFPLEVBQUcsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxPQUFPLDBDQUFFLE9BQU8sRUFBRSxLQUFJLGFBQWE7U0FDdkQsQ0FBQztJQUNOLENBQUM7SUFFTyxVQUFVLENBQUUsSUFBYztRQUM5QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLFNBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUF4RkQsOENBd0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlbW90ZUNocm9tZSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHRlcm5hbENvb2tpZXMgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgQ29va2llID0gUHJvdG9jb2wuTmV0d29yay5Db29raWU7XG5pbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgQ29va2llT3B0aW9ucyB9IGZyb20gJy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29wdGlvbnMnO1xuaW1wb3J0IHsgQ29va2llUHJvdmlkZXIsIENvb2tpZVByb3ZpZGVyQmFzZSB9IGZyb20gJy4uL3Rlc3QtcnVuL2Nvb2tpZXMvYmFzZSc7XG5pbXBvcnQgQ29va2llUGFyYW0gPSBQcm90b2NvbC5OZXR3b3JrLkNvb2tpZVBhcmFtO1xuaW1wb3J0IG1hdGNoQ29sbGVjdGlvbiBmcm9tICcuLi91dGlscy9tYXRjaC1jb2xsZWN0aW9uJztcbmltcG9ydCB7IGdldEFjdGl2ZUNsaWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0LWFjdGl2ZS1jbGllbnQnO1xuXG5kZWNsYXJlIHR5cGUgQ29va2llU2FtZVNpdGUgPSAnTGF4JyB8ICdTdHJpY3QnIHwgJ05vbmUnO1xuXG5jb25zdCBNQVhfVElNRVNUQU1QID0gODY0MDAwMDAwMDAwMDAwMDtcblxuZXhwb3J0IGNsYXNzIENkcENvb2tpZVByb3ZpZGVyIGV4dGVuZHMgQ29va2llUHJvdmlkZXJCYXNlIGltcGxlbWVudHMgQ29va2llUHJvdmlkZXIge1xuICAgIHByaXZhdGUgYXN5bmMgX2dldENkcENsaWVudCAoKTogUHJvbWlzZTxyZW1vdGVDaHJvbWUuUHJvdG9jb2xBcGk+IHtcbiAgICAgICAgY29uc3QgYnJvd3NlckNvbm5lY3Rpb24gPSB0aGlzLnRlc3RSdW4uYnJvd3NlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGdldEFjdGl2ZUNsaWVudChicm93c2VyQ29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNvb2tpZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb29raWVzIChleHRlcm5hbENvb2tpZXM6IEV4dGVybmFsQ29va2llc1tdKTogUHJvbWlzZTxFeHRlcm5hbENvb2tpZXNbXT4ge1xuICAgICAgICBjb25zdCBjbGllbnQgICAgICA9IGF3YWl0IHRoaXMuX2dldENkcENsaWVudCgpO1xuICAgICAgICBjb25zdCB7IGNvb2tpZXMgfSA9IGF3YWl0IGNsaWVudC5TdG9yYWdlLmdldENvb2tpZXMoe30pO1xuXG4gICAgICAgIHJldHVybiAobWF0Y2hDb2xsZWN0aW9uKGNvb2tpZXMsIGV4dGVybmFsQ29va2llcykgYXMgQ29va2llW10pLm1hcCh0aGlzLl9jZHBDb29raWVUb0V4dGVybmFsQ29va2llKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRDb29raWVzIChjb29raWVzOiBDb29raWVPcHRpb25zW10sIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuX2dldENkcENsaWVudCgpO1xuICAgICAgICBjb25zdCB7IGhvc3RuYW1lID0gJycsIHBhdGhuYW1lID0gJy8nIH0gPSB1cmwgPyBuZXcgVVJMKHVybCkgOiB7fTtcblxuICAgICAgICBhd2FpdCBjbGllbnQuTmV0d29yay5zZXRDb29raWVzKHtcbiAgICAgICAgICAgIGNvb2tpZXM6IGNvb2tpZXMubWFwKGNvb2tpZSA9PiB0aGlzLl9jb29raWVPcHRpb25Ub0NkcENvb2tpZVBhcmFtKGNvb2tpZSwgaG9zdG5hbWUsIHBhdGhuYW1lKSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZUNvb2tpZXMgKGNvb2tpZXM6IENvb2tpZU9wdGlvbnNbXSA9IFtdLCB1cmxzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuX2dldENkcENsaWVudCgpO1xuXG4gICAgICAgIGlmICghY29va2llcyB8fCAhY29va2llcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gY2xpZW50Lk5ldHdvcmsuY2xlYXJCcm93c2VyQ29va2llcygpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZFVybHMgICAgPSB0aGlzLl9wYXJzZVVybHModXJscyk7XG4gICAgICAgIGxldCBleGlzdGluZ0Nvb2tpZXMgPSBhd2FpdCB0aGlzLmdldENvb2tpZXMoW10pO1xuXG4gICAgICAgIGlmIChwYXJzZWRVcmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXhpc3RpbmdDb29raWVzID0gZXhpc3RpbmdDb29raWVzLmZpbHRlcihjb29raWUgPT4gcGFyc2VkVXJsc1xuICAgICAgICAgICAgICAgIC5maW5kKHVybCA9PiB1cmwuZG9tYWluID09PSBjb29raWUuZG9tYWluICYmIHVybC5wYXRoID09PSBjb29raWUucGF0aCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhpc3RpbmdDb29raWVzID0gbWF0Y2hDb2xsZWN0aW9uKGV4aXN0aW5nQ29va2llcywgY29va2llcykgYXMgRXh0ZXJuYWxDb29raWVzW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjb29raWUgb2YgZXhpc3RpbmdDb29raWVzKSB7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuTmV0d29yay5kZWxldGVDb29raWVzKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAgIGNvb2tpZS5uYW1lLFxuICAgICAgICAgICAgICAgIGRvbWFpbjogY29va2llLmRvbWFpbixcbiAgICAgICAgICAgICAgICBwYXRoOiAgIGNvb2tpZS5wYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NkcENvb2tpZVRvRXh0ZXJuYWxDb29raWUgKGNvb2tpZTogQ29va2llKTogRXh0ZXJuYWxDb29raWVzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICAgICBjb29raWUubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiAgICBjb29raWUudmFsdWUsXG4gICAgICAgICAgICBkb21haW46ICAgY29va2llLmRvbWFpbixcbiAgICAgICAgICAgIG1heEFnZTogICB2b2lkIDAsXG4gICAgICAgICAgICBwYXRoOiAgICAgY29va2llLnBhdGgsXG4gICAgICAgICAgICBleHBpcmVzOiAgdm9pZCAwLFxuICAgICAgICAgICAgc2VjdXJlOiAgIGNvb2tpZS5zZWN1cmUsXG4gICAgICAgICAgICBodHRwT25seTogY29va2llLmh0dHBPbmx5LFxuICAgICAgICAgICAgc2FtZVNpdGU6IGNvb2tpZS5zYW1lU2l0ZSA/PyAnbm9uZScsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBFeHRlcm5hbENvb2tpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29va2llT3B0aW9uVG9DZHBDb29raWVQYXJhbSAoY29va2llOiBDb29raWVPcHRpb25zLCBob3N0bmFtZTogc3RyaW5nLCBwYXRobmFtZTogc3RyaW5nKTogQ29va2llUGFyYW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogICAgIGNvb2tpZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6ICAgIGNvb2tpZS52YWx1ZSxcbiAgICAgICAgICAgIGRvbWFpbjogICBjb29raWUuZG9tYWluID8/IGhvc3RuYW1lLFxuICAgICAgICAgICAgcGF0aDogICAgIGNvb2tpZS5wYXRoID8/IHBhdGhuYW1lLFxuICAgICAgICAgICAgc2VjdXJlOiAgIGNvb2tpZS5zZWN1cmUsXG4gICAgICAgICAgICBodHRwT25seTogZmFsc2UsXG4gICAgICAgICAgICBzYW1lU2l0ZTogY29va2llLnNhbWVTaXRlIGFzIENvb2tpZVNhbWVTaXRlLFxuICAgICAgICAgICAgZXhwaXJlczogIGNvb2tpZS5leHBpcmVzPy5nZXRUaW1lKCkgfHwgTUFYX1RJTUVTVEFNUCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZVVybHMgKHVybHM6IHN0cmluZ1tdKTogeyBkb21haW46IHN0cmluZywgcGF0aDogc3RyaW5nIH1bXSB7XG4gICAgICAgIHJldHVybiB1cmxzLm1hcCh1cmwgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgZG9tYWluOiBob3N0bmFtZSwgcGF0aDogcGF0aG5hbWUgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3h5bGVzcy9jb29raWUtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsNkJBQTBCO0FBRTFCLG1EQUE4RTtBQUU5RSxpRkFBd0Q7QUFDeEQsaUVBQTREO0FBQzVELHlEQUEwQztBQUMxQyxtQ0FBbUM7QUFJbkMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7QUFFdkMsTUFBYSxpQkFBa0IsU0FBUSx5QkFBa0I7SUFDN0MsS0FBSyxDQUFDLGFBQWE7UUFDdkIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBRXpELE9BQU8sSUFBQSxtQ0FBZSxFQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUUsZUFBa0M7UUFDaEQsTUFBTSxNQUFNLEdBQVEsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEQsT0FBUSxJQUFBLDBCQUFlLEVBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBRSxPQUE0QyxFQUFFLEdBQVc7UUFDdkUsTUFBTSxNQUFNLEdBQThCLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENB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LENBQUUsVUFBa0IsRUFBRSxPQUFlO1FBQ3RELElBQUksVUFBVSxLQUFLLEdBQUc7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFFaEIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTTtZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUVqQixPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDeEMsT0FBTyxLQUFLLENBQUM7U0FDcEI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sc0JBQXNCLENBQUUsT0FBaUI7UUFDN0MsT0FBTyxJQUFBLHlCQUFLLEVBQUMsT0FBTyxDQUFvQixDQUFDO0lBQzdDLENBQUM7Q0FDSjtBQTNIRCw4Q0EySEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVtb3RlQ2hyb21lIGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4dGVybmFsQ29va2llcyB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBDb29raWUgPSBQcm90b2NvbC5OZXR3b3JrLkNvb2tpZTtcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBDb29raWVQcm92aWRlciwgQ29va2llUHJvdmlkZXJCYXNlIH0gZnJvbSAnLi4vdGVzdC1ydW4vY29va2llcy9iYXNlJztcbmltcG9ydCBDb29raWVQYXJhbSA9IFByb3RvY29sLk5ldHdvcmsuQ29va2llUGFyYW07XG5pbXBvcnQgbWF0Y2hDb2xsZWN0aW9uIGZyb20gJy4uL3V0aWxzL21hdGNoLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgZ2V0QWN0aXZlQ2xpZW50IH0gZnJvbSAnLi91dGlscy9nZXQtYWN0aXZlLWNsaWVudCc7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ3NldC1jb29raWUtcGFyc2VyJztcbmltcG9ydCB7IGNhc3RBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5cbmRlY2xhcmUgdHlwZSBDb29raWVTYW1lU2l0ZSA9ICdMYXgnIHwgJ1N0cmljdCcgfCAnTm9uZSc7XG5cbmNvbnN0IE1BWF9USU1FU1RBTVAgPSA4NjQwMDAwMDAwMDAwMDAwO1xuXG5leHBvcnQgY2xhc3MgQ2RwQ29va2llUHJvdmlkZXIgZXh0ZW5kcyBDb29raWVQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDb29raWVQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0Q2RwQ2xpZW50ICgpOiBQcm9taXNlPHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaT4ge1xuICAgICAgICBjb25zdCBicm93c2VyQ29ubmVjdGlvbiA9IHRoaXMudGVzdFJ1bi5icm93c2VyQ29ubmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gZ2V0QWN0aXZlQ2xpZW50KGJyb3dzZXJDb25uZWN0aW9uKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0aWFsaXplICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ29va2llcygpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvb2tpZXMgKGV4dGVybmFsQ29va2llczogRXh0ZXJuYWxDb29raWVzW10pOiBQcm9taXNlPEV4dGVybmFsQ29va2llc1tdPiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCAgICAgID0gYXdhaXQgdGhpcy5fZ2V0Q2RwQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHsgY29va2llcyB9ID0gYXdhaXQgY2xpZW50LlN0b3JhZ2UuZ2V0Q29va2llcyh7fSk7XG5cbiAgICAgICAgcmV0dXJuIChtYXRjaENvbGxlY3Rpb24oY29va2llcywgZXh0ZXJuYWxDb29raWVzKSBhcyBDb29raWVbXSkubWFwKHRoaXMuX2NkcENvb2tpZVRvRXh0ZXJuYWxDb29raWUpO1xuICAgIH1cblxuICAgIGFzeW5jIHNldENvb2tpZXMgKGNvb2tpZXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgQ29va2llT3B0aW9uc1tdLCB1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhd2FpdCB0aGlzLl9nZXRDZHBDbGllbnQoKTtcbiAgICAgICAgY29uc3QgeyBob3N0bmFtZSA9ICcnLCBwYXRobmFtZSA9ICcvJyB9ID0gdXJsID8gbmV3IFVSTCh1cmwpIDoge307XG4gICAgICAgIGNvbnN0IGNvb2tpZXNBcnJheSAgICAgICAgICAgICAgICAgICAgICA9IGNhc3RBcnJheTxzdHJpbmcgfCBDb29raWVPcHRpb25zPihjb29raWVzKTtcblxuICAgICAgICBjb25zdCBwYXJzZWRDb29raWVzID0gdGhpcy5faXNDb29raWVPcHRpb25zQXJyYXkoY29va2llc0FycmF5KVxuICAgICAgICAgICAgPyBjb29raWVzQXJyYXlcbiAgICAgICAgICAgIDogdGhpcy5fcGFyc2VTZXRDb29raWVTdHJpbmdzKGNvb2tpZXNBcnJheSBhcyBzdHJpbmdbXSk7XG5cbiAgICAgICAgYXdhaXQgY2xpZW50Lk5ldHdvcmsuc2V0Q29va2llcyh7XG4gICAgICAgICAgICBjb29raWVzOiBwYXJzZWRDb29raWVzLm1hcChjb29raWUgPT4gdGhpcy5fY29va2llT3B0aW9uVG9DZHBDb29raWVQYXJhbShjb29raWUsIGhvc3RuYW1lLCBwYXRobmFtZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGVDb29raWVzIChjb29raWVzOiBDb29raWVPcHRpb25zW10gPSBbXSwgdXJsczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLl9nZXRDZHBDbGllbnQoKTtcblxuICAgICAgICBpZiAoIWNvb2tpZXMgfHwgIWNvb2tpZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5OZXR3b3JrLmNsZWFyQnJvd3NlckNvb2tpZXMoKTtcblxuICAgICAgICBjb25zdCBwYXJzZWRVcmxzICAgID0gdGhpcy5fcGFyc2VVcmxzKHVybHMpO1xuICAgICAgICBsZXQgZXhpc3RpbmdDb29raWVzID0gYXdhaXQgdGhpcy5nZXRDb29raWVzKFtdKTtcblxuICAgICAgICBpZiAocGFyc2VkVXJscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nQ29va2llcyA9IGV4aXN0aW5nQ29va2llcy5maWx0ZXIoY29va2llID0+IHBhcnNlZFVybHNcbiAgICAgICAgICAgICAgICAuZmluZCh1cmwgPT4gdXJsLmRvbWFpbiA9PT0gY29va2llLmRvbWFpbiAmJiB1cmwucGF0aCA9PT0gY29va2llLnBhdGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4aXN0aW5nQ29va2llcyA9IG1hdGNoQ29sbGVjdGlvbihleGlzdGluZ0Nvb2tpZXMsIGNvb2tpZXMpIGFzIEV4dGVybmFsQ29va2llc1tdO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29va2llIG9mIGV4aXN0aW5nQ29va2llcykge1xuICAgICAgICAgICAgYXdhaXQgY2xpZW50Lk5ldHdvcmsuZGVsZXRlQ29va2llcyh7XG4gICAgICAgICAgICAgICAgbmFtZTogICBjb29raWUubmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBkb21haW46IGNvb2tpZS5kb21haW4sXG4gICAgICAgICAgICAgICAgcGF0aDogICBjb29raWUucGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb29raWVIZWFkZXIgKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IFt7IGRvbWFpbiwgcGF0aCB9XSA9IHRoaXMuX3BhcnNlVXJscyhbdXJsXSk7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgICAgICAgICAgICA9IGF3YWl0IHRoaXMuZ2V0Q29va2llcyhbeyBkb21haW4gfV0pO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvb2tpZXMgICAgPSBjb29raWVzLmZpbHRlcihjID0+IHRoaXMuX2luY2x1ZGVzUGF0aChjLnBhdGggfHwgJy8nLCBwYXRoKSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llcy5tYXAoYyA9PiBgJHsgYy5uYW1lIH09JHsgYy52YWx1ZSB9YCkuam9pbignOycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NkcENvb2tpZVRvRXh0ZXJuYWxDb29raWUgKGNvb2tpZTogQ29va2llKTogRXh0ZXJuYWxDb29raWVzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6ICAgICBjb29raWUubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiAgICBjb29raWUudmFsdWUsXG4gICAgICAgICAgICBkb21haW46ICAgY29va2llLmRvbWFpbixcbiAgICAgICAgICAgIG1heEFnZTogICB2b2lkIDAsXG4gICAgICAgICAgICBwYXRoOiAgICAgY29va2llLnBhdGgsXG4gICAgICAgICAgICBleHBpcmVzOiAgdm9pZCAwLFxuICAgICAgICAgICAgc2VjdXJlOiAgIGNvb2tpZS5zZWN1cmUsXG4gICAgICAgICAgICBodHRwT25seTogY29va2llLmh0dHBPbmx5LFxuICAgICAgICAgICAgc2FtZVNpdGU6IGNvb2tpZS5zYW1lU2l0ZSA/PyAnbm9uZScsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBFeHRlcm5hbENvb2tpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29va2llT3B0aW9uVG9DZHBDb29raWVQYXJhbSAoY29va2llOiBDb29raWVPcHRpb25zLCBob3N0bmFtZTogc3RyaW5nLCBwYXRobmFtZTogc3RyaW5nKTogQ29va2llUGFyYW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogICAgIGNvb2tpZS5uYW1lLFxuICAgICAgICAgICAgdmFsdWU6ICAgIGNvb2tpZS52YWx1ZSxcbiAgICAgICAgICAgIGRvbWFpbjogICBjb29raWUuZG9tYWluID8/IGhvc3RuYW1lLFxuICAgICAgICAgICAgcGF0aDogICAgIGNvb2tpZS5wYXRoID8/IHBhdGhuYW1lLFxuICAgICAgICAgICAgc2VjdXJlOiAgIGNvb2tpZS5zZWN1cmUsXG4gICAgICAgICAgICBodHRwT25seTogZmFsc2UsXG4gICAgICAgICAgICBzYW1lU2l0ZTogY29va2llLnNhbWVTaXRlIGFzIENvb2tpZVNhbWVTaXRlLFxuICAgICAgICAgICAgZXhwaXJlczogIGNvb2tpZS5leHBpcmVzPy5nZXRUaW1lKCkgfHwgTUFYX1RJTUVTVEFNUCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZVVybHMgKHVybHM6IHN0cmluZ1tdKTogeyBkb21haW46IHN0cmluZywgcGF0aDogc3RyaW5nIH1bXSB7XG4gICAgICAgIHJldHVybiB1cmxzLm1hcCh1cmwgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgZG9tYWluOiBob3N0bmFtZSwgcGF0aDogcGF0aG5hbWUgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5jbHVkZXNQYXRoIChjb29raWVQYXRoOiBzdHJpbmcsIHVybFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29va2llUGF0aCA9PT0gJy8nKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY29uc3QgY29va2llUGFydHMgPSBjb29raWVQYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIGNvbnN0IHVybFBhcnRzICAgID0gdXJsUGF0aC5zcGxpdCgnLycpO1xuXG4gICAgICAgIGlmIChjb29raWVQYXJ0cy5sZW5ndGggPiB1cmxQYXJ0cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKGNvb2tpZVBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGNvb2tpZVBhcnRzLnNoaWZ0KCkgIT09IHVybFBhcnRzLnNoaWZ0KCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VTZXRDb29raWVTdHJpbmdzIChjb29raWVzOiBzdHJpbmdbXSk6IENvb2tpZU9wdGlvbnNbXSB7XG4gICAgICAgIHJldHVybiBwYXJzZShjb29raWVzKSBhcyBDb29raWVPcHRpb25zW107XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unknownCDPEventType = exports.sslCertificateError = exports.failedToFindDNSError = exports.notImplementedError = void 0;
|
|
4
|
+
function notImplementedError() {
|
|
5
|
+
return new Error('Not implemented');
|
|
6
|
+
}
|
|
7
|
+
exports.notImplementedError = notImplementedError;
|
|
8
|
+
function failedToFindDNSError(url) {
|
|
9
|
+
return new Error(`Failed to find a DNS-record for the resource at "${url}"`);
|
|
10
|
+
}
|
|
11
|
+
exports.failedToFindDNSError = failedToFindDNSError;
|
|
12
|
+
function sslCertificateError(type) {
|
|
13
|
+
return new Error(`SSL certificate error (${type})`);
|
|
14
|
+
}
|
|
15
|
+
exports.sslCertificateError = sslCertificateError;
|
|
16
|
+
function unknownCDPEventType(type) {
|
|
17
|
+
return new Error(`Unknown CDP event type: ${type}`);
|
|
18
|
+
}
|
|
19
|
+
exports.unknownCDPEventType = unknownCDPEventType;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3h5bGVzcy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsbUJBQW1CO0lBQy9CLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRkQsa0RBRUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBRSxHQUFXO0lBQzdDLE9BQU8sSUFBSSxLQUFLLENBQUMsb0RBQW9ELEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUUsSUFBWTtJQUM3QyxPQUFPLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFGRCxrREFFQztBQUVELFNBQWdCLG1CQUFtQixDQUFFLElBQVk7SUFDN0MsT0FBTyxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRkQsa0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbm90SW1wbGVtZW50ZWRFcnJvciAoKTogRXJyb3Ige1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkVG9GaW5kRE5TRXJyb3IgKHVybDogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBmaW5kIGEgRE5TLXJlY29yZCBmb3IgdGhlIHJlc291cmNlIGF0IFwiJHt1cmx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNzbENlcnRpZmljYXRlRXJyb3IgKHR5cGU6IHN0cmluZyk6IEVycm9yIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKGBTU0wgY2VydGlmaWNhdGUgZXJyb3IgKCR7dHlwZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmtub3duQ0RQRXZlbnRUeXBlICh0eXBlOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihgVW5rbm93biBDRFAgZXZlbnQgdHlwZTogJHt0eXBlfWApO1xufVxuXG4iXX0=
|
package/lib/proxyless/index.js
CHANGED
|
@@ -7,9 +7,6 @@ const request_pipeline_1 = __importDefault(require("./request-pipeline"));
|
|
|
7
7
|
const add_custom_debug_formatters_1 = __importDefault(require("./add-custom-debug-formatters"));
|
|
8
8
|
const debug_loggers_1 = require("../utils/debug-loggers");
|
|
9
9
|
const session_storage_1 = __importDefault(require("./session-storage"));
|
|
10
|
-
const ALL_REQUEST_RESPONSES = { requestStage: 'Request' };
|
|
11
|
-
const ALL_REQUEST_REQUESTS = { requestStage: 'Response' };
|
|
12
|
-
const ALL_REQUESTS_DATA = [ALL_REQUEST_REQUESTS, ALL_REQUEST_RESPONSES];
|
|
13
10
|
class Proxyless {
|
|
14
11
|
constructor(browserId, client) {
|
|
15
12
|
this._client = client;
|
|
@@ -29,11 +26,6 @@ class Proxyless {
|
|
|
29
26
|
(0, add_custom_debug_formatters_1.default)();
|
|
30
27
|
}
|
|
31
28
|
async init(options) {
|
|
32
|
-
// NOTE: We are forced to handle all requests and responses at once
|
|
33
|
-
// because CDP API does not allow specifying request filtering behavior for different handlers.
|
|
34
|
-
await this._client.Fetch.enable({
|
|
35
|
-
patterns: ALL_REQUESTS_DATA,
|
|
36
|
-
});
|
|
37
29
|
const proxylessSystems = [
|
|
38
30
|
this.requestPipeline,
|
|
39
31
|
this.sessionStorage,
|
|
@@ -44,10 +36,10 @@ class Proxyless {
|
|
|
44
36
|
}
|
|
45
37
|
async dispose() {
|
|
46
38
|
this.requestPipeline.stop();
|
|
47
|
-
await this.
|
|
39
|
+
await this.requestPipeline.dispose();
|
|
48
40
|
(0, debug_loggers_1.proxylessLogger)('proxyless disposed');
|
|
49
41
|
}
|
|
50
42
|
}
|
|
51
43
|
exports.default = Proxyless;
|
|
52
44
|
module.exports = exports.default;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMEVBQTBEO0FBQzFELGdHQUFxRTtBQUVyRSwwREFBeUQ7QUFDekQsd0VBQStDO0FBRS9DLE1BQXFCLFNBQVM7SUFLMUIsWUFBb0IsU0FBaUIsRUFBRSxNQUFtQjtRQUN0RCxJQUFJLENBQUMsT0FBTyxHQUFXLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksMEJBQXdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxjQUFjLEdBQUksSUFBSSx5QkFBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFO1lBQzFGLElBQUksY0FBYyxFQUFFO2dCQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsY0FBYyxDQUFDO2FBQ2xGO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNsRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYztnQkFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEscUNBQXdCLEdBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBRSxPQUE4QjtRQUM3QyxNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxjQUFjO1NBQ3RCLENBQUM7UUFFRixLQUFLLE1BQU0sR0FBRyxJQUFJLGdCQUFnQjtZQUM5QixNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsSUFBQSwrQkFBZSxFQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFNUIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXJDLElBQUEsK0JBQWUsRUFBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDSjtBQTdDRCw0QkE2Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCBQcm94eWxlc3NSZXF1ZXN0UGlwZWxpbmUgZnJvbSAnLi9yZXF1ZXN0LXBpcGVsaW5lJztcbmltcG9ydCBhZGRDdXN0b21EZWJ1Z0Zvcm1hdHRlcnMgZnJvbSAnLi9hZGQtY3VzdG9tLWRlYnVnLWZvcm1hdHRlcnMnO1xuaW1wb3J0IHsgUHJveHlsZXNzU2V0dXBPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IHByb3h5bGVzc0xvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuaW1wb3J0IFNlc3Npb25TdG9yYWdlIGZyb20gJy4vc2Vzc2lvbi1zdG9yYWdlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJveHlsZXNzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IFByb3RvY29sQXBpO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0UGlwZWxpbmU7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYnJvd3NlcklkOiBzdHJpbmcsIGNsaWVudDogUHJvdG9jb2xBcGkpIHtcbiAgICAgICAgdGhpcy5fY2xpZW50ICAgICAgICAgPSBjbGllbnQ7XG4gICAgICAgIHRoaXMucmVxdWVzdFBpcGVsaW5lID0gbmV3IFByb3h5bGVzc1JlcXVlc3RQaXBlbGluZShicm93c2VySWQsIGNsaWVudCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UgID0gbmV3IFNlc3Npb25TdG9yYWdlKGJyb3dzZXJJZCwgY2xpZW50KTtcblxuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLm9uKCdjb250ZXh0U3RvcmFnZVN5bmMnLCAoeyBzZXNzaW9uU3RvcmFnZSwgdGVzdFJ1bklkLCBmcmFtZURyaXZlcklkIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChzZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdFBpcGVsaW5lLmNvbnRleHRTdG9yYWdlID0gdGhpcy5yZXF1ZXN0UGlwZWxpbmUuY29udGV4dFN0b3JhZ2UgfHwge307XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuY29udGV4dFN0b3JhZ2VbdGVzdFJ1bklkXSA9IHRoaXMucmVxdWVzdFBpcGVsaW5lLmNvbnRleHRTdG9yYWdlW3Rlc3RSdW5JZF0gfHwge307XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuY29udGV4dFN0b3JhZ2VbdGVzdFJ1bklkXVtmcmFtZURyaXZlcklkXSA9IHNlc3Npb25TdG9yYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLm9uKCdjb250ZXh0U3RvcmFnZVRlc3RSdW5Eb25lJywgKHsgdGVzdFJ1bklkIH0pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3RQaXBlbGluZS5jb250ZXh0U3RvcmFnZSlcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuY29udGV4dFN0b3JhZ2VbdGVzdFJ1bklkXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWRkQ3VzdG9tRGVidWdGb3JtYXR0ZXJzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQgKG9wdGlvbnM6IFByb3h5bGVzc1NldHVwT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwcm94eWxlc3NTeXN0ZW1zID0gW1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0UGlwZWxpbmUsXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLFxuICAgICAgICBdO1xuXG4gICAgICAgIGZvciAoY29uc3QgYXBpIG9mIHByb3h5bGVzc1N5c3RlbXMpXG4gICAgICAgICAgICBhd2FpdCBhcGkuaW5pdChvcHRpb25zKTtcblxuICAgICAgICBwcm94eWxlc3NMb2dnZXIoJ3Byb3h5bGVzcyBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0UGlwZWxpbmUuc3RvcCgpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdFBpcGVsaW5lLmRpc3Bvc2UoKTtcblxuICAgICAgICBwcm94eWxlc3NMb2dnZXIoJ3Byb3h5bGVzcyBkaXNwb3NlZCcpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -18,6 +18,10 @@ const api_base_1 = __importDefault(require("../api-base"));
|
|
|
18
18
|
const resendAuthRequest_1 = require("./resendAuthRequest");
|
|
19
19
|
const test_run_bridge_1 = __importDefault(require("./test-run-bridge"));
|
|
20
20
|
const context_info_1 = __importDefault(require("./context-info"));
|
|
21
|
+
const errors_1 = require("../errors");
|
|
22
|
+
const ALL_REQUEST_RESPONSES = { requestStage: 'Request' };
|
|
23
|
+
const ALL_REQUEST_REQUESTS = { requestStage: 'Response' };
|
|
24
|
+
const ALL_REQUESTS_DATA = [ALL_REQUEST_REQUESTS, ALL_REQUEST_RESPONSES];
|
|
21
25
|
class ProxylessRequestPipeline extends api_base_1.default {
|
|
22
26
|
constructor(browserId, client) {
|
|
23
27
|
super(browserId, client);
|
|
@@ -32,6 +36,7 @@ class ProxylessRequestPipeline extends api_base_1.default {
|
|
|
32
36
|
this._failedRequestIds = [];
|
|
33
37
|
this.restoringStorages = null;
|
|
34
38
|
this.contextStorage = null;
|
|
39
|
+
this._pendingCertificateError = null;
|
|
35
40
|
}
|
|
36
41
|
_getSpecialServiceRoutes() {
|
|
37
42
|
const browserConnection = this._testRunBridge.getBrowserConnection();
|
|
@@ -141,9 +146,21 @@ class ProxylessRequestPipeline extends api_base_1.default {
|
|
|
141
146
|
fulfillInfo.responsePhrase = authRequest.statusText;
|
|
142
147
|
}
|
|
143
148
|
}
|
|
149
|
+
_createError(event) {
|
|
150
|
+
if (this._pendingCertificateError)
|
|
151
|
+
return (0, errors_1.sslCertificateError)(this._pendingCertificateError.errorType);
|
|
152
|
+
if (event.responseErrorReason === 'NameNotResolved')
|
|
153
|
+
return (0, errors_1.failedToFindDNSError)(event.request.url);
|
|
154
|
+
return new Error(event.responseErrorReason);
|
|
155
|
+
}
|
|
144
156
|
async _tryRespondToOtherRequest(event) {
|
|
145
157
|
try {
|
|
146
|
-
|
|
158
|
+
if (event.responseErrorReason && this._shouldRedirectToErrorPage(event)) {
|
|
159
|
+
const error = this._createError(event);
|
|
160
|
+
await this._resourceInjector.redirectToErrorPage(this._client, error, event.request.url);
|
|
161
|
+
}
|
|
162
|
+
else
|
|
163
|
+
await this._respondToOtherRequest(event);
|
|
147
164
|
}
|
|
148
165
|
catch (err) {
|
|
149
166
|
if (event.networkId && this._failedRequestIds.includes(event.networkId)) {
|
|
@@ -191,6 +208,11 @@ class ProxylessRequestPipeline extends api_base_1.default {
|
|
|
191
208
|
}
|
|
192
209
|
async init(options) {
|
|
193
210
|
this._options = options;
|
|
211
|
+
// NOTE: We are forced to handle all requests and responses at once
|
|
212
|
+
// because CDP API does not allow specifying request filtering behavior for different handlers.
|
|
213
|
+
await this._client.Fetch.enable({
|
|
214
|
+
patterns: ALL_REQUESTS_DATA,
|
|
215
|
+
});
|
|
194
216
|
this._client.Fetch.on('requestPaused', async (event) => {
|
|
195
217
|
if (this._stopped)
|
|
196
218
|
return;
|
|
@@ -207,7 +229,7 @@ class ProxylessRequestPipeline extends api_base_1.default {
|
|
|
207
229
|
return;
|
|
208
230
|
this._contextInfo.init(event);
|
|
209
231
|
const userScripts = await this._getUserScripts(event);
|
|
210
|
-
await this._resourceInjector.processAboutBlankPage(event, userScripts, this._client);
|
|
232
|
+
await this._resourceInjector.processAboutBlankPage(event, userScripts, this.contextStorage, this._client);
|
|
211
233
|
this._contextInfo.dispose((0, cdp_1.getRequestId)(event));
|
|
212
234
|
});
|
|
213
235
|
this._client.Page.on('frameStartedLoading', async () => {
|
|
@@ -220,11 +242,18 @@ class ProxylessRequestPipeline extends api_base_1.default {
|
|
|
220
242
|
this._contextInfo.dispose(event.requestId);
|
|
221
243
|
});
|
|
222
244
|
await this._client.Page.setBypassCSP({ enabled: true });
|
|
245
|
+
await this._client.Security.enable();
|
|
246
|
+
this._client.Security.on('certificateError', async (event) => {
|
|
247
|
+
this._pendingCertificateError = event;
|
|
248
|
+
});
|
|
223
249
|
}
|
|
224
250
|
stop() {
|
|
225
251
|
this._stopped = true;
|
|
226
252
|
}
|
|
253
|
+
async dispose() {
|
|
254
|
+
await this._client.Fetch.disable();
|
|
255
|
+
}
|
|
227
256
|
}
|
|
228
257
|
exports.default = ProxylessRequestPipeline;
|
|
229
258
|
module.exports = exports.default;
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJveHlsZXNzL3JlcXVlc3QtcGlwZWxpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBZ0M7QUFTaEMscUZBQWdGO0FBQ2hGLDZFQUFvRDtBQUNwRCw4Q0FBMEQ7QUFFMUQsc0NBS3NCO0FBRXRCLGlFQUF5QztBQUV6Qyw2REFJbUM7QUFFbkMsNkRBSzZCO0FBSTdCLHFGQUF1RTtBQUN2RSwwRUFBMEQ7QUFDMUQseUNBQXVFO0FBQ3ZFLDJEQUEyQztBQUMzQywyREFBd0Q7QUFDeEQsd0VBQThDO0FBQzlDLGtFQUF5RDtBQUd6RCxNQUFxQix3QkFBeUIsU0FBUSxrQkFBZ0I7SUFhbEUsWUFBb0IsU0FBaUIsRUFBRSxNQUFtQjtRQUN0RCxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxjQUFjLEdBQWEsSUFBSSx5QkFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLEdBQWUsSUFBSSxzQkFBMkIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLHFCQUFxQixHQUFNLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLHdCQUFpQyxFQUFFLENBQUM7UUFDeEUsSUFBSSxDQUFDLGlCQUFpQixHQUFVLElBQUksMkJBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsUUFBUSxHQUFtQiwrQkFBK0IsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFtQixLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFVLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQVUsRUFB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QUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUF5QixFQUFFLEVBQUU7WUFDekUsSUFBQSxxQ0FBcUIsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFN0MsSUFBSSxLQUFLLENBQUMsU0FBUztnQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztDQUNKO0FBcFNELDJDQW9TQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbW92ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUmVxdWVzdFBhdXNlZEV2ZW50ID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50O1xuaW1wb3J0IEZyYW1lTmF2aWdhdGVkRXZlbnQgPSBQcm90b2NvbC5QYWdlLkZyYW1lTmF2aWdhdGVkRXZlbnQ7XG5pbXBvcnQgTG9hZGluZ0ZhaWxlZEV2ZW50ID0gUHJvdG9jb2wuTmV0d29yay5Mb2FkaW5nRmFpbGVkRXZlbnQ7XG5pbXBvcnQgQ29udGludWVSZXNwb25zZVJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5Db250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbmltcG9ydCBGcmFtZVRyZWUgPSBQcm90b2NvbC5QYWdlLkZyYW1lVHJlZTtcbmltcG9ydCBGdWxmaWxsUmVxdWVzdFJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5GdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5pbXBvcnQgUHJveHlsZXNzUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvZXZlbnQtcHJvdmlkZXInO1xuaW1wb3J0IFJlc291cmNlSW5qZWN0b3IgZnJvbSAnLi4vcmVzb3VyY2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgY29udmVydFRvSGVhZGVyRW50cmllcyB9IGZyb20gJy4uL3V0aWxzL2hlYWRlcnMnO1xuXG5pbXBvcnQge1xuICAgIGNyZWF0ZVJlcXVlc3RQYXVzZWRFdmVudEZvclJlc3BvbnNlLFxuICAgIGdldFJlcXVlc3RJZCxcbiAgICBpc1JlcXVlc3QsXG4gICAgaXNVbmF1dGhvcml6ZWQsXG59IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5cbmltcG9ydCBFUlJPUl9ST1VURSBmcm9tICcuLi9lcnJvci1yb3V0ZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZUluZm8sIFNwZWNpYWxTZXJ2aWNlUm91dGVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIsXG4gICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcixcbiAgICByZXF1ZXN0UGlwZWxpbmVPdGhlclJlcXVlc3RMb2dnZXIsXG59IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuXG5pbXBvcnQge1xuICAgIEluY29taW5nTWVzc2FnZUxpa2UsXG4gICAgaXNSZWRpcmVjdFN0YXR1c0NvZGUsXG4gICAgU1BFQ0lBTF9CTEFOS19QQUdFLFxuICAgIFN0b3JhZ2VzU25hcHNob3QsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG5pbXBvcnQgUHJveHlsZXNzUGlwZWxpbmVDb250ZXh0IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvcGlwZWxpbmUtY29udGV4dCc7XG5pbXBvcnQgeyBQcm94eWxlc3NTZXR1cE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IERFRkFVTFRfUFJPWFlMRVNTX1NFVFVQX09QVElPTlMgZnJvbSAnLi4vZGVmYXVsdC1zZXR1cC1vcHRpb25zJztcbmltcG9ydCBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9zcGVjaWFsLWhhbmRsZXJzJztcbmltcG9ydCB7IHNhZmVDb250aW51ZVJlcXVlc3QsIHNhZmVDb250aW51ZVJlc3BvbnNlIH0gZnJvbSAnLi9zYWZlLWFwaSc7XG5pbXBvcnQgUHJveHlsZXNzQXBpQmFzZSBmcm9tICcuLi9hcGktYmFzZSc7XG5pbXBvcnQgeyByZXNlbmRBdXRoUmVxdWVzdCB9IGZyb20gJy4vcmVzZW5kQXV0aFJlcXVlc3QnO1xuaW1wb3J0IFRlc3RSdW5CcmlkZ2UgZnJvbSAnLi90ZXN0LXJ1bi1icmlkZ2UnO1xuaW1wb3J0IFByb3h5bGVzc1JlcXVlc3RDb250ZXh0SW5mbyBmcm9tICcuL2NvbnRleHQtaW5mbyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJveHlsZXNzUmVxdWVzdFBpcGVsaW5lIGV4dGVuZHMgUHJveHlsZXNzQXBpQmFzZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdFJ1bkJyaWRnZTogVGVzdFJ1bkJyaWRnZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0SW5mbzogUHJveHlsZXNzUmVxdWVzdENvbnRleHRJbmZvO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI6IFByb3h5bGVzc1JlcXVlc3RIb29rRXZlbnRQcm92aWRlcjtcbiAgICBwdWJsaWMgcmVzdG9yaW5nU3RvcmFnZXM6IFN0b3JhZ2VzU25hcHNob3QgfCBudWxsO1xuICAgIHB1YmxpYyBjb250ZXh0U3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VJbmZvIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZUluamVjdG9yOiBSZXNvdXJjZUluamVjdG9yO1xuICAgIHByaXZhdGUgX29wdGlvbnM6IFByb3h5bGVzc1NldHVwT3B0aW9ucztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcGVjaWFsU2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXM7XG4gICAgcHJpdmF0ZSBfc3RvcHBlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9jdXJyZW50RnJhbWVUcmVlOiBGcmFtZVRyZWUgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZhaWxlZFJlcXVlc3RJZHM6IHN0cmluZ1tdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChicm93c2VySWQ6IHN0cmluZywgY2xpZW50OiBQcm90b2NvbEFwaSkge1xuICAgICAgICBzdXBlcihicm93c2VySWQsIGNsaWVudCk7XG5cbiAgICAgICAgdGhpcy5fdGVzdFJ1bkJyaWRnZSAgICAgICAgICAgPSBuZXcgVGVzdFJ1bkJyaWRnZShicm93c2VySWQpO1xuICAgICAgICB0aGlzLl9jb250ZXh0SW5mbyAgICAgICAgICAgICA9IG5ldyBQcm94eWxlc3NSZXF1ZXN0Q29udGV4dEluZm8odGhpcy5fdGVzdFJ1bkJyaWRnZSk7XG4gICAgICAgIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzICAgID0gdGhpcy5fZ2V0U3BlY2lhbFNlcnZpY2VSb3V0ZXMoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgPSBuZXcgUHJveHlsZXNzUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlSW5qZWN0b3IgICAgICAgID0gbmV3IFJlc291cmNlSW5qZWN0b3IodGhpcy5fdGVzdFJ1bkJyaWRnZSwgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMpO1xuICAgICAgICB0aGlzLl9vcHRpb25zICAgICAgICAgICAgICAgICA9IERFRkFVTFRfUFJPWFlMRVNTX1NFVFVQX09QVElPTlM7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgICAgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmFpbGVkUmVxdWVzdElkcyAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbnRleHRTdG9yYWdlICAgICAgICAgICA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U3BlY2lhbFNlcnZpY2VSb3V0ZXMgKCk6IFNwZWNpYWxTZXJ2aWNlUm91dGVzIHtcbiAgICAgICAgY29uc3QgYnJvd3NlckNvbm5lY3Rpb24gPSB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEJyb3dzZXJDb25uZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHByb3h5ICAgICAgICAgICAgID0gYnJvd3NlckNvbm5lY3Rpb24uYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvclBhZ2UxOiAgICAgICAgICBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKEVSUk9SX1JPVVRFLCBwcm94eS5zZXJ2ZXIxSW5mby5kb21haW4pLFxuICAgICAgICAgICAgZXJyb3JQYWdlMjogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMkluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGlkbGVQYWdlOiAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uLmlkbGVVcmwsXG4gICAgICAgICAgICBvcGVuRmlsZVByb3RvY29sVXJsOiBicm93c2VyQ29ubmVjdGlvbi5vcGVuRmlsZVByb3RvY29sVXJsLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU1vY2tFcnJvcklmTmVjZXNzYXJ5IChwaXBlbGluZUNvbnRleHQ6IFByb3h5bGVzc1BpcGVsaW5lQ29udGV4dCwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXBpcGVsaW5lQ29udGV4dC5tb2NrLmhhc0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5oYW5kbGVNb2NrRXJyb3IodGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIpO1xuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoJyVzXFxuJXMnLCBldmVudC5uZXR3b3JrSWQsIHBpcGVsaW5lQ29udGV4dC5tb2NrLmVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVNb2NrUmVzcG9uc2UgKG1vY2tlZFJlc3BvbnNlOiBJbmNvbWluZ01lc3NhZ2VMaWtlLCBwaXBlbGluZUNvbnRleHQ6IFByb3h5bGVzc1BpcGVsaW5lQ29udGV4dCwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUJvZHlTdHIgPSAobW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoKTtcblxuICAgICAgICBjb25zdCBmdWxmaWxsSW5mbyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBtb2NrZWRSZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKG1vY2tlZFJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICAgICAgYm9keTogICAgICAgICAgICBtb2NrZWRSZXNwb25zZUJvZHlTdHIsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBpcGVsaW5lQ29udGV4dC5yZXFPcHRzLmlzQWpheClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc05vblByb3hpZWRDb250ZW50KGZ1bGZpbGxJbmZvLCB0aGlzLl9jbGllbnQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0hUTUxQYWdlQ29udGVudChmdWxmaWxsSW5mbywge1xuICAgICAgICAgICAgICAgIGlzSWZyYW1lOiAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0U3RvcmFnZTogdGhpcy5jb250ZXh0U3RvcmFnZSxcbiAgICAgICAgICAgIH0sIHRoaXMuX2NsaWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKGBNb2NrIHJlcXVlc3QgJHtldmVudC5yZXF1ZXN0SWR9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGludWVSZXNwb25zZVJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIG1vZGlmaWVkOiBib29sZWFuKTogQ29udGludWVSZXNwb25zZVJlcXVlc3Qge1xuICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLFxuICAgICAgICB9IGFzIENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuXG4gICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VIZWFkZXJzID0gZXZlbnQucmVzcG9uc2VIZWFkZXJzO1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VDb2RlICAgID0gZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC5yZXNvdXJjZVR5cGUgPT09ICdEb2N1bWVudCdcbiAgICAgICAgICAgICYmICF0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRVc2VyU2NyaXB0cyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IHRoaXMuX2NvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQucHJlcGFyZUluamVjdGFibGVVc2VyU2NyaXB0cyhldmVudEZhY3RvcnksIHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0VXNlclNjcmlwdHMoKSk7XG5cbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29udGV4dC5pbmplY3RhYmxlVXNlclNjcmlwdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlSW5mbyA9IGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IuZ2V0RG9jdW1lbnRSZXNvdXJjZUluZm8oZXZlbnQsIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSW5mby5lcnJvcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5yZWRpcmVjdFRvRXJyb3JQYWdlKHRoaXMuX2NsaWVudCwgcmVzb3VyY2VJbmZvLmVycm9yLCBldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RpZmllZCA9IGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVzcG9uc2UoZXZlbnQsIHJlc291cmNlSW5mby5ib2R5LCB0aGlzLl9jb250ZXh0SW5mbywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQucmVzb3VyY2VUeXBlICE9PSAnRG9jdW1lbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZUNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0KGV2ZW50LCBtb2RpZmllZCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlc3BvbnNlKHRoaXMuX2NsaWVudCwgY29udGludWVSZXNwb25zZVJlcXVlc3QpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZnVsZmlsbEluZm8gPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBldmVudC5yZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgKHJlc291cmNlSW5mby5ib2R5IGFzIEJ1ZmZlcikudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0gYXMgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBTdHJhbmdlIGJlaGF2aW9yIG9mIHRoZSBDRFAgQVBJOlxuICAgICAgICAgICAgLy8gaWYgd2UgcGFzcyB0aGUgZW1wdHkgXCJyZXNwb25zZVN0YXR1c1RleHRcIiB2YWx1ZSwgd2UgZ2V0IGFuIGVycm9yICdJbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHBocmFzZScuXG4gICAgICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VTdGF0dXNUZXh0ICE9PSAnJylcbiAgICAgICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZVBocmFzZSA9IGV2ZW50LnJlc3BvbnNlU3RhdHVzVGV4dDtcblxuICAgICAgICAgICAgaWYgKGlzVW5hdXRob3JpemVkKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXIpKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeUF1dGhvcml6ZVdpdGhIdHRwQmFzaWNBdXRoQ3JlZGVudGlhbHMoZXZlbnQsIGZ1bGZpbGxJbmZvKTtcblxuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0hUTUxQYWdlQ29udGVudChcbiAgICAgICAgICAgICAgICBmdWxmaWxsSW5mbyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzSWZyYW1lOiAgICAgICAgICB0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgICAgICAgIGV2ZW50LnJlcXVlc3QudXJsLFxuICAgICAgICAgICAgICAgICAgICByZXN0b3JpbmdTdG9yYWdlczogdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFN0b3JhZ2U6ICAgIHRoaXMuY29udGV4dFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJTY3JpcHRzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF90cnlBdXRob3JpemVXaXRoSHR0cEJhc2ljQXV0aENyZWRlbnRpYWxzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBmdWxmaWxsSW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5fdGVzdFJ1bi5nZXRBdXRoQ3JlZGVudGlhbHMoKTtcblxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGF1dGhSZXF1ZXN0ID0gYXdhaXQgcmVzZW5kQXV0aFJlcXVlc3QoZXZlbnQucmVxdWVzdCwgY3JlZGVudGlhbHMpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXV0aFJlcXVlc3QgIT09ICdzdHJpbmcnICYmICFpc1VuYXV0aG9yaXplZChhdXRoUmVxdWVzdC5zdGF0dXMpKSB7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZUNvZGUgPSBhdXRoUmVxdWVzdC5zdGF0dXM7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5ib2R5ID0gYXV0aFJlcXVlc3QuYm9keS50b1N0cmluZygpO1xuICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VQaHJhc2UgPSBhdXRoUmVxdWVzdC5zdGF0dXNUZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJ5UmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNwb25kVG9PdGhlclJlcXVlc3QoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5uZXR3b3JrSWQgJiYgdGhpcy5fZmFpbGVkUmVxdWVzdElkcy5pbmNsdWRlcyhldmVudC5uZXR3b3JrSWQpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMsIGV2ZW50Lm5ldHdvcmtJZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU90aGVyUmVxdWVzdHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lT3RoZXJSZXF1ZXN0TG9nZ2VyKCclcicsIGV2ZW50KTtcblxuICAgICAgICBpZiAoIWV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gJiYgKGlzUmVxdWVzdChldmVudCkgfHwgaXNSZWRpcmVjdFN0YXR1c0NvZGUoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmluaXQoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlcXVlc3QoZXZlbnQsIHRoaXMuX2NvbnRleHRJbmZvKTtcblxuICAgICAgICAgICAgY29uc3QgcGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY29udGV4dEluZm8uZ2V0UGlwZWxpbmVDb250ZXh0KGV2ZW50Lm5ldHdvcmtJZCBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgICBpZiAoIXBpcGVsaW5lQ29udGV4dCB8fCAhcGlwZWxpbmVDb250ZXh0Lm1vY2spXG4gICAgICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVxdWVzdCh0aGlzLl9jbGllbnQsIGV2ZW50KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlID0gYXdhaXQgcGlwZWxpbmVDb250ZXh0LmdldE1vY2tSZXNwb25zZSgpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTW9ja0Vycm9ySWZOZWNlc3NhcnkocGlwZWxpbmVDb250ZXh0LCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUV2ZW50ID0gY3JlYXRlUmVxdWVzdFBhdXNlZEV2ZW50Rm9yUmVzcG9uc2UobW9ja2VkUmVzcG9uc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVzcG9uc2UobW9ja2VkUmVzcG9uc2VFdmVudCwgbW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpLCB0aGlzLl9jb250ZXh0SW5mbywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU1vY2tSZXNwb25zZShtb2NrZWRSZXNwb25zZSwgcGlwZWxpbmVDb250ZXh0LCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeVJlc3BvbmRUb090aGVyUmVxdWVzdChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9wRnJhbWVOYXZpZ2F0aW9uIChldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ05hdmlnYXRpb24nXG4gICAgICAgICAgICAmJiAhZXZlbnQuZnJhbWUucGFyZW50SWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlQ3VycmVudEZyYW1lVHJlZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIE5PVEU6IER1ZSB0byBDRFAgcmVzdHJpY3Rpb25zIChpdCBoYW5ncyksIHdlIGNhbid0IGdldCB0aGUgZnJhbWUgdHJlZVxuICAgICAgICAvLyByaWdodCBiZWZvcmUgaW5qZWN0aW5nIHNlcnZpY2Ugc2NyaXB0cy5cbiAgICAgICAgLy8gU28sIHdlIGFyZSBmb3JjZWQgdHJhY2tpbmcgZnJhbWVzIHRyZWUuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2NsaWVudC5QYWdlLmdldEZyYW1lVHJlZSgpO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUgPSByZXN1bHQuZnJhbWVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzSWZyYW1lIChmcmFtZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50RnJhbWVUcmVlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50RnJhbWVUcmVlLmZyYW1lLmlkICE9PSBmcmFtZUlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0IChvcHRpb25zPzogUHJveHlsZXNzU2V0dXBPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIGFzIFByb3h5bGVzc1NldHVwT3B0aW9ucztcblxuICAgICAgICB0aGlzLl9jbGllbnQuRmV0Y2gub24oJ3JlcXVlc3RQYXVzZWQnLCBhc3luYyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzKTtcblxuICAgICAgICAgICAgaWYgKHNwZWNpYWxSZXF1ZXN0SGFuZGxlcilcbiAgICAgICAgICAgICAgICBhd2FpdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMuX2NsaWVudCwgdGhpcy5fb3B0aW9ucyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlT3RoZXJSZXF1ZXN0cyhldmVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5QYWdlLm9uKCdmcmFtZU5hdmlnYXRlZCcsIGFzeW5jIChldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKCclZicsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90b3BGcmFtZU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgICAgICAgICAgfHwgZXZlbnQuZnJhbWUudXJsICE9PSBTUEVDSUFMX0JMQU5LX1BBR0UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5pbml0KGV2ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0Fib3V0QmxhbmtQYWdlKGV2ZW50LCB1c2VyU2NyaXB0cywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlBhZ2Uub24oJ2ZyYW1lU3RhcnRlZExvYWRpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl91cGRhdGVDdXJyZW50RnJhbWVUcmVlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5OZXR3b3JrLm9uKCdsb2FkaW5nRmFpbGVkJywgYXN5bmMgKGV2ZW50OiBMb2FkaW5nRmFpbGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJWwnLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMucHVzaChldmVudC5yZXF1ZXN0SWQpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQucmVxdWVzdElkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZXZlbnQucmVxdWVzdElkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlBhZ2Uuc2V0QnlwYXNzQ1NQKHsgZW5hYmxlZDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgPSB0cnVlO1xuICAgIH1cbn1cbiJdfQ==
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJveHlsZXNzL3JlcXVlc3QtcGlwZWxpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBZ0M7QUFVaEMscUZBQWdGO0FBQ2hGLDZFQUFvRDtBQUNwRCw4Q0FBMEQ7QUFFMUQsc0NBS3NCO0FBRXRCLGlFQUF5QztBQUV6Qyw2REFJbUM7QUFFbkMsNkRBSzZCO0FBSTdCLHFGQUF1RTtBQUN2RSwwRUFBMEQ7QUFDMUQseUNBQXVFO0FBQ3ZFLDJEQUEyQztBQUMzQywyREFBd0Q7QUFDeEQsd0VBQThDO0FBQzlDLGtFQUF5RDtBQUV6RCxzQ0FBc0U7QUFHdEUsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQW9CLENBQUM7QUFDNUUsTUFBTSxvQkFBb0IsR0FBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQW9CLENBQUM7QUFFN0UsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFFeEUsTUFBcUIsd0JBQXlCLFNBQVEsa0JBQWdCO0lBY2xFLFlBQW9CLFNBQWlCLEVBQUUsTUFBbUI7UUFDdEQsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsY0FBYyxHQUFhLElBQUkseUJBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFlLElBQUksc0JBQTJCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxxQkFBcUIsR0FBTSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSx3QkFBaUMsRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxpQkFBaUIsR0FBVSxJQUFJLDJCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFj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Q0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBeUIsRUFBRSxFQUFFO1lBQ3pFLElBQUEscUNBQXFCLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRW5DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTdDLElBQUksS0FBSyxDQUFDLFNBQVM7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsS0FBNEIsRUFBRSxFQUFFO1lBQ2hGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sSUFBSTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNoQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDSjtBQXRVRCwyQ0FzVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IExvYWRpbmdGYWlsZWRFdmVudCA9IFByb3RvY29sLk5ldHdvcmsuTG9hZGluZ0ZhaWxlZEV2ZW50O1xuaW1wb3J0IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5pbXBvcnQgRnJhbWVUcmVlID0gUHJvdG9jb2wuUGFnZS5GcmFtZVRyZWU7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IFJlcXVlc3RQYXR0ZXJuID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdHRlcm47XG5pbXBvcnQgUHJveHlsZXNzUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvZXZlbnQtcHJvdmlkZXInO1xuaW1wb3J0IFJlc291cmNlSW5qZWN0b3IgZnJvbSAnLi4vcmVzb3VyY2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgY29udmVydFRvSGVhZGVyRW50cmllcyB9IGZyb20gJy4uL3V0aWxzL2hlYWRlcnMnO1xuXG5pbXBvcnQge1xuICAgIGNyZWF0ZVJlcXVlc3RQYXVzZWRFdmVudEZvclJlc3BvbnNlLFxuICAgIGdldFJlcXVlc3RJZCxcbiAgICBpc1JlcXVlc3QsXG4gICAgaXNVbmF1dGhvcml6ZWQsXG59IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5cbmltcG9ydCBFUlJPUl9ST1VURSBmcm9tICcuLi9lcnJvci1yb3V0ZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZUluZm8sIFNwZWNpYWxTZXJ2aWNlUm91dGVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIsXG4gICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcixcbiAgICByZXF1ZXN0UGlwZWxpbmVPdGhlclJlcXVlc3RMb2dnZXIsXG59IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuXG5pbXBvcnQge1xuICAgIEluY29taW5nTWVzc2FnZUxpa2UsXG4gICAgaXNSZWRpcmVjdFN0YXR1c0NvZGUsXG4gICAgU1BFQ0lBTF9CTEFOS19QQUdFLFxuICAgIFN0b3JhZ2VzU25hcHNob3QsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuXG5pbXBvcnQgUHJveHlsZXNzUGlwZWxpbmVDb250ZXh0IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvcGlwZWxpbmUtY29udGV4dCc7XG5pbXBvcnQgeyBQcm94eWxlc3NTZXR1cE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IERFRkFVTFRfUFJPWFlMRVNTX1NFVFVQX09QVElPTlMgZnJvbSAnLi4vZGVmYXVsdC1zZXR1cC1vcHRpb25zJztcbmltcG9ydCBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIgZnJvbSAnLi9zcGVjaWFsLWhhbmRsZXJzJztcbmltcG9ydCB7IHNhZmVDb250aW51ZVJlcXVlc3QsIHNhZmVDb250aW51ZVJlc3BvbnNlIH0gZnJvbSAnLi9zYWZlLWFwaSc7XG5pbXBvcnQgUHJveHlsZXNzQXBpQmFzZSBmcm9tICcuLi9hcGktYmFzZSc7XG5pbXBvcnQgeyByZXNlbmRBdXRoUmVxdWVzdCB9IGZyb20gJy4vcmVzZW5kQXV0aFJlcXVlc3QnO1xuaW1wb3J0IFRlc3RSdW5CcmlkZ2UgZnJvbSAnLi90ZXN0LXJ1bi1icmlkZ2UnO1xuaW1wb3J0IFByb3h5bGVzc1JlcXVlc3RDb250ZXh0SW5mbyBmcm9tICcuL2NvbnRleHQtaW5mbyc7XG5pbXBvcnQgQ2VydGlmaWNhdGVFcnJvckV2ZW50ID0gUHJvdG9jb2wuU2VjdXJpdHkuQ2VydGlmaWNhdGVFcnJvckV2ZW50O1xuaW1wb3J0IHsgZmFpbGVkVG9GaW5kRE5TRXJyb3IsIHNzbENlcnRpZmljYXRlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5cbmNvbnN0IEFMTF9SRVFVRVNUX1JFU1BPTlNFUyA9IHsgcmVxdWVzdFN0YWdlOiAnUmVxdWVzdCcgfSBhcyBSZXF1ZXN0UGF0dGVybjtcbmNvbnN0IEFMTF9SRVFVRVNUX1JFUVVFU1RTICA9IHsgcmVxdWVzdFN0YWdlOiAnUmVzcG9uc2UnIH0gYXMgUmVxdWVzdFBhdHRlcm47XG5cbmNvbnN0IEFMTF9SRVFVRVNUU19EQVRBID0gW0FMTF9SRVFVRVNUX1JFUVVFU1RTLCBBTExfUkVRVUVTVF9SRVNQT05TRVNdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm94eWxlc3NSZXF1ZXN0UGlwZWxpbmUgZXh0ZW5kcyBQcm94eWxlc3NBcGlCYXNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRleHRJbmZvOiBQcm94eWxlc3NSZXF1ZXN0Q29udGV4dEluZm87XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjogUHJveHlsZXNzUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyO1xuICAgIHB1YmxpYyByZXN0b3JpbmdTdG9yYWdlczogU3RvcmFnZXNTbmFwc2hvdCB8IG51bGw7XG4gICAgcHVibGljIGNvbnRleHRTdG9yYWdlOiBTZXNzaW9uU3RvcmFnZUluZm8gfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlSW5qZWN0b3I6IFJlc291cmNlSW5qZWN0b3I7XG4gICAgcHJpdmF0ZSBfb3B0aW9uczogUHJveHlsZXNzU2V0dXBPcHRpb25zO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICBwcml2YXRlIF9zdG9wcGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2N1cnJlbnRGcmFtZVRyZWU6IEZyYW1lVHJlZSB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmFpbGVkUmVxdWVzdElkczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBfcGVuZGluZ0NlcnRpZmljYXRlRXJyb3I6IENlcnRpZmljYXRlRXJyb3JFdmVudCB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGJyb3dzZXJJZDogc3RyaW5nLCBjbGllbnQ6IFByb3RvY29sQXBpKSB7XG4gICAgICAgIHN1cGVyKGJyb3dzZXJJZCwgY2xpZW50KTtcblxuICAgICAgICB0aGlzLl90ZXN0UnVuQnJpZGdlICAgICAgICAgICA9IG5ldyBUZXN0UnVuQnJpZGdlKGJyb3dzZXJJZCk7XG4gICAgICAgIHRoaXMuX2NvbnRleHRJbmZvICAgICAgICAgICAgID0gbmV3IFByb3h5bGVzc1JlcXVlc3RDb250ZXh0SW5mbyh0aGlzLl90ZXN0UnVuQnJpZGdlKTtcbiAgICAgICAgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMgICAgPSB0aGlzLl9nZXRTcGVjaWFsU2VydmljZVJvdXRlcygpO1xuICAgICAgICB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlciA9IG5ldyBQcm94eWxlc3NSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VJbmplY3RvciAgICAgICAgPSBuZXcgUmVzb3VyY2VJbmplY3Rvcih0aGlzLl90ZXN0UnVuQnJpZGdlLCB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyk7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgICAgICAgICAgICAgICAgID0gREVGQVVMVF9QUk9YWUxFU1NfU0VUVVBfT1BUSU9OUztcbiAgICAgICAgdGhpcy5fc3RvcHBlZCAgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuY29udGV4dFN0b3JhZ2UgICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzICgpOiBTcGVjaWFsU2VydmljZVJvdXRlcyB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRCcm93c2VyQ29ubmVjdGlvbigpO1xuICAgICAgICBjb25zdCBwcm94eSAgICAgICAgICAgICA9IGJyb3dzZXJDb25uZWN0aW9uLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JQYWdlMTogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGVycm9yUGFnZTI6ICAgICAgICAgIHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoRVJST1JfUk9VVEUsIHByb3h5LnNlcnZlcjJJbmZvLmRvbWFpbiksXG4gICAgICAgICAgICBpZGxlUGFnZTogICAgICAgICAgICBicm93c2VyQ29ubmVjdGlvbi5pZGxlVXJsLFxuICAgICAgICAgICAgb3BlbkZpbGVQcm90b2NvbFVybDogYnJvd3NlckNvbm5lY3Rpb24ub3BlbkZpbGVQcm90b2NvbFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeSAocGlwZWxpbmVDb250ZXh0OiBQcm94eWxlc3NQaXBlbGluZUNvbnRleHQsIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFwaXBlbGluZUNvbnRleHQubW9jay5oYXNFcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQuaGFuZGxlTW9ja0Vycm9yKHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyKTtcblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKCclc1xcbiVzJywgZXZlbnQubmV0d29ya0lkLCBwaXBlbGluZUNvbnRleHQubW9jay5lcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTW9ja1Jlc3BvbnNlIChtb2NrZWRSZXNwb25zZTogSW5jb21pbmdNZXNzYWdlTGlrZSwgcGlwZWxpbmVDb250ZXh0OiBQcm94eWxlc3NQaXBlbGluZUNvbnRleHQsIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2VCb2R5U3RyID0gKG1vY2tlZFJlc3BvbnNlLmdldEJvZHkoKSBhcyBCdWZmZXIpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgY29uc3QgZnVsZmlsbEluZm8gPSB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgbW9ja2VkUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogY29udmVydFRvSGVhZGVyRW50cmllcyhtb2NrZWRSZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgbW9ja2VkUmVzcG9uc2VCb2R5U3RyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwaXBlbGluZUNvbnRleHQucmVxT3B0cy5pc0FqYXgpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NOb25Qcm94aWVkQ29udGVudChmdWxmaWxsSW5mbywgdGhpcy5fY2xpZW50KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NIVE1MUGFnZUNvbnRlbnQoZnVsZmlsbEluZm8sIHtcbiAgICAgICAgICAgICAgICBpc0lmcmFtZTogICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGV4dFN0b3JhZ2U6IHRoaXMuY29udGV4dFN0b3JhZ2UsXG4gICAgICAgICAgICB9LCB0aGlzLl9jbGllbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcihgTW9jayByZXF1ZXN0ICR7ZXZlbnQucmVxdWVzdElkfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBtb2RpZmllZDogYm9vbGVhbik6IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0IHtcbiAgICAgICAgY29uc3QgY29udGludWVSZXNwb25zZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgfSBhcyBDb250aW51ZVJlc3BvbnNlUmVxdWVzdDtcblxuICAgICAgICBpZiAobW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0LnJlc3BvbnNlSGVhZGVycyA9IGV2ZW50LnJlc3BvbnNlSGVhZGVycztcbiAgICAgICAgICAgIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0LnJlc3BvbnNlQ29kZSAgICA9IGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWVSZXNwb25zZVJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZSAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQucmVzb3VyY2VUeXBlID09PSAnRG9jdW1lbnQnXG4gICAgICAgICAgICAmJiAhdGhpcy5faXNJZnJhbWUoZXZlbnQuZnJhbWVJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VXNlclNjcmlwdHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQgfCBGcmFtZU5hdmlnYXRlZEV2ZW50KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSB0aGlzLl9jb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0LnByZXBhcmVJbmplY3RhYmxlVXNlclNjcmlwdHMoZXZlbnRGYWN0b3J5LCB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldFVzZXJTY3JpcHRzKCkpO1xuXG4gICAgICAgIHJldHVybiBwaXBlbGluZUNvbnRleHQuaW5qZWN0YWJsZVVzZXJTY3JpcHRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3Jlc3BvbmRUb090aGVyUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoaXNSZWRpcmVjdFN0YXR1c0NvZGUoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVzcG9uc2UodGhpcy5fY2xpZW50LCB7IHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvdXJjZUluZm8gPSBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLmdldERvY3VtZW50UmVzb3VyY2VJbmZvKGV2ZW50LCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZUluZm8uZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucmVkaXJlY3RUb0Vycm9yUGFnZSh0aGlzLl9jbGllbnQsIHJlc291cmNlSW5mby5lcnJvciwgZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlc3BvbnNlKGV2ZW50LCByZXNvdXJjZUluZm8uYm9keSwgdGhpcy5fY29udGV4dEluZm8sIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnJlc291cmNlVHlwZSAhPT0gJ0RvY3VtZW50Jykge1xuICAgICAgICAgICAgY29uc3QgY29udGludWVSZXNwb25zZVJlcXVlc3QgPSB0aGlzLl9jcmVhdGVDb250aW51ZVJlc3BvbnNlUmVxdWVzdChldmVudCwgbW9kaWZpZWQpO1xuXG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0KTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGZpbGxJbmZvID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogZXZlbnQucmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBib2R5OiAgICAgICAgICAgIChyZXNvdXJjZUluZm8uYm9keSBhcyBCdWZmZXIpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9IGFzIEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdDtcblxuICAgICAgICAgICAgLy8gTk9URTogU3RyYW5nZSBiZWhhdmlvciBvZiB0aGUgQ0RQIEFQSTpcbiAgICAgICAgICAgIC8vIGlmIHdlIHBhc3MgdGhlIGVtcHR5IFwicmVzcG9uc2VTdGF0dXNUZXh0XCIgdmFsdWUsIHdlIGdldCBhbiBlcnJvciAnSW52YWxpZCBzdGF0dXMgY29kZSBvciBwaHJhc2UnLlxuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlU3RhdHVzVGV4dCAhPT0gJycpXG4gICAgICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VQaHJhc2UgPSBldmVudC5yZXNwb25zZVN0YXR1c1RleHQ7XG5cbiAgICAgICAgICAgIGlmIChpc1VuYXV0aG9yaXplZChldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyKSlcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl90cnlBdXRob3JpemVXaXRoSHR0cEJhc2ljQXV0aENyZWRlbnRpYWxzKGV2ZW50LCBmdWxmaWxsSW5mbyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJTY3JpcHRzID0gYXdhaXQgdGhpcy5fZ2V0VXNlclNjcmlwdHMoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NIVE1MUGFnZUNvbnRlbnQoXG4gICAgICAgICAgICAgICAgZnVsZmlsbEluZm8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpc0lmcmFtZTogICAgICAgICAgdGhpcy5faXNJZnJhbWUoZXZlbnQuZnJhbWVJZCksXG4gICAgICAgICAgICAgICAgICAgIHVybDogICAgICAgICAgICAgICBldmVudC5yZXF1ZXN0LnVybCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yaW5nU3RvcmFnZXM6IHRoaXMucmVzdG9yaW5nU3RvcmFnZXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRTdG9yYWdlOiAgICB0aGlzLmNvbnRleHRTdG9yYWdlLFxuICAgICAgICAgICAgICAgICAgICB1c2VyU2NyaXB0cyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVzdG9yaW5nU3RvcmFnZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJ5QXV0aG9yaXplV2l0aEh0dHBCYXNpY0F1dGhDcmVkZW50aWFscyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgZnVsZmlsbEluZm86IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuX3Rlc3RSdW4uZ2V0QXV0aENyZWRlbnRpYWxzKCk7XG5cbiAgICAgICAgaWYgKCFjcmVkZW50aWFscylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBhdXRoUmVxdWVzdCA9IGF3YWl0IHJlc2VuZEF1dGhSZXF1ZXN0KGV2ZW50LnJlcXVlc3QsIGNyZWRlbnRpYWxzKTtcblxuICAgICAgICBpZiAodHlwZW9mIGF1dGhSZXF1ZXN0ICE9PSAnc3RyaW5nJyAmJiAhaXNVbmF1dGhvcml6ZWQoYXV0aFJlcXVlc3Quc3RhdHVzKSkge1xuICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VDb2RlID0gYXV0aFJlcXVlc3Quc3RhdHVzO1xuICAgICAgICAgICAgZnVsZmlsbEluZm8uYm9keSA9IGF1dGhSZXF1ZXN0LmJvZHkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlUGhyYXNlID0gYXV0aFJlcXVlc3Quc3RhdHVzVGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUVycm9yIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogRXJyb3Ige1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gc3NsQ2VydGlmaWNhdGVFcnJvcih0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvci5lcnJvclR5cGUpO1xuXG4gICAgICAgIGlmIChldmVudC5yZXNwb25zZUVycm9yUmVhc29uID09PSAnTmFtZU5vdFJlc29sdmVkJylcbiAgICAgICAgICAgIHJldHVybiBmYWlsZWRUb0ZpbmRETlNFcnJvcihldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihldmVudC5yZXNwb25zZUVycm9yUmVhc29uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF90cnlSZXNwb25kVG9PdGhlclJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChldmVudC5yZXNwb25zZUVycm9yUmVhc29uICYmIHRoaXMuX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9jcmVhdGVFcnJvcihldmVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnJlZGlyZWN0VG9FcnJvclBhZ2UodGhpcy5fY2xpZW50LCBlcnJvciwgZXZlbnQucmVxdWVzdC51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmRUb090aGVyUmVxdWVzdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm5ldHdvcmtJZCAmJiB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLmluY2x1ZGVzKGV2ZW50Lm5ldHdvcmtJZCkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmUodGhpcy5fZmFpbGVkUmVxdWVzdElkcywgZXZlbnQubmV0d29ya0lkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlT3RoZXJSZXF1ZXN0cyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVPdGhlclJlcXVlc3RMb2dnZXIoJyVyJywgZXZlbnQpO1xuXG4gICAgICAgIGlmICghZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbiAmJiAoaXNSZXF1ZXN0KGV2ZW50KSB8fCBpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uaW5pdChldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVxdWVzdChldmVudCwgdGhpcy5fY29udGV4dEluZm8pO1xuXG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZUNvbnRleHQgPSB0aGlzLl9jb250ZXh0SW5mby5nZXRQaXBlbGluZUNvbnRleHQoZXZlbnQubmV0d29ya0lkIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICAgIGlmICghcGlwZWxpbmVDb250ZXh0IHx8ICFwaXBlbGluZUNvbnRleHQubW9jaylcbiAgICAgICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXF1ZXN0KHRoaXMuX2NsaWVudCwgZXZlbnQpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2UgPSBhd2FpdCBwaXBlbGluZUNvbnRleHQuZ2V0TW9ja1Jlc3BvbnNlKCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeShwaXBlbGluZUNvbnRleHQsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlRXZlbnQgPSBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZShtb2NrZWRSZXNwb25zZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXNwb25zZShtb2NrZWRSZXNwb25zZUV2ZW50LCBtb2NrZWRSZXNwb25zZS5nZXRCb2R5KCksIHRoaXMuX2NvbnRleHRJbmZvLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTW9ja1Jlc3BvbnNlKG1vY2tlZFJlc3BvbnNlLCBwaXBlbGluZUNvbnRleHQsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5UmVzcG9uZFRvT3RoZXJSZXF1ZXN0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90b3BGcmFtZU5hdmlnYXRpb24gKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC50eXBlID09PSAnTmF2aWdhdGlvbidcbiAgICAgICAgICAgICYmICFldmVudC5mcmFtZS5wYXJlbnRJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF91cGRhdGVDdXJyZW50RnJhbWVUcmVlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogRHVlIHRvIENEUCByZXN0cmljdGlvbnMgKGl0IGhhbmdzKSwgd2UgY2FuJ3QgZ2V0IHRoZSBmcmFtZSB0cmVlXG4gICAgICAgIC8vIHJpZ2h0IGJlZm9yZSBpbmplY3Rpbmcgc2VydmljZSBzY3JpcHRzLlxuICAgICAgICAvLyBTbywgd2UgYXJlIGZvcmNlZCB0cmFja2luZyBmcmFtZXMgdHJlZS5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fY2xpZW50LlBhZ2UuZ2V0RnJhbWVUcmVlKCk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSA9IHJlc3VsdC5mcmFtZVRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNJZnJhbWUgKGZyYW1lSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRGcmFtZVRyZWUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUuZnJhbWUuaWQgIT09IGZyYW1lSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQgKG9wdGlvbnM/OiBQcm94eWxlc3NTZXR1cE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgYXMgUHJveHlsZXNzU2V0dXBPcHRpb25zO1xuXG4gICAgICAgIC8vIE5PVEU6IFdlIGFyZSBmb3JjZWQgdG8gaGFuZGxlIGFsbCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIGF0IG9uY2VcbiAgICAgICAgLy8gYmVjYXVzZSBDRFAgQVBJIGRvZXMgbm90IGFsbG93IHNwZWNpZnlpbmcgcmVxdWVzdCBmaWx0ZXJpbmcgYmVoYXZpb3IgZm9yIGRpZmZlcmVudCBoYW5kbGVycy5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmVuYWJsZSh7XG4gICAgICAgICAgICBwYXR0ZXJuczogQUxMX1JFUVVFU1RTX0RBVEEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5GZXRjaC5vbigncmVxdWVzdFBhdXNlZCcsIGFzeW5jIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlciA9IGdldFNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMpO1xuXG4gICAgICAgICAgICBpZiAoc3BlY2lhbFJlcXVlc3RIYW5kbGVyKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5fY2xpZW50LCB0aGlzLl9vcHRpb25zKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVPdGhlclJlcXVlc3RzKGV2ZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlBhZ2Uub24oJ2ZyYW1lTmF2aWdhdGVkJywgYXN5bmMgKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoJyVmJywgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RvcEZyYW1lTmF2aWdhdGlvbihldmVudClcbiAgICAgICAgICAgICAgICB8fCBldmVudC5mcmFtZS51cmwgIT09IFNQRUNJQUxfQkxBTktfUEFHRSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmluaXQoZXZlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCB1c2VyU2NyaXB0cyA9IGF3YWl0IHRoaXMuX2dldFVzZXJTY3JpcHRzKGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzQWJvdXRCbGFua1BhZ2UoZXZlbnQsIHVzZXJTY3JpcHRzLCB0aGlzLmNvbnRleHRTdG9yYWdlLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuUGFnZS5vbignZnJhbWVTdGFydGVkTG9hZGluZycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3VwZGF0ZUN1cnJlbnRGcmFtZVRyZWUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50Lk5ldHdvcmsub24oJ2xvYWRpbmdGYWlsZWQnLCBhc3luYyAoZXZlbnQ6IExvYWRpbmdGYWlsZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKCclbCcsIGV2ZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fZmFpbGVkUmVxdWVzdElkcy5wdXNoKGV2ZW50LnJlcXVlc3RJZCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5yZXF1ZXN0SWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShldmVudC5yZXF1ZXN0SWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuUGFnZS5zZXRCeXBhc3NDU1AoeyBlbmFibGVkOiB0cnVlIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5TZWN1cml0eS5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuU2VjdXJpdHkub24oJ2NlcnRpZmljYXRlRXJyb3InLCBhc3luYyAoZXZlbnQ6IENlcnRpZmljYXRlRXJyb3JFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IgPSBldmVudDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdG9wcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGlzcG9zZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5kaXNhYmxlKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -12,6 +12,7 @@ const cdp_1 = require("./utils/cdp");
|
|
|
12
12
|
const debug_loggers_1 = require("../utils/debug-loggers");
|
|
13
13
|
const string_1 = require("./utils/string");
|
|
14
14
|
const safe_api_1 = require("./request-pipeline/safe-api");
|
|
15
|
+
const errors_1 = require("./errors");
|
|
15
16
|
const RESPONSE_REMOVED_HEADERS = [
|
|
16
17
|
'cross-origin-embedder-policy',
|
|
17
18
|
'cross-origin-opener-policy',
|
|
@@ -102,7 +103,7 @@ class ResourceInjector {
|
|
|
102
103
|
}
|
|
103
104
|
try {
|
|
104
105
|
if (responseErrorReason === 'NameNotResolved') {
|
|
105
|
-
const err =
|
|
106
|
+
const err = (0, errors_1.failedToFindDNSError)(request.url);
|
|
106
107
|
return {
|
|
107
108
|
error: err,
|
|
108
109
|
body: null,
|
|
@@ -123,9 +124,9 @@ class ResourceInjector {
|
|
|
123
124
|
};
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
|
-
async processAboutBlankPage(event, userScripts, client) {
|
|
127
|
+
async processAboutBlankPage(event, userScripts, contextStorage, client) {
|
|
127
128
|
(0, debug_loggers_1.resourceInjectorLogger)('Handle page as about:blank. Origin url: %s', event.frame.url);
|
|
128
|
-
const injectableResources = await this._prepareInjectableResources({ isIframe: false, userScripts });
|
|
129
|
+
const injectableResources = await this._prepareInjectableResources({ isIframe: false, userScripts, contextStorage });
|
|
129
130
|
const html = (0, testcafe_hammerhead_1.injectResources)(empty_page_markup_1.default, injectableResources);
|
|
130
131
|
await client.Page.setDocumentContent({
|
|
131
132
|
frameId: event.frame.id,
|
|
@@ -159,4 +160,4 @@ class ResourceInjector {
|
|
|
159
160
|
}
|
|
160
161
|
exports.default = ResourceInjector;
|
|
161
162
|
module.exports = exports.default;
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL3Jlc291cmNlLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsNkRBUTZCO0FBQzdCLHVEQUFvRTtBQUNwRSw0RUFBb0Q7QUFDcEQseURBQWdEO0FBQ2hELGlEQUFtRDtBQUNuRCxxQ0FBbUQ7QUFTbkQsMERBQWdFO0FBQ2hFLDJDQUl3QjtBQUN4QiwwREFBaUU7QUFHakUsTUFBTSx3QkFBd0IsR0FBRztJQUM3Qiw4QkFBOEI7SUFDOUIsNEJBQTRCO0lBQzVCLDhCQUE4QjtDQUNqQyxDQUFDO0FBRUYsTUFBcUIsZ0JBQWdCO0lBSWpDLFlBQW9CLGFBQTRCLEVBQUUsb0JBQTBDO1FBQ3hGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFVLGFBQWEsQ0FBQztJQUMvQyxDQUFDO0lBRU8sK0JBQStCLENBQUUsY0FBMEM7UUFDL0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLE9BQU8sMkZBQTJGLEtBQUssTUFBTSxDQUFDO0lBQ2xILENBQUM7SUFFTyx5QkFBeUIsQ0FBRSxpQkFBc0Q7UUFDckYsSUFBSSxDQUFDLGlCQUFpQjtZQUNsQixPQUFPLG1CQUFtQixDQUFDO1FBRS9CLE9BQU87Ozs7K0JBSWdCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUM7Ozs7Ozs7Ozs7U0FVdkQsQ0FBQztJQUNOLENBQUM7SUFFTyxvQkFBb0IsQ0FBRSxLQUFZLEVBQUUsWUFBc0I7UUFDOUQs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QUNqQyxtQkFBbUIsRUFDbkIsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLDBCQUEwQixDQUFDLENBQ3RFLENBQUM7WUFFRixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUM7U0FDOUU7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUFFLGtCQUF5QyxFQUFFLE1BQW1CO1FBQ2pHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsSUFBYyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVPLGtDQUFrQyxDQUFFLDBCQUFzRDtRQUM5RixNQUFNLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsMEJBQTBCLENBQUM7UUFFOUQsSUFBSSxHQUFHLElBQUksaUJBQWlCLEVBQUU7WUFDMUIsT0FBTztnQkFDSCxJQUFJLEVBQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSTtnQkFDNUIsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFO2FBQ2hELENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNKO0FBMUxELG1DQTBMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBGdWxmaWxsUmVxdWVzdFJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5GdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5pbXBvcnQgSGVhZGVyRW50cnkgPSBQcm90b2NvbC5GZXRjaC5IZWFkZXJFbnRyeTtcbmltcG9ydCB7XG4gICAgaW5qZWN0UmVzb3VyY2VzLFxuICAgIFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzLFxuICAgIElOSkVDVEFCTEVfU0NSSVBUUyBhcyBIQU1NRVJIRUFEX0lOSkVDVEFCTEVfU0NSSVBUUyxcbiAgICBnZXRBc3NldFBhdGgsXG4gICAgUGFnZVJlc3RvcmVTdG9yYWdlc09wdGlvbnMsXG4gICAgU3RvcmFnZXNTbmFwc2hvdCxcbiAgICBQcm94eSxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBTQ1JJUFRTLCBURVNUQ0FGRV9VSV9TVFlMRVMgfSBmcm9tICcuLi9hc3NldHMvaW5qZWN0YWJsZXMnO1xuaW1wb3J0IEVNUFRZX1BBR0VfTUFSS1VQIGZyb20gJy4vZW1wdHktcGFnZS1tYXJrdXAnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5pbXBvcnQgeyBQYWdlTG9hZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3Rlc3QtcnVuJztcbmltcG9ydCB7IHJlZGlyZWN0LCBuYXZpZ2F0ZVRvIH0gZnJvbSAnLi91dGlscy9jZHAnO1xuXG5pbXBvcnQge1xuICAgIERvY3VtZW50UmVzb3VyY2VJbmZvLFxuICAgIEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zLFxuICAgIFNlc3Npb25TdG9yYWdlSW5mbyxcbiAgICBTcGVjaWFsU2VydmljZVJvdXRlcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB7IHJlc291cmNlSW5qZWN0b3JMb2dnZXIgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcbmltcG9ydCB7XG4gICAgZ2V0UmVzcG9uc2VBc1N0cmluZyxcbiAgICBzdHJpbmdpZnlIZWFkZXJWYWx1ZXMsXG4gICAgdG9CYXNlNjRTdHJpbmcsXG59IGZyb20gJy4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IHNhZmVGdWxmaWxsUmVxdWVzdCB9IGZyb20gJy4vcmVxdWVzdC1waXBlbGluZS9zYWZlLWFwaSc7XG5pbXBvcnQgVGVzdFJ1bkJyaWRnZSBmcm9tICcuL3JlcXVlc3QtcGlwZWxpbmUvdGVzdC1ydW4tYnJpZGdlJztcblxuY29uc3QgUkVTUE9OU0VfUkVNT1ZFRF9IRUFERVJTID0gW1xuICAgICdjcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5JyxcbiAgICAnY3Jvc3Mtb3JpZ2luLW9wZW5lci1wb2xpY3knLFxuICAgICdjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5Jyxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc291cmNlSW5qZWN0b3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlLCBzcGVjaWFsU2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXMpIHtcbiAgICAgICAgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMgPSBzcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICAgICAgdGhpcy5fdGVzdFJ1bkJyaWRnZSAgICAgICAgPSB0ZXN0UnVuQnJpZGdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlc3RvcmVDb250ZXh0U3RvcmFnZVNjcmlwdCAoY29udGV4dFN0b3JhZ2U/OiBTZXNzaW9uU3RvcmFnZUluZm8gfCBudWxsKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRlc3RSdW4gPSB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEN1cnJlbnRUZXN0UnVuKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gSlNPTi5zdHJpbmdpZnkoY29udGV4dFN0b3JhZ2U/LltjdXJyZW50VGVzdFJ1bi5pZF0gfHwgJycpO1xuXG4gICAgICAgIHJldHVybiBgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJyVwcm94eWxlc3NDb250ZXh0U3RvcmFnZSUnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6ICR7dmFsdWV9IH0pO2A7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UmVzdG9yZVN0b3JhZ2VzU2NyaXB0IChyZXN0b3JpbmdTdG9yYWdlczogU3RvcmFnZXNTbmFwc2hvdCB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXJlc3RvcmluZ1N0b3JhZ2VzKVxuICAgICAgICAgICAgcmV0dXJuICcoZnVuY3Rpb24oKSB7fSkoKSc7XG5cbiAgICAgICAgcmV0dXJuIGAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSAke0pTT04uc3RyaW5naWZ5KHJlc3RvcmluZ1N0b3JhZ2VzKX07XG4gICAgICAgICAgICBjb25zdCBscyAgICAgICA9IEpTT04ucGFyc2Uoc25hcHNob3QubG9jYWxTdG9yYWdlKTtcbiAgICAgICAgICAgIGNvbnN0IHNzICAgICAgID0gSlNPTi5wYXJzZShzbmFwc2hvdC5zZXNzaW9uU3RvcmFnZSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbHNbMF0ubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGxzWzBdW2ldLCBsc1sxXVtpXSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3NbMF0ubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oc3NbMF1baV0sIHNzWzFdW2ldKTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlUmVsYXRpdmVVcmxzIChwcm94eTogUHJveHksIHJlbGF0aXZlVXJsczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiByZWxhdGl2ZVVybHMubWFwKHVybCA9PiBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKHVybCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVJbmplY3RhYmxlUmVzb3VyY2VzICh7IGlzSWZyYW1lLCByZXN0b3JpbmdTdG9yYWdlcywgY29udGV4dFN0b3JhZ2UsIHVzZXJTY3JpcHRzIH06IEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKTogUHJvbWlzZTxQYWdlSW5qZWN0YWJsZVJlc291cmNlcyB8IG51bGw+IHtcbiAgICAgICAgaWYgKCF0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEN1cnJlbnRUZXN0UnVuKCkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB0YXNrU2NyaXB0ID0gYXdhaXQgdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRUYXNrU2NyaXB0KHsgaXNJZnJhbWUsIHJlc3RvcmluZ1N0b3JhZ2VzLCBjb250ZXh0U3RvcmFnZSwgdXNlclNjcmlwdHMgfSk7XG4gICAgICAgIGNvbnN0IHByb3h5ICAgICAgPSB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEJyb3dzZXJDb25uZWN0aW9uKCkuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5O1xuXG4gICAgICAgIGNvbnN0IGluamVjdGFibGVSZXNvdXJjZXMgPSB7XG4gICAgICAgICAgICBzdHlsZXNoZWV0czogW1xuICAgICAgICAgICAgICAgIFRFU1RDQUZFX1VJX1NUWUxFUyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzY3JpcHRzOiBbXG4gICAgICAgICAgICAgICAgLi4uSEFNTUVSSEVBRF9JTkpFQ1RBQkxFX1NDUklQVFMubWFwKGhzID0+IGdldEFzc2V0UGF0aChocywgcHJveHkub3B0aW9ucy5kZXZlbG9wbWVudE1vZGUpKSxcbiAgICAgICAgICAgICAgICAuLi5TQ1JJUFRTLm1hcChzID0+IGdldEFzc2V0UGF0aChzLCBwcm94eS5vcHRpb25zLmRldmVsb3BtZW50TW9kZSkpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGVtYmVkZGVkU2NyaXB0czogWyB0aGlzLl9nZXRSZXN0b3JlU3RvcmFnZXNTY3JpcHQocmVzdG9yaW5nU3RvcmFnZXMpLCB0aGlzLl9nZXRSZXN0b3JlQ29udGV4dFN0b3JhZ2VTY3JpcHQoY29udGV4dFN0b3JhZ2UpLCB0YXNrU2NyaXB0XSxcbiAgICAgICAgICAgIHVzZXJTY3JpcHRzOiAgICAgdXNlclNjcmlwdHMgfHwgW10sXG4gICAgICAgIH07XG5cbiAgICAgICAgaW5qZWN0YWJsZVJlc291cmNlcy5zY3JpcHRzICAgICA9IHRoaXMuX3Jlc29sdmVSZWxhdGl2ZVVybHMocHJveHksIGluamVjdGFibGVSZXNvdXJjZXMuc2NyaXB0cyk7XG4gICAgICAgIGluamVjdGFibGVSZXNvdXJjZXMudXNlclNjcmlwdHMgPSB0aGlzLl9yZXNvbHZlUmVsYXRpdmVVcmxzKHByb3h5LCBpbmplY3RhYmxlUmVzb3VyY2VzLnVzZXJTY3JpcHRzKTtcbiAgICAgICAgaW5qZWN0YWJsZVJlc291cmNlcy5zdHlsZXNoZWV0cyA9IHRoaXMuX3Jlc29sdmVSZWxhdGl2ZVVybHMocHJveHksIGluamVjdGFibGVSZXNvdXJjZXMuc3R5bGVzaGVldHMpO1xuXG4gICAgICAgIHJldHVybiBpbmplY3RhYmxlUmVzb3VyY2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Byb2Nlc3NSZXNwb25zZUhlYWRlcnMgKGhlYWRlcnM6IEhlYWRlckVudHJ5W10gfCB1bmRlZmluZWQpOiBIZWFkZXJFbnRyeVtdIHtcbiAgICAgICAgaWYgKCFoZWFkZXJzKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmZpbHRlcihoZWFkZXIgPT4gIVJFU1BPTlNFX1JFTU9WRURfSEVBREVSUy5pbmNsdWRlcyhoZWFkZXIubmFtZS50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUhlYWRlclZhbHVlcyhoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9mdWxmaWxsUmVxdWVzdCAoY2xpZW50OiBQcm90b2NvbEFwaSwgZnVsZmlsbFJlcXVlc3RJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QsIGJvZHk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBzYWZlRnVsZmlsbFJlcXVlc3QoY2xpZW50LCB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGZ1bGZpbGxSZXF1ZXN0SW5mby5yZXF1ZXN0SWQsXG4gICAgICAgICAgICByZXNwb25zZUNvZGU6ICAgIGZ1bGZpbGxSZXF1ZXN0SW5mby5yZXNwb25zZUNvZGUgfHwgU3RhdHVzQ29kZXMuT0ssXG4gICAgICAgICAgICByZXNwb25zZVBocmFzZTogIGZ1bGZpbGxSZXF1ZXN0SW5mby5yZXNwb25zZVBocmFzZSxcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogdGhpcy5fcHJvY2Vzc1Jlc3BvbnNlSGVhZGVycyhmdWxmaWxsUmVxdWVzdEluZm8ucmVzcG9uc2VIZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgdG9CYXNlNjRTdHJpbmcoYm9keSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWRpcmVjdFRvRXJyb3JQYWdlIChjbGllbnQ6IFByb3RvY29sQXBpLCBlcnI6IEVycm9yLCB1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VGVzdFJ1biA9IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0Q3VycmVudFRlc3RSdW4oKTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRUZXN0UnVuKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGN1cnJlbnRUZXN0UnVuLnBlbmRpbmdQYWdlRXJyb3IgPSBuZXcgUGFnZUxvYWRFcnJvcihlcnIsIHVybCk7XG5cbiAgICAgICAgYXdhaXQgbmF2aWdhdGVUbyhjbGllbnQsIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzLmVycm9yUGFnZTEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREb2N1bWVudFJlc291cmNlSW5mbyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgY2xpZW50OiBQcm90b2NvbEFwaSk6IFByb21pc2U8RG9jdW1lbnRSZXNvdXJjZUluZm8+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHJlc3BvbnNlRXJyb3JSZWFzb24sXG4gICAgICAgICAgICByZXNvdXJjZVR5cGUsXG4gICAgICAgIH0gPSBldmVudDtcblxuICAgICAgICBpZiAocmVzb3VyY2VUeXBlICE9PSAnRG9jdW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIGJvZHk6ICBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VFcnJvclJlYXNvbiA9PT0gJ05hbWVOb3RSZXNvbHZlZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYEZhaWxlZCB0byBmaW5kIGEgRE5TLXJlY29yZCBmb3IgdGhlIHJlc291cmNlIGF0IFwiJHtldmVudC5yZXF1ZXN0LnVybH1cImApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICAgICAgYm9keTogIG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VPYmogPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VTdHIgPSBnZXRSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlT2JqKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBib2R5OiAgQnVmZmVyLmZyb20ocmVzcG9uc2VTdHIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXNvdXJjZUluamVjdG9yTG9nZ2VyKCdGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiAlcycsIHJlcXVlc3QudXJsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICAgIGJvZHk6ICBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzQWJvdXRCbGFua1BhZ2UgKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50LCB1c2VyU2NyaXB0czogc3RyaW5nW10sIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmVzb3VyY2VJbmplY3RvckxvZ2dlcignSGFuZGxlIHBhZ2UgYXMgYWJvdXQ6YmxhbmsuIE9yaWdpbiB1cmw6ICVzJywgZXZlbnQuZnJhbWUudXJsKTtcblxuICAgICAgICBjb25zdCBpbmplY3RhYmxlUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5fcHJlcGFyZUluamVjdGFibGVSZXNvdXJjZXMoeyBpc0lmcmFtZTogZmFsc2UsIHVzZXJTY3JpcHRzIH0pIGFzIFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzO1xuICAgICAgICBjb25zdCBodG1sICAgICAgICAgICAgICAgID0gaW5qZWN0UmVzb3VyY2VzKEVNUFRZX1BBR0VfTUFSS1VQLCBpbmplY3RhYmxlUmVzb3VyY2VzKTtcblxuICAgICAgICBhd2FpdCBjbGllbnQuUGFnZS5zZXREb2N1bWVudENvbnRlbnQoe1xuICAgICAgICAgICAgZnJhbWVJZDogZXZlbnQuZnJhbWUuaWQsXG4gICAgICAgICAgICBodG1sLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJvY2Vzc0hUTUxQYWdlQ29udGVudCAoZnVsZmlsbFJlcXVlc3RJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QsIGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zOiBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucywgY2xpZW50OiBQcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RhYmxlUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5fcHJlcGFyZUluamVjdGFibGVSZXNvdXJjZXMoaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMpO1xuXG4gICAgICAgIC8vIE5PVEU6IGFuIHVuaGFuZGxlZCBleGNlcHRpb24gaW50ZXJydXB0cyB0aGUgdGVzdCBleGVjdXRpb24sXG4gICAgICAgIC8vIGFuZCB3ZSBhcmUgZm9yY2UgdG8gcmVkaXJlY3QgbWFudWFsbHkgdG8gdGhlIGlkbGUgcGFnZS5cbiAgICAgICAgaWYgKCFpbmplY3RhYmxlUmVzb3VyY2VzKVxuICAgICAgICAgICAgYXdhaXQgcmVkaXJlY3QoY2xpZW50LCBmdWxmaWxsUmVxdWVzdEluZm8ucmVxdWVzdElkLCB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcy5pZGxlUGFnZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFJlc3BvbnNlU3RyID0gaW5qZWN0UmVzb3VyY2VzKFxuICAgICAgICAgICAgICAgIGZ1bGZpbGxSZXF1ZXN0SW5mby5ib2R5IGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBpbmplY3RhYmxlUmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dldFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyhpbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9mdWxmaWxsUmVxdWVzdChjbGllbnQsIGZ1bGZpbGxSZXF1ZXN0SW5mbywgdXBkYXRlZFJlc3BvbnNlU3RyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzTm9uUHJveGllZENvbnRlbnQgKGZ1bGZpbGxSZXF1ZXN0SW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0LCBjbGllbnQ6IFByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Z1bGZpbGxSZXF1ZXN0KGNsaWVudCwgZnVsZmlsbFJlcXVlc3RJbmZvLCBmdWxmaWxsUmVxdWVzdEluZm8uYm9keSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFBhZ2VJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyAoaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnM6IEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKTogUGFnZVJlc3RvcmVTdG9yYWdlc09wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB7IHVybCwgcmVzdG9yaW5nU3RvcmFnZXMgfSA9IGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zO1xuXG4gICAgICAgIGlmICh1cmwgJiYgcmVzdG9yaW5nU3RvcmFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaG9zdDogICAgICBuZXcgVVJMKHVybCkuaG9zdCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0U2Vzc2lvbklkKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG59XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJveHlsZXNzL3Jlc291cmNlLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsNkRBUTZCO0FBQzdCLHVEQUFvRTtBQUNwRSw0RUFBb0Q7QUFDcEQseURBQWdEO0FBQ2hELGlEQUFtRDtBQUNuRCxxQ0FBbUQ7QUFTbkQsMERBQWdFO0FBQ2hFLDJDQUl3QjtBQUN4QiwwREFBaUU7QUFFakUscUNBQWdEO0FBRWhELE1BQU0sd0JBQXdCLEdBQUc7SUFDN0IsOEJBQThCO0lBQzlCLDRCQUE0QjtJQUM1Qiw4QkFBOEI7Q0FDakMsQ0FBQztBQUVGLE1BQXFCLGdCQUFnQjtJQUlqQyxZQUFvQixhQUE0QixFQUFFLG9CQUEwQztRQUN4RixJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBVSxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVPLCtCQUErQixDQUFFLGNBQTBDO1FBQy9FLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsS0FBSSxFQUFFLENBQUMsQ0FBQztRQUV4RSxPQUFPLDJGQUEyRixLQUFLLE1BQU0sQ0FBQztJQUNsSCxDQUFDO0lBRU8seUJBQXlCLENBQUUsaUJBQXNEO1FBQ3JGLElBQUksQ0FBQyxpQkFBaUI7WUFDbEIsT0FBTyxtQkFBbUIsQ0FBQztRQUUvQixPQUFPOzs7OytCQUlnQixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDOzs7Ozs7Ozs7O1NBVXZELENBQUM7SUFDTixDQUFDO0lBRU8sb0JBQW9CLENBQUUsS0FBWSxFQUFF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a0IsQ0FBQyxJQUFjLEVBQ2pDLG1CQUFtQixFQUNuQixJQUFJLENBQUMsa0NBQWtDLENBQUMsMEJBQTBCLENBQUMsQ0FDdEUsQ0FBQztZQUVGLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUM5RTtJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCLENBQUUsa0JBQXlDLEVBQUUsTUFBbUI7UUFDakcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxJQUFjLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sa0NBQWtDLENBQUUsMEJBQXNEO1FBQzlGLE1BQU0sRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsR0FBRywwQkFBMEIsQ0FBQztRQUU5RCxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRTtZQUMxQixPQUFPO2dCQUNILElBQUksRUFBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJO2dCQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUU7YUFDaEQsQ0FBQztTQUNMO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0o7QUExTEQsbUNBMExDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCA9IFByb3RvY29sLkZldGNoLkZ1bGZpbGxSZXF1ZXN0UmVxdWVzdDtcbmltcG9ydCBIZWFkZXJFbnRyeSA9IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5O1xuaW1wb3J0IHtcbiAgICBpbmplY3RSZXNvdXJjZXMsXG4gICAgUGFnZUluamVjdGFibGVSZXNvdXJjZXMsXG4gICAgSU5KRUNUQUJMRV9TQ1JJUFRTIGFzIEhBTU1FUkhFQURfSU5KRUNUQUJMRV9TQ1JJUFRTLFxuICAgIGdldEFzc2V0UGF0aCxcbiAgICBQYWdlUmVzdG9yZVN0b3JhZ2VzT3B0aW9ucyxcbiAgICBTdG9yYWdlc1NuYXBzaG90LFxuICAgIFByb3h5LFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IFNDUklQVFMsIFRFU1RDQUZFX1VJX1NUWUxFUyB9IGZyb20gJy4uL2Fzc2V0cy9pbmplY3RhYmxlcyc7XG5pbXBvcnQgRU1QVFlfUEFHRV9NQVJLVVAgZnJvbSAnLi9lbXB0eS1wYWdlLW1hcmt1cCc7XG5pbXBvcnQgeyBTdGF0dXNDb2RlcyB9IGZyb20gJ2h0dHAtc3RhdHVzLWNvZGVzJztcbmltcG9ydCB7IFBhZ2VMb2FkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4nO1xuaW1wb3J0IHsgcmVkaXJlY3QsIG5hdmlnYXRlVG8gfSBmcm9tICcuL3V0aWxzL2NkcCc7XG5cbmltcG9ydCB7XG4gICAgRG9jdW1lbnRSZXNvdXJjZUluZm8sXG4gICAgSW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMsXG4gICAgU2Vzc2lvblN0b3JhZ2VJbmZvLFxuICAgIFNwZWNpYWxTZXJ2aWNlUm91dGVzLFxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgcmVzb3VyY2VJbmplY3RvckxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuaW1wb3J0IHtcbiAgICBnZXRSZXNwb25zZUFzU3RyaW5nLFxuICAgIHN0cmluZ2lmeUhlYWRlclZhbHVlcyxcbiAgICB0b0Jhc2U2NFN0cmluZyxcbn0gZnJvbSAnLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHsgc2FmZUZ1bGZpbGxSZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0LXBpcGVsaW5lL3NhZmUtYXBpJztcbmltcG9ydCBUZXN0UnVuQnJpZGdlIGZyb20gJy4vcmVxdWVzdC1waXBlbGluZS90ZXN0LXJ1bi1icmlkZ2UnO1xuaW1wb3J0IHsgZmFpbGVkVG9GaW5kRE5TRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmNvbnN0IFJFU1BPTlNFX1JFTU9WRURfSEVBREVSUyA9IFtcbiAgICAnY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeScsXG4gICAgJ2Nyb3NzLW9yaWdpbi1vcGVuZXItcG9saWN5JyxcbiAgICAnY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeScsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvdXJjZUluamVjdG9yIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcGVjaWFsU2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdFJ1bkJyaWRnZTogVGVzdFJ1bkJyaWRnZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAodGVzdFJ1bkJyaWRnZTogVGVzdFJ1bkJyaWRnZSwgc3BlY2lhbFNlcnZpY2VSb3V0ZXM6IFNwZWNpYWxTZXJ2aWNlUm91dGVzKSB7XG4gICAgICAgIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzID0gc3BlY2lhbFNlcnZpY2VSb3V0ZXM7XG4gICAgICAgIHRoaXMuX3Rlc3RSdW5CcmlkZ2UgICAgICAgID0gdGVzdFJ1bkJyaWRnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRSZXN0b3JlQ29udGV4dFN0b3JhZ2VTY3JpcHQgKGNvbnRleHRTdG9yYWdlPzogU2Vzc2lvblN0b3JhZ2VJbmZvIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUZXN0UnVuID0gdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRDdXJyZW50VGVzdFJ1bigpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KGNvbnRleHRTdG9yYWdlPy5bY3VycmVudFRlc3RSdW4uaWRdIHx8ICcnKTtcblxuICAgICAgICByZXR1cm4gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICclcHJveHlsZXNzQ29udGV4dFN0b3JhZ2UlJywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiAke3ZhbHVlfSB9KTtgO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlc3RvcmVTdG9yYWdlc1NjcmlwdCAocmVzdG9yaW5nU3RvcmFnZXM6IFN0b3JhZ2VzU25hcHNob3QgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFyZXN0b3JpbmdTdG9yYWdlcylcbiAgICAgICAgICAgIHJldHVybiAnKGZ1bmN0aW9uKCkge30pKCknO1xuXG4gICAgICAgIHJldHVybiBgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5jbGVhcigpO1xuICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gJHtKU09OLnN0cmluZ2lmeShyZXN0b3JpbmdTdG9yYWdlcyl9O1xuICAgICAgICAgICAgY29uc3QgbHMgICAgICAgPSBKU09OLnBhcnNlKHNuYXBzaG90LmxvY2FsU3RvcmFnZSk7XG4gICAgICAgICAgICBjb25zdCBzcyAgICAgICA9IEpTT04ucGFyc2Uoc25hcHNob3Quc2Vzc2lvblN0b3JhZ2UpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxzWzBdLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShsc1swXVtpXSwgbHNbMV1baV0pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNzWzBdLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHNzWzBdW2ldLCBzc1sxXVtpXSk7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZVJlbGF0aXZlVXJscyAocHJveHk6IFByb3h5LCByZWxhdGl2ZVVybHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gcmVsYXRpdmVVcmxzLm1hcCh1cmwgPT4gcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybCh1cmwpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlSW5qZWN0YWJsZVJlc291cmNlcyAoeyBpc0lmcmFtZSwgcmVzdG9yaW5nU3RvcmFnZXMsIGNvbnRleHRTdG9yYWdlLCB1c2VyU2NyaXB0cyB9OiBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyk6IFByb21pc2U8UGFnZUluamVjdGFibGVSZXNvdXJjZXMgfCBudWxsPiB7XG4gICAgICAgIGlmICghdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRDdXJyZW50VGVzdFJ1bigpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgdGFza1NjcmlwdCA9IGF3YWl0IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0VGFza1NjcmlwdCh7IGlzSWZyYW1lLCByZXN0b3JpbmdTdG9yYWdlcywgY29udGV4dFN0b3JhZ2UsIHVzZXJTY3JpcHRzIH0pO1xuICAgICAgICBjb25zdCBwcm94eSAgICAgID0gdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRCcm93c2VyQ29ubmVjdGlvbigpLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eTtcblxuICAgICAgICBjb25zdCBpbmplY3RhYmxlUmVzb3VyY2VzID0ge1xuICAgICAgICAgICAgc3R5bGVzaGVldHM6IFtcbiAgICAgICAgICAgICAgICBURVNUQ0FGRV9VSV9TVFlMRVMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc2NyaXB0czogW1xuICAgICAgICAgICAgICAgIC4uLkhBTU1FUkhFQURfSU5KRUNUQUJMRV9TQ1JJUFRTLm1hcChocyA9PiBnZXRBc3NldFBhdGgoaHMsIHByb3h5Lm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlKSksXG4gICAgICAgICAgICAgICAgLi4uU0NSSVBUUy5tYXAocyA9PiBnZXRBc3NldFBhdGgocywgcHJveHkub3B0aW9ucy5kZXZlbG9wbWVudE1vZGUpKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBlbWJlZGRlZFNjcmlwdHM6IFsgdGhpcy5fZ2V0UmVzdG9yZVN0b3JhZ2VzU2NyaXB0KHJlc3RvcmluZ1N0b3JhZ2VzKSwgdGhpcy5fZ2V0UmVzdG9yZUNvbnRleHRTdG9yYWdlU2NyaXB0KGNvbnRleHRTdG9yYWdlKSwgdGFza1NjcmlwdF0sXG4gICAgICAgICAgICB1c2VyU2NyaXB0czogICAgIHVzZXJTY3JpcHRzIHx8IFtdLFxuICAgICAgICB9O1xuXG4gICAgICAgIGluamVjdGFibGVSZXNvdXJjZXMuc2NyaXB0cyAgICAgPSB0aGlzLl9yZXNvbHZlUmVsYXRpdmVVcmxzKHByb3h5LCBpbmplY3RhYmxlUmVzb3VyY2VzLnNjcmlwdHMpO1xuICAgICAgICBpbmplY3RhYmxlUmVzb3VyY2VzLnVzZXJTY3JpcHRzID0gdGhpcy5fcmVzb2x2ZVJlbGF0aXZlVXJscyhwcm94eSwgaW5qZWN0YWJsZVJlc291cmNlcy51c2VyU2NyaXB0cyk7XG4gICAgICAgIGluamVjdGFibGVSZXNvdXJjZXMuc3R5bGVzaGVldHMgPSB0aGlzLl9yZXNvbHZlUmVsYXRpdmVVcmxzKHByb3h5LCBpbmplY3RhYmxlUmVzb3VyY2VzLnN0eWxlc2hlZXRzKTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZVJlc291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcm9jZXNzUmVzcG9uc2VIZWFkZXJzIChoZWFkZXJzOiBIZWFkZXJFbnRyeVtdIHwgdW5kZWZpbmVkKTogSGVhZGVyRW50cnlbXSB7XG4gICAgICAgIGlmICghaGVhZGVycylcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5maWx0ZXIoaGVhZGVyID0+ICFSRVNQT05TRV9SRU1PVkVEX0hFQURFUlMuaW5jbHVkZXMoaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlIZWFkZXJWYWx1ZXMoaGVhZGVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZnVsZmlsbFJlcXVlc3QgKGNsaWVudDogUHJvdG9jb2xBcGksIGZ1bGZpbGxSZXF1ZXN0SW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0LCBib2R5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgc2FmZUZ1bGZpbGxSZXF1ZXN0KGNsaWVudCwge1xuICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBmdWxmaWxsUmVxdWVzdEluZm8ucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBmdWxmaWxsUmVxdWVzdEluZm8ucmVzcG9uc2VDb2RlIHx8IFN0YXR1c0NvZGVzLk9LLFxuICAgICAgICAgICAgcmVzcG9uc2VQaHJhc2U6ICBmdWxmaWxsUmVxdWVzdEluZm8ucmVzcG9uc2VQaHJhc2UsXG4gICAgICAgICAgICByZXNwb25zZUhlYWRlcnM6IHRoaXMuX3Byb2Nlc3NSZXNwb25zZUhlYWRlcnMoZnVsZmlsbFJlcXVlc3RJbmZvLnJlc3BvbnNlSGVhZGVycyksXG4gICAgICAgICAgICBib2R5OiAgICAgICAgICAgIHRvQmFzZTY0U3RyaW5nKGJvZHkpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVkaXJlY3RUb0Vycm9yUGFnZSAoY2xpZW50OiBQcm90b2NvbEFwaSwgZXJyOiBFcnJvciwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFRlc3RSdW4gPSB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEN1cnJlbnRUZXN0UnVuKCk7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50VGVzdFJ1bilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjdXJyZW50VGVzdFJ1bi5wZW5kaW5nUGFnZUVycm9yID0gbmV3IFBhZ2VMb2FkRXJyb3IoZXJyLCB1cmwpO1xuXG4gICAgICAgIGF3YWl0IG5hdmlnYXRlVG8oY2xpZW50LCB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcy5lcnJvclBhZ2UxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RG9jdW1lbnRSZXNvdXJjZUluZm8gKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPERvY3VtZW50UmVzb3VyY2VJbmZvPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICByZXNwb25zZUVycm9yUmVhc29uLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlLFxuICAgICAgICB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKHJlc291cmNlVHlwZSAhPT0gJ0RvY3VtZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBib2R5OiAgbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRXJyb3JSZWFzb24gPT09ICdOYW1lTm90UmVzb2x2ZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyID0gZmFpbGVkVG9GaW5kRE5TRXJyb3IocmVxdWVzdC51cmwpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICAgICAgYm9keTogIG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VPYmogPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkIH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VTdHIgPSBnZXRSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlT2JqKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBib2R5OiAgQnVmZmVyLmZyb20ocmVzcG9uc2VTdHIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXNvdXJjZUluamVjdG9yTG9nZ2VyKCdGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiAlcycsIHJlcXVlc3QudXJsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICAgIGJvZHk6ICBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzQWJvdXRCbGFua1BhZ2UgKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50LCB1c2VyU2NyaXB0czogc3RyaW5nW10sIGNvbnRleHRTdG9yYWdlOiBTZXNzaW9uU3RvcmFnZUluZm8gfCBudWxsLCBjbGllbnQ6IFByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJlc291cmNlSW5qZWN0b3JMb2dnZXIoJ0hhbmRsZSBwYWdlIGFzIGFib3V0OmJsYW5rLiBPcmlnaW4gdXJsOiAlcycsIGV2ZW50LmZyYW1lLnVybCk7XG5cbiAgICAgICAgY29uc3QgaW5qZWN0YWJsZVJlc291cmNlcyA9IGF3YWl0IHRoaXMuX3ByZXBhcmVJbmplY3RhYmxlUmVzb3VyY2VzKHsgaXNJZnJhbWU6IGZhbHNlLCB1c2VyU2NyaXB0cywgY29udGV4dFN0b3JhZ2UgfSkgYXMgUGFnZUluamVjdGFibGVSZXNvdXJjZXM7XG4gICAgICAgIGNvbnN0IGh0bWwgICAgICAgICAgICAgICAgPSBpbmplY3RSZXNvdXJjZXMoRU1QVFlfUEFHRV9NQVJLVVAsIGluamVjdGFibGVSZXNvdXJjZXMpO1xuXG4gICAgICAgIGF3YWl0IGNsaWVudC5QYWdlLnNldERvY3VtZW50Q29udGVudCh7XG4gICAgICAgICAgICBmcmFtZUlkOiBldmVudC5mcmFtZS5pZCxcbiAgICAgICAgICAgIGh0bWwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcm9jZXNzSFRNTFBhZ2VDb250ZW50IChmdWxmaWxsUmVxdWVzdEluZm86IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCwgaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnM6IEluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zLCBjbGllbnQ6IFByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGluamVjdGFibGVSZXNvdXJjZXMgPSBhd2FpdCB0aGlzLl9wcmVwYXJlSW5qZWN0YWJsZVJlc291cmNlcyhpbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gTk9URTogYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbnRlcnJ1cHRzIHRoZSB0ZXN0IGV4ZWN1dGlvbixcbiAgICAgICAgLy8gYW5kIHdlIGFyZSBmb3JjZSB0byByZWRpcmVjdCBtYW51YWxseSB0byB0aGUgaWRsZSBwYWdlLlxuICAgICAgICBpZiAoIWluamVjdGFibGVSZXNvdXJjZXMpXG4gICAgICAgICAgICBhd2FpdCByZWRpcmVjdChjbGllbnQsIGZ1bGZpbGxSZXF1ZXN0SW5mby5yZXF1ZXN0SWQsIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzLmlkbGVQYWdlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkUmVzcG9uc2VTdHIgPSBpbmplY3RSZXNvdXJjZXMoXG4gICAgICAgICAgICAgICAgZnVsZmlsbFJlcXVlc3RJbmZvLmJvZHkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGluamVjdGFibGVSZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0UGFnZUluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKGluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Z1bGZpbGxSZXF1ZXN0KGNsaWVudCwgZnVsZmlsbFJlcXVlc3RJbmZvLCB1cGRhdGVkUmVzcG9uc2VTdHIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByb2Nlc3NOb25Qcm94aWVkQ29udGVudCAoZnVsZmlsbFJlcXVlc3RJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QsIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZnVsZmlsbFJlcXVlc3QoY2xpZW50LCBmdWxmaWxsUmVxdWVzdEluZm8sIGZ1bGZpbGxSZXF1ZXN0SW5mby5ib2R5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UGFnZUluamVjdGFibGVSZXNvdXJjZXNPcHRpb25zIChpbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9uczogSW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnMpOiBQYWdlUmVzdG9yZVN0b3JhZ2VzT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHsgdXJsLCByZXN0b3JpbmdTdG9yYWdlcyB9ID0gaW5qZWN0YWJsZVJlc291cmNlc09wdGlvbnM7XG5cbiAgICAgICAgaWYgKHVybCAmJiByZXN0b3JpbmdTdG9yYWdlcykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBob3N0OiAgICAgIG5ldyBVUkwodXJsKS5ob3N0LFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRTZXNzaW9uSWQoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbn1cbiJdfQ==
|