@cloudbase/oauth 2.8.3-beta.0 → 2.8.4-beta.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/dist/cjs/auth/apis.d.ts +3 -1
- package/dist/cjs/auth/apis.js +11 -6
- package/dist/cjs/captcha/captcha.js +6 -2
- package/dist/cjs/oauth2client/oauth2client.js +38 -30
- package/dist/cjs/utils/urlSearchParams.d.ts +13 -0
- package/dist/cjs/utils/urlSearchParams.js +66 -0
- package/dist/esm/auth/apis.d.ts +3 -1
- package/dist/esm/auth/apis.js +7 -5
- package/dist/esm/captcha/captcha.js +2 -1
- package/dist/esm/oauth2client/oauth2client.js +6 -1
- package/dist/esm/utils/urlSearchParams.d.ts +13 -0
- package/dist/esm/utils/urlSearchParams.js +57 -0
- package/dist/miniprogram/index.js +1 -1
- package/package.json +2 -2
- package/src/auth/apis.ts +7 -6
- package/src/captcha/captcha.ts +2 -1
- package/src/oauth2client/oauth2client.ts +6 -1
- package/src/utils/urlSearchParams.ts +77 -0
package/dist/cjs/auth/apis.d.ts
CHANGED
|
@@ -33,7 +33,9 @@ export declare class Auth {
|
|
|
33
33
|
signOut(params?: SignoutRequest): Promise<SignoutReponse>;
|
|
34
34
|
revokeAllDevices(): Promise<void>;
|
|
35
35
|
revokeDevice(params: RevokeDeviceRequest): Promise<void>;
|
|
36
|
-
getVerification(params: GetVerificationRequest
|
|
36
|
+
getVerification(params: GetVerificationRequest, options?: {
|
|
37
|
+
withCaptcha: boolean;
|
|
38
|
+
}): Promise<GetVerificationResponse>;
|
|
37
39
|
verify(params: VerifyRequest): Promise<VerifyResponse>;
|
|
38
40
|
genProviderRedirectUri(params: GenProviderRedirectUriRequest): Promise<GenProviderRedirectUriResponse>;
|
|
39
41
|
grantProviderToken(params: GrantProviderTokenRequest, useWxCloud?: boolean): Promise<GrantProviderTokenResponse>;
|
package/dist/cjs/auth/apis.js
CHANGED
|
@@ -57,12 +57,16 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
57
57
|
}
|
|
58
58
|
return t;
|
|
59
59
|
};
|
|
60
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
61
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
62
|
+
};
|
|
60
63
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
61
64
|
exports.Auth = void 0;
|
|
62
65
|
var consts_1 = require("./consts");
|
|
63
66
|
var oauth2client_1 = require("../oauth2client/oauth2client");
|
|
64
67
|
var captcha_1 = require("../captcha/captcha");
|
|
65
68
|
var utils_1 = require("../utils");
|
|
69
|
+
var urlSearchParams_1 = __importDefault(require("../utils/urlSearchParams"));
|
|
66
70
|
function getEncryptUtils(isEncrypt) {
|
|
67
71
|
if (globalThis.IS_MP_BUILD) {
|
|
68
72
|
return;
|
|
@@ -108,7 +112,7 @@ var Auth = (function () {
|
|
|
108
112
|
delete params[key];
|
|
109
113
|
}
|
|
110
114
|
});
|
|
111
|
-
var searchParams = new
|
|
115
|
+
var searchParams = new urlSearchParams_1.default(params);
|
|
112
116
|
return searchParams.toString();
|
|
113
117
|
};
|
|
114
118
|
Auth.prototype.getParamsByVersion = function (params, key) {
|
|
@@ -265,7 +269,7 @@ var Auth = (function () {
|
|
|
265
269
|
});
|
|
266
270
|
});
|
|
267
271
|
};
|
|
268
|
-
Auth.prototype.getVerification = function (params) {
|
|
272
|
+
Auth.prototype.getVerification = function (params, options) {
|
|
269
273
|
return __awaiter(this, void 0, void 0, function () {
|
|
270
274
|
var withCredentials, hasLogin;
|
|
271
275
|
return __generator(this, function (_a) {
|
|
@@ -285,6 +289,7 @@ var Auth = (function () {
|
|
|
285
289
|
case 3: return [2, this.config.request(consts_1.ApiUrls.VERIFICATION_URL, {
|
|
286
290
|
method: 'POST',
|
|
287
291
|
body: params,
|
|
292
|
+
withCaptcha: (options === null || options === void 0 ? void 0 : options.withCaptcha) || false,
|
|
288
293
|
withCredentials: withCredentials,
|
|
289
294
|
})];
|
|
290
295
|
}
|
|
@@ -429,7 +434,7 @@ var Auth = (function () {
|
|
|
429
434
|
case 0:
|
|
430
435
|
res = this.getParamsByVersion(params, 'USER_ME_URL');
|
|
431
436
|
if ((_a = res.params) === null || _a === void 0 ? void 0 : _a.query) {
|
|
432
|
-
searchParams = new
|
|
437
|
+
searchParams = new urlSearchParams_1.default(res.params.query);
|
|
433
438
|
res.url += "?".concat(searchParams.toString());
|
|
434
439
|
}
|
|
435
440
|
return [4, this.config.request(res.url, {
|
|
@@ -660,7 +665,7 @@ var Auth = (function () {
|
|
|
660
665
|
return __awaiter(this, void 0, void 0, function () {
|
|
661
666
|
var searchParams;
|
|
662
667
|
return __generator(this, function (_a) {
|
|
663
|
-
searchParams = new
|
|
668
|
+
searchParams = new urlSearchParams_1.default(params);
|
|
664
669
|
return [2, this.config.request("".concat(consts_1.ApiUrls.USER_QUERY_URL, "?").concat(searchParams.toString()), {
|
|
665
670
|
method: 'GET',
|
|
666
671
|
withCredentials: true,
|
|
@@ -775,7 +780,7 @@ var Auth = (function () {
|
|
|
775
780
|
return __awaiter(this, void 0, void 0, function () {
|
|
776
781
|
var searchParams;
|
|
777
782
|
return __generator(this, function (_a) {
|
|
778
|
-
searchParams = new
|
|
783
|
+
searchParams = new urlSearchParams_1.default(params);
|
|
779
784
|
return [2, this.config.request("".concat(consts_1.ApiUrls.CHECK_IF_USER_EXIST, "?").concat(searchParams.toString()), {
|
|
780
785
|
method: 'GET',
|
|
781
786
|
})];
|
|
@@ -1025,4 +1030,4 @@ var Auth = (function () {
|
|
|
1025
1030
|
return Auth;
|
|
1026
1031
|
}());
|
|
1027
1032
|
exports.Auth = Auth;
|
|
1028
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVosbUNBQXdEO0FBNkR4RCw2REFBMkU7QUFFM0UsOENBQTREO0FBQzVELGtDQUFvQztBQUVwQyxTQUFTLGVBQWUsQ0FBQyxTQUFTO0lBQ2hDLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRTtRQUMxQixPQUFNO0tBQ1A7SUFDRCxJQUFJLFNBQVMsRUFBRTtRQUdiLElBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRXpDLE9BQU8sS0FBSyxDQUFBO0tBQ2I7QUFDSCxDQUFDO0FBc0JEO0lBa0JFLGNBQVksSUFBaUI7UUFDckIsSUFBQSxPQUFPLEdBQUssSUFBSSxRQUFULENBQVM7UUFDdEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFBO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsSUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDYixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQzdDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QixDQUFBO1lBQ0QsWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUM3QztRQUNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixJQUFNLFdBQVcsR0FBRyxZQUFZ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QUFZLEVBQUUsRUFBQTs7d0JBQS9CLEdBQUcsR0FBRyxTQUF5Qjt3QkFDckMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUE7d0JBQzFCLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQTs7Ozs7O3dCQUduRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMscUJBQXFCLEVBQUU7NEJBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQTt5QkFDaEU7d0JBRUssZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsV0FBQSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO3dCQUM5RyxvQkFBb0IsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxXQUFBLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFBO3dCQUNyRyxXQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFTLENBQUMsbUJBQW1CLEVBQUU7Z0NBQ3hELE1BQU0sRUFBRSxNQUFNO2dDQUNkLElBQUksRUFBRTtvQ0FDSixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0NBQ3pCLFFBQVEsRUFBRSxnQkFBZ0I7b0NBQzFCLFlBQVksRUFBRSxvQkFBb0I7b0NBQ2xDLHFCQUFxQix1QkFBQTtpQ0FDdEI7NkJBQ0YsQ0FBQyxFQUFBOzs7O0tBQ0g7SUFDSCxXQUFDO0FBQUQsQ0FBQyxBQXI1QkQsSUFxNUJDO0FBcjVCWSxvQkFBSSIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgeyBBcGlVcmxzLCBBcGlVcmxzVjIsIEVycm9yVHlwZSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHtcbiAgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2UsXG4gIFVzZXJQcm9maWxlLFxuICBVc2VySW5mbyxcbiAgU2lnbkluUmVxdWVzdCxcbiAgU2lnblVwUmVxdWVzdCxcbiAgVmVyaWZ5UmVxdWVzdCxcbiAgVmVyaWZ5UmVzcG9uc2UsXG4gIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0LFxuICBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2UsXG4gIEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gIEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlLFxuICBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICBQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZSxcbiAgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgQmluZFdpdGhQcm92aWRlclJlcXVlc3QsXG4gIFRyYW5zQnlQcm92aWRlclJlcXVlc3QsXG4gIEdyYW50VG9rZW5SZXF1ZXN0LFxuICBVbmJpbmRQcm92aWRlclJlcXVlc3QsXG4gIENoZWNrUGFzc3dvcmRSZXF1ZXN0LFxuICBTZXRQYXNzd29yZFJlcXVlc3QsXG4gIENoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0LFxuICBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2UsXG4gIFVwZGF0ZVBhc3N3b3JkUmVxdWVzdCxcbiAgU3Vkb1Jlc3BvbnNlLFxuICBTdWRvUmVxdWVzdCxcbiAgR2V0Q3VzdG9tU2lnblRpY2tldEZuLFxuICBRdWVyeVVzZXJQcm9maWxlUmVxdWVzdCxcbiAgUXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgRGV2aWNlQXV0aG9yaXplUmVxdWVzdCxcbiAgRGV2aWNlQXV0aG9yaXplUmVzcG9uc2UsXG4gIENoZWNrVXNlcm5hbWVSZXF1ZXN0LFxuICBDaGVja0lmVXNlckV4aXN0UmVxdWVzdCxcbiAgQ2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlLFxuICBXaXRoU3Vkb1JlcXVlc3QsXG4gIFB1YmxpY0tleSxcbiAgRW5jcnlwdFBhcmFtcyxcbiAgUHJvdmlkZXJTdWJUeXBlLFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlcXVlc3QsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZSxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZSxcbiAgTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QsXG4gIEVkaXRDb250YWN0UmVxdWVzdCxcbiAgQXV0aG9yaXplSW5mb1JlcXVlc3QsXG4gIEF1dGhvcml6ZUluZm9SZXNwb25zZSxcbiAgQXV0aG9yaXplRGV2aWNlUmVxdWVzdCxcbiAgQXV0aG9yaXplUmVxdWVzdCxcbiAgQXV0aG9yaXplUmVzcG9uc2UsXG4gIEdldFVzZXJCZWhhdmlvckxvZyxcbiAgR2V0VXNlckJlaGF2aW9yTG9nUmVzLFxuICBSZXZva2VEZXZpY2VSZXF1ZXN0LFxuICBTaWdub3V0UmVwb25zZSxcbiAgUHJvdmlkZXJzUmVzcG9uc2UsXG4gIFNpZ25vdXRSZXF1ZXN0LFxuICBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QsXG59IGZyb20gJy4vbW9kZWxzJ1xuaW1wb3J0IHsgU2ltcGxlU3RvcmFnZSwgUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSdcbmltcG9ydCB7IE9BdXRoMkNsaWVudCwgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuaW1wb3J0IHsgQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuaW1wb3J0IHsgQ2FwdGNoYSwgQ2FwdGNoYU9wdGlvbnMgfSBmcm9tICcuLi9jYXB0Y2hhL2NhcHRjaGEnXG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi91dGlscydcblxuZnVuY3Rpb24gZ2V0RW5jcnlwdFV0aWxzKGlzRW5jcnlwdCkge1xuICBpZiAoZ2xvYmFsVGhpcy5JU19NUF9CVUlMRCkge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChpc0VuY3J5cHQpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL2VuY3J5cHQnKVxuICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICByZXR1cm4gdXRpbHNcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgYXBpT3JpZ2luOiBzdHJpbmdcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICAvKipcbiAgICogYmFzaWMgYXV0aFxuICAgKi9cbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nXG4gIGNyZWRlbnRpYWxzQ2xpZW50PzogT0F1dGgyQ2xpZW50XG4gIHJlcXVlc3Q/OiBSZXF1ZXN0RnVuY3Rpb25cbiAgYmFzZVJlcXVlc3Q/OiBSZXF1ZXN0RnVuY3Rpb25cbiAgc3RvcmFnZT86IFNpbXBsZVN0b3JhZ2VcbiAgYW5vbnltb3VzU2lnbkluRnVuYz86IChDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscyB8IHZvaWQ+XG4gIGNhcHRjaGFPcHRpb25zPzogUGFydGlhbDxDYXB0Y2hhT3B0aW9ucz5cbiAgZW52Pzogc3RyaW5nXG4gIHd4Q2xvdWQ/OiBhbnlcbn1cblxuLyoqXG4gKiBBdXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VQYXJhbXNUb1NlYXJjaChwYXJhbXM6IGFueSk6IHN0cmluZyB7XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICghcGFyYW1zW2tleV0pIHtcbiAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcy50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGNvbmZpZzogQXV0aE9wdGlvbnNcbiAgcHJpdmF0ZSBnZXRDdXN0b21TaWduVGlja2V0Rm4/OiBHZXRDdXN0b21TaWduVGlja2V0Rm5cblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtBdXRoT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQXV0aE9wdGlvbnMpIHtcbiAgICBsZXQgeyByZXF1ZXN0IH0gPSBvcHRzXG4gICAgbGV0IG9BdXRoMkNsaWVudCA9IG9wdHMuY3JlZGVudGlhbHNDbGllbnRcbiAgICBpZiAoIW9BdXRoMkNsaWVudCkge1xuICAgICAgY29uc3QgaW5pdE9wdGlvbnMgPSB7XG4gICAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICAgIGVudjogb3B0cy5lbnYsXG4gICAgICAgIGJhc2VSZXF1ZXN0OiBvcHRzLmJhc2VSZXF1ZXN0IC8qIHx8IG9wdHMucmVxdWVzdCAqLywgLy8gb3B0cy5yZXF1ZXN0IOW6n+W8g+S4jeeUqOadpeihqOekuiBvYXV0aCBycXVlc3RcbiAgICAgICAgYW5vbnltb3VzU2lnbkluRnVuYzogb3B0cy5hbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgICAgICB3eENsb3VkOiBvcHRzLnd4Q2xvdWQsXG4gICAgICB9XG4gICAgICBvQXV0aDJDbGllbnQgPSBuZXcgT0F1dGgyQ2xpZW50KGluaXRPcHRpb25zKVxuICAgIH1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGJhc2VSZXF1ZXN0ID0gb0F1dGgyQ2xpZW50LnJlcXVlc3QuYmluZChvQXV0aDJDbGllbnQpXG4gICAgICBjb25zdCBjYXB0Y2hhID0gbmV3IENhcHRjaGEoe1xuICAgICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgICAgcmVxdWVzdDogYmFzZVJlcXVlc3QsXG4gICAgICAgIHN0b3JhZ2U6IG9wdHMuc3RvcmFnZSxcbiAgICAgICAgLi4ub3B0cy5jYXB0Y2hhT3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0ID0gY2FwdGNoYS5yZXF1ZXN0LmJpbmQoY2FwdGNoYSlcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBlbnY6IG9wdHMuZW52LFxuICAgICAgYXBpT3JpZ2luOiBvcHRzLmFwaU9yaWdpbixcbiAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIGNyZWRlbnRpYWxzQ2xpZW50OiBvQXV0aDJDbGllbnQsXG4gICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2UsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagueaNrueJiOacrOagh+ivhu+8jOWkhOeQhuW+heivt+axgueahHVybOWSjHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBnZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zVGVtcCA9IGRlZXBDbG9uZShwYXJhbXMpXG4gICAgY29uc3QgdXJsID0geyB2MjogQXBpVXJsc1YyIH1bcGFyYW1zVGVtcD8udmVyc2lvbl0/LltrZXldIHx8IEFwaVVybHNba2V5XVxuXG4gICAgaWYgKHBhcmFtc1RlbXApIHtcbiAgICAgIGRlbGV0ZSBwYXJhbXNUZW1wLnZlcnNpb25cbiAgICB9XG5cbiAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtc1RlbXAsIHVybCB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbi5cbiAgICogQHBhcmFtIHtTaWduSW5SZXF1ZXN0fSBwYXJhbXMgQSBTaWduSW5SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IFNpZ25JblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHBhcmFtcy52ZXJzaW9uIHx8ICd2MSdcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1NJR05fSU5fVVJMJylcbiAgICBpZiAocmVzLnBhcmFtcy5xdWVyeSkge1xuICAgICAgZGVsZXRlIHJlcy5wYXJhbXMucXVlcnlcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5nZXRFbmNyeXB0UGFyYW1zKHJlcy5wYXJhbXMpXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGluIEFub255bW91c2x5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseShkYXRhOiB7XG4gICAgcHJvdmlkZXJfdG9rZW4/OiBzdHJpbmdcbiAgfSA9IHt9LCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9JTl9BTk9OWU1PVVNMWV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZGF0YSxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogU2lnbiB1cC5cbiAgICogQHBhcmFtIHtTaWduVXBSZXF1ZXN0fSBwYXJhbXMgQSBTaWduVXBSZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25VcChwYXJhbXM6IFNpZ25VcFJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgZGF0YTogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9VUF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoZGF0YSlcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogU2lnbiBvdXQuXG4gICAqIEByZXR1cm4ge09iamVjdH0gQSBQcm9taXNlPFNpZ25vdXRSZXF1ZXN0PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbk91dChwYXJhbXM/OiBTaWdub3V0UmVxdWVzdCk6IFByb21pc2U8U2lnbm91dFJlcG9uc2U+IHtcbiAgICBsZXQgcmVzcDogU2lnbm91dFJlcG9uc2UgPSB7fVxuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3AgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PFNpZ25vdXRSZXBvbnNlPihBcGlVcmxzLkFVVEhfU0lHTk9VVF9VUkwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIuZXJyb3IgIT09IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnc2lnbl9vdXRfZXJyb3InLCBlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKClcbiAgICAgIHJldHVybiByZXNwXG4gICAgfVxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5BVVRIX1JFVk9LRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICB9LFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgQWxsIERldmljZXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldm9rZUFsbERldmljZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihBcGlVcmxzLkFVVEhfUkVWT0tFX0FMTF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgRGV2aWNlXG4gICAqIEByZXR1cm4ge09iamVjdH0gQSBQcm9taXNlPHZvaWQ+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXZva2VEZXZpY2UocGFyYW1zOiBSZXZva2VEZXZpY2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihBcGlVcmxzLkFVVEhPUklaRURfREVWSUNFU19ERUxFVEVfVVJMICsgcGFyYW1zLmRldmljZV9pZCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmVyaWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge0dldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtcyBBIEdldFZlcmlmaWNhdGlvblJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VmVyaWZpY2F0aW9uKHBhcmFtczogR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICAvLyDlj5HpgIHnn63kv6Hml7bvvIzlpoLmnpzml7bnu5nlvZPliY3nlKjmiLflj5HvvIzliJnpnIDopoHluKbkuIrpibTmnYPkv6Hmga9cbiAgICBpZiAocGFyYW1zLnRhcmdldCA9PT0gJ0NVUl9VU0VSJykge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNMb2dpbiA9IGF3YWl0IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG4gICAgICBpZiAoaGFzTG9naW4pIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIC8vIHdpdGhDYXB0Y2hhOiB0cnVlLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogIFZlcmlmeSB0aGUgY29kZVxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlcXVlc3R9IHBhcmFtcyBBIFZlcmlmeVJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFZlcmlmeVJlc3BvbnNlPn0gQSBQcm9taXNlPFZlcmlmeVJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdWRVJJRllfVVJMJylcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxWZXJpZnlSZXNwb25zZT4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiByZXMucGFyYW1zLFxuICAgIH0pXG5cbiAgICBpZiAocGFyYW1zPy52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyh7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHZlcnNpb246ICd2MicsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICAvKipcbiAgICogR2VuIHByb3ZpZGVyIHJlZGlyZWN0IHVyaS5cbiAgICogQHBhcmFtIHtHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdH0gcGFyYW1zIEEgR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT59IEEgUHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtczogR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QpOiBQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIGNvbnN0IHsgcHJvdmlkZXJfcmVkaXJlY3RfdXJpOiByZWRpcmVjdF91cmksIG90aGVyX3BhcmFtczogb3RoZXJQYXJhbXMgPSB7fSwgLi4ucmVzdFBhcmFtcyB9ID0gcGFyYW1zXG4gICAgaWYgKHJlZGlyZWN0X3VyaSAmJiAhcmVzdFBhcmFtcy5yZWRpcmVjdF91cmkpIHtcbiAgICAgIHJlc3RQYXJhbXMucmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpXG4gICAgfVxuXG4gICAgbGV0IHVybCA9IGAke0FwaVVybHMuUFJPVklERVJfVVJJX1VSTH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocmVzdFBhcmFtcyl9YFxuICAgIE9iamVjdC5rZXlzKG90aGVyUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3RoZXJQYXJhbXNba2V5XVxuICAgICAgaWYgKGtleSA9PT0gJ3NpZ25fb3V0X3VyaScgJiYgISh2YWx1ZT8ubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cmwgKz0gYCZvdGhlcl9wYXJhbXNbJHtrZXl9XT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YFxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+KHVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgKiBAcGFyYW0ge0dyYW50UHJvdmlkZXJUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPn0gQSBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKFxuICAgIHBhcmFtczogR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgICB1c2VXeENsb3VkID0gZmFsc2UsXG4gICk6IFByb21pc2U8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9UT0tFTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgdXNlV3hDbG91ZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgKiBAcGFyYW0ge1BhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3R9IHBhcmFtcyBBIFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPn0gQSBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcGF0Y2hQcm92aWRlclRva2VuKHBhcmFtczogUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCk6IFByb21pc2U8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9UT0tFTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25pbiB3aXRoIHByb3ZpZGVyIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7U2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBTaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0LCB1c2VXeENsb3VkID0gZmFsc2UpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9TSUdOX0lOX1dJVEhfUFJPVklERVJfVVJMJylcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICAgIHVzZVd4Q2xvdWQsXG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgIC4uLmNyZWRlbnRpYWxzLFxuICAgICAgdmVyc2lvbjogcGFyYW1zPy52ZXJzaW9uIHx8ICd2MScsXG4gICAgfSlcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIHNpZ24gaW4gd2l0aCB3ZWNoYXQgaWRlbmRpZnlcbiAgICog6ZyA6KaB57uT5ZCIIGh0dHAgb3ZlcmNhbGxGdW5jdGlvbiDkvb/nlKhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoV2VjaGF0KHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fV0lUSF9XRUNIQVRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogQmluZCB3aXRoIHByb3ZpZGVyXG4gICAqIEBwYXJhbSB7QmluZFdpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBQcm9taXNlPGFueT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oQXBpVXJscy5QUk9WSURFUl9CSU5EX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZT59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJQcm9maWxlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8ocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBpbmZvLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJJbmZvPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8ocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5Pzogc3RyaW5nIH0gPSB7fSk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdVU0VSX01FX1VSTCcpXG5cbiAgICBpZiAocmVzLnBhcmFtcz8ucXVlcnkpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocmVzLnBhcmFtcy5xdWVyeSBhcyBhbnkpXG4gICAgICByZXMudXJsICs9IGA/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gXG4gICAgfVxuXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJJbmZvPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG5cbiAgICBpZiAodXNlckluZm8uc3ViKSB7XG4gICAgICB1c2VySW5mby51aWQgPSB1c2VySW5mby5zdWJcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlckluZm9cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgaW5mbyBieSB3ZWRhIHBsdWdpbi5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0V2VkYVVzZXJJbmZvKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oQXBpVXJscy5XRURBX1VTRVJfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gICAgcmV0dXJuIHVzZXJJbmZvXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG1lXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVNZShwYXJhbXM6IFdpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdVU0VSX01FX1VSTCcpXG4gICAgY29uc3QgdXJsID0gYCR7cmVzLnVybH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocmVzLnBhcmFtcyl9YFxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJQcm9maWxlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBoYXNMb2dpblN0YXRlIGNoZWNrIGlmIGhhcyBsb2dpbiBzdGF0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBBIFByb21pc2U8Ym9vbGVhbj4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGhhc0xvZ2luU3RhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2dpblN0YXRlU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzQXN5bmMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zIGJ5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1RyYW5zQnlQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFRyYW5zQnlQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdHJhbnNCeVByb3ZpZGVyKHBhcmFtczogVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5VU0VSX1RSQU5TX0JZX1BST1ZJREVSX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdG9rZW4uXG4gICAqIEBwYXJhbSB7R3JhbnRUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50VG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBHcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1RPS0VOX1VSTCcpXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJvdmlkZSBsaXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPn0gQSBQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8UHJvdmlkZXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQcm92aWRlcnNSZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9MSVNULCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdW5iaW5kIHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1VuYmluZFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bmJpbmRQcm92aWRlcihwYXJhbXM6IFVuYmluZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5QUk9WSURFUl9VTkJJTkRfVVJMfS8ke3BhcmFtcy5wcm92aWRlcl9pZH1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7Q2hlY2tQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tQYXNzd29yZChwYXJhbXM6IENoZWNrUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLkNIRUNLX1BXRF9VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IENvbnRhY3Qg5L+u5pS5IOaJi+acuuWPtyDmiJYg6YKu566xXG4gICAqIEBwYXJhbSB7RWRpdENvbnRhY3RSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlZGl0Q29udGFjdChwYXJhbXM6IEVkaXRDb250YWN0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KGAke0FwaVVybHMuQklORF9DT05UQUNUX1VSTH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7U2V0UGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IFNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5BVVRIX1NFVF9QQVNTV09SRH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGVQYXNzd29yZEJ5T2xkIOS9v+eUqOaXp+WvhueggeS/ruaUueWvhuegge+8jOWmguaenOW3sue7j+e7keWumuaJi+acuuWPt++8jOivt+WFiO+8mnN1ZG/vvIzlho3kv67mlLnlr4bnoIFcbiAgICogQHBhcmFtIHtTZXRQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVBhc3N3b3JkQnlPbGQocGFyYW1zOiBVcGRhdGVQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdWRvVG9rZW4gPSBhd2FpdCB0aGlzLnN1ZG8oeyBwYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLnNldFBhc3N3b3JkKHtcbiAgICAgIHN1ZG9fdG9rZW46IHN1ZG9Ub2tlbi5zdWRvX3Rva2VuLFxuICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogc3Vkb1xuICAgKiBAcGFyYW0ge3N1ZG99IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3VkbyhwYXJhbXM6IFN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxTdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxTdWRvUmVzcG9uc2U+KGAke0FwaVVybHMuU1VET19VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVmVyaWZpY2F0aW9uQ29kZVRvQ3VycmVudFVzZXIocGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIHBhcmFtcy50YXJnZXQgPSAnQ1VSX1VTRVInXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KEFwaVVybHMuVkVSSUZJQ0FUSU9OX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB3aXRoQ2FwdGNoYTogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNoYW5nZSBCb3VuZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hhbmdlQm91bmRQcm92aWRlcihwYXJhbXM6IENoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+KGAke0FwaVVybHMuUFJPVklERVJfTElTVH0vJHtwYXJhbXMucHJvdmlkZXJfaWR9L3RyYW5zYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHByb3ZpZGVyX3RyYW5zX3Rva2VuOiBwYXJhbXMudHJhbnNfdG9rZW4sXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGF0Y2ggdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHBhcmFtIHtVc2VyUHJvZmlsZX0gcGFyYW1zIEEgVXNlclByb2ZpbGUgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0VXNlclByb2ZpbGUocGFyYW1zOiBVc2VyUHJvZmlsZSk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxVc2VyUHJvZmlsZT4oQXBpVXJscy5VU0VSX1BSSUZJTEVfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdXNlciBiYXNpYyBpbmZvXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXM6IE1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5VU0VSX0JBU0lDX0VESVRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoIHRoZSB1c2VyIHByb2ZpbGUuXG4gICAqIEBwYXJhbSB7UXVlcnlVc2VyUHJvZmlsZVJlcX0gYXBwZW5kZWRfcGFyYW1zIEEgUXVlcnlVc2VyUHJvZmlsZVJlcSBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeVVzZXJQcm9maWxlKHBhcmFtczogUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3QpOiBQcm9taXNlPFF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIC8vIGxldCB1cmwgPSBuZXcgVVJMKEFwaVVybHMuVVNFUl9RVUVSWV9VUkwpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFyYW1zIGFzIGFueSlcbiAgICAvLyB1cmwuc2VhcmNoID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPihgJHtBcGlVcmxzLlVTRVJfUVVFUllfVVJMfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWAsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDdXN0b21TaWduRnVuYyBzZXQgdGhlIGdldCB0aWNrZXQgZnVuY3Rpb25cbiAgICogQHBhcmFtIGdldFRpY2tGblxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogR2V0Q3VzdG9tU2lnblRpY2tldEZuKSB7XG4gICAgdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm4gPSBnZXRUaWNrRm5cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduSW5XaXRoQ3VzdG9tVGlja2V0IGN1c3RvbSBzaWduSW5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldChwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjdXN0b21TaWduVGlja2V0Rm4gPSB0aGlzLmdldEN1c3RvbVNpZ25UaWNrZXRGblxuICAgIGlmICghY3VzdG9tU2lnblRpY2tldEZuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBlcnJvcjogJ2ZhaWxlZF9wcmVjb25kaXRpb24nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3BsZWFzZSB1c2Ugc2V0Q3VzdG9tU2lnbkZ1bmMgdG8gc2V0IGN1c3RvbSBzaWduIGZ1bmN0aW9uJyxcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IGN1c3RvbVRpY2tldCA9IGF3YWl0IGN1c3RvbVNpZ25UaWNrZXRGbigpXG4gICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHByb3ZpZGVyX2lkOiAnY3VzdG9tJyxcbiAgICAgIHByb3ZpZGVyX3Rva2VuOiBjdXN0b21UaWNrZXQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBwYXNzd29yZFxuICAgKiBAcGFyYW0ge1Jlc2V0UGFzc3dvcmRSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVzZXRQYXNzd29yZChwYXJhbXM6IFJlc2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5BVVRIX1JFU0VUX1BBU1NXT1JELCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIC8vIHdpdGhDcmVkZW50aWFsczogdHJ1ZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQXV0aG9yaXplIG9hdXRoIEF1dGhvcml6ZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhvcml6ZShwYXJhbXM6IEF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPEF1dGhvcml6ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8QXV0aG9yaXplUmVzcG9uc2U+KEFwaVVybHMuQVVUSE9SSVpFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBhdXRob3JpemUgZGV2aWNlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRob3JpemVEZXZpY2UocGFyYW1zOiBBdXRob3JpemVEZXZpY2VSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8dm9pZD4oQXBpVXJscy5BVVRIT1JJWkVfREVWSUNFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBkZXZpY2UgYXV0aG9yaXphdGlvblxuICAgKiBAcGFyYW0ge0RldmljZUF1dGhvcml6ZVJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpY2VBdXRob3JpemVSZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGV2aWNlQXV0aG9yaXplKHBhcmFtczogRGV2aWNlQXV0aG9yaXplUmVxdWVzdCk6IFByb21pc2U8RGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfR0VUX0RFVklDRV9DT0RFLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE9BdXRoIGdldCBhdXRob3JpemUgaW5mb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhvcml6ZUluZm8ocGFyYW1zOiBBdXRob3JpemVJbmZvUmVxdWVzdCk6IFByb21pc2U8QXV0aG9yaXplSW5mb1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gYCR7QXBpVXJscy5BVVRIT1JJWkVfSU5GT19VUkx9PyR7QXV0aC5wYXJzZVBhcmFtc1RvU2VhcmNoKHBhcmFtcyl9YFxuICAgIGxldCB3aXRoQmFzaWNBdXRoID0gdHJ1ZVxuICAgIGxldCB3aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIGNvbnN0IGhhc0xvZ2luID0gYXdhaXQgdGhpcy5oYXNMb2dpblN0YXRlKClcbiAgICBpZiAoaGFzTG9naW4pIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIHdpdGhCYXNpY0F1dGggPSBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxBdXRob3JpemVJbmZvUmVzcG9uc2U+KHVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhCYXNpY0F1dGgsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja1VzZXJuYW1lKHBhcmFtczogQ2hlY2tVc2VybmFtZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkNIRUNLX1VTRVJOQU1FLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hlY2tJZlVzZXJFeGlzdChwYXJhbXM6IENoZWNrSWZVc2VyRXhpc3RSZXF1ZXN0KTogUHJvbWlzZTxDaGVja0lmVXNlckV4aXN0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDaGVja0lmVXNlckV4aXN0UmVzcG9uc2U+KGAke0FwaVVybHMuQ0hFQ0tfSUZfVVNFUl9FWElTVH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRTY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRHcm91cHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFscygpXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnJlZnJlc2hUb2tlbih7XG4gICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgIHZlcnNpb246IHBhcmFtcz8udmVyc2lvbiB8fCAndjEnLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcHVibGljIGtleSBmb3IgcmVxdWVzdCBwYXJhbXMgZW5jcnlwdGlvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFB1YmxpY0tleSgpOiBQcm9taXNlPFB1YmxpY0tleT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFB1YmxpY0tleT4oQXBpVXJsc1YyLkFVVEhfUFVCTElDX0tFWSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7fSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGVuY3J5cHQgcmVxdWVzdCBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVuY3J5cHRQYXJhbXMocGFyYW1zOiBSZWNvcmQ8YW55LCBhbnk+KTogUHJvbWlzZTxFbmNyeXB0UGFyYW1zPiB7XG4gICAgY29uc3QgeyBpc0VuY3J5cHQgfSA9IHBhcmFtc1xuICAgIGRlbGV0ZSBwYXJhbXMuaXNFbmNyeXB0XG5cbiAgICBjb25zdCBwYXlsb2FkID0gZGVlcENsb25lKHBhcmFtcylcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGdldEVuY3J5cHRVdGlscyhpc0VuY3J5cHQpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgcmV0dXJuIHBhcmFtc1xuICAgIH1cblxuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5KClcbiAgICAgIHB1YmxpY0tleSA9IHJlcy5wdWJsaWNfa2V5XG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSByZXMucHVibGljX2tleV90aHVtYnByaW50XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICBpZiAoIXB1YmxpY0tleSB8fCAhcHVibGljX2tleV90aHVtYnByaW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1YmxpY19rZXkgb3IgcHVibGljX2tleV90aHVtYnByaW50IGlzIGVtcHR5JylcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQgfSksXG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBwcm92aWRlciBzdWIgdHlwZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVyU3ViVHlwZSgpOiBQcm9taXNlPFByb3ZpZGVyU3ViVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFByb3ZpZGVyU3ViVHlwZT4oQXBpVXJscy5HRVRfUFJPVklERVJfVFlQRSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHByb3ZpZGVyX2lkOiAnd2VkYScsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHByb3ZpZGVyIHN1YiB0eXBlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5Q2FwdGNoYURhdGEoeyB0b2tlbiwga2V5IH06IHsgdG9rZW46IHN0cmluZzsga2V5OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHsgY2FwdGNoYV90b2tlbjogc3RyaW5nOyBleHBpcmVzX2luOiBudW1iZXIgfT4oQXBpVXJscy5WRVJJRllfQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHRva2VuLCBrZXkgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YSh7IHN0YXRlLCByZWRpcmVjdF91cmkgPSB1bmRlZmluZWQgfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHsgdG9rZW46IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+KEFwaVVybHMuQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHN0YXRlLCByZWRpcmVjdF91cmkgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBtaW5pLXByb2dyYW0gc2NhbiBjb2RlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1Db2RlKHBhcmFtczogR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0KTogUHJvbWlzZTxHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4oQXBpVXJscy5HRVRfTUlOSVBST0dSQU1fUVJDT0RFLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIG1pbmktcHJvZ3JhbSBzY2FuIGNvZGUgc3RhdHVzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsKTogUHJvbWlzZTxHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4oQXBpVXJscy5HRVRfTUlOSVBST0dSQU1fUVJDT0RFX1NUQVRVUywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdXNlciBiZWhhdmlvciBsb2dcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJCZWhhdmlvckxvZyhwYXJhbXM6IEdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8R2V0VXNlckJlaGF2aW9yTG9nUmVzPiB7XG4gICAgY29uc3QgYWN0aW9uID0geyBMT0dJTjogJ3F1ZXJ5W2FjdGlvbl09VVNFUl9MT0dJTicsIE1PRElGWTogJ25lX3F1ZXJ5W2FjdGlvbl09VVNFUl9MT0dJTicgfVxuICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuR0VUX1VTRVJfQkVIQVZJT1JfTE9HfT8ke2FjdGlvbltwYXJhbXMudHlwZV19JmxpbWl0PSR7cGFyYW1zLmxpbWl0fSR7XG4gICAgICBwYXJhbXMucGFnZV90b2tlbiA/IGAmcGFnZV90b2tlbj0ke3BhcmFtcy5wYWdlX3Rva2VufWAgOiAnJ1xuICAgIH1gXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog6L+Z5Liq5pa55rOV5piv55So5oi36Ieq5bex5L+u5pS56Ieq5bex55qE5a+G56CB77yM5LiN5ZCM5LqOL2F1dGgvdjEvdXNlci9wYXNzd29yZOaOpeWPo++8jOivpeaOpeWPo+aYr+euoeeQhuWRmOS/ruaUueS4quS6uueahFxuICAgKiBAcGFyYW0ge01vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0fSBwYXJhbXMgQSBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgY29uc3QgZW5jcnlwdFV0aWxzID0gZ2V0RW5jcnlwdFV0aWxzKHRydWUpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkbyBub3Qgc3VwcG9ydCBlbmNyeXB0LCBhIGVuY3J5cHQgdXRpbCByZXF1aXJlZC4nKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgaWYgKCFwdWJsaWNLZXkgfHwgIXB1YmxpY19rZXlfdGh1bWJwcmludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWNfa2V5IG9yIHB1YmxpY19rZXlfdGh1bWJwcmludCBpcyBlbXB0eScpXG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdF9wYXNzd29yZCA9IHBhcmFtcy5wYXNzd29yZCA/IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLnBhc3N3b3JkIH0pIDogJydcbiAgICBjb25zdCBlbmNyeXB0X25ld19wYXNzd29yZCA9IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLm5ld19wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuVVNFUl9CQVNJQ19FRElUX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHVzZXJfaWQ6IHBhcmFtcy51c2VyX2lkLFxuICAgICAgICBlbmNyeXB0X3Bhc3N3b3JkLFxuICAgICAgICBlbmNyeXB0X25ld19wYXNzd29yZCxcbiAgICAgICAgcHVibGljX2tleV90aHVtYnByaW50LFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOmHjee9ruWvhuegge+8jOivpeaOpeWPo+aXoOmcgOeZu+W9leWwseWPr+S7pemHjee9ruWvhueggVxuICAgKiBAcGFyYW0ge01vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdH0gcGFyYW1zIEEgTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBQcm9taXNlPHZvaWQ+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IE1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgY29uc3QgZW5jcnlwdFV0aWxzID0gZ2V0RW5jcnlwdFV0aWxzKHRydWUpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkbyBub3Qgc3VwcG9ydCBlbmNyeXB0LCBhIGVuY3J5cHQgdXRpbCByZXF1aXJlZC4nKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgaWYgKCFwdWJsaWNLZXkgfHwgIXB1YmxpY19rZXlfdGh1bWJwcmludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWNfa2V5IG9yIHB1YmxpY19rZXlfdGh1bWJwcmludCBpcyBlbXB0eScpXG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdF9wYXNzd29yZCA9IHBhcmFtcy5wYXNzd29yZCA/IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLnBhc3N3b3JkIH0pIDogJydcbiAgICBjb25zdCBlbmNyeXB0X25ld19wYXNzd29yZCA9IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLm5ld19wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHNWMi5BVVRIX1JFU0VUX1BBU1NXT1JELCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IGVuY3J5cHRfcGFzc3dvcmQsXG4gICAgICAgIG5ld19wYXNzd29yZDogZW5jcnlwdF9uZXdfcGFzc3dvcmQsXG4gICAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
1033
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVosbUNBQXdEO0FBNkR4RCw2REFBMkU7QUFFM0UsOENBQTREO0FBQzVELGtDQUFvQztBQUNwQyw2RUFBd0Q7QUFFeEQsU0FBUyxlQUFlLENBQUMsU0FBUztJQUNoQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7UUFDMUIsT0FBTTtLQUNQO0lBQ0QsSUFBSSxTQUFTLEVBQUU7UUFHYixJQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUV6QyxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQXNCRDtJQWtCRSxjQUFZLElBQWlCO1FBQ3JCLElBQUEsT0FBTyxHQUFLLElBQUksUUFBVCxDQUFTO1FBQ3RCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtRQUN6QyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLElBQU0sV0FBVyxHQUFHO2dCQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQTtZQUNELFlBQVksR0FBRyxJQUFJLDJCQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDN0M7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osSUFB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QXBpVXJsc1YyLCBFcnJvclR5cGUgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7XG4gIEdldFZlcmlmaWNhdGlvblJlcXVlc3QsXG4gIEdldFZlcmlmaWNhdGlvblJlc3BvbnNlLFxuICBVc2VyUHJvZmlsZSxcbiAgVXNlckluZm8sXG4gIFNpZ25JblJlcXVlc3QsXG4gIFNpZ25VcFJlcXVlc3QsXG4gIFZlcmlmeVJlcXVlc3QsXG4gIFZlcmlmeVJlc3BvbnNlLFxuICBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCxcbiAgR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlLFxuICBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICBHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSxcbiAgUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2UsXG4gIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QsXG4gIEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0LFxuICBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0LFxuICBHcmFudFRva2VuUmVxdWVzdCxcbiAgVW5iaW5kUHJvdmlkZXJSZXF1ZXN0LFxuICBDaGVja1Bhc3N3b3JkUmVxdWVzdCxcbiAgU2V0UGFzc3dvcmRSZXF1ZXN0LFxuICBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdCxcbiAgQ2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlLFxuICBVcGRhdGVQYXNzd29yZFJlcXVlc3QsXG4gIFN1ZG9SZXNwb25zZSxcbiAgU3Vkb1JlcXVlc3QsXG4gIEdldEN1c3RvbVNpZ25UaWNrZXRGbixcbiAgUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3QsXG4gIFF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZSxcbiAgUmVzZXRQYXNzd29yZFJlcXVlc3QsXG4gIERldmljZUF1dGhvcml6ZVJlcXVlc3QsXG4gIERldmljZUF1dGhvcml6ZVJlc3BvbnNlLFxuICBDaGVja1VzZXJuYW1lUmVxdWVzdCxcbiAgQ2hlY2tJZlVzZXJFeGlzdFJlcXVlc3QsXG4gIENoZWNrSWZVc2VyRXhpc3RSZXNwb25zZSxcbiAgV2l0aFN1ZG9SZXF1ZXN0LFxuICBQdWJsaWNLZXksXG4gIEVuY3J5cHRQYXJhbXMsXG4gIFByb3ZpZGVyU3ViVHlwZSxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlUmVzcG9uc2UsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2UsXG4gIE1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0LFxuICBFZGl0Q29udGFjdFJlcXVlc3QsXG4gIEF1dGhvcml6ZUluZm9SZXF1ZXN0LFxuICBBdXRob3JpemVJbmZvUmVzcG9uc2UsXG4gIEF1dGhvcml6ZURldmljZVJlcXVlc3QsXG4gIEF1dGhvcml6ZVJlcXVlc3QsXG4gIEF1dGhvcml6ZVJlc3BvbnNlLFxuICBHZXRVc2VyQmVoYXZpb3JMb2csXG4gIEdldFVzZXJCZWhhdmlvckxvZ1JlcyxcbiAgUmV2b2tlRGV2aWNlUmVxdWVzdCxcbiAgU2lnbm91dFJlcG9uc2UsXG4gIFByb3ZpZGVyc1Jlc3BvbnNlLFxuICBTaWdub3V0UmVxdWVzdCxcbiAgTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0LFxufSBmcm9tICcuL21vZGVscydcbmltcG9ydCB7IFNpbXBsZVN0b3JhZ2UsIFJlcXVlc3RGdW5jdGlvbiB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9pbnRlcmZhY2UnXG5pbXBvcnQgeyBPQXV0aDJDbGllbnQsIGRlZmF1bHRTdG9yYWdlIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudCdcbmltcG9ydCB7IENyZWRlbnRpYWxzIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L21vZGVscydcbmltcG9ydCB7IENhcHRjaGEsIENhcHRjaGFPcHRpb25zIH0gZnJvbSAnLi4vY2FwdGNoYS9jYXB0Y2hhJ1xuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgTXlVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vdXRpbHMvdXJsU2VhcmNoUGFyYW1zJ1xuXG5mdW5jdGlvbiBnZXRFbmNyeXB0VXRpbHMoaXNFbmNyeXB0KSB7XG4gIGlmIChnbG9iYWxUaGlzLklTX01QX0JVSUxEKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGlzRW5jcnlwdCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvZW5jcnlwdCcpXG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIHJldHVybiB1dGlsc1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aE9wdGlvbnMge1xuICBhcGlPcmlnaW46IHN0cmluZ1xuICBjbGllbnRJZDogc3RyaW5nXG4gIC8qKlxuICAgKiBiYXNpYyBhdXRoXG4gICAqL1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmdcbiAgY3JlZGVudGlhbHNDbGllbnQ/OiBPQXV0aDJDbGllbnRcbiAgcmVxdWVzdD86IFJlcXVlc3RGdW5jdGlvblxuICBiYXNlUmVxdWVzdD86IFJlcXVlc3RGdW5jdGlvblxuICBzdG9yYWdlPzogU2ltcGxlU3RvcmFnZVxuICBhbm9ueW1vdXNTaWduSW5GdW5jPzogKENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzIHwgdm9pZD5cbiAgY2FwdGNoYU9wdGlvbnM/OiBQYXJ0aWFsPENhcHRjaGFPcHRpb25zPlxuICBlbnY/OiBzdHJpbmdcbiAgd3hDbG91ZD86IGFueVxufVxuXG4vKipcbiAqIEF1dGhcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGgge1xuICBwcml2YXRlIHN0YXRpYyBwYXJzZVBhcmFtc1RvU2VhcmNoKHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKCFwYXJhbXNba2V5XSkge1xuICAgICAgICBkZWxldGUgcGFyYW1zW2tleV1cbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhwYXJhbXMgYXMgYW55KVxuICAgIHJldHVybiBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWc6IEF1dGhPcHRpb25zXG4gIHByaXZhdGUgZ2V0Q3VzdG9tU2lnblRpY2tldEZuPzogR2V0Q3VzdG9tU2lnblRpY2tldEZuXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7QXV0aE9wdGlvbnN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEF1dGhPcHRpb25zKSB7XG4gICAgbGV0IHsgcmVxdWVzdCB9ID0gb3B0c1xuICAgIGxldCBvQXV0aDJDbGllbnQgPSBvcHRzLmNyZWRlbnRpYWxzQ2xpZW50XG4gICAgaWYgKCFvQXV0aDJDbGllbnQpIHtcbiAgICAgIGNvbnN0IGluaXRPcHRpb25zID0ge1xuICAgICAgICBhcGlPcmlnaW46IG9wdHMuYXBpT3JpZ2luLFxuICAgICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlLFxuICAgICAgICBlbnY6IG9wdHMuZW52LFxuICAgICAgICBiYXNlUmVxdWVzdDogb3B0cy5iYXNlUmVxdWVzdCAvKiB8fCBvcHRzLnJlcXVlc3QgKi8sIC8vIG9wdHMucmVxdWVzdCDlup/lvIPkuI3nlKjmnaXooajnpLogb2F1dGggcnF1ZXN0XG4gICAgICAgIGFub255bW91c1NpZ25JbkZ1bmM6IG9wdHMuYW5vbnltb3VzU2lnbkluRnVuYyxcbiAgICAgICAgd3hDbG91ZDogb3B0cy53eENsb3VkLFxuICAgICAgfVxuICAgICAgb0F1dGgyQ2xpZW50ID0gbmV3IE9BdXRoMkNsaWVudChpbml0T3B0aW9ucylcbiAgICB9XG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICBjb25zdCBiYXNlUmVxdWVzdCA9IG9BdXRoMkNsaWVudC5yZXF1ZXN0LmJpbmQob0F1dGgyQ2xpZW50KVxuICAgICAgY29uc3QgY2FwdGNoYSA9IG5ldyBDYXB0Y2hhKHtcbiAgICAgICAgY2xpZW50SWQ6IG9wdHMuY2xpZW50SWQsXG4gICAgICAgIHJlcXVlc3Q6IGJhc2VSZXF1ZXN0LFxuICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICAgIC4uLm9wdHMuY2FwdGNoYU9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgcmVxdWVzdCA9IGNhcHRjaGEucmVxdWVzdC5iaW5kKGNhcHRjaGEpXG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgIHJlcXVlc3QsXG4gICAgICBjcmVkZW50aWFsc0NsaWVudDogb0F1dGgyQ2xpZW50LFxuICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7niYjmnKzmoIfor4bvvIzlpITnkIblvoXor7fmsYLnmoR1cmzlkoxwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtczogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtc1RlbXAgPSBkZWVwQ2xvbmUocGFyYW1zKVxuICAgIGNvbnN0IHVybCA9IHsgdjI6IEFwaVVybHNWMiB9W3BhcmFtc1RlbXA/LnZlcnNpb25dPy5ba2V5XSB8fCBBcGlVcmxzW2tleV1cblxuICAgIGlmIChwYXJhbXNUZW1wKSB7XG4gICAgICBkZWxldGUgcGFyYW1zVGVtcC52ZXJzaW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXNUZW1wLCB1cmwgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gaW4uXG4gICAqIEBwYXJhbSB7U2lnbkluUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW4ocGFyYW1zOiBTaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHZlcnNpb24gPSBwYXJhbXMudmVyc2lvbiB8fCAndjEnXG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9TSUdOX0lOX1VSTCcpXG4gICAgaWYgKHJlcy5wYXJhbXMucXVlcnkpIHtcbiAgICAgIGRlbGV0ZSByZXMucGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuZ2V0RW5jcnlwdFBhcmFtcyhyZXMucGFyYW1zKVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgIC4uLmNyZWRlbnRpYWxzLFxuICAgICAgdmVyc2lvbixcbiAgICB9KVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbiBBbm9ueW1vdXNseVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoZGF0YToge1xuICAgIHByb3ZpZGVyX3Rva2VuPzogc3RyaW5nXG4gIH0gPSB7fSwpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gdXAuXG4gICAqIEBwYXJhbSB7U2lnblVwUmVxdWVzdH0gcGFyYW1zIEEgU2lnblVwUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduVXAocGFyYW1zOiBTaWduVXBSZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGRhdGE6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fVVBfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGRhdGEpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gb3V0LlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTxTaWdub3V0UmVxdWVzdD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25PdXQocGFyYW1zPzogU2lnbm91dFJlcXVlc3QpOiBQcm9taXNlPFNpZ25vdXRSZXBvbnNlPiB7XG4gICAgbGV0IHJlc3A6IFNpZ25vdXRSZXBvbnNlID0ge31cbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxTaWdub3V0UmVwb25zZT4oQXBpVXJscy5BVVRIX1NJR05PVVRfVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLmVycm9yICE9PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3NpZ25fb3V0X2Vycm9yJywgZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscygpXG4gICAgICByZXR1cm4gcmVzcFxuICAgIH1cbiAgICBjb25zdCBhY2Nlc3NUb2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9SRVZPS0VfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgfSxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKClcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIEFsbCBEZXZpY2VzXG4gICAqIEByZXR1cm4ge09iamVjdH0gQSBQcm9taXNlPHZvaWQ+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXZva2VBbGxEZXZpY2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8dm9pZD4oQXBpVXJscy5BVVRIX1JFVk9LRV9BTExfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIERldmljZVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmV2b2tlRGV2aWNlKHBhcmFtczogUmV2b2tlRGV2aWNlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8dm9pZD4oQXBpVXJscy5BVVRIT1JJWkVEX0RFVklDRVNfREVMRVRFX1VSTCArIHBhcmFtcy5kZXZpY2VfaWQsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFZlcmlmaWNhdGlvbihwYXJhbXM6IEdldFZlcmlmaWNhdGlvblJlcXVlc3QsIG9wdGlvbnM/OiB7IHdpdGhDYXB0Y2hhOiBib29sZWFufSk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICAvLyDlj5HpgIHnn63kv6Hml7bvvIzlpoLmnpzml7bnu5nlvZPliY3nlKjmiLflj5HvvIzliJnpnIDopoHluKbkuIrpibTmnYPkv6Hmga9cbiAgICBpZiAocGFyYW1zLnRhcmdldCA9PT0gJ0NVUl9VU0VSJykge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNMb2dpbiA9IGF3YWl0IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG4gICAgICBpZiAoaGFzTG9naW4pIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDYXB0Y2hhOiBvcHRpb25zPy53aXRoQ2FwdGNoYSB8fCBmYWxzZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqICBWZXJpZnkgdGhlIGNvZGVcbiAgICogQHBhcmFtIHtWZXJpZnlSZXF1ZXN0fSBwYXJhbXMgQSBWZXJpZnlSZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxWZXJpZnlSZXNwb25zZT59IEEgUHJvbWlzZTxWZXJpZnlSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZlcmlmeShwYXJhbXM6IFZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPFZlcmlmeVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnVkVSSUZZX1VSTCcpXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VmVyaWZ5UmVzcG9uc2U+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICB9KVxuXG4gICAgaWYgKHBhcmFtcz8udmVyc2lvbiA9PT0gJ3YyJykge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB2ZXJzaW9uOiAndjInLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbiBwcm92aWRlciByZWRpcmVjdCB1cmkuXG4gICAqIEBwYXJhbSB7R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3R9IHBhcmFtcyBBIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+fSBBIFByb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0KTogUHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogcmVkaXJlY3RfdXJpLCBvdGhlcl9wYXJhbXM6IG90aGVyUGFyYW1zID0ge30sIC4uLnJlc3RQYXJhbXMgfSA9IHBhcmFtc1xuICAgIGlmIChyZWRpcmVjdF91cmkgJiYgIXJlc3RQYXJhbXMucmVkaXJlY3RfdXJpKSB7XG4gICAgICByZXN0UGFyYW1zLnJlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaVxuICAgIH1cblxuICAgIGxldCB1cmwgPSBgJHtBcGlVcmxzLlBST1ZJREVSX1VSSV9VUkx9PyR7QXV0aC5wYXJzZVBhcmFtc1RvU2VhcmNoKHJlc3RQYXJhbXMpfWBcbiAgICBPYmplY3Qua2V5cyhvdGhlclBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG90aGVyUGFyYW1zW2tleV1cbiAgICAgIGlmIChrZXkgPT09ICdzaWduX291dF91cmknICYmICEodmFsdWU/Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXJsICs9IGAmb3RoZXJfcGFyYW1zWyR7a2V5fV09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwcm92aWRlciB0b2tlbi5cbiAgICogQHBhcmFtIHtHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdyYW50UHJvdmlkZXJUb2tlbihcbiAgICBwYXJhbXM6IEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gICAgdXNlV3hDbG91ZCA9IGZhbHNlLFxuICApOiBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHVzZVd4Q2xvdWQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwcm92aWRlciB0b2tlbi5cbiAgICogQHBhcmFtIHtQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QpOiBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW4gd2l0aCBwcm92aWRlciByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1NpZ25JbldpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtczogU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCwgdXNlV3hDbG91ZCA9IGZhbHNlKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ0FVVEhfU0lHTl9JTl9XSVRIX1BST1ZJREVSX1VSTCcpXG5cbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyh7XG4gICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgIHZlcnNpb246IHBhcmFtcz8udmVyc2lvbiB8fCAndjEnLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBzaWduIGluIHdpdGggd2VjaGF0IGlkZW5kaWZ5XG4gICAqIOmcgOimgee7k+WQiCBodHRwIG92ZXJjYWxsRnVuY3Rpb24g5L2/55SoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFdlY2hhdChwYXJhbXM6IGFueSA9IHt9KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9TSUdOX0lOX1dJVEhfV0VDSEFUX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgd2l0aCBwcm92aWRlclxuICAgKiBAcGFyYW0ge0JpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXMgQSBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTxhbnk+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBiaW5kV2l0aFByb3ZpZGVyKHBhcmFtczogQmluZFdpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KEFwaVVybHMuUFJPVklERVJfQklORF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIHByb2ZpbGUuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyUHJvZmlsZShwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZyB9KTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgaW5mby5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VySW5mbz59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJJbmZvKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IHN0cmluZyB9ID0ge30pOiBQcm9taXNlPFVzZXJJbmZvPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnVVNFUl9NRV9VUkwnKVxuXG4gICAgaWYgKHJlcy5wYXJhbXM/LnF1ZXJ5KSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgTXlVUkxTZWFyY2hQYXJhbXMocmVzLnBhcmFtcy5xdWVyeSBhcyBhbnkpXG4gICAgICByZXMudXJsICs9IGA/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gXG4gICAgfVxuXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJJbmZvPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG5cbiAgICBpZiAodXNlckluZm8uc3ViKSB7XG4gICAgICB1c2VySW5mby51aWQgPSB1c2VySW5mby5zdWJcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlckluZm9cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgaW5mbyBieSB3ZWRhIHBsdWdpbi5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0V2VkYVVzZXJJbmZvKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oQXBpVXJscy5XRURBX1VTRVJfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gICAgcmV0dXJuIHVzZXJJbmZvXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG1lXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVNZShwYXJhbXM6IFdpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdVU0VSX01FX1VSTCcpXG4gICAgY29uc3QgdXJsID0gYCR7cmVzLnVybH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocmVzLnBhcmFtcyl9YFxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJQcm9maWxlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBoYXNMb2dpblN0YXRlIGNoZWNrIGlmIGhhcyBsb2dpbiBzdGF0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBBIFByb21pc2U8Ym9vbGVhbj4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGhhc0xvZ2luU3RhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2dpblN0YXRlU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzQXN5bmMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zIGJ5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1RyYW5zQnlQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFRyYW5zQnlQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdHJhbnNCeVByb3ZpZGVyKHBhcmFtczogVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5VU0VSX1RSQU5TX0JZX1BST1ZJREVSX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdG9rZW4uXG4gICAqIEBwYXJhbSB7R3JhbnRUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50VG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBHcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1RPS0VOX1VSTCcpXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJvdmlkZSBsaXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPn0gQSBQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8UHJvdmlkZXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQcm92aWRlcnNSZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9MSVNULCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdW5iaW5kIHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1VuYmluZFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bmJpbmRQcm92aWRlcihwYXJhbXM6IFVuYmluZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5QUk9WSURFUl9VTkJJTkRfVVJMfS8ke3BhcmFtcy5wcm92aWRlcl9pZH1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7Q2hlY2tQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tQYXNzd29yZChwYXJhbXM6IENoZWNrUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLkNIRUNLX1BXRF9VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IENvbnRhY3Qg5L+u5pS5IOaJi+acuuWPtyDmiJYg6YKu566xXG4gICAqIEBwYXJhbSB7RWRpdENvbnRhY3RSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlZGl0Q29udGFjdChwYXJhbXM6IEVkaXRDb250YWN0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KGAke0FwaVVybHMuQklORF9DT05UQUNUX1VSTH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7U2V0UGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IFNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5BVVRIX1NFVF9QQVNTV09SRH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGVQYXNzd29yZEJ5T2xkIOS9v+eUqOaXp+WvhueggeS/ruaUueWvhuegge+8jOWmguaenOW3sue7j+e7keWumuaJi+acuuWPt++8jOivt+WFiO+8mnN1ZG/vvIzlho3kv67mlLnlr4bnoIFcbiAgICogQHBhcmFtIHtTZXRQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVBhc3N3b3JkQnlPbGQocGFyYW1zOiBVcGRhdGVQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdWRvVG9rZW4gPSBhd2FpdCB0aGlzLnN1ZG8oeyBwYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLnNldFBhc3N3b3JkKHtcbiAgICAgIHN1ZG9fdG9rZW46IHN1ZG9Ub2tlbi5zdWRvX3Rva2VuLFxuICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogc3Vkb1xuICAgKiBAcGFyYW0ge3N1ZG99IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3VkbyhwYXJhbXM6IFN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxTdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxTdWRvUmVzcG9uc2U+KGAke0FwaVVybHMuU1VET19VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVmVyaWZpY2F0aW9uQ29kZVRvQ3VycmVudFVzZXIocGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIHBhcmFtcy50YXJnZXQgPSAnQ1VSX1VTRVInXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KEFwaVVybHMuVkVSSUZJQ0FUSU9OX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB3aXRoQ2FwdGNoYTogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNoYW5nZSBCb3VuZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hhbmdlQm91bmRQcm92aWRlcihwYXJhbXM6IENoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+KGAke0FwaVVybHMuUFJPVklERVJfTElTVH0vJHtwYXJhbXMucHJvdmlkZXJfaWR9L3RyYW5zYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHByb3ZpZGVyX3RyYW5zX3Rva2VuOiBwYXJhbXMudHJhbnNfdG9rZW4sXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGF0Y2ggdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHBhcmFtIHtVc2VyUHJvZmlsZX0gcGFyYW1zIEEgVXNlclByb2ZpbGUgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0VXNlclByb2ZpbGUocGFyYW1zOiBVc2VyUHJvZmlsZSk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxVc2VyUHJvZmlsZT4oQXBpVXJscy5VU0VSX1BSSUZJTEVfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdXNlciBiYXNpYyBpbmZvXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXM6IE1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5VU0VSX0JBU0lDX0VESVRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoIHRoZSB1c2VyIHByb2ZpbGUuXG4gICAqIEBwYXJhbSB7UXVlcnlVc2VyUHJvZmlsZVJlcX0gYXBwZW5kZWRfcGFyYW1zIEEgUXVlcnlVc2VyUHJvZmlsZVJlcSBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeVVzZXJQcm9maWxlKHBhcmFtczogUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3QpOiBQcm9taXNlPFF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIC8vIGxldCB1cmwgPSBuZXcgVVJMKEFwaVVybHMuVVNFUl9RVUVSWV9VUkwpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhwYXJhbXMgYXMgYW55KVxuICAgIC8vIHVybC5zZWFyY2ggPSBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxRdWVyeVVzZXJQcm9maWxlUmVzcG9uc2U+KGAke0FwaVVybHMuVVNFUl9RVUVSWV9VUkx9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHNldEN1c3RvbVNpZ25GdW5jIHNldCB0aGUgZ2V0IHRpY2tldCBmdW5jdGlvblxuICAgKiBAcGFyYW0gZ2V0VGlja0ZuXG4gICAqL1xuICBwdWJsaWMgc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuOiBHZXRDdXN0b21TaWduVGlja2V0Rm4pIHtcbiAgICB0aGlzLmdldEN1c3RvbVNpZ25UaWNrZXRGbiA9IGdldFRpY2tGblxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25JbldpdGhDdXN0b21UaWNrZXQgY3VzdG9tIHNpZ25JblxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KHBhcmFtcz86IHsgdmVyc2lvbj86IHN0cmluZyB9KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGN1c3RvbVNpZ25UaWNrZXRGbiA9IHRoaXMuZ2V0Q3VzdG9tU2lnblRpY2tldEZuXG4gICAgaWYgKCFjdXN0b21TaWduVGlja2V0Rm4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7XG4gICAgICAgIGVycm9yOiAnZmFpbGVkX3ByZWNvbmRpdGlvbicsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAncGxlYXNlIHVzZSBzZXRDdXN0b21TaWduRnVuYyB0byBzZXQgY3VzdG9tIHNpZ24gZnVuY3Rpb24nLFxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgY3VzdG9tVGlja2V0ID0gYXdhaXQgY3VzdG9tU2lnblRpY2tldEZuKClcbiAgICByZXR1cm4gdGhpcy5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgcHJvdmlkZXJfaWQ6ICdjdXN0b20nLFxuICAgICAgcHJvdmlkZXJfdG9rZW46IGN1c3RvbVRpY2tldCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBhc3N3b3JkXG4gICAqIEBwYXJhbSB7UmVzZXRQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfUkVTRVRfUEFTU1dPUkQsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgLy8gd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRob3JpemUgb2F1dGggQXV0aG9yaXplXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplKHBhcmFtczogQXV0aG9yaXplUmVxdWVzdCk6IFByb21pc2U8QXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxBdXRob3JpemVSZXNwb25zZT4oQXBpVXJscy5BVVRIT1JJWkVfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGF1dGhvcml6ZSBkZXZpY2VcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhvcml6ZURldmljZShwYXJhbXM6IEF1dGhvcml6ZURldmljZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihBcGlVcmxzLkFVVEhPUklaRV9ERVZJQ0VfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGRldmljZSBhdXRob3JpemF0aW9uXG4gICAqIEBwYXJhbSB7RGV2aWNlQXV0aG9yaXplUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZUF1dGhvcml6ZVJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBEZXZpY2VBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxEZXZpY2VBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9HRVRfREVWSUNFX0NPREUsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogT0F1dGggZ2V0IGF1dGhvcml6ZSBpbmZvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplSW5mbyhwYXJhbXM6IEF1dGhvcml6ZUluZm9SZXF1ZXN0KTogUHJvbWlzZTxBdXRob3JpemVJbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtBcGlVcmxzLkFVVEhPUklaRV9JTkZPX1VSTH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocGFyYW1zKX1gXG4gICAgbGV0IHdpdGhCYXNpY0F1dGggPSB0cnVlXG4gICAgbGV0IHdpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgY29uc3QgaGFzTG9naW4gPSBhd2FpdCB0aGlzLmhhc0xvZ2luU3RhdGUoKVxuICAgIGlmIChoYXNMb2dpbikge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgd2l0aEJhc2ljQXV0aCA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEF1dGhvcml6ZUluZm9SZXNwb25zZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aEJhc2ljQXV0aCxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrVXNlcm5hbWUocGFyYW1zOiBDaGVja1VzZXJuYW1lUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQ0hFQ0tfVVNFUk5BTUUsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0lmVXNlckV4aXN0KHBhcmFtczogQ2hlY2tJZlVzZXJFeGlzdFJlcXVlc3QpOiBQcm9taXNlPENoZWNrSWZVc2VyRXhpc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhwYXJhbXMgYXMgYW55KVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlPihgJHtBcGlVcmxzLkNIRUNLX0lGX1VTRVJfRVhJU1R9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0U2NvcGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luR3JvdXBzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0R3JvdXBzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoVG9rZW5Gb3JjZShwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZyB9KSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5yZWZyZXNoVG9rZW4oe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uOiBwYXJhbXM/LnZlcnNpb24gfHwgJ3YxJyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHB1YmxpYyBrZXkgZm9yIHJlcXVlc3QgcGFyYW1zIGVuY3J5cHRpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQdWJsaWNLZXkoKTogUHJvbWlzZTxQdWJsaWNLZXk+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQdWJsaWNLZXk+KEFwaVVybHNWMi5BVVRIX1BVQkxJQ19LRVksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge30sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBlbmNyeXB0IHJlcXVlc3QgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbmNyeXB0UGFyYW1zKHBhcmFtczogUmVjb3JkPGFueSwgYW55Pik6IFByb21pc2U8RW5jcnlwdFBhcmFtcz4ge1xuICAgIGNvbnN0IHsgaXNFbmNyeXB0IH0gPSBwYXJhbXNcbiAgICBkZWxldGUgcGFyYW1zLmlzRW5jcnlwdFxuXG4gICAgY29uc3QgcGF5bG9hZCA9IGRlZXBDbG9uZShwYXJhbXMpXG5cbiAgICBjb25zdCBlbmNyeXB0VXRpbHMgPSBnZXRFbmNyeXB0VXRpbHMoaXNFbmNyeXB0KVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHJldHVybiBwYXJhbXNcbiAgICB9XG5cbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgaWYgKCFwdWJsaWNLZXkgfHwgIXB1YmxpY19rZXlfdGh1bWJwcmludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWNfa2V5IG9yIHB1YmxpY19rZXlfdGh1bWJwcmludCBpcyBlbXB0eScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtczogZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkIH0pLFxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50LFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcHJvdmlkZXIgc3ViIHR5cGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlclN1YlR5cGUoKTogUHJvbWlzZTxQcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQcm92aWRlclN1YlR5cGU+KEFwaVVybHMuR0VUX1BST1ZJREVSX1RZUEUsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBwcm92aWRlcl9pZDogJ3dlZGEnLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBwcm92aWRlciBzdWIgdHlwZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHsgdG9rZW4sIGtleSB9OiB7IHRva2VuOiBzdHJpbmc7IGtleTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx7IGNhcHRjaGFfdG9rZW46IHN0cmluZzsgZXhwaXJlc19pbjogbnVtYmVyIH0+KEFwaVVybHMuVkVSSUZZX0NBUFRDSEFfREFUQV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogeyB0b2tlbiwga2V5IH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ2FwdGNoYURhdGEoeyBzdGF0ZSwgcmVkaXJlY3RfdXJpID0gdW5kZWZpbmVkIH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx7IHRva2VuOiBzdHJpbmc7IGRhdGE6IHN0cmluZyB9PihBcGlVcmxzLkNBUFRDSEFfREFUQV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogeyBzdGF0ZSwgcmVkaXJlY3RfdXJpIH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogbWluaS1wcm9ncmFtIHNjYW4gY29kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXM6IEdldE1pbmlQcm9ncmFtUXJDb2RlUmVxdWVzdCk6IFByb21pc2U8R2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdldE1pbmlQcm9ncmFtUXJDb2RlUmVzcG9uc2U+KEFwaVVybHMuR0VUX01JTklQUk9HUkFNX1FSQ09ERSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBtaW5pLXByb2dyYW0gc2NhbiBjb2RlIHN0YXR1c1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzKHBhcmFtczogR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXF1ZXN0LCk6IFByb21pc2U8R2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2U+KEFwaVVybHMuR0VUX01JTklQUk9HUkFNX1FSQ09ERV9TVEFUVVMsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHVzZXIgYmVoYXZpb3IgbG9nXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBHZXRVc2VyQmVoYXZpb3JMb2cpOiBQcm9taXNlPEdldFVzZXJCZWhhdmlvckxvZ1Jlcz4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHsgTE9HSU46ICdxdWVyeVthY3Rpb25dPVVTRVJfTE9HSU4nLCBNT0RJRlk6ICduZV9xdWVyeVthY3Rpb25dPVVTRVJfTE9HSU4nIH1cbiAgICBjb25zdCB1cmwgPSBgJHtBcGlVcmxzLkdFVF9VU0VSX0JFSEFWSU9SX0xPR30/JHthY3Rpb25bcGFyYW1zLnR5cGVdfSZsaW1pdD0ke3BhcmFtcy5saW1pdH0ke1xuICAgICAgcGFyYW1zLnBhZ2VfdG9rZW4gPyBgJnBhZ2VfdG9rZW49JHtwYXJhbXMucGFnZV90b2tlbn1gIDogJydcbiAgICB9YFxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOi/meS4quaWueazleaYr+eUqOaIt+iHquW3seS/ruaUueiHquW3seeahOWvhuegge+8jOS4jeWQjOS6ji9hdXRoL3YxL3VzZXIvcGFzc3dvcmTmjqXlj6PvvIzor6XmjqXlj6PmmK/nrqHnkIblkZjkv67mlLnkuKrkurrnmoRcbiAgICogQHBhcmFtIHtNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdH0gcGFyYW1zIEEgTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vZGlmeVBhc3N3b3JkKHBhcmFtczogTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGdldEVuY3J5cHRVdGlscyh0cnVlKVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG8gbm90IHN1cHBvcnQgZW5jcnlwdCwgYSBlbmNyeXB0IHV0aWwgcmVxdWlyZWQuJylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNLZXkoKVxuICAgICAgcHVibGljS2V5ID0gcmVzLnB1YmxpY19rZXlcbiAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCA9IHJlcy5wdWJsaWNfa2V5X3RodW1icHJpbnRcbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIGlmICghcHVibGljS2V5IHx8ICFwdWJsaWNfa2V5X3RodW1icHJpbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHVibGljX2tleSBvciBwdWJsaWNfa2V5X3RodW1icHJpbnQgaXMgZW1wdHknKVxuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRfcGFzc3dvcmQgPSBwYXJhbXMucGFzc3dvcmQgPyBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5wYXNzd29yZCB9KSA6ICcnXG4gICAgY29uc3QgZW5jcnlwdF9uZXdfcGFzc3dvcmQgPSBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLlVTRVJfQkFTSUNfRURJVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keToge1xuICAgICAgICB1c2VyX2lkOiBwYXJhbXMudXNlcl9pZCxcbiAgICAgICAgZW5jcnlwdF9wYXNzd29yZCxcbiAgICAgICAgZW5jcnlwdF9uZXdfcGFzc3dvcmQsXG4gICAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDph43nva7lr4bnoIHvvIzor6XmjqXlj6Pml6DpnIDnmbvlvZXlsLHlj6/ku6Xph43nva7lr4bnoIFcbiAgICogQHBhcmFtIHtNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3R9IHBhcmFtcyBBIE1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW4ocGFyYW1zOiBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGdldEVuY3J5cHRVdGlscyh0cnVlKVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG8gbm90IHN1cHBvcnQgZW5jcnlwdCwgYSBlbmNyeXB0IHV0aWwgcmVxdWlyZWQuJylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNLZXkoKVxuICAgICAgcHVibGljS2V5ID0gcmVzLnB1YmxpY19rZXlcbiAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCA9IHJlcy5wdWJsaWNfa2V5X3RodW1icHJpbnRcbiAgICB9IGNhdGNoIChlcnJvcikge31cblxuICAgIGlmICghcHVibGljS2V5IHx8ICFwdWJsaWNfa2V5X3RodW1icHJpbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHVibGljX2tleSBvciBwdWJsaWNfa2V5X3RodW1icHJpbnQgaXMgZW1wdHknKVxuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRfcGFzc3dvcmQgPSBwYXJhbXMucGFzc3dvcmQgPyBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5wYXNzd29yZCB9KSA6ICcnXG4gICAgY29uc3QgZW5jcnlwdF9uZXdfcGFzc3dvcmQgPSBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzVjIuQVVUSF9SRVNFVF9QQVNTV09SRCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHVzZXJuYW1lOiBwYXJhbXMudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBlbmNyeXB0X3Bhc3N3b3JkLFxuICAgICAgICBuZXdfcGFzc3dvcmQ6IGVuY3J5cHRfbmV3X3Bhc3N3b3JkLFxuICAgICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
|
@@ -35,11 +35,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
38
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
42
|
exports.Captcha = void 0;
|
|
40
43
|
var consts_1 = require("../auth/consts");
|
|
41
44
|
var oauth2client_1 = require("../oauth2client/oauth2client");
|
|
42
45
|
var mp_1 = require("../utils/mp");
|
|
46
|
+
var urlSearchParams_1 = __importDefault(require("../utils/urlSearchParams"));
|
|
43
47
|
var Captcha = (function () {
|
|
44
48
|
function Captcha(opts) {
|
|
45
49
|
if (!opts.openURIWithCallback) {
|
|
@@ -132,7 +136,7 @@ var Captcha = (function () {
|
|
|
132
136
|
var iframeLocation = iframe.contentWindow.location;
|
|
133
137
|
if (iframeLocation.host + iframeLocation.pathname === windowLocation.host + windowLocation.pathname) {
|
|
134
138
|
target.style.display = 'none';
|
|
135
|
-
var iframeUrlParams = new
|
|
139
|
+
var iframeUrlParams = new urlSearchParams_1.default(iframeLocation.search);
|
|
136
140
|
var captchToken = iframeUrlParams.get('captcha_token');
|
|
137
141
|
if (captchToken) {
|
|
138
142
|
return resolve({
|
|
@@ -285,4 +289,4 @@ var Captcha = (function () {
|
|
|
285
289
|
return Captcha;
|
|
286
290
|
}());
|
|
287
291
|
exports.Captcha = Captcha;
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXB0Y2hhL2NhcHRjaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQW1EO0FBR25ELDZEQUE2RDtBQUM3RCxrQ0FBaUQ7QUE0QmpEO0lBUUUsaUJBQVksSUFBb0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUE7U0FDaEU7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLDZCQUFjLENBQUE7U0FDOUI7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsa0JBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBRSxDQUFBO0lBQ3BELENBQUM7SUFPWSx5QkFBTyxHQUFwQixVQUF3QixHQUFXLEVBQUUsT0FBK0I7Ozs7Ozt3QkFDbEUsSUFBSSxDQUFDLE9BQU8sRUFBRTs0QkFDWixPQUFPLEdBQUcsRUFBRSxDQUFBO3lCQUNiO3dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFOzRCQUNuQixPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTt5QkFDdkI7d0JBQ0ssS0FBSyxHQUFHLFVBQUcsT0FBTyxDQUFDLE1BQU0sY0FBSSxHQUFHLENBQUUsQ0FBQTt3QkFDcEMsTUFBTSxHQUFHLEdBQUcsQ0FBQTs2QkFDWixPQUFPLENBQUMsV0FBVyxFQUFuQixjQUFtQjt3QkFDWixXQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFBOzt3QkFBOUQsTUFBTSxHQUFHLFNBQXFELENBQUE7Ozs7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Q29udGVudCI6WyJpbXBvcnQgeyBBcGlVcmxzLCBFcnJvclR5cGUgfSBmcm9tICcuLi9hdXRoL2NvbnN0cydcbmltcG9ydCB7IFNpbXBsZVN0b3JhZ2UsIFJlcXVlc3RGdW5jdGlvbiB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9pbnRlcmZhY2UnXG5pbXBvcnQgeyBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuaW1wb3J0IHsgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuaW1wb3J0IHsgaXNJbk1wV2ViVmlldywgaXNNcCB9IGZyb20gJy4uL3V0aWxzL21wJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFPcHRpb25zIHtcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICByZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb25cbiAgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICAvLyDmiZPlvIDnvZHpobXlubbpgJrov4dVUkzlm57osIPojrflj5YgQ2FwdGNoYVRva2Vu77yM6ZKI5a+55LiN6YCa55qE5bmz5Y+w77yM6K+l5Ye95pWw5Y+v5Lul6Ieq5a6a5LmJ5a6e546wLCDpu5jorqTpm4bmiJDmtY/op4jlmajnq6/orqTor4FcbiAgb3BlblVSSVdpdGhDYWxsYmFjaz86IE9wZW5VUklXaXRoQ2FsbGJhY2tGdWN0aW9uXG59XG5cbnR5cGUgT3BlblVSSVdpdGhDYWxsYmFja0Z1Y3Rpb24gPSAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8Q2FwdGNoYVRva2VuPlxuXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFUb2tlbiB7XG4gIGNhcHRjaGFfdG9rZW46IHN0cmluZ1xuICBleHBpcmVzX2luOiBudW1iZXJcbiAgZXhwaXJlc19hdD86IERhdGUgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdGNoYVJlcXVlc3RPcHRpb25zIGV4dGVuZHMgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zIHtcbiAgd2l0aENhcHRjaGE/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q2FwdGNoYVJlc3BvbnNlIHtcbiAgY2FwdGNoYV90b2tlbj86IHN0cmluZ1xuICBleHBpcmVzX2luPzogbnVtYmVyXG4gIHVybD86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgQ2FwdGNoYSB7XG4gIHByaXZhdGUgY29uZmlnOiBDYXB0Y2hhT3B0aW9uc1xuICBwcml2YXRlIHRva2VuU2VjdGlvbk5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0NhcHRjaGFPcHRpb25zfSBvcHRzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRzOiBDYXB0Y2hhT3B0aW9ucykge1xuICAgIGlmICghb3B0cy5vcGVuVVJJV2l0aENhbGxiYWNrKSB7XG4gICAgICBvcHRzLm9wZW5VUklXaXRoQ2FsbGJhY2sgPSB0aGlzLmdldERlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrKClcbiAgICB9XG4gICAgaWYgKCFvcHRzLnN0b3JhZ2UpIHtcbiAgICAgIG9wdHMuc3RvcmFnZSA9IGRlZmF1bHRTdG9yYWdlXG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSBvcHRzXG4gICAgdGhpcy50b2tlblNlY3Rpb25OYW1lID0gYGNhcHRjaGFfJHtvcHRzLmNsaWVudElkfWBcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1ZXN0IGh0dHAgbGlrZSBzaW1wbGUgZmV0Y2ggYXBpLCBleHA6cmVxdWVzdCgnL3YxL3VzZXIvbWUnLCB7d2l0aENyZWRlbnRpYWxzOnRydWV9KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7QXV0aENsaWVudFJlcXVlc3RPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IENhcHRjaGFSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5tZXRob2QpIHtcbiAgICAgIG9wdGlvbnMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgY29uc3Qgc3RhdGUgPSBgJHtvcHRpb25zLm1ldGhvZH06JHt1cmx9YFxuICAgIGxldCByZXFVUkwgPSB1cmxcbiAgICBpZiAob3B0aW9ucy53aXRoQ2FwdGNoYSkge1xuICAgICAgcmVxVVJMID0gYXdhaXQgdGhpcy5hcHBlbmRDYXB0Y2hhVG9rZW5Ub1VSTCh1cmwsIHN0YXRlLCBmYWxzZSlcbiAgICB9XG5cbiAgICBsZXQgcmVzcDogVFxuICAgIHRyeSB7XG4gICAgICByZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxUPihyZXFVUkwsIG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9SRVFVSVJFRCB8fCBlcnIuZXJyb3IgPT09IEVycm9yVHlwZS5DQVBUQ0hBX0lOVkFMSUQpIHtcbiAgICAgICAgdXJsID0gYXdhaXQgdGhpcy5hcHBlbmRDYXB0Y2hhVG9rZW5Ub1VSTCh1cmwsIHN0YXRlLCBlcnIuZXJyb3IgPT09IEVycm9yVHlwZS5DQVBUQ0hBX0lOVkFMSUQpXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFQ+KHVybCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gICAgfVxuICAgIHJldHVybiByZXNwXG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrKCk6IE9wZW5VUklXaXRoQ2FsbGJhY2tGdWN0aW9uIHtcbiAgICBpZiAoIWlzTXAoKSAmJiAhaXNJbk1wV2ViVmlldygpKSB7XG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCdfX2NhcHRjaGEnKSA+IDApIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9XG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhcHRjaGFfcGFuZWxfd3JhcCcpID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgICBlbGVtZW50RGl2LnN0eWxlLmNzc1RleHQgPSAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO3Bvc2l0aW9uOiBmaXhlZDtsZWZ0OiAwcHg7cmlnaHQ6IDBweDt0b3A6IDBweDtib3R0b206IDBweDtwYWRkaW5nOiA5dncgMCAwIDA7ZGlzcGxheTogbm9uZTt6LWluZGV4OjEwMDsnXG4gICAgICAgIGVsZW1lbnREaXYuc2V0QXR0cmlidXRlKCdpZCcsICdjYXB0Y2hhX3BhbmVsX3dyYXAnKVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnREaXYpXG4gICAgICAgIH0sIDApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICog6buY6K6k6YCa6L+H5rWP6KeI5Zmo5omT5byA572R6aG15bm26I635Y+W5Zue6LCDXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IHdpZHRoPzogc3RyaW5nOyBoZWlnaHQ/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTxDYXB0Y2hhVG9rZW4+IHtcbiAgICBjb25zdCB7IHdpZHRoID0gJzM1NXB4JywgaGVpZ2h0ID0gJzM1NXB4JyB9ID0gb3B0cyB8fCB7fVxuXG4gICAgY29uc3QgbWF0Y2hlZCA9IHVybC5tYXRjaCgvXihkYXRhOi4qKSQvKVxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOSU1QTEVNRU5URUQsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAnbmVlZCB0byBpbXBsIGNhcHRjaGEgZGF0YScsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXB0Y2hhX3BhbmVsX3dyYXAnKVxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpXG4gICAgdGFyZ2V0LmlubmVySFRNTCA9ICcnXG5cbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCB1cmwpXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnaWQnLCAncmV2aWV3LXBhbmVsLWlmcmFtZScpXG4gICAgaWZyYW1lLnN0eWxlLmNzc1RleHQgPSBgbWluLXdpZHRoOiR7d2lkdGh9O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OiR7aGVpZ2h0fTttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtib3JkZXI6IG5vbmU7YFxuICAgIHRhcmdldC5hcHBlbmRDaGlsZChpZnJhbWUpXG4gICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENhcHRjaGFUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3aW5kb3dMb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvblxuICAgICAgICAgIGNvbnN0IGlmcmFtZUxvY2F0aW9uID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb25cbiAgICAgICAgICBpZiAoaWZyYW1lTG9jYXRpb24uaG9zdCArIGlmcmFtZUxvY2F0aW9uLnBhdGhuYW1lID09PSB3aW5kb3dMb2NhdGlvbi5ob3N0ICsgd2luZG93TG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgICAgICBjb25zdCBpZnJhbWVVcmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGlmcmFtZUxvY2F0aW9uLnNlYXJjaClcbiAgICAgICAgICAgIGNvbnN0IGNhcHRjaFRva2VuID0gaWZyYW1lVXJsUGFyYW1zLmdldCgnY2FwdGNoYV90b2tlbicpXG4gICAgICAgICAgICBpZiAoY2FwdGNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46IGNhcHRjaFRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IE51bWJlcihpZnJhbWVVcmxQYXJhbXMuZ2V0KCdleHBpcmVzX2luJykpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7XG4gICAgICAgICAgICAgIGVycm9yOiBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdlcnJvcicpLFxuICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogaWZyYW1lVXJsUGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogZ2V0Q2FwdGNoYVRva2VuIOiOt+WPlmNhcHRjaGFUb2tlblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYXB0Y2hhVG9rZW4oZm9yY2VOZXdUb2tlbjogYm9vbGVhbiwgc3RhdGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFmb3JjZU5ld1Rva2VuKSB7XG4gICAgICAvLyDlpoLmnpzmnKzlnLDlrZjlnKjvvIzliJnnm7TmjqXov5Tlm55cbiAgICAgIGNvbnN0IGNhcHRjaGFUb2tlbiA9IGF3YWl0IHRoaXMuZmluZENhcHRjaGFUb2tlbigpXG4gICAgICBpZiAoY2FwdGNoYVRva2VuKSB7XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW5cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNhcHRjaGFUb2tlblJlc3A6IHtcbiAgICAgIHVybD86IHN0cmluZ1xuICAgICAgY2FwdGNoYV90b2tlbj86IHN0cmluZ1xuICAgICAgZXhwaXJlc19pbj86IG51bWJlclxuICAgIH1cbiAgICBpZiAoIWlzTXAoKSAmJiAhaXNJbk1wV2ViVmlldygpKSB7XG4gICAgICBjb25zdCByZWRpcmVjdF91cmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9fX2NhcHRjaGE9b25gXG4gICAgICBjYXB0Y2hhVG9rZW5SZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxHZXRDYXB0Y2hhUmVzcG9uc2U+KEFwaVVybHMuR0VUX0NBUFRDSEFfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcbiAgICAgICAgICByZWRpcmVjdF91cmksXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICB9KVxuICAgICAgaWYgKGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlbikge1xuICAgICAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSB7XG4gICAgICAgICAgY2FwdGNoYV90b2tlbjogY2FwdGNoYVRva2VuUmVzcC5jYXB0Y2hhX3Rva2VuLFxuICAgICAgICAgIGV4cGlyZXNfaW46IGNhcHRjaGFUb2tlblJlc3AuZXhwaXJlc19pbixcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmVDYXB0Y2hhVG9rZW4oY2FwdGNoYVRva2VuKVxuICAgICAgICByZXR1cm4gY2FwdGNoYVRva2VuUmVzcC5jYXB0Y2hhX3Rva2VuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogaHR0cHM6Ly9pd2lraS53b2EuY29tL3AvNDAxMDY5OTQxN1xuICAgICAgICovXG4gICAgICBjb25zdCBjYXB0Y2hhRGF0YVJlc3AgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHtcbiAgICAgICAgZGF0YTogc3RyaW5nXG4gICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgdG9rZW46IHN0cmluZ1xuICAgICAgICBleHBpcmVzX2luOiBudW1iZXJcbiAgICAgIH0+KEFwaVVybHMuQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICB9KVxuICAgICAgY2FwdGNoYVRva2VuUmVzcCA9IHtcbiAgICAgICAgdXJsOiBgJHtjYXB0Y2hhRGF0YVJlc3AuZGF0YX0/c3RhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpfSZ0b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudChjYXB0Y2hhRGF0YVJlc3AudG9rZW4sKX1gLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmNvbmZpZy5vcGVuVVJJV2l0aENhbGxiYWNrKGNhcHRjaGFUb2tlblJlc3AudXJsKVxuICAgIHRoaXMuc2F2ZUNhcHRjaGFUb2tlbihjYXB0Y2hhVG9rZW4pXG4gICAgcmV0dXJuIGNhcHRjaGFUb2tlbi5jYXB0Y2hhX3Rva2VuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGVuZENhcHRjaGFUb2tlblRvVVJMKHVybDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCBmb3JjZU5ld1Rva2VuOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmdldENhcHRjaGFUb2tlbihmb3JjZU5ld1Rva2VuLCBzdGF0ZSlcbiAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA+IDApIHtcbiAgICAgIHVybCArPSBgJmNhcHRjaGFfdG9rZW49JHtjYXB0Y2hhVG9rZW59YFxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgKz0gYD9jYXB0Y2hhX3Rva2VuPSR7Y2FwdGNoYVRva2VufWBcbiAgICB9XG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlQ2FwdGNoYVRva2VuKHRva2VuOiBDYXB0Y2hhVG9rZW4pIHtcbiAgICB0b2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArICh0b2tlbi5leHBpcmVzX2luIC0gMTApICogMTAwMClcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodG9rZW4pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5zZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSwgdG9rZW5TdHIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRDYXB0Y2hhVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNhcHRjaGFUb2tlbj8uZXhwaXJlc19hdCkge1xuICAgICAgICAgIGNhcHRjaGFUb2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoY2FwdGNoYVRva2VuLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNFeHBpcmVkID0gY2FwdGNoYVRva2VuLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gICAgICAgIGlmIChpc0V4cGlyZWQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW4uY2FwdGNoYV90b2tlblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIl19
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXB0Y2hhL2NhcHRjaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQW1EO0FBR25ELDZEQUE2RDtBQUM3RCxrQ0FBaUQ7QUFDakQsNkVBQXdEO0FBNEJ4RDtJQVFFLGlCQUFZLElBQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFBO1NBQ2hFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyw2QkFBYyxDQUFBO1NBQzlCO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGtCQUFXLElBQUksQ0FBQyxRQUFRLENBQUUsQ0FBQTtJQUNwRCxDQUFDO0lBT1kseUJBQU8sR0FBcEIsVUFBd0IsR0FBVyxFQUFFLE9BQStCOzs7Ozs7d0JBQ2xFLElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQTt5QkFDYjt3QkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTs0QkFDbkIsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7eUJBQ3ZCO3dCQUNLLEtBQUssR0FBRyxVQUFHLE9BQU8sQ0FBQyxNQUFNLGNBQUksR0FBRyxDQUFFLENBQUE7d0JBQ3BDLE1BQU0sR0FBRyxHQUFHLENBQUE7NkJBQ1osT0FBTyxDQUFDLFdBQVcsRUFBbkIsY0FBbUI7d0JBQ1osV0FBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBQTs7d0JBQTlELE1BQU0sR0FB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TlksMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlVcmxzLCBFcnJvclR5cGUgfSBmcm9tICcuLi9hdXRoL2NvbnN0cydcbmltcG9ydCB7IFNpbXBsZVN0b3JhZ2UsIFJlcXVlc3RGdW5jdGlvbiB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9pbnRlcmZhY2UnXG5pbXBvcnQgeyBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuaW1wb3J0IHsgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuaW1wb3J0IHsgaXNJbk1wV2ViVmlldywgaXNNcCB9IGZyb20gJy4uL3V0aWxzL21wJ1xuaW1wb3J0IE15VVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL3V0aWxzL3VybFNlYXJjaFBhcmFtcydcblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhT3B0aW9ucyB7XG4gIGNsaWVudElkOiBzdHJpbmdcbiAgcmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uXG4gIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcbiAgLy8g5omT5byA572R6aG15bm26YCa6L+HVVJM5Zue6LCD6I635Y+WIENhcHRjaGFUb2tlbu+8jOmSiOWvueS4jemAmueahOW5s+WPsO+8jOivpeWHveaVsOWPr+S7peiHquWumuS5ieWunueOsCwg6buY6K6k6ZuG5oiQ5rWP6KeI5Zmo56uv6K6k6K+BXG4gIG9wZW5VUklXaXRoQ2FsbGJhY2s/OiBPcGVuVVJJV2l0aENhbGxiYWNrRnVjdGlvblxufVxuXG50eXBlIE9wZW5VUklXaXRoQ2FsbGJhY2tGdWN0aW9uID0gKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPENhcHRjaGFUb2tlbj5cblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhVG9rZW4ge1xuICBjYXB0Y2hhX3Rva2VuOiBzdHJpbmdcbiAgZXhwaXJlc19pbjogbnVtYmVyXG4gIGV4cGlyZXNfYXQ/OiBEYXRlIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyB7XG4gIHdpdGhDYXB0Y2hhPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldENhcHRjaGFSZXNwb25zZSB7XG4gIGNhcHRjaGFfdG9rZW4/OiBzdHJpbmdcbiAgZXhwaXJlc19pbj86IG51bWJlclxuICB1cmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIENhcHRjaGEge1xuICBwcml2YXRlIGNvbmZpZzogQ2FwdGNoYU9wdGlvbnNcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtDYXB0Y2hhT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQ2FwdGNoYU9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdHMub3BlblVSSVdpdGhDYWxsYmFjaykge1xuICAgICAgb3B0cy5vcGVuVVJJV2l0aENhbGxiYWNrID0gdGhpcy5nZXREZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjaygpXG4gICAgfVxuICAgIGlmICghb3B0cy5zdG9yYWdlKSB7XG4gICAgICBvcHRzLnN0b3JhZ2UgPSBkZWZhdWx0U3RvcmFnZVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gb3B0c1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IGBjYXB0Y2hhXyR7b3B0cy5jbGllbnRJZH1gXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBDYXB0Y2hhUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBvcHRpb25zLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0gYCR7b3B0aW9ucy5tZXRob2R9OiR7dXJsfWBcbiAgICBsZXQgcmVxVVJMID0gdXJsXG4gICAgaWYgKG9wdGlvbnMud2l0aENhcHRjaGEpIHtcbiAgICAgIHJlcVVSTCA9IGF3YWl0IHRoaXMuYXBwZW5kQ2FwdGNoYVRva2VuVG9VUkwodXJsLCBzdGF0ZSwgZmFsc2UpXG4gICAgfVxuXG4gICAgbGV0IHJlc3A6IFRcbiAgICB0cnkge1xuICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VD4ocmVxVVJMLCBvcHRpb25zKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5lcnJvciA9PT0gRXJyb3JUeXBlLkNBUFRDSEFfUkVRVUlSRUQgfHwgZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9JTlZBTElEKSB7XG4gICAgICAgIHVybCA9IGF3YWl0IHRoaXMuYXBwZW5kQ2FwdGNoYVRva2VuVG9VUkwodXJsLCBzdGF0ZSwgZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9JTlZBTElEKVxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcFxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjaygpOiBPcGVuVVJJV2l0aENhbGxiYWNrRnVjdGlvbiB7XG4gICAgaWYgKCFpc01wKCkgJiYgIWlzSW5NcFdlYlZpZXcoKSkge1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZignX19jYXB0Y2hhJykgPiAwKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXB0Y2hhX3BhbmVsX3dyYXAnKSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbGVtZW50RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgICAgZWxlbWVudERpdi5zdHlsZS5jc3NUZXh0ID0gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtwb3NpdGlvbjogZml4ZWQ7bGVmdDogMHB4O3JpZ2h0OiAwcHg7dG9wOiAwcHg7Ym90dG9tOiAwcHg7cGFkZGluZzogOXZ3IDAgMCAwO2Rpc3BsYXk6IG5vbmU7ei1pbmRleDoxMDA7J1xuICAgICAgICBlbGVtZW50RGl2LnNldEF0dHJpYnV0ZSgnaWQnLCAnY2FwdGNoYV9wYW5lbF93cmFwJylcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50RGl2KVxuICAgICAgICB9LCAwKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIOm7mOiupOmAmui/h+a1j+iniOWZqOaJk+W8gOe9kemhteW5tuiOt+WPluWbnuiwg1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjayhcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRzPzogeyB3aWR0aD86IHN0cmluZzsgaGVpZ2h0Pzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8Q2FwdGNoYVRva2VuPiB7XG4gICAgY29uc3QgeyB3aWR0aCA9ICczNTVweCcsIGhlaWdodCA9ICczNTVweCcgfSA9IG9wdHMgfHwge31cblxuICAgIGNvbnN0IG1hdGNoZWQgPSB1cmwubWF0Y2goL14oZGF0YTouKikkLylcbiAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTklNUExFTUVOVEVELFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ25lZWQgdG8gaW1wbCBjYXB0Y2hhIGRhdGEnLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FwdGNoYV9wYW5lbF93cmFwJylcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKVxuICAgIHRhcmdldC5pbm5lckhUTUwgPSAnJ1xuXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKVxuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3Jldmlldy1wYW5lbC1pZnJhbWUnKVxuICAgIGlmcmFtZS5zdHlsZS5jc3NUZXh0ID0gYG1pbi13aWR0aDoke3dpZHRofTtkaXNwbGF5OmJsb2NrO2hlaWdodDoke2hlaWdodH07bWFyZ2luOjAgYXV0bztiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ym9yZGVyOiBub25lO2BcbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoaWZyYW1lKVxuICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxDYXB0Y2hhVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgd2luZG93TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb25cbiAgICAgICAgICBjb25zdCBpZnJhbWVMb2NhdGlvbiA9IGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uXG4gICAgICAgICAgaWYgKGlmcmFtZUxvY2F0aW9uLmhvc3QgKyBpZnJhbWVMb2NhdGlvbi5wYXRobmFtZSA9PT0gd2luZG93TG9jYXRpb24uaG9zdCArIHdpbmRvd0xvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgY29uc3QgaWZyYW1lVXJsUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKGlmcmFtZUxvY2F0aW9uLnNlYXJjaClcbiAgICAgICAgICAgIGNvbnN0IGNhcHRjaFRva2VuID0gaWZyYW1lVXJsUGFyYW1zLmdldCgnY2FwdGNoYV90b2tlbicpXG4gICAgICAgICAgICBpZiAoY2FwdGNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46IGNhcHRjaFRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IE51bWJlcihpZnJhbWVVcmxQYXJhbXMuZ2V0KCdleHBpcmVzX2luJykpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7XG4gICAgICAgICAgICAgIGVycm9yOiBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdlcnJvcicpLFxuICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogaWZyYW1lVXJsUGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogZ2V0Q2FwdGNoYVRva2VuIOiOt+WPlmNhcHRjaGFUb2tlblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYXB0Y2hhVG9rZW4oZm9yY2VOZXdUb2tlbjogYm9vbGVhbiwgc3RhdGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFmb3JjZU5ld1Rva2VuKSB7XG4gICAgICAvLyDlpoLmnpzmnKzlnLDlrZjlnKjvvIzliJnnm7TmjqXov5Tlm55cbiAgICAgIGNvbnN0IGNhcHRjaGFUb2tlbiA9IGF3YWl0IHRoaXMuZmluZENhcHRjaGFUb2tlbigpXG4gICAgICBpZiAoY2FwdGNoYVRva2VuKSB7XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW5cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNhcHRjaGFUb2tlblJlc3A6IHtcbiAgICAgIHVybD86IHN0cmluZ1xuICAgICAgY2FwdGNoYV90b2tlbj86IHN0cmluZ1xuICAgICAgZXhwaXJlc19pbj86IG51bWJlclxuICAgIH1cbiAgICBpZiAoIWlzTXAoKSAmJiAhaXNJbk1wV2ViVmlldygpKSB7XG4gICAgICBjb25zdCByZWRpcmVjdF91cmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9fX2NhcHRjaGE9b25gXG4gICAgICBjYXB0Y2hhVG9rZW5SZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxHZXRDYXB0Y2hhUmVzcG9uc2U+KEFwaVVybHMuR0VUX0NBUFRDSEFfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcbiAgICAgICAgICByZWRpcmVjdF91cmksXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICB9KVxuICAgICAgaWYgKGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlbikge1xuICAgICAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSB7XG4gICAgICAgICAgY2FwdGNoYV90b2tlbjogY2FwdGNoYVRva2VuUmVzcC5jYXB0Y2hhX3Rva2VuLFxuICAgICAgICAgIGV4cGlyZXNfaW46IGNhcHRjaGFUb2tlblJlc3AuZXhwaXJlc19pbixcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmVDYXB0Y2hhVG9rZW4oY2FwdGNoYVRva2VuKVxuICAgICAgICByZXR1cm4gY2FwdGNoYVRva2VuUmVzcC5jYXB0Y2hhX3Rva2VuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogaHR0cHM6Ly9pd2lraS53b2EuY29tL3AvNDAxMDY5OTQxN1xuICAgICAgICovXG4gICAgICBjb25zdCBjYXB0Y2hhRGF0YVJlc3AgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHtcbiAgICAgICAgZGF0YTogc3RyaW5nXG4gICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgdG9rZW46IHN0cmluZ1xuICAgICAgICBleHBpcmVzX2luOiBudW1iZXJcbiAgICAgIH0+KEFwaVVybHMuQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICB9KVxuICAgICAgY2FwdGNoYVRva2VuUmVzcCA9IHtcbiAgICAgICAgdXJsOiBgJHtjYXB0Y2hhRGF0YVJlc3AuZGF0YX0/c3RhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpfSZ0b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudChjYXB0Y2hhRGF0YVJlc3AudG9rZW4sKX1gLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmNvbmZpZy5vcGVuVVJJV2l0aENhbGxiYWNrKGNhcHRjaGFUb2tlblJlc3AudXJsKVxuICAgIHRoaXMuc2F2ZUNhcHRjaGFUb2tlbihjYXB0Y2hhVG9rZW4pXG4gICAgcmV0dXJuIGNhcHRjaGFUb2tlbi5jYXB0Y2hhX3Rva2VuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGVuZENhcHRjaGFUb2tlblRvVVJMKHVybDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCBmb3JjZU5ld1Rva2VuOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmdldENhcHRjaGFUb2tlbihmb3JjZU5ld1Rva2VuLCBzdGF0ZSlcbiAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA+IDApIHtcbiAgICAgIHVybCArPSBgJmNhcHRjaGFfdG9rZW49JHtjYXB0Y2hhVG9rZW59YFxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgKz0gYD9jYXB0Y2hhX3Rva2VuPSR7Y2FwdGNoYVRva2VufWBcbiAgICB9XG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlQ2FwdGNoYVRva2VuKHRva2VuOiBDYXB0Y2hhVG9rZW4pIHtcbiAgICB0b2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArICh0b2tlbi5leHBpcmVzX2luIC0gMTApICogMTAwMClcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodG9rZW4pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5zZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSwgdG9rZW5TdHIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRDYXB0Y2hhVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNhcHRjaGFUb2tlbj8uZXhwaXJlc19hdCkge1xuICAgICAgICAgIGNhcHRjaGFUb2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoY2FwdGNoYVRva2VuLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNFeHBpcmVkID0gY2FwdGNoYVRva2VuLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gICAgICAgIGlmIChpc0V4cGlyZWQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW4uY2FwdGNoYV90b2tlblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIl19
|