@cubist-labs/cubesigner-sdk 0.4.241 → 0.4.244
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/package.json +1 -1
- package/dist/src/audit_log.d.ts +4 -4
- package/dist/src/audit_log.js +1 -1
- package/dist/src/client/api_client.d.ts +9 -1
- package/dist/src/client/api_client.d.ts.map +1 -1
- package/dist/src/client/api_client.js +21 -1
- package/dist/src/client/base_client.js +2 -2
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +2 -3
- package/dist/src/key.d.ts +17 -1
- package/dist/src/key.d.ts.map +1 -1
- package/dist/src/key.js +17 -1
- package/dist/src/response.d.ts +27 -3
- package/dist/src/response.d.ts.map +1 -1
- package/dist/src/response.js +60 -19
- package/dist/src/schema.d.ts +819 -81
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +1 -1
- package/dist/src/schema_types.d.ts +10 -1
- package/dist/src/schema_types.d.ts.map +1 -1
- package/dist/src/schema_types.js +1 -1
- package/dist/src/scopes.d.ts.map +1 -1
- package/dist/src/scopes.js +20 -3
- package/package.json +1 -1
- package/src/audit_log.ts +3 -5
- package/src/client/api_client.ts +28 -0
- package/src/client/base_client.ts +1 -1
- package/src/fetch.ts +1 -2
- package/src/key.ts +24 -0
- package/src/response.ts +67 -17
- package/src/schema.ts +879 -90
- package/src/schema_types.ts +11 -1
- package/src/scopes.ts +19 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAqB,MAAM,GAAG,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjG;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;AAE/C;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEtC;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAMpF;AAaD;;GAEG;AACH,qBAAa,kBAAkB,CAAC,CAAC;;IAK/B;;OAEG;IACH,UAAU,IAAI,aAAa,GAAG,SAAS;IAIvC;;OAEG;IACH,aAAa,IAAI,WAAW,GAAG,SAAS;IAIxC;;OAEG;IACH,YAAY,IAAI,UAAU,GAAG,SAAS;IAItC;;OAEG;IACH,eAAe,IAAI,aAAa,GAAG,SAAS;IAI5C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,KAAK,WAAW,GAEtB;IAED,sEAAsE;IACtE,KAAK,IAAI,MAAM,GAAG,SAAS;IAI3B,iEAAiE;IACjE,MAAM,IAAI,MAAM,EAAE;IAIlB,6DAA6D;IAC7D,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAkBxD,wDAAwD;IACxD,IAAI,IAAI,CAAC;IAST;;;;;;OAMG;IACG,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAIzF;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM;IAiCvD;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAIvE;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,gBAAgB;IA6BrC;;;;;OAKG;IACG,mBAAmB,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IASlF;;;;;;;;;OASG;IACH,SAAS,aAAa,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAMnF;;;;;;;;;;OAUG;WACU,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,YAAY,EACjB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAKjC;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;CA2BxE"}
|
package/dist/src/response.js
CHANGED
|
@@ -10,7 +10,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
11
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
12
|
};
|
|
13
|
-
var _CubeSignerResponse_instances, _CubeSignerResponse_env, _CubeSignerResponse_requestFn, _CubeSignerResponse_resp,
|
|
13
|
+
var _CubeSignerResponse_instances, _CubeSignerResponse_env, _CubeSignerResponse_requestFn, _CubeSignerResponse_resp, _CubeSignerResponse_mfaTotpVote, _CubeSignerResponse_mfaVote;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.CubeSignerResponse = void 0;
|
|
16
16
|
exports.mapResponse = mapResponse;
|
|
@@ -25,36 +25,82 @@ const util_1 = require("./util");
|
|
|
25
25
|
* @returns Response whose value for status code 200 is mapped from U to V
|
|
26
26
|
*/
|
|
27
27
|
function mapResponse(resp, mapFn) {
|
|
28
|
-
if (resp
|
|
28
|
+
if (asAccepted(resp) !== undefined) {
|
|
29
29
|
return resp;
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
32
|
return mapFn(resp);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* @param resp The response to check
|
|
37
|
+
* @returns The {@link AcceptedValue} if the response status code is 202.
|
|
38
|
+
*/
|
|
39
|
+
function asAccepted(resp) {
|
|
40
|
+
const acceptedResp = resp;
|
|
41
|
+
return acceptedResp.error_code === "SignDryRun" || acceptedResp.error_code === "MfaRequired"
|
|
42
|
+
? (acceptedResp.accepted ?? undefined)
|
|
43
|
+
: undefined;
|
|
44
|
+
}
|
|
35
45
|
/**
|
|
36
46
|
* A response of a CubeSigner request.
|
|
37
47
|
*/
|
|
38
48
|
class CubeSignerResponse {
|
|
49
|
+
/**
|
|
50
|
+
* @returns The {@link AcceptedValue} if the response status code is 202.
|
|
51
|
+
*/
|
|
52
|
+
asAccepted() {
|
|
53
|
+
return asAccepted(__classPrivateFieldGet(this, _CubeSignerResponse_resp, "f"));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @returns The associated {@link MfaRequired} value, if the response status code is 202 and the response indicates that MFA is required.
|
|
57
|
+
*/
|
|
58
|
+
asMfaRequired() {
|
|
59
|
+
return this.asAccepted()?.MfaRequired ?? undefined;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @returns The associated {@link SignDryRun} value, if the response status code is 202 and the response is a dry run of a sign operation.
|
|
63
|
+
*/
|
|
64
|
+
asSignDryRun() {
|
|
65
|
+
return this.asAccepted()?.SignDryRun ?? undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @returns The associated {@link BinanceDryRun} value, if the response status code is 202 and the response is a dry run of a sign operation.
|
|
69
|
+
*/
|
|
70
|
+
asBinanceDryRun() {
|
|
71
|
+
return this.asAccepted()?.BinanceDryRun ?? undefined;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @returns Whether this response is a "200 Success" (in which case it is safe to call {@link data})
|
|
75
|
+
*/
|
|
76
|
+
isSuccess() {
|
|
77
|
+
return this.asAccepted() === undefined;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @returns The underlying {@link MfaRequired} response (if any).
|
|
81
|
+
*/
|
|
82
|
+
get mfaRequired() {
|
|
83
|
+
return this.asAccepted()?.MfaRequired;
|
|
84
|
+
}
|
|
39
85
|
/** @returns The first MFA id associated with this request (if any) */
|
|
40
86
|
mfaId() {
|
|
41
|
-
return
|
|
87
|
+
return this.mfaRequired?.id;
|
|
42
88
|
}
|
|
43
89
|
/** @returns The MFA ids associated with this request (if any) */
|
|
44
90
|
mfaIds() {
|
|
45
|
-
return
|
|
91
|
+
return this.mfaRequired?.ids ?? [];
|
|
46
92
|
}
|
|
47
93
|
/** @returns True if this request requires an MFA approval */
|
|
48
94
|
requiresMfa() {
|
|
49
|
-
return
|
|
95
|
+
return this.mfaRequired !== undefined;
|
|
50
96
|
}
|
|
51
97
|
/**
|
|
52
98
|
* @returns Session information to use for any MFA approval requests (if any was included in the response).
|
|
53
99
|
*/
|
|
54
100
|
async mfaClient() {
|
|
55
|
-
if (
|
|
101
|
+
if (this.mfaRequired === undefined)
|
|
56
102
|
return;
|
|
57
|
-
const session =
|
|
103
|
+
const session = this.asMfaRequired()?.session ?? undefined;
|
|
58
104
|
if (session === undefined)
|
|
59
105
|
return;
|
|
60
106
|
const env = __classPrivateFieldGet(this, _CubeSignerResponse_env, "f");
|
|
@@ -62,7 +108,7 @@ class CubeSignerResponse {
|
|
|
62
108
|
env: {
|
|
63
109
|
"Dev-CubeSignerStack": env,
|
|
64
110
|
},
|
|
65
|
-
org_id:
|
|
111
|
+
org_id: this.mfaRequired.org_id,
|
|
66
112
|
session_exp: session.expiration,
|
|
67
113
|
session_info: session.session_info,
|
|
68
114
|
token: session.token,
|
|
@@ -71,8 +117,8 @@ class CubeSignerResponse {
|
|
|
71
117
|
}
|
|
72
118
|
/** @returns The response data, if no MFA is required */
|
|
73
119
|
data() {
|
|
74
|
-
if (this.
|
|
75
|
-
throw new Error("Cannot call `data()`
|
|
120
|
+
if (!this.isSuccess()) {
|
|
121
|
+
throw new Error("Cannot call `data()` on a 202 Accepted response; use `asMfaRequired()` or `asSignDryRun()`");
|
|
76
122
|
}
|
|
77
123
|
return __classPrivateFieldGet(this, _CubeSignerResponse_resp, "f");
|
|
78
124
|
}
|
|
@@ -140,14 +186,9 @@ class CubeSignerResponse {
|
|
|
140
186
|
_CubeSignerResponse_env.set(this, void 0);
|
|
141
187
|
_CubeSignerResponse_requestFn.set(this, void 0);
|
|
142
188
|
_CubeSignerResponse_resp.set(this, void 0);
|
|
143
|
-
/**
|
|
144
|
-
* Optional MFA id. Only set if there is an MFA request associated with the request
|
|
145
|
-
*/
|
|
146
|
-
_CubeSignerResponse_mfaRequired.set(this, void 0);
|
|
147
189
|
__classPrivateFieldSet(this, _CubeSignerResponse_env, env, "f");
|
|
148
190
|
__classPrivateFieldSet(this, _CubeSignerResponse_requestFn, requestFn, "f");
|
|
149
191
|
__classPrivateFieldSet(this, _CubeSignerResponse_resp, resp, "f");
|
|
150
|
-
__classPrivateFieldSet(this, _CubeSignerResponse_mfaRequired, __classPrivateFieldGet(this, _CubeSignerResponse_resp, "f").accepted?.MfaRequired, "f");
|
|
151
192
|
}
|
|
152
193
|
/**
|
|
153
194
|
* Static constructor.
|
|
@@ -197,7 +238,7 @@ class CubeSignerResponse {
|
|
|
197
238
|
}
|
|
198
239
|
}
|
|
199
240
|
exports.CubeSignerResponse = CubeSignerResponse;
|
|
200
|
-
_CubeSignerResponse_env = new WeakMap(), _CubeSignerResponse_requestFn = new WeakMap(), _CubeSignerResponse_resp = new WeakMap(),
|
|
241
|
+
_CubeSignerResponse_env = new WeakMap(), _CubeSignerResponse_requestFn = new WeakMap(), _CubeSignerResponse_resp = new WeakMap(), _CubeSignerResponse_instances = new WeakSet(), _CubeSignerResponse_mfaTotpVote =
|
|
201
242
|
/**
|
|
202
243
|
* Approve or reject an MFA request using a given session and a TOTP code.
|
|
203
244
|
*
|
|
@@ -211,7 +252,7 @@ async function _CubeSignerResponse_mfaTotpVote(client, code, vote) {
|
|
|
211
252
|
if (mfaId === undefined) {
|
|
212
253
|
return this;
|
|
213
254
|
}
|
|
214
|
-
const mfaOrgId =
|
|
255
|
+
const mfaOrgId = this.mfaRequired.org_id;
|
|
215
256
|
const mfaApproval = await client.apiClient.mfaVoteTotp(mfaId, code, vote);
|
|
216
257
|
const mfaConf = mfaApproval.receipt?.confirmation;
|
|
217
258
|
if (!mfaConf) {
|
|
@@ -231,7 +272,7 @@ async function _CubeSignerResponse_mfaVote(client, mfaVote) {
|
|
|
231
272
|
if (mfaId === undefined) {
|
|
232
273
|
return this;
|
|
233
274
|
}
|
|
234
|
-
const mfaOrgId =
|
|
275
|
+
const mfaOrgId = this.mfaRequired.org_id;
|
|
235
276
|
const mfaApproval = await client.apiClient.mfaVoteCs(mfaId, mfaVote);
|
|
236
277
|
const mfaConf = mfaApproval.receipt?.confirmation;
|
|
237
278
|
if (!mfaConf) {
|
|
@@ -239,4 +280,4 @@ async function _CubeSignerResponse_mfaVote(client, mfaVote) {
|
|
|
239
280
|
}
|
|
240
281
|
return await this.execWithMfaApproval({ mfaId, mfaOrgId, mfaConf });
|
|
241
282
|
};
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLGtDQU1DO0FBbkNELHdCQUF3RDtBQUN4RCxpQ0FBMkM7QUFvQjNDOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixXQUFXLENBQU8sSUFBaUIsRUFBRSxLQUFrQjtJQUNyRSxJQUFLLElBQXlCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBd0IsQ0FBQztJQUNsQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sS0FBSyxDQUFDLElBQVMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQVM3QixzRUFBc0U7SUFDdEUsS0FBSztRQUNILE9BQU8sdUJBQUEsSUFBSSx1Q0FBYSxFQUFFLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLE1BQU07UUFDSixPQUFPLHVCQUFBLElBQUksdUNBQWEsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsV0FBVztRQUNULE9BQU8sdUJBQUEsSUFBSSx1Q0FBYSxLQUFLLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUztRQUNiLElBQUksdUJBQUEsSUFBSSx1Q0FBYSxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQzVDLE1BQU0sT0FBTyxHQUFJLHVCQUFBLElBQUksZ0NBQTJCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLElBQUksU0FBUyxDQUFDO1FBQzdGLElBQUksT0FBTyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBRWxDLE1BQU0sR0FBRyxHQUFHLHVCQUFBLElBQUksK0JBQUssQ0FBQztRQUN0QixPQUFPLE1BQU0sbUJBQWdCLENBQUMs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QU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7SUFFbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBcUJEOzs7Ozs7R0FNRztBQUNILEtBQUssc0NBQVUsTUFBd0IsRUFBRSxPQUFnQjtJQUN2RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsdUJBQUEsSUFBSSx1Q0FBYyxDQUFDLE1BQU0sQ0FBQztJQUUzQyxNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztJQUVsRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1mYVZvdGUsIEVudkludGVyZmFjZSwgTWZhUmVjZWlwdHMsIE1mYVJlcXVpcmVkIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IEN1YmVTaWduZXJDbGllbnQsIGlzTWFueU1mYVJlY2VpcHRzIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IGVuY29kZVRvQmFzZTY0VXJsIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRlZFJlc3BvbnNlIH0gZnJvbSBcIi4vc2NoZW1hX3R5cGVzXCI7XG5cbi8qKlxuICogUmVzcG9uc2UgdHlwZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIHZhbHVlIG9mIHR5cGUge0BsaW5rIFV9XG4gKiBvciB7QGxpbmsgQWNjZXB0ZWRSZXNwb25zZX0gKHN0YXR1cyBjb2RlIDIwMikgd2hpY2ggcmVxdWlyZXMgTUZBLlxuICovXG5leHBvcnQgdHlwZSBSZXNwb25zZTxVPiA9IFUgfCBBY2NlcHRlZFJlc3BvbnNlO1xuXG4vKipcbiAqIFJlcXVlc3QgZnVuY3Rpb24gd2hpY2ggb3B0aW9uYWxseSB0YWtlcyBhZGRpdGlvbmFsIGhlYWRlcnNcbiAqICh3aGljaCwgZm9yIGV4YW1wbGUsIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBhbiBNRkEgcmVjZWlwdCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RGbjxVPiA9IChoZWFkZXJzPzogSGVhZGVyc0luaXQpID0+IFByb21pc2U8UmVzcG9uc2U8VT4+O1xuXG4vKipcbiAqIE1hcCBmdW5jdGlvbiBvY2Nhc2lvbmFsbHkgdXNlZCB0byBtYXAgYSByZXNwb25zZSBmcm9tIHRoZSBBUEkgaW50byBhIGhpZ2hlci1sZXZlbCB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBNYXBGbjxVLCBWPiA9ICh1OiBVKSA9PiBWO1xuXG4vKipcbiAqIFRha2UgYSB7QGxpbmsgUmVzcG9uc2U8VT59IGFuZCBhIHtAbGluayBNYXBGbjxVLCBWPn0gZnVuY3Rpb24gYW5kIHJldHVyblxuICogYSB7QGxpbmsgUmVzcG9uc2U8Vj59IHRoYXQgbWFwcyB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIHJlc3BvbnNlIHdoZW4gaXRzIHN0YXR1cyBjb2RlIGlzIDIwMC5cbiAqXG4gKiBAcGFyYW0gcmVzcCBPcmlnaW5hbCByZXNwb25zZVxuICogQHBhcmFtIG1hcEZuIE1hcCB0byBhcHBseSB0byB0aGUgcmVzcG9uc2UgdmFsdWUgd2hlbiBpdHMgc3RhdHVzIGNvZGUgaXMgMjAwLlxuICogQHJldHVybnMgUmVzcG9uc2Ugd2hvc2UgdmFsdWUgZm9yIHN0YXR1cyBjb2RlIDIwMCBpcyBtYXBwZWQgZnJvbSBVIHRvIFZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFJlc3BvbnNlPFUsIFY+KHJlc3A6IFJlc3BvbnNlPFU+LCBtYXBGbjogTWFwRm48VSwgVj4pOiBSZXNwb25zZTxWPiB7XG4gIGlmICgocmVzcCBhcyBBY2NlcHRlZFJlc3BvbnNlKS5hY2NlcHRlZD8uTWZhUmVxdWlyZWQpIHtcbiAgICByZXR1cm4gcmVzcCBhcyBBY2NlcHRlZFJlc3BvbnNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYXBGbihyZXNwIGFzIFUpO1xuICB9XG59XG5cbi8qKlxuICogQSByZXNwb25zZSBvZiBhIEN1YmVTaWduZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1YmVTaWduZXJSZXNwb25zZTxVPiB7XG4gIHJlYWRvbmx5ICNlbnY6IEVudkludGVyZmFjZTtcbiAgcmVhZG9ubHkgI3JlcXVlc3RGbjogUmVxdWVzdEZuPFU+O1xuICByZWFkb25seSAjcmVzcDogVSB8IEFjY2VwdGVkUmVzcG9uc2U7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNRkEgaWQuIE9ubHkgc2V0IGlmIHRoZXJlIGlzIGFuIE1GQSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdFxuICAgKi9cbiAgcmVhZG9ubHkgI21mYVJlcXVpcmVkPzogTWZhUmVxdWlyZWQ7XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBmaXJzdCBNRkEgaWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCAoaWYgYW55KSAqL1xuICBtZmFJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNtZmFSZXF1aXJlZD8uaWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIE1GQSBpZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCAoaWYgYW55KSAqL1xuICBtZmFJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLiNtZmFSZXF1aXJlZD8uaWRzID8/IFtdO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRydWUgaWYgdGhpcyByZXF1ZXN0IHJlcXVpcmVzIGFuIE1GQSBhcHByb3ZhbCAqL1xuICByZXF1aXJlc01mYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jbWZhUmVxdWlyZWQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBTZXNzaW9uIGluZm9ybWF0aW9uIHRvIHVzZSBmb3IgYW55IE1GQSBhcHByb3ZhbCByZXF1ZXN0cyAoaWYgYW55IHdhcyBpbmNsdWRlZCBpbiB0aGUgcmVzcG9uc2UpLlxuICAgKi9cbiAgYXN5bmMgbWZhQ2xpZW50KCk6IFByb21pc2U8Q3ViZVNpZ25lckNsaWVudCB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICh0aGlzLiNtZmFSZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3Qgc2Vzc2lvbiA9ICh0aGlzLiNyZXNwIGFzIEFjY2VwdGVkUmVzcG9uc2UpLmFjY2VwdGVkPy5NZmFSZXF1aXJlZD8uc2Vzc2lvbiA/PyB1bmRlZmluZWQ7XG4gICAgaWYgKHNlc3Npb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW52ID0gdGhpcy4jZW52O1xuICAgIHJldHVybiBhd2FpdCBDdWJlU2lnbmVyQ2xpZW50LmNyZWF0ZSh7XG4gICAgICBlbnY6IHtcbiAgICAgICAgXCJEZXYtQ3ViZVNpZ25lclN0YWNrXCI6IGVudixcbiAgICAgIH0sXG4gICAgICBvcmdfaWQ6IHRoaXMuI21mYVJlcXVpcmVkLm9yZ19pZCxcbiAgICAgIHNlc3Npb25fZXhwOiBzZXNzaW9uLmV4cGlyYXRpb24sXG4gICAgICBzZXNzaW9uX2luZm86IHNlc3Npb24uc2Vzc2lvbl9pbmZvLFxuICAgICAgdG9rZW46IHNlc3Npb24udG9rZW4sXG4gICAgICByZWZyZXNoX3Rva2VuOiBzZXNzaW9uLnJlZnJlc2hfdG9rZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHJlc3BvbnNlIGRhdGEsIGlmIG5vIE1GQSBpcyByZXF1aXJlZCAqL1xuICBkYXRhKCk6IFUge1xuICAgIGlmICh0aGlzLnJlcXVpcmVzTWZhKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjYWxsIGBkYXRhKClgIHdoaWxlIE1GQSBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI3Jlc3AgYXMgVTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIHRoZSBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHNlc3Npb24gYW5kIGEgVE9UUCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIGNvZGUgNi1kaWdpdCBUT1RQIGNvZGVcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jIHRvdHBBcHByb3ZlKGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCwgY29kZTogc3RyaW5nKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jbWZhVG90cFZvdGUoY2xpZW50LCBjb2RlLCBcImFwcHJvdmVcIik7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IHRoZSBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHNlc3Npb24gYW5kIGEgVE9UUCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIGNvZGUgNi1kaWdpdCBUT1RQIGNvZGVcbiAgICovXG4gIGFzeW5jIHRvdHBSZWplY3QoY2xpZW50OiBDdWJlU2lnbmVyQ2xpZW50LCBjb2RlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLiNtZmFUb3RwVm90ZShjbGllbnQsIGNvZGUsIFwicmVqZWN0XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcHJvdmUgb3IgcmVqZWN0IGFuIE1GQSByZXF1ZXN0IHVzaW5nIGEgZ2l2ZW4gc2Vzc2lvbiBhbmQgYSBUT1RQIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgQ3ViZVNpZ25lciB3aG9zZSBzZXNzaW9uIHRvIHVzZVxuICAgKiBAcGFyYW0gY29kZSA2LWRpZ2l0IFRPVFAgY29kZVxuICAgKiBAcGFyYW0gdm90ZSBBcHByb3ZlIG9yIHJlamVjdFxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHJlc3VibWl0dGluZyB0aGUgcmVxdWVzdCB3aXRoIHRoZSBhcHByb3ZhbFxuICAgKi9cbiAgYXN5bmMgI21mYVRvdHBWb3RlKFxuICAgIGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgdm90ZTogTWZhVm90ZSxcbiAgKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICBjb25zdCBtZmFJZCA9IHRoaXMubWZhSWQoKTtcbiAgICBpZiAobWZhSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWZhT3JnSWQgPSB0aGlzLiNtZmFSZXF1aXJlZCEub3JnX2lkO1xuICAgIGNvbnN0IG1mYUFwcHJvdmFsID0gYXdhaXQgY2xpZW50LmFwaUNsaWVudC5tZmFWb3RlVG90cChtZmFJZCwgY29kZSwgdm90ZSk7XG4gICAgY29uc3QgbWZhQ29uZiA9IG1mYUFwcHJvdmFsLnJlY2VpcHQ/LmNvbmZpcm1hdGlvbjtcblxuICAgIGlmICghbWZhQ29uZikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY1dpdGhNZmFBcHByb3ZhbCh7IG1mYUlkLCBtZmFPcmdJZCwgbWZhQ29uZiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIHRoZSBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHtAbGluayBDdWJlU2lnbmVyQ2xpZW50fSBpbnN0YW5jZSAoaS5lLiwgaXRzIHNlc3Npb24pLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jIGFwcHJvdmUoY2xpZW50OiBDdWJlU2lnbmVyQ2xpZW50KTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jbWZhVm90ZShjbGllbnQsIFwiYXBwcm92ZVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIE1GQSByZXF1ZXN0IHVzaW5nIGEgZ2l2ZW4ge0BsaW5rIEN1YmVTaWduZXJDbGllbnR9IGluc3RhbmNlIChpLmUuLCBpdHMgc2Vzc2lvbikuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgQ3ViZVNpZ25lciB3aG9zZSBzZXNzaW9uIHRvIHVzZVxuICAgKi9cbiAgYXN5bmMgcmVqZWN0KGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCkge1xuICAgIGF3YWl0IHRoaXMuI21mYVZvdGUoY2xpZW50LCBcInJlamVjdFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIG9yIHJlamVjdCBhbiBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHtAbGluayBDdWJlU2lnbmVyQ2xpZW50fSBpbnN0YW5jZSAoaS5lLiwgaXRzIHNlc3Npb24pLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIG1mYVZvdGUgQXBwcm92ZSBvciByZWplY3RcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jICNtZmFWb3RlKGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCwgbWZhVm90ZTogTWZhVm90ZSk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgbWZhSWQgPSB0aGlzLm1mYUlkKCk7XG4gICAgaWYgKG1mYUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG1mYU9yZ0lkID0gdGhpcy4jbWZhUmVxdWlyZWQhLm9yZ19pZDtcblxuICAgIGNvbnN0IG1mYUFwcHJvdmFsID0gYXdhaXQgY2xpZW50LmFwaUNsaWVudC5tZmFWb3RlQ3MobWZhSWQsIG1mYVZvdGUpO1xuICAgIGNvbnN0IG1mYUNvbmYgPSBtZmFBcHByb3ZhbC5yZWNlaXB0Py5jb25maXJtYXRpb247XG5cbiAgICBpZiAoIW1mYUNvbmYpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWNXaXRoTWZhQXBwcm92YWwoeyBtZmFJZCwgbWZhT3JnSWQsIG1mYUNvbmYgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdWJtaXRzIHRoZSByZXF1ZXN0IHdpdGggYSBnaXZlbiBNRkEgcmVjZWlwdChzKSBhdHRhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgVGhlIE1GQSByZWNlaXB0KHMpXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2Ygc2lnbmluZyBhZnRlciBNRkEgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jIGV4ZWNXaXRoTWZhQXBwcm92YWwobWZhUmVjZWlwdDogTWZhUmVjZWlwdHMpOiBQcm9taXNlPEN1YmVTaWduZXJSZXNwb25zZTxVPj4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBDdWJlU2lnbmVyUmVzcG9uc2UuZ2V0TWZhSGVhZGVycyhtZmFSZWNlaXB0KTtcbiAgICByZXR1cm4gbmV3IEN1YmVTaWduZXJSZXNwb25zZSh0aGlzLiNlbnYsIHRoaXMuI3JlcXVlc3RGbiwgYXdhaXQgdGhpcy4jcmVxdWVzdEZuKGhlYWRlcnMpKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gZW52IFRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcmVzcG9uc2UgY29tZXMgZnJvbVxuICAgKiBAcGFyYW0gcmVxdWVzdEZuXG4gICAqICAgIFRoZSBmdW5jdGlvbiB0aGF0IHRoaXMgcmVzcG9uc2UgaXMgZnJvbS5cbiAgICogICAgVGhpcyBhcmd1bWVudCBpcyB1c2VkIHRvIHJlc2VuZCByZXF1ZXN0cyB3aXRoIGRpZmZlcmVudCBoZWFkZXJzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHJlc3AgVGhlIHJlc3BvbnNlIGFzIHJldHVybmVkIGJ5IHRoZSBPcGVuQVBJIGNsaWVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZW52OiBFbnZJbnRlcmZhY2UsIHJlcXVlc3RGbjogUmVxdWVzdEZuPFU+LCByZXNwOiBVIHwgQWNjZXB0ZWRSZXNwb25zZSkge1xuICAgIHRoaXMuI2VudiA9IGVudjtcbiAgICB0aGlzLiNyZXF1ZXN0Rm4gPSByZXF1ZXN0Rm47XG4gICAgdGhpcy4jcmVzcCA9IHJlc3A7XG4gICAgdGhpcy4jbWZhUmVxdWlyZWQgPSAodGhpcy4jcmVzcCBhcyBBY2NlcHRlZFJlc3BvbnNlKS5hY2NlcHRlZD8uTWZhUmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gZW52IFRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcmVzcG9uc2UgY29tZXMgZnJvbVxuICAgKiBAcGFyYW0gcmVxdWVzdEZuXG4gICAqICAgIFRoZSByZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgdGhpcyByZXNwb25zZSBpcyBmcm9tLlxuICAgKiAgICBUaGlzIGFyZ3VtZW50IGlzIHVzZWQgdG8gcmVzZW5kIHJlcXVlc3RzIHdpdGggZGlmZmVyZW50IGhlYWRlcnMgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKVxuICAgKiBAcmV0dXJucyBOZXcgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgY3JlYXRlPFU+KFxuICAgIGVudjogRW52SW50ZXJmYWNlLFxuICAgIHJlcXVlc3RGbjogUmVxdWVzdEZuPFU+LFxuICAgIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cyxcbiAgKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICBjb25zdCBzZWVkID0gYXdhaXQgcmVxdWVzdEZuKHRoaXMuZ2V0TWZhSGVhZGVycyhtZmFSZWNlaXB0KSk7XG4gICAgcmV0dXJuIG5ldyBDdWJlU2lnbmVyUmVzcG9uc2UoZW52LCByZXF1ZXN0Rm4sIHNlZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBIVFRQIGhlYWRlcnMgY29udGFpbmluZyBhIGdpdmVuIE1GQSByZWNlaXB0LlxuICAgKlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBNRkEgcmVjZWlwdChzKVxuICAgKiBAcmV0dXJucyBIZWFkZXJzIGluY2x1ZGluZyB7QGxpbmsgbWZhUmVjZWlwdH1cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgZ2V0TWZhSGVhZGVycyhtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpOiBIZWFkZXJzSW5pdCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG1mYVJlY2VpcHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByZWMgPSBpc01hbnlNZmFSZWNlaXB0cyhtZmFSZWNlaXB0KVxuICAgICAgPyBtZmFSZWNlaXB0XG4gICAgICA6IHtcbiAgICAgICAgICBvcmdJZDogbWZhUmVjZWlwdC5tZmFPcmdJZCxcbiAgICAgICAgICByZWNlaXB0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogbWZhUmVjZWlwdC5tZmFJZCxcbiAgICAgICAgICAgICAgY29uZmlybWF0aW9uOiBtZmFSZWNlaXB0Lm1mYUNvbmYsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICBpZiAocmVjLnJlY2VpcHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgIHJldHVybiB7XG4gICAgICBcIngtY3ViaXN0LW1mYS1vcmctaWRcIjogcmVjLm9yZ0lkLFxuICAgICAgXCJ4LWN1YmlzdC1tZmEtcmVjZWlwdHNcIjogZW5jb2RlVG9CYXNlNjRVcmwodGV4dEVuY29kZXIuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHJlYy5yZWNlaXB0cykpKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLGtDQU1DO0FBbkNELHdCQUF3RDtBQUN4RCxpQ0FBMkM7QUFvQjNDOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixXQUFXLENBQU8sSUFBaUIsRUFBRSxLQUFrQjtJQUNyRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQXdCLENBQUM7SUFDbEMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQyxJQUFTLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsVUFBVSxDQUFJLElBQWlCO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQXdCLENBQUM7SUFDOUMsT0FBTyxZQUFZLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLGFBQWE7UUFDMUYsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUM7UUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUs3Qjs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLFVBQVUsQ0FBQyx1QkFBQSxJQUFJLGdDQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsVUFBVSxJQUFJLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2Is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LHNDQUFVLE1BQXdCLEVBQUUsT0FBZ0I7SUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDO0lBRTFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO0lBRWxELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWZhVm90ZSwgRW52SW50ZXJmYWNlLCBNZmFSZWNlaXB0cywgTWZhUmVxdWlyZWQgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgQ3ViZVNpZ25lckNsaWVudCwgaXNNYW55TWZhUmVjZWlwdHMgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgZW5jb2RlVG9CYXNlNjRVcmwgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgdHlwZSB7IEFjY2VwdGVkUmVzcG9uc2UsIEFjY2VwdGVkVmFsdWUsIEJpbmFuY2VEcnlSdW4sIFNpZ25EcnlSdW4gfSBmcm9tIFwiLi9zY2hlbWFfdHlwZXNcIjtcblxuLyoqXG4gKiBSZXNwb25zZSB0eXBlLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgdmFsdWUgb2YgdHlwZSB7QGxpbmsgVX1cbiAqIG9yIHtAbGluayBBY2NlcHRlZFJlc3BvbnNlfSAoc3RhdHVzIGNvZGUgMjAyKSB3aGljaCByZXF1aXJlcyBNRkEuXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlPFU+ID0gVSB8IEFjY2VwdGVkUmVzcG9uc2U7XG5cbi8qKlxuICogUmVxdWVzdCBmdW5jdGlvbiB3aGljaCBvcHRpb25hbGx5IHRha2VzIGFkZGl0aW9uYWwgaGVhZGVyc1xuICogKHdoaWNoLCBmb3IgZXhhbXBsZSwgY2FuIGJlIHVzZWQgdG8gYXR0YWNoIGFuIE1GQSByZWNlaXB0KS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWVzdEZuPFU+ID0gKGhlYWRlcnM/OiBIZWFkZXJzSW5pdCkgPT4gUHJvbWlzZTxSZXNwb25zZTxVPj47XG5cbi8qKlxuICogTWFwIGZ1bmN0aW9uIG9jY2FzaW9uYWxseSB1c2VkIHRvIG1hcCBhIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBpbnRvIGEgaGlnaGVyLWxldmVsIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIE1hcEZuPFUsIFY+ID0gKHU6IFUpID0+IFY7XG5cbi8qKlxuICogVGFrZSBhIHtAbGluayBSZXNwb25zZTxVPn0gYW5kIGEge0BsaW5rIE1hcEZuPFUsIFY+fSBmdW5jdGlvbiBhbmQgcmV0dXJuXG4gKiBhIHtAbGluayBSZXNwb25zZTxWPn0gdGhhdCBtYXBzIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgcmVzcG9uc2Ugd2hlbiBpdHMgc3RhdHVzIGNvZGUgaXMgMjAwLlxuICpcbiAqIEBwYXJhbSByZXNwIE9yaWdpbmFsIHJlc3BvbnNlXG4gKiBAcGFyYW0gbWFwRm4gTWFwIHRvIGFwcGx5IHRvIHRoZSByZXNwb25zZSB2YWx1ZSB3aGVuIGl0cyBzdGF0dXMgY29kZSBpcyAyMDAuXG4gKiBAcmV0dXJucyBSZXNwb25zZSB3aG9zZSB2YWx1ZSBmb3Igc3RhdHVzIGNvZGUgMjAwIGlzIG1hcHBlZCBmcm9tIFUgdG8gVlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwUmVzcG9uc2U8VSwgVj4ocmVzcDogUmVzcG9uc2U8VT4sIG1hcEZuOiBNYXBGbjxVLCBWPik6IFJlc3BvbnNlPFY+IHtcbiAgaWYgKGFzQWNjZXB0ZWQocmVzcCkgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXNwIGFzIEFjY2VwdGVkUmVzcG9uc2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hcEZuKHJlc3AgYXMgVSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVzcCBUaGUgcmVzcG9uc2UgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWNjZXB0ZWRWYWx1ZX0gaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMi5cbiAqL1xuZnVuY3Rpb24gYXNBY2NlcHRlZDxVPihyZXNwOiBSZXNwb25zZTxVPik6IEFjY2VwdGVkVmFsdWUgfCB1bmRlZmluZWQge1xuICBjb25zdCBhY2NlcHRlZFJlc3AgPSByZXNwIGFzIEFjY2VwdGVkUmVzcG9uc2U7XG4gIHJldHVybiBhY2NlcHRlZFJlc3AuZXJyb3JfY29kZSA9PT0gXCJTaWduRHJ5UnVuXCIgfHwgYWNjZXB0ZWRSZXNwLmVycm9yX2NvZGUgPT09IFwiTWZhUmVxdWlyZWRcIlxuICAgID8gKGFjY2VwdGVkUmVzcC5hY2NlcHRlZCA/PyB1bmRlZmluZWQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQSByZXNwb25zZSBvZiBhIEN1YmVTaWduZXIgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1YmVTaWduZXJSZXNwb25zZTxVPiB7XG4gIHJlYWRvbmx5ICNlbnY6IEVudkludGVyZmFjZTtcbiAgcmVhZG9ubHkgI3JlcXVlc3RGbjogUmVxdWVzdEZuPFU+O1xuICByZWFkb25seSAjcmVzcDogUmVzcG9uc2U8VT47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWNjZXB0ZWRWYWx1ZX0gaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMi5cbiAgICovXG4gIGFzQWNjZXB0ZWQoKTogQWNjZXB0ZWRWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGFzQWNjZXB0ZWQodGhpcy4jcmVzcCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIGFzc29jaWF0ZWQge0BsaW5rIE1mYVJlcXVpcmVkfSB2YWx1ZSwgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMiBhbmQgdGhlIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IE1GQSBpcyByZXF1aXJlZC5cbiAgICovXG4gIGFzTWZhUmVxdWlyZWQoKTogTWZhUmVxdWlyZWQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFzQWNjZXB0ZWQoKT8uTWZhUmVxdWlyZWQgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBhc3NvY2lhdGVkIHtAbGluayBTaWduRHJ5UnVufSB2YWx1ZSwgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMiBhbmQgdGhlIHJlc3BvbnNlIGlzIGEgZHJ5IHJ1biBvZiBhIHNpZ24gb3BlcmF0aW9uLlxuICAgKi9cbiAgYXNTaWduRHJ5UnVuKCk6IFNpZ25EcnlSdW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFzQWNjZXB0ZWQoKT8uU2lnbkRyeVJ1biA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIGFzc29jaWF0ZWQge0BsaW5rIEJpbmFuY2VEcnlSdW59IHZhbHVlLCBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgaXMgMjAyIGFuZCB0aGUgcmVzcG9uc2UgaXMgYSBkcnkgcnVuIG9mIGEgc2lnbiBvcGVyYXRpb24uXG4gICAqL1xuICBhc0JpbmFuY2VEcnlSdW4oKTogQmluYW5jZURyeVJ1biB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNBY2NlcHRlZCgpPy5CaW5hbmNlRHJ5UnVuID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoaXMgcmVzcG9uc2UgaXMgYSBcIjIwMCBTdWNjZXNzXCIgKGluIHdoaWNoIGNhc2UgaXQgaXMgc2FmZSB0byBjYWxsIHtAbGluayBkYXRhfSlcbiAgICovXG4gIGlzU3VjY2VzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hc0FjY2VwdGVkKCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgdW5kZXJseWluZyB7QGxpbmsgTWZhUmVxdWlyZWR9IHJlc3BvbnNlIChpZiBhbnkpLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgbWZhUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNBY2NlcHRlZCgpPy5NZmFSZXF1aXJlZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgZmlyc3QgTUZBIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgKGlmIGFueSkgKi9cbiAgbWZhSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZmFSZXF1aXJlZD8uaWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIE1GQSBpZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCAoaWYgYW55KSAqL1xuICBtZmFJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLm1mYVJlcXVpcmVkPy5pZHMgPz8gW107XG4gIH1cblxuICAvKiogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIHJlcXVlc3QgcmVxdWlyZXMgYW4gTUZBIGFwcHJvdmFsICovXG4gIHJlcXVpcmVzTWZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1mYVJlcXVpcmVkICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgU2Vzc2lvbiBpbmZvcm1hdGlvbiB0byB1c2UgZm9yIGFueSBNRkEgYXBwcm92YWwgcmVxdWVzdHMgKGlmIGFueSB3YXMgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlKS5cbiAgICovXG4gIGFzeW5jIG1mYUNsaWVudCgpOiBQcm9taXNlPEN1YmVTaWduZXJDbGllbnQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy5tZmFSZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuYXNNZmFSZXF1aXJlZCgpPy5zZXNzaW9uID8/IHVuZGVmaW5lZDtcbiAgICBpZiAoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnYgPSB0aGlzLiNlbnY7XG4gICAgcmV0dXJuIGF3YWl0IEN1YmVTaWduZXJDbGllbnQuY3JlYXRlKHtcbiAgICAgIGVudjoge1xuICAgICAgICBcIkRldi1DdWJlU2lnbmVyU3RhY2tcIjogZW52LFxuICAgICAgfSxcbiAgICAgIG9yZ19pZDogdGhpcy5tZmFSZXF1aXJlZC5vcmdfaWQsXG4gICAgICBzZXNzaW9uX2V4cDogc2Vzc2lvbi5leHBpcmF0aW9uLFxuICAgICAgc2Vzc2lvbl9pbmZvOiBzZXNzaW9uLnNlc3Npb25faW5mbyxcbiAgICAgIHRva2VuOiBzZXNzaW9uLnRva2VuLFxuICAgICAgcmVmcmVzaF90b2tlbjogc2Vzc2lvbi5yZWZyZXNoX3Rva2VuLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSByZXNwb25zZSBkYXRhLCBpZiBubyBNRkEgaXMgcmVxdWlyZWQgKi9cbiAgZGF0YSgpOiBVIHtcbiAgICBpZiAoIXRoaXMuaXNTdWNjZXNzKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgY2FsbCBgZGF0YSgpYCBvbiBhIDIwMiBBY2NlcHRlZCByZXNwb25zZTsgdXNlIGBhc01mYVJlcXVpcmVkKClgIG9yIGBhc1NpZ25EcnlSdW4oKWBcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNyZXNwIGFzIFU7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSB0aGUgTUZBIHJlcXVlc3QgdXNpbmcgYSBnaXZlbiBzZXNzaW9uIGFuZCBhIFRPVFAgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudCBDdWJlU2lnbmVyIHdob3NlIHNlc3Npb24gdG8gdXNlXG4gICAqIEBwYXJhbSBjb2RlIDYtZGlnaXQgVE9UUCBjb2RlXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgcmVzdWJtaXR0aW5nIHRoZSByZXF1ZXN0IHdpdGggdGhlIGFwcHJvdmFsXG4gICAqL1xuICBhc3luYyB0b3RwQXBwcm92ZShjbGllbnQ6IEN1YmVTaWduZXJDbGllbnQsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuI21mYVRvdHBWb3RlKGNsaWVudCwgY29kZSwgXCJhcHByb3ZlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdCB0aGUgTUZBIHJlcXVlc3QgdXNpbmcgYSBnaXZlbiBzZXNzaW9uIGFuZCBhIFRPVFAgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudCBDdWJlU2lnbmVyIHdob3NlIHNlc3Npb24gdG8gdXNlXG4gICAqIEBwYXJhbSBjb2RlIDYtZGlnaXQgVE9UUCBjb2RlXG4gICAqL1xuICBhc3luYyB0b3RwUmVqZWN0KGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCwgY29kZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy4jbWZhVG90cFZvdGUoY2xpZW50LCBjb2RlLCBcInJlamVjdFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIG9yIHJlamVjdCBhbiBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHNlc3Npb24gYW5kIGEgVE9UUCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIGNvZGUgNi1kaWdpdCBUT1RQIGNvZGVcbiAgICogQHBhcmFtIHZvdGUgQXBwcm92ZSBvciByZWplY3RcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jICNtZmFUb3RwVm90ZShcbiAgICBjbGllbnQ6IEN1YmVTaWduZXJDbGllbnQsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHZvdGU6IE1mYVZvdGUsXG4gICk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgbWZhSWQgPSB0aGlzLm1mYUlkKCk7XG4gICAgaWYgKG1mYUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG1mYU9yZ0lkID0gdGhpcy5tZmFSZXF1aXJlZCEub3JnX2lkO1xuICAgIGNvbnN0IG1mYUFwcHJvdmFsID0gYXdhaXQgY2xpZW50LmFwaUNsaWVudC5tZmFWb3RlVG90cChtZmFJZCwgY29kZSwgdm90ZSk7XG4gICAgY29uc3QgbWZhQ29uZiA9IG1mYUFwcHJvdmFsLnJlY2VpcHQ/LmNvbmZpcm1hdGlvbjtcblxuICAgIGlmICghbWZhQ29uZikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY1dpdGhNZmFBcHByb3ZhbCh7IG1mYUlkLCBtZmFPcmdJZCwgbWZhQ29uZiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIHRoZSBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHtAbGluayBDdWJlU2lnbmVyQ2xpZW50fSBpbnN0YW5jZSAoaS5lLiwgaXRzIHNlc3Npb24pLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jIGFwcHJvdmUoY2xpZW50OiBDdWJlU2lnbmVyQ2xpZW50KTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jbWZhVm90ZShjbGllbnQsIFwiYXBwcm92ZVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIE1GQSByZXF1ZXN0IHVzaW5nIGEgZ2l2ZW4ge0BsaW5rIEN1YmVTaWduZXJDbGllbnR9IGluc3RhbmNlIChpLmUuLCBpdHMgc2Vzc2lvbikuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgQ3ViZVNpZ25lciB3aG9zZSBzZXNzaW9uIHRvIHVzZVxuICAgKi9cbiAgYXN5bmMgcmVqZWN0KGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCkge1xuICAgIGF3YWl0IHRoaXMuI21mYVZvdGUoY2xpZW50LCBcInJlamVjdFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIG9yIHJlamVjdCBhbiBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHtAbGluayBDdWJlU2lnbmVyQ2xpZW50fSBpbnN0YW5jZSAoaS5lLiwgaXRzIHNlc3Npb24pLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIG1mYVZvdGUgQXBwcm92ZSBvciByZWplY3RcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jICNtZmFWb3RlKGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCwgbWZhVm90ZTogTWZhVm90ZSk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgbWZhSWQgPSB0aGlzLm1mYUlkKCk7XG4gICAgaWYgKG1mYUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG1mYU9yZ0lkID0gdGhpcy5tZmFSZXF1aXJlZCEub3JnX2lkO1xuXG4gICAgY29uc3QgbWZhQXBwcm92YWwgPSBhd2FpdCBjbGllbnQuYXBpQ2xpZW50Lm1mYVZvdGVDcyhtZmFJZCwgbWZhVm90ZSk7XG4gICAgY29uc3QgbWZhQ29uZiA9IG1mYUFwcHJvdmFsLnJlY2VpcHQ/LmNvbmZpcm1hdGlvbjtcblxuICAgIGlmICghbWZhQ29uZikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY1dpdGhNZmFBcHByb3ZhbCh7IG1mYUlkLCBtZmFPcmdJZCwgbWZhQ29uZiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1Ym1pdHMgdGhlIHJlcXVlc3Qgd2l0aCBhIGdpdmVuIE1GQSByZWNlaXB0KHMpIGF0dGFjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBUaGUgTUZBIHJlY2VpcHQocylcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiBzaWduaW5nIGFmdGVyIE1GQSBhcHByb3ZhbFxuICAgKi9cbiAgYXN5bmMgZXhlY1dpdGhNZmFBcHByb3ZhbChtZmFSZWNlaXB0OiBNZmFSZWNlaXB0cyk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IEN1YmVTaWduZXJSZXNwb25zZS5nZXRNZmFIZWFkZXJzKG1mYVJlY2VpcHQpO1xuICAgIHJldHVybiBuZXcgQ3ViZVNpZ25lclJlc3BvbnNlKHRoaXMuI2VudiwgdGhpcy4jcmVxdWVzdEZuLCBhd2FpdCB0aGlzLiNyZXF1ZXN0Rm4oaGVhZGVycykpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBlbnYgVGhlIGVudmlyb25tZW50IHdoZXJlIHRoZSByZXNwb25zZSBjb21lcyBmcm9tXG4gICAqIEBwYXJhbSByZXF1ZXN0Rm5cbiAgICogICAgVGhlIGZ1bmN0aW9uIHRoYXQgdGhpcyByZXNwb25zZSBpcyBmcm9tLlxuICAgKiAgICBUaGlzIGFyZ3VtZW50IGlzIHVzZWQgdG8gcmVzZW5kIHJlcXVlc3RzIHdpdGggZGlmZmVyZW50IGhlYWRlcnMgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0gcmVzcCBUaGUgcmVzcG9uc2UgYXMgcmV0dXJuZWQgYnkgdGhlIE9wZW5BUEkgY2xpZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlbnY6IEVudkludGVyZmFjZSwgcmVxdWVzdEZuOiBSZXF1ZXN0Rm48VT4sIHJlc3A6IFJlc3BvbnNlPFU+KSB7XG4gICAgdGhpcy4jZW52ID0gZW52O1xuICAgIHRoaXMuI3JlcXVlc3RGbiA9IHJlcXVlc3RGbjtcbiAgICB0aGlzLiNyZXNwID0gcmVzcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBlbnYgVGhlIGVudmlyb25tZW50IHdoZXJlIHRoZSByZXNwb25zZSBjb21lcyBmcm9tXG4gICAqIEBwYXJhbSByZXF1ZXN0Rm5cbiAgICogICAgVGhlIHJlcXVlc3QgZnVuY3Rpb24gdGhhdCB0aGlzIHJlc3BvbnNlIGlzIGZyb20uXG4gICAqICAgIFRoaXMgYXJndW1lbnQgaXMgdXNlZCB0byByZXNlbmQgcmVxdWVzdHMgd2l0aCBkaWZmZXJlbnQgaGVhZGVycyBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpXG4gICAqIEByZXR1cm5zIE5ldyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0YXRpYyBhc3luYyBjcmVhdGU8VT4oXG4gICAgZW52OiBFbnZJbnRlcmZhY2UsXG4gICAgcmVxdWVzdEZuOiBSZXF1ZXN0Rm48VT4sXG4gICAgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzLFxuICApOiBQcm9taXNlPEN1YmVTaWduZXJSZXNwb25zZTxVPj4ge1xuICAgIGNvbnN0IHNlZWQgPSBhd2FpdCByZXF1ZXN0Rm4odGhpcy5nZXRNZmFIZWFkZXJzKG1mYVJlY2VpcHQpKTtcbiAgICByZXR1cm4gbmV3IEN1YmVTaWduZXJSZXNwb25zZShlbnYsIHJlcXVlc3RGbiwgc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIEhUVFAgaGVhZGVycyBjb250YWluaW5nIGEgZ2l2ZW4gTUZBIHJlY2VpcHQuXG4gICAqXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE1GQSByZWNlaXB0KHMpXG4gICAqIEByZXR1cm5zIEhlYWRlcnMgaW5jbHVkaW5nIHtAbGluayBtZmFSZWNlaXB0fVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0YXRpYyBnZXRNZmFIZWFkZXJzKG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cyk6IEhlYWRlcnNJbml0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobWZhUmVjZWlwdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYyA9IGlzTWFueU1mYVJlY2VpcHRzKG1mYVJlY2VpcHQpXG4gICAgICA/IG1mYVJlY2VpcHRcbiAgICAgIDoge1xuICAgICAgICAgIG9yZ0lkOiBtZmFSZWNlaXB0Lm1mYU9yZ0lkLFxuICAgICAgICAgIHJlY2VpcHRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBtZmFSZWNlaXB0Lm1mYUlkLFxuICAgICAgICAgICAgICBjb25maXJtYXRpb246IG1mYVJlY2VpcHQubWZhQ29uZixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgIGlmIChyZWMucmVjZWlwdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwieC1jdWJpc3QtbWZhLW9yZy1pZFwiOiByZWMub3JnSWQsXG4gICAgICBcIngtY3ViaXN0LW1mYS1yZWNlaXB0c1wiOiBlbmNvZGVUb0Jhc2U2NFVybCh0ZXh0RW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocmVjLnJlY2VpcHRzKSkpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|