@cubist-labs/cubesigner-sdk 0.4.263 → 0.4.266
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 +12 -4
- package/dist/src/acl.js +1 -2
- package/dist/src/audit_log.d.ts +4 -4
- package/dist/src/audit_log.js +116 -119
- package/dist/src/bucket.d.ts +2 -2
- package/dist/src/bucket.d.ts.map +1 -1
- package/dist/src/bucket.js +2 -5
- package/dist/src/client/api_client.d.ts +16 -12
- package/dist/src/client/api_client.d.ts.map +1 -1
- package/dist/src/client/api_client.js +288 -292
- package/dist/src/client/base_client.d.ts +6 -6
- package/dist/src/client/base_client.d.ts.map +1 -1
- package/dist/src/client/base_client.js +27 -38
- package/dist/src/client/session.d.ts +2 -2
- package/dist/src/client/session.d.ts.map +1 -1
- package/dist/src/client/session.js +20 -35
- package/dist/src/client.d.ts +18 -18
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +14 -18
- package/dist/src/contact.d.ts +3 -3
- package/dist/src/contact.d.ts.map +1 -1
- package/dist/src/contact.js +4 -8
- package/dist/src/diffie_hellman.d.ts +1 -1
- package/dist/src/diffie_hellman.d.ts.map +1 -1
- package/dist/src/diffie_hellman.js +9 -12
- package/dist/src/env.js +13 -20
- package/dist/src/error.d.ts +2 -2
- package/dist/src/error.d.ts.map +1 -1
- package/dist/src/error.js +3 -8
- package/dist/src/events.js +2 -6
- package/dist/src/evm/index.d.ts +1 -1
- package/dist/src/evm/index.d.ts.map +1 -1
- package/dist/src/evm/index.js +5 -9
- package/dist/src/fetch.d.ts +1 -1
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +10 -15
- package/dist/src/index.d.ts +24 -24
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +25 -48
- package/dist/src/key.d.ts +10 -8
- package/dist/src/key.d.ts.map +1 -1
- package/dist/src/key.js +35 -34
- package/dist/src/mfa.d.ts +2 -2
- package/dist/src/mfa.d.ts.map +1 -1
- package/dist/src/mfa.js +14 -25
- package/dist/src/org.d.ts +197 -197
- package/dist/src/org.d.ts.map +1 -1
- package/dist/src/org.js +28 -32
- package/dist/src/paginator.js +3 -8
- package/dist/src/passkey.d.ts +1 -1
- package/dist/src/passkey.d.ts.map +1 -1
- package/dist/src/passkey.js +16 -23
- package/dist/src/policy.d.ts +1 -1
- package/dist/src/policy.d.ts.map +1 -1
- package/dist/src/policy.js +17 -27
- package/dist/src/response.d.ts +16 -7
- package/dist/src/response.d.ts.map +1 -1
- package/dist/src/response.js +42 -21
- package/dist/src/retry.d.ts.map +1 -1
- package/dist/src/retry.js +5 -11
- package/dist/src/role.d.ts +3 -3
- package/dist/src/role.d.ts.map +1 -1
- package/dist/src/role.js +13 -18
- package/dist/src/schema.d.ts +117 -40
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +2 -3
- package/dist/src/schema_types.d.ts +6 -3
- package/dist/src/schema_types.d.ts.map +1 -1
- package/dist/src/schema_types.js +11 -7
- package/dist/src/scopes.d.ts +1 -1
- package/dist/src/scopes.d.ts.map +1 -1
- package/dist/src/scopes.js +19 -21
- package/dist/src/signer_session.d.ts +1 -1
- package/dist/src/signer_session.d.ts.map +1 -1
- package/dist/src/signer_session.js +2 -6
- package/dist/src/user_export.d.ts +1 -1
- package/dist/src/user_export.d.ts.map +1 -1
- package/dist/src/user_export.js +10 -18
- package/dist/src/util.js +9 -19
- package/package.json +12 -4
- package/src/audit_log.ts +1 -1
- package/src/bucket.ts +2 -2
- package/src/client/api_client.ts +25 -19
- package/src/client/base_client.ts +10 -10
- package/src/client/session.ts +4 -4
- package/src/client.ts +12 -6
- package/src/contact.ts +3 -3
- package/src/diffie_hellman.ts +3 -3
- package/src/env.ts +3 -3
- package/src/error.ts +2 -2
- package/src/evm/index.ts +1 -1
- package/src/fetch.ts +3 -3
- package/src/index.ts +29 -24
- package/src/key.ts +16 -12
- package/src/mfa.ts +3 -3
- package/src/org.ts +4 -4
- package/src/passkey.ts +1 -1
- package/src/policy.ts +2 -2
- package/src/response.ts +57 -12
- package/src/role.ts +3 -3
- package/src/schema.ts +110 -23
- package/src/schema_types.ts +14 -3
- package/src/scopes.ts +2 -1
- package/src/signer_session.ts +1 -1
- package/src/user_export.ts +2 -2
- package/tsconfig.json +12 -0
package/dist/src/mfa.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
2
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
4
3
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
@@ -12,18 +11,14 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
12
11
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
13
12
|
};
|
|
14
13
|
var _MfaRequest_apiClient, _MfaRequest_id, _MfaRequest_data, _TotpChallenge_api, _TotpChallenge_id, _TotpChallenge_url, _AddFidoChallenge_api, _MfaEmailChallenge_apiClient, _ResetEmailChallenge_apiClient, _MfaFidoChallenge_apiClient;
|
|
15
|
-
|
|
16
|
-
exports.MfaFidoChallenge = exports.ResetEmailChallenge = exports.MfaEmailChallenge = exports.AddFidoChallenge = exports.TotpChallenge = exports.MfaRequest = void 0;
|
|
17
|
-
exports.isManyMfaReceipts = isManyMfaReceipts;
|
|
18
|
-
exports.isMfaIdAndConf = isMfaIdAndConf;
|
|
19
|
-
const passkey_1 = require("./passkey");
|
|
14
|
+
import { credentialToJSON, parseCreationOptions, parseRequestOptions } from "./passkey.js";
|
|
20
15
|
/**
|
|
21
16
|
* Type narrowing from {@link MfaReceipts} to {@link ManyMfaReceipts}
|
|
22
17
|
*
|
|
23
18
|
* @param rec The input
|
|
24
19
|
* @returns Whether {@link rec} is of type {@link ManyMfaReceipts}
|
|
25
20
|
*/
|
|
26
|
-
function isManyMfaReceipts(rec) {
|
|
21
|
+
export function isManyMfaReceipts(rec) {
|
|
27
22
|
if (rec === undefined)
|
|
28
23
|
return false;
|
|
29
24
|
const x = rec;
|
|
@@ -38,14 +33,14 @@ function isManyMfaReceipts(rec) {
|
|
|
38
33
|
* @param x The input
|
|
39
34
|
* @returns Whether {@link x} is of type {@link MfaIdAndConf}
|
|
40
35
|
*/
|
|
41
|
-
function isMfaIdAndConf(x) {
|
|
36
|
+
export function isMfaIdAndConf(x) {
|
|
42
37
|
if (x === undefined)
|
|
43
38
|
return false;
|
|
44
39
|
const y = x;
|
|
45
40
|
return typeof y.id === "string" && typeof y.confirmation === "string";
|
|
46
41
|
}
|
|
47
42
|
/** Representation of an MFA request */
|
|
48
|
-
class MfaRequest {
|
|
43
|
+
export class MfaRequest {
|
|
49
44
|
/** @returns MFA request id */
|
|
50
45
|
get id() {
|
|
51
46
|
return __classPrivateFieldGet(this, _MfaRequest_id, "f");
|
|
@@ -181,10 +176,9 @@ class MfaRequest {
|
|
|
181
176
|
return await __classPrivateFieldGet(this, _MfaRequest_apiClient, "f").mfaVoteEmailInit(this.id, mfaVote);
|
|
182
177
|
}
|
|
183
178
|
}
|
|
184
|
-
exports.MfaRequest = MfaRequest;
|
|
185
179
|
_MfaRequest_apiClient = new WeakMap(), _MfaRequest_id = new WeakMap(), _MfaRequest_data = new WeakMap();
|
|
186
180
|
/** TOTP challenge that must be answered before user's TOTP is updated */
|
|
187
|
-
class TotpChallenge {
|
|
181
|
+
export class TotpChallenge {
|
|
188
182
|
/** @returns The id of the challenge */
|
|
189
183
|
get id() {
|
|
190
184
|
return __classPrivateFieldGet(this, _TotpChallenge_id, "f");
|
|
@@ -222,13 +216,12 @@ class TotpChallenge {
|
|
|
222
216
|
await __classPrivateFieldGet(this, _TotpChallenge_api, "f").userTotpResetComplete(this.id, code);
|
|
223
217
|
}
|
|
224
218
|
}
|
|
225
|
-
exports.TotpChallenge = TotpChallenge;
|
|
226
219
|
_TotpChallenge_api = new WeakMap(), _TotpChallenge_id = new WeakMap(), _TotpChallenge_url = new WeakMap();
|
|
227
220
|
/**
|
|
228
221
|
* Returned after creating a request to add a new FIDO device.
|
|
229
222
|
* Provides some helper methods for answering this challenge.
|
|
230
223
|
*/
|
|
231
|
-
class AddFidoChallenge {
|
|
224
|
+
export class AddFidoChallenge {
|
|
232
225
|
/**
|
|
233
226
|
* Constructor
|
|
234
227
|
*
|
|
@@ -239,7 +232,7 @@ class AddFidoChallenge {
|
|
|
239
232
|
_AddFidoChallenge_api.set(this, void 0);
|
|
240
233
|
__classPrivateFieldSet(this, _AddFidoChallenge_api, api, "f");
|
|
241
234
|
this.challengeId = challenge.challenge_id;
|
|
242
|
-
this.options =
|
|
235
|
+
this.options = parseCreationOptions(challenge.options);
|
|
243
236
|
}
|
|
244
237
|
/**
|
|
245
238
|
* Answers this challenge by using the `CredentialsContainer` API to create a credential
|
|
@@ -261,16 +254,15 @@ class AddFidoChallenge {
|
|
|
261
254
|
* based on the public key creation options from this challenge.
|
|
262
255
|
*/
|
|
263
256
|
async answer(cred) {
|
|
264
|
-
const answer =
|
|
257
|
+
const answer = credentialToJSON(cred);
|
|
265
258
|
await __classPrivateFieldGet(this, _AddFidoChallenge_api, "f").userFidoRegisterComplete(this.challengeId, answer);
|
|
266
259
|
}
|
|
267
260
|
}
|
|
268
|
-
exports.AddFidoChallenge = AddFidoChallenge;
|
|
269
261
|
_AddFidoChallenge_api = new WeakMap();
|
|
270
262
|
/**
|
|
271
263
|
* Returned after initiating an MFA approval/rejection via email OTP.
|
|
272
264
|
*/
|
|
273
|
-
class MfaEmailChallenge {
|
|
265
|
+
export class MfaEmailChallenge {
|
|
274
266
|
/**
|
|
275
267
|
* Constructor.
|
|
276
268
|
*
|
|
@@ -294,12 +286,11 @@ class MfaEmailChallenge {
|
|
|
294
286
|
return await __classPrivateFieldGet(this, _MfaEmailChallenge_apiClient, "f").mfaVoteEmailComplete(this.mfaId, this.otpResponse.partial_token, otpCode);
|
|
295
287
|
}
|
|
296
288
|
}
|
|
297
|
-
exports.MfaEmailChallenge = MfaEmailChallenge;
|
|
298
289
|
_MfaEmailChallenge_apiClient = new WeakMap();
|
|
299
290
|
/**
|
|
300
291
|
* Returned after initiating an email reset flow.
|
|
301
292
|
*/
|
|
302
|
-
class ResetEmailChallenge {
|
|
293
|
+
export class ResetEmailChallenge {
|
|
303
294
|
/**
|
|
304
295
|
* Constructor.
|
|
305
296
|
*
|
|
@@ -321,13 +312,12 @@ class ResetEmailChallenge {
|
|
|
321
312
|
return await __classPrivateFieldGet(this, _ResetEmailChallenge_apiClient, "f").userEmailResetComplete(this.otpResponse.partial_token, otpCode);
|
|
322
313
|
}
|
|
323
314
|
}
|
|
324
|
-
exports.ResetEmailChallenge = ResetEmailChallenge;
|
|
325
315
|
_ResetEmailChallenge_apiClient = new WeakMap();
|
|
326
316
|
/**
|
|
327
317
|
* Returned after initiating MFA approval using FIDO.
|
|
328
318
|
* Provides some helper methods for answering this challenge.
|
|
329
319
|
*/
|
|
330
|
-
class MfaFidoChallenge {
|
|
320
|
+
export class MfaFidoChallenge {
|
|
331
321
|
/**
|
|
332
322
|
* @param api The API client used to initiate MFA approval using FIDO
|
|
333
323
|
* @param mfaId The MFA request id.
|
|
@@ -338,7 +328,7 @@ class MfaFidoChallenge {
|
|
|
338
328
|
__classPrivateFieldSet(this, _MfaFidoChallenge_apiClient, api, "f");
|
|
339
329
|
this.mfaId = mfaId;
|
|
340
330
|
this.challengeId = challenge.challenge_id;
|
|
341
|
-
this.options =
|
|
331
|
+
this.options = parseRequestOptions(challenge.options);
|
|
342
332
|
}
|
|
343
333
|
/**
|
|
344
334
|
* Answers this challenge by using the `CredentialsContainer` API to get a credential
|
|
@@ -365,11 +355,10 @@ class MfaFidoChallenge {
|
|
|
365
355
|
* @returns The updated MfaRequest after answering
|
|
366
356
|
*/
|
|
367
357
|
async answer(cred, vote = "approve") {
|
|
368
|
-
const answer =
|
|
358
|
+
const answer = credentialToJSON(cred);
|
|
369
359
|
const data = await __classPrivateFieldGet(this, _MfaFidoChallenge_apiClient, "f").mfaVoteFidoComplete(this.mfaId, vote, this.challengeId, answer);
|
|
370
360
|
return new MfaRequest(__classPrivateFieldGet(this, _MfaFidoChallenge_apiClient, "f"), data);
|
|
371
361
|
}
|
|
372
362
|
}
|
|
373
|
-
exports.MfaFidoChallenge = MfaFidoChallenge;
|
|
374
363
|
_MfaFidoChallenge_apiClient = new WeakMap();
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21mYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdURBQXVEOzs7Ozs7Ozs7Ozs7Ozs7QUFpRHZELDhDQVNDO0FBUUQsd0NBSUM7QUEzREQsdUNBQXdGO0FBZ0N4Rjs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEdBQWdCO0lBQ2hELElBQUksR0FBRyxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNwQyxNQUFNLENBQUMsR0FBRyxHQUFzQixDQUFDO0lBQ2pDLE9BQU8sQ0FDTCxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUMzQixPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUTtRQUM5QixDQUFDLENBQUMsUUFBUSxZQUFZLEtBQUs7UUFDM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQ2pDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsQ0FBVTtJQUN2QyxJQUFJLENBQUMsS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBaUIsQ0FBQztJQUM1QixPQUFPLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQztBQUN4RSxDQUFDO0FBUUQsdUNBQXVDO0FBQ3ZDLE1BQWEsVUFBVTtJQUtyQiw4QkFBOEI7SUFDOUIsSUFBSSxFQUFFO1FBQ0osT0FBTyx1QkFBQSxJQUFJLHNCQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sdUJBQUEsSUFBSSx3QkFBTSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksU0FBb0IsRUFBRSxJQUE0QjtRQXZCckQsd0NBQXNC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Q0FBc0I7UUFXN0IsdUJBQUEsSUFBSSwrQkFBYyxHQUFHLE1BQUEsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLDZCQUFtQixFQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQWM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxRSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBUyxFQUFFLE9BQWdCLFNBQVM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLHVCQUFBLElBQUksbUNBQVcsQ0FBQyxtQkFBbUIsQ0FDcEQsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLFdBQVcsRUFDaEIsTUFBTSxDQUNQLENBQUM7UUFDRixPQUFPLElBQUksVUFBVSxDQUFDLHVCQUFBLElBQUksbUNBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFyREQsNENBcURDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwaUFkZEZpZG9DaGFsbGVuZ2UsXG4gIEFwaU1mYUZpZG9DaGFsbGVuZ2UsXG4gIEVtYWlsT3RwUmVzcG9uc2UsXG4gIE1mYVJlcXVlc3RJbmZvLFxuICBNZmFWb3RlLFxuICBUb3RwSW5mbyxcbn0gZnJvbSBcIi4vc2NoZW1hX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaUNsaWVudCB9IGZyb20gXCIuL2NsaWVudC9hcGlfY2xpZW50XCI7XG5pbXBvcnQgeyBjcmVkZW50aWFsVG9KU09OLCBwYXJzZUNyZWF0aW9uT3B0aW9ucywgcGFyc2VSZXF1ZXN0T3B0aW9ucyB9IGZyb20gXCIuL3Bhc3NrZXlcIjtcblxuLyoqIE1GQSByZWNlaXB0ICovXG5leHBvcnQgaW50ZXJmYWNlIE1mYVJlY2VpcHQge1xuICAvKiogTUZBIHJlcXVlc3QgSUQgKi9cbiAgbWZhSWQ6IHN0cmluZztcbiAgLyoqIENvcnJlc3BvbmRpbmcgb3JnIElEICovXG4gIG1mYU9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBNRkEgY29uZmlybWF0aW9uIGNvZGUgKi9cbiAgbWZhQ29uZjogc3RyaW5nO1xufVxuXG4vKiogT25lIG9yIG1vcmUgTUZBIHJlY2VpcHRzICovXG5leHBvcnQgdHlwZSBNZmFSZWNlaXB0cyA9IE1mYVJlY2VpcHQgfCBNYW55TWZhUmVjZWlwdHM7XG5cbi8qKiBUaGUgTUZBIGlkIGFuZCBjb25maXJtYXRpb24gY29ycmVzcG9uZGluZyB0byBhIHNpbmdsZSByZWNlaXB0IGluIGEge0BsaW5rIE1hbnlNZmFSZWNlaXB0c30gKi9cbi8vIE5PVEU6IG11c3QgY29ycmVzcG9uZCB0byB0aGUgUnVzdCBkZWZpbml0aW9uXG5leHBvcnQgaW50ZXJmYWNlIE1mYUlkQW5kQ29uZiB7XG4gIC8qKiBNRkEgaWQgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1GQSBjb25maXJtYXRpb24gY29kZSAqL1xuICBjb25maXJtYXRpb246IHN0cmluZztcbn1cblxuLyoqIE1hbnkgTUZBIHJlY2VpcHRzICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbnlNZmFSZWNlaXB0cyB7XG4gIC8qKiBDb3JyZXNwb25kaW5nIG9yZyBpZCAqL1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogUmVjZWlwdCBjb25maXJtYXRpb24gY29kZXMgKi9cbiAgcmVjZWlwdHM6IE1mYUlkQW5kQ29uZltdO1xufVxuXG4vKipcbiAqIFR5cGUgbmFycm93aW5nIGZyb20ge0BsaW5rIE1mYVJlY2VpcHRzfSB0byB7QGxpbmsgTWFueU1mYVJlY2VpcHRzfVxuICpcbiAqIEBwYXJhbSByZWMgVGhlIGlucHV0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHtAbGluayByZWN9IGlzIG9mIHR5cGUge0BsaW5rIE1hbnlNZmFSZWNlaXB0c31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueU1mYVJlY2VpcHRzKHJlYzogTWZhUmVjZWlwdHMpOiByZWMgaXMgTWFueU1mYVJlY2VpcHRzIHtcbiAgaWYgKHJlYyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHggPSByZWMgYXMgTWFueU1mYVJlY2VpcHRzO1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB4Lm9yZ0lkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHgucmVjZWlwdHMgPT09IFwib2JqZWN0XCIgJiZcbiAgICB4LnJlY2VpcHRzIGluc3RhbmNlb2YgQXJyYXkgJiZcbiAgICB4LnJlY2VpcHRzLmV2ZXJ5KGlzTWZhSWRBbmRDb25mKVxuICApO1xufVxuXG4vKipcbiAqIFR5cGUgbmFycm93aW5nIGZyb20gYHVua25vd25gIHRvIHtAbGluayBNZmFJZEFuZENvbmZ9XG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHtAbGluayB4fSBpcyBvZiB0eXBlIHtAbGluayBNZmFJZEFuZENvbmZ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01mYUlkQW5kQ29uZih4OiB1bmtub3duKTogeCBpcyBNZmFJZEFuZENvbmYge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHkgPSB4IGFzIE1mYUlkQW5kQ29uZjtcbiAgcmV0dXJuIHR5cGVvZiB5LmlkID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB5LmNvbmZpcm1hdGlvbiA9PT0gXCJzdHJpbmdcIjtcbn1cblxuLyoqIE1GQSByZXF1ZXN0IGlkICovXG5leHBvcnQgdHlwZSBNZmFJZCA9IHN0cmluZztcblxuLyoqIE9yaWdpbmFsIHJlcXVlc3QgdHlwZSAqL1xuZXhwb3J0IHR5cGUgTWZhT3JpZ2luYWxSZXF1ZXN0ID0gTWZhUmVxdWVzdEluZm9bXCJyZXF1ZXN0XCJdO1xuXG4vKiogUmVwcmVzZW50YXRpb24gb2YgYW4gTUZBIHJlcXVlc3QgKi9cbmV4cG9ydCBjbGFzcyBNZmFSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgI2FwaUNsaWVudDogQXBpQ2xpZW50O1xuICAjaWQ6IE1mYUlkO1xuICAjZGF0YT86IE1mYVJlcXVlc3RJbmZvO1xuXG4gIC8qKiBAcmV0dXJucyBNRkEgcmVxdWVzdCBpZCAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBjYWNoZWQgcHJvcGVydGllcyBvZiB0aGlzIE1GQSByZXF1ZXN0LiBUaGUgY2FjaGVkIHByb3BlcnRpZXMgcmVmbGVjdCB0aGVcbiAgICogc3RhdGUgb2YgdGhlIGxhc3QgZmV0Y2ggb3IgdXBkYXRlLlxuICAgKi9cbiAgZ2V0IGNhY2hlZCgpOiBNZmFSZXF1ZXN0SW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSUQgb3IgdGhlIGRhdGEgb2YgdGhlIE1GQSByZXF1ZXN0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogTWZhSWQgfCBNZmFSZXF1ZXN0SW5mbykge1xuICAgIHRoaXMuI2FwaUNsaWVudCA9IGFwaUNsaWVudDtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuI2lkID0gZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jaWQgPSBkYXRhLmlkO1xuICAgICAgdGhpcy4jZGF0YSA9IGRhdGE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBNRkEgcmVxdWVzdCBoYXMgYSByZWNlaXB0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBNRkEgcmVxdWVzdCBoYXMgYSByZWNlaXB0XG4gICAqL1xuICBhc3luYyBoYXNSZWNlaXB0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlY2VpcHQgPSB0aGlzLiNkYXRhPy5yZWNlaXB0ID8/IChhd2FpdCB0aGlzLmZldGNoKCkpLnJlY2VpcHQ7XG4gICAgcmV0dXJuICEhcmVjZWlwdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yaWdpbmFsIHJlcXVlc3QgdGhhdCB0aGUgTUZBIHJlcXVlc3QgaXMgZm9yLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdCgpOiBQcm9taXNlPE1mYU9yaWdpbmFsUmVxdWVzdD4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhY2hlZCA/PyAoYXdhaXQgdGhpcy5mZXRjaCgpKTtcbiAgICByZXR1cm4gZGF0YS5yZXF1ZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgTUZBIHJlY2VpcHQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBNRkEgcmVjZWlwdChzKVxuICAgKi9cbiAgYXN5bmMgcmVjZWlwdCgpOiBQcm9taXNlPE1mYVJlY2VpcHQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBDaGVjayBpZiByZWNlaXB0IGlzIGFscmVhZHkgYXZhaWxhYmxlLiBJZiBub3QsIGZldGNoIG5ld2VzdCBpbmZvcm1hdGlvbiBhYm91dCBNRkEgcmVxdWVzdFxuICAgIGNvbnN0IHJlY2VpcHQgPSB0aGlzLiNkYXRhPy5yZWNlaXB0ID8/IChhd2FpdCB0aGlzLmZldGNoKCkpLnJlY2VpcHQ7XG4gICAgaWYgKCFyZWNlaXB0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbWZhSWQ6IHRoaXMuI2lkLFxuICAgICAgbWZhT3JnSWQ6IHRoaXMuI2FwaUNsaWVudC5vcmdJZCxcbiAgICAgIG1mYUNvbmY6IHJlY2VpcHQuY29uZmlybWF0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGtleSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIE1GQSByZXF1ZXN0IGluZm9ybWF0aW9uLlxuICAgKi9cbiAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxNZmFSZXF1ZXN0SW5mbz4ge1xuICAgIHRoaXMuI2RhdGEgPSBhd2FpdCB0aGlzLiNhcGlDbGllbnQubWZhR2V0KHRoaXMuI2lkKTtcbiAgICByZXR1cm4gdGhpcy4jZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIGEgcGVuZGluZyBNRkEgcmVxdWVzdCB1c2luZyB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBNRkEgcmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZSgpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVDcyh0aGlzLiNpZCwgXCJhcHByb3ZlXCIpO1xuICAgIHJldHVybiBuZXcgTWZhUmVxdWVzdCh0aGlzLiNhcGlDbGllbnQsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdCBhIHBlbmRpbmcgTUZBIHJlcXVlc3QgdXNpbmcgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgTUZBIHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHJlamVjdCgpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVDcyh0aGlzLiNpZCwgXCJyZWplY3RcIik7XG4gICAgcmV0dXJuIG5ldyBNZmFSZXF1ZXN0KHRoaXMuI2FwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIHBlbmRpbmcgTUZBIHJlcXVlc3QgdXNpbmcgVE9UUC5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgVGhlIFRPVFAgY29kZVxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIE1GQSByZXF1ZXN0XG4gICAqL1xuICBhc3luYyB0b3RwQXBwcm92ZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVUb3RwKHRoaXMuI2lkLCBjb2RlLCBcImFwcHJvdmVcIik7XG4gICAgcmV0dXJuIG5ldyBNZmFSZXF1ZXN0KHRoaXMuI2FwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IGEgcGVuZGluZyBNRkEgcmVxdWVzdCB1c2luZyBUT1RQLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSBUaGUgVE9UUCBjb2RlXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgTUZBIHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHRvdHBSZWplY3QoY29kZTogc3RyaW5nKTogUHJvbWlzZTxNZmFSZXF1ZXN0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuI2FwaUNsaWVudC5tZmFWb3RlVG90cCh0aGlzLiNpZCwgY29kZSwgXCJyZWplY3RcIik7XG4gICAgcmV0dXJuIG5ldyBNZmFSZXF1ZXN0KHRoaXMuI2FwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGUgYXBwcm92YWwvcmVqZWN0aW9uIG9mIGFuIGV4aXN0aW5nIE1GQSByZXF1ZXN0IHVzaW5nIEZJRE8uXG4gICAqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgTWZhRmlkb0NoYWxsZW5nZX0gdGhhdCBtdXN0IGJlIGFuc3dlcmVkIGJ5IGNhbGxpbmdcbiAgICoge0BsaW5rIE1mYUZpZG9DaGFsbGVuZ2UuYW5zd2VyfS5cbiAgICpcbiAgICogQHJldHVybnMgQSBjaGFsbGVuZ2UgdGhhdCBuZWVkcyB0byBiZSBhbnN3ZXJlZCB0byBjb21wbGV0ZSB0aGUgYXBwcm92YWwuXG4gICAqL1xuICBhc3luYyBmaWRvVm90ZSgpOiBQcm9taXNlPE1mYUZpZG9DaGFsbGVuZ2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYUZpZG9Jbml0KHRoaXMuI2lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZSBhcHByb3ZhbC9yZWplY3Rpb24gb2YgYW4gZXhpc3RpbmcgTUZBIHJlcXVlc3QgdXNpbmcgZW1haWwgT1RQLlxuICAgKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIE1mYUVtYWlsQ2hhbGxlbmdlfSB0aGF0IG11c3QgYmUgYW5zd2VyZWQgYnkgY2FsbGluZyB7QGxpbmsgTWZhRW1haWxDaGFsbGVuZ2UuYW5zd2VyfS5cbiAgICpcbiAgICogQHBhcmFtIG1mYVZvdGUgVGhlIHZvdGUsIGkuZS4sIFwiYXBwcm92ZVwiIG9yIFwicmVqZWN0XCIuXG4gICAqIEByZXR1cm5zIFRoZSBjaGFsbGVuZ2UgdG8gYW5zd2VyIGJ5IGVudGVyaW5nIHRoZSBPVFAgY29kZSByZWNlaXZlZCB2aWEgZW1haWwuXG4gICAqL1xuICBhc3luYyBlbWFpbFZvdGUobWZhVm90ZTogTWZhVm90ZSk6IFByb21pc2U8TWZhRW1haWxDaGFsbGVuZ2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVFbWFpbEluaXQodGhpcy5pZCwgbWZhVm90ZSk7XG4gIH1cbn1cblxuLyoqIFRPVFAgY2hhbGxlbmdlIHRoYXQgbXVzdCBiZSBhbnN3ZXJlZCBiZWZvcmUgdXNlcidzIFRPVFAgaXMgdXBkYXRlZCAqL1xuZXhwb3J0IGNsYXNzIFRvdHBDaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBBcGlDbGllbnQ7XG4gIHJlYWRvbmx5ICNpZDogc3RyaW5nO1xuICByZWFkb25seSAjdXJsPzogc3RyaW5nO1xuXG4gIC8qKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIGNoYWxsZW5nZSAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2lkO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBuZXcgVE9UUCBjb25maWd1cmF0aW9uICovXG4gIGdldCB1cmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYXBpIFVzZWQgd2hlbiBhbnN3ZXJpbmcgdGhlIGNoYWxsZW5nZS5cbiAgICogQHBhcmFtIGRhdGEgVE9UUCBjaGFsbGVuZ2UgaW5mb3JtYXRpb24gb3IgSUQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGk6IEFwaUNsaWVudCwgZGF0YTogVG90cEluZm8gfCBzdHJpbmcpIHtcbiAgICB0aGlzLiNhcGkgPSBhcGk7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLiNpZCA9IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2lkID0gZGF0YS50b3RwX2lkO1xuICAgICAgdGhpcy4jdXJsID0gZGF0YS50b3RwX3VybDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VyIHRoZSBjaGFsbGVuZ2Ugd2l0aCB0aGUgY29kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGB0aGlzLnRvdHBVcmxgLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSA2LWRpZ2l0IGNvZGUgdGhhdCBjb3JyZXNwb25kcyB0byBgdGhpcy50b3RwVXJsYC5cbiAgICovXG4gIGFzeW5jIGFuc3dlcihjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoIS9eXFxkezEsNn0kLy50ZXN0KGNvZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVE9UUCBjb2RlOiAke2NvZGV9OyBpdCBtdXN0IGJlIGEgNi1kaWdpdCBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLiNhcGkudXNlclRvdHBSZXNldENvbXBsZXRlKHRoaXMuaWQsIGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgY3JlYXRpbmcgYSByZXF1ZXN0IHRvIGFkZCBhIG5ldyBGSURPIGRldmljZS5cbiAqIFByb3ZpZGVzIHNvbWUgaGVscGVyIG1ldGhvZHMgZm9yIGFuc3dlcmluZyB0aGlzIGNoYWxsZW5nZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFkZEZpZG9DaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBBcGlDbGllbnQ7XG4gIHJlYWRvbmx5IGNoYWxsZW5nZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IGFueTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIGFwaSBUaGUgQVBJIGNsaWVudCB1c2VkIHRvIHJlcXVlc3QgdG8gYWRkIGEgRklETyBkZXZpY2VcbiAgICogQHBhcmFtIGNoYWxsZW5nZSBUaGUgY2hhbGxlbmdlIHJldHVybmVkIGJ5IHRoZSByZW1vdGUgZW5kLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBBcGlDbGllbnQsIGNoYWxsZW5nZTogQXBpQWRkRmlkb0NoYWxsZW5nZSkge1xuICAgIHRoaXMuI2FwaSA9IGFwaTtcbiAgICB0aGlzLmNoYWxsZW5nZUlkID0gY2hhbGxlbmdlLmNoYWxsZW5nZV9pZDtcbiAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZUNyZWF0aW9uT3B0aW9ucyhjaGFsbGVuZ2Uub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSBieSB1c2luZyB0aGUgYENyZWRlbnRpYWxzQ29udGFpbmVyYCBBUEkgdG8gY3JlYXRlIGEgY3JlZGVudGlhbFxuICAgKiBiYXNlZCBvbiB0aGUgdGhlIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBjcmVhdGlvbiBvcHRpb25zIGZyb20gdGhpcyBjaGFsbGVuZ2UuXG4gICAqL1xuICBhc3luYyBjcmVhdGVDcmVkZW50aWFsQW5kQW5zd2VyKCkge1xuICAgIGNvbnN0IGNyZWQgPSBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHsgcHVibGljS2V5OiB0aGlzLm9wdGlvbnMgfSk7XG4gICAgYXdhaXQgdGhpcy5hbnN3ZXIoY3JlZCk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSB1c2luZyBhIGdpdmVuIGNyZWRlbnRpYWwgYGNyZWRgO1xuICAgKiB0aGUgY3JlZGVudGlhbCBzaG91bGQgYmUgb2J0YWluZWQgYnkgY2FsbGluZ1xuICAgKlxuICAgKiBgYGBcbiAgICogY29uc3QgY3JlZCA9IGF3YWl0IG5hdmlnYXRvci5jcmVkZW50aWFscy5jcmVhdGUoeyBwdWJsaWNLZXk6IHRoaXMub3B0aW9ucyB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBjcmVkIENyZWRlbnRpYWwgY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBgQ3JlZGVudGlhbENvbnRhaW5lcmAncyBgY3JlYXRlYCBtZXRob2RcbiAgICogICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHB1YmxpYyBrZXkgY3JlYXRpb24gb3B0aW9ucyBmcm9tIHRoaXMgY2hhbGxlbmdlLlxuICAgKi9cbiAgYXN5bmMgYW5zd2VyKGNyZWQ6IGFueSkge1xuICAgIGNvbnN0IGFuc3dlciA9IGNyZWRlbnRpYWxUb0pTT04oY3JlZCk7XG4gICAgYXdhaXQgdGhpcy4jYXBpLnVzZXJGaWRvUmVnaXN0ZXJDb21wbGV0ZSh0aGlzLmNoYWxsZW5nZUlkLCBhbnN3ZXIpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBhbiBNRkEgYXBwcm92YWwvcmVqZWN0aW9uIHZpYSBlbWFpbCBPVFAuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZmFFbWFpbENoYWxsZW5nZSB7XG4gIHJlYWRvbmx5ICNhcGlDbGllbnQ6IEFwaUNsaWVudDtcbiAgcmVhZG9ubHkgb3RwUmVzcG9uc2U6IEVtYWlsT3RwUmVzcG9uc2U7XG4gIHJlYWRvbmx5IG1mYUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IEN1YmVTaWduZXIgYXBpIGNsaWVudFxuICAgKiBAcGFyYW0gbWZhSWQgVGhlIGlkIG9mIHRoZSBNRkEgcmVxdWVzdC5cbiAgICogQHBhcmFtIG90cFJlc3BvbnNlIFRoZSByZXNwb25zZSByZXR1cm5lZCBieSB7QGxpbmsgQXBpQ2xpZW50Lm1mYVZvdGVFbWFpbEluaXR9LlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIG1mYUlkOiBzdHJpbmcsIG90cFJlc3BvbnNlOiBFbWFpbE90cFJlc3BvbnNlKSB7XG4gICAgdGhpcy4jYXBpQ2xpZW50ID0gYXBpQ2xpZW50O1xuICAgIHRoaXMub3RwUmVzcG9uc2UgPSBvdHBSZXNwb25zZTtcbiAgICB0aGlzLm1mYUlkID0gbWZhSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBwcmV2aW91c2x5IGluaXRpYXRlZCBNRkEgdm90ZSByZXF1ZXN0IHVzaW5nIGVtYWlsIE9UUC5cbiAgICpcbiAgICogQHBhcmFtIG90cENvZGUgVGhlIE1GQSBhcHByb3ZhbCBPVFAgY29kZSByZWNlaXZlZCB2aWEgZW1haWwuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgTUZBIHJlcXVlc3QuXG4gICAqL1xuICBhc3luYyBhbnN3ZXIob3RwQ29kZTogc3RyaW5nKTogUHJvbWlzZTxNZmFSZXF1ZXN0SW5mbz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLiNhcGlDbGllbnQubWZhVm90ZUVtYWlsQ29tcGxldGUoXG4gICAgICB0aGlzLm1mYUlkLFxuICAgICAgdGhpcy5vdHBSZXNwb25zZS5wYXJ0aWFsX3Rva2VuLFxuICAgICAgb3RwQ29kZSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBhbiBlbWFpbCByZXNldCBmbG93LlxuICovXG5leHBvcnQgY2xhc3MgUmVzZXRFbWFpbENoYWxsZW5nZSB7XG4gIHJlYWRvbmx5ICNhcGlDbGllbnQ6IEFwaUNsaWVudDtcbiAgcmVhZG9ubHkgb3RwUmVzcG9uc2U6IEVtYWlsT3RwUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IEN1YmVTaWduZXIgYXBpIGNsaWVudFxuICAgKiBAcGFyYW0gb3RwUmVzcG9uc2UgVGhlIHJlc3BvbnNlIHJldHVybmVkIGJ5IHtAbGluayBBcGlDbGllbnQubWZhVm90ZUVtYWlsSW5pdH0uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgb3RwUmVzcG9uc2U6IEVtYWlsT3RwUmVzcG9uc2UpIHtcbiAgICB0aGlzLiNhcGlDbGllbnQgPSBhcGlDbGllbnQ7XG4gICAgdGhpcy5vdHBSZXNwb25zZSA9IG90cFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgcHJldmlvdXNseSBpbml0aWF0ZWQgZW1haWwgcmVzZXQgZmxvdyB1c2luZyBlbWFpbCBPVFAuXG4gICAqXG4gICAqIEBwYXJhbSBvdHBDb2RlIFRoZSB2ZXJpZmljYXRpb24gT1RQIGNvZGUgcmVjZWl2ZWQgdmlhIGVtYWlsLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbiBzdWNjZXNzIGFuZCByZWplY3RzIG9uIGVycm9yLlxuICAgKi9cbiAgYXN5bmMgYW5zd2VyKG90cENvZGU6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLiNhcGlDbGllbnQudXNlckVtYWlsUmVzZXRDb21wbGV0ZSh0aGlzLm90cFJlc3BvbnNlLnBhcnRpYWxfdG9rZW4sIG90cENvZGUpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBNRkEgYXBwcm92YWwgdXNpbmcgRklETy5cbiAqIFByb3ZpZGVzIHNvbWUgaGVscGVyIG1ldGhvZHMgZm9yIGFuc3dlcmluZyB0aGlzIGNoYWxsZW5nZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1mYUZpZG9DaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpQ2xpZW50OiBBcGlDbGllbnQ7XG4gIHJlYWRvbmx5IG1mYUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNoYWxsZW5nZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IGFueTtcblxuICAvKipcbiAgICogQHBhcmFtIGFwaSBUaGUgQVBJIGNsaWVudCB1c2VkIHRvIGluaXRpYXRlIE1GQSBhcHByb3ZhbCB1c2luZyBGSURPXG4gICAqIEBwYXJhbSBtZmFJZCBUaGUgTUZBIHJlcXVlc3QgaWQuXG4gICAqIEBwYXJhbSBjaGFsbGVuZ2UgVGhlIGNoYWxsZW5nZSByZXR1cm5lZCBieSB0aGUgcmVtb3RlIGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBBcGlDbGllbnQsIG1mYUlkOiBzdHJpbmcsIGNoYWxsZW5nZTogQXBpTWZhRmlkb0NoYWxsZW5nZSkge1xuICAgIHRoaXMuI2FwaUNsaWVudCA9IGFwaTtcbiAgICB0aGlzLm1mYUlkID0gbWZhSWQ7XG4gICAgdGhpcy5jaGFsbGVuZ2VJZCA9IGNoYWxsZW5nZS5jaGFsbGVuZ2VfaWQ7XG4gICAgdGhpcy5vcHRpb25zID0gcGFyc2VSZXF1ZXN0T3B0aW9ucyhjaGFsbGVuZ2Uub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSBieSB1c2luZyB0aGUgYENyZWRlbnRpYWxzQ29udGFpbmVyYCBBUEkgdG8gZ2V0IGEgY3JlZGVudGlhbFxuICAgKiBiYXNlZCBvbiB0aGUgdGhlIHB1YmxpYyBrZXkgY3JlZGVudGlhbCByZXF1ZXN0IG9wdGlvbnMgZnJvbSB0aGlzIGNoYWxsZW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHZvdGUgQXBwcm92ZSBvciByZWplY3QgdGhlIE1GQSByZXF1ZXN0LiBEZWZhdWx0cyB0byBcImFwcHJvdmVcIi5cbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgTWZhUmVxdWVzdCBhZnRlciBhbnN3ZXJpbmdcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUNyZWRlbnRpYWxBbmRBbnN3ZXIodm90ZT86IE1mYVZvdGUpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBjcmVkID0gYXdhaXQgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogdGhpcy5vcHRpb25zIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFuc3dlcihjcmVkLCB2b3RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIHRoaXMgY2hhbGxlbmdlIHVzaW5nIGEgZ2l2ZW4gY3JlZGVudGlhbCBgY3JlZGAuXG4gICAqIFRvIG9idGFpbiB0aGlzIGNyZWRlbnRpYWwsIGZvciBleGFtcGxlLCBjYWxsXG4gICAqXG4gICAqIGBgYFxuICAgKiBjb25zdCBjcmVkID0gYXdhaXQgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogdGhpcy5vcHRpb25zIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGNyZWQgQ3JlZGVudGlhbCBjcmVhdGVkIGJ5IGNhbGxpbmcgdGhlIGBDcmVkZW50aWFsQ29udGFpbmVyYCdzIGBnZXRgIG1ldGhvZFxuICAgKiAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgcHVibGljIGtleSBjcmVkZW50aWFsIHJlcXVlc3Qgb3B0aW9ucyBmcm9tIHRoaXMgY2hhbGxlbmdlLlxuICAgKiBAcGFyYW0gdm90ZSBBcHByb3ZlIG9yIHJlamVjdC4gRGVmYXVsdHMgdG8gXCJhcHByb3ZlXCIuXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIE1mYVJlcXVlc3QgYWZ0ZXIgYW5zd2VyaW5nXG4gICAqL1xuICBhc3luYyBhbnN3ZXIoY3JlZDogYW55LCB2b3RlOiBNZmFWb3RlID0gXCJhcHByb3ZlXCIpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBhbnN3ZXIgPSBjcmVkZW50aWFsVG9KU09OKGNyZWQpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLiNhcGlDbGllbnQubWZhVm90ZUZpZG9Db21wbGV0ZShcbiAgICAgIHRoaXMubWZhSWQsXG4gICAgICB2b3RlLFxuICAgICAgdGhpcy5jaGFsbGVuZ2VJZCxcbiAgICAgIGFuc3dlcixcbiAgICApO1xuICAgIHJldHVybiBuZXcgTWZhUmVxdWVzdCh0aGlzLiNhcGlDbGllbnQsIGRhdGEpO1xuICB9XG59XG4iXX0=
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21mYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7Ozs7Ozs7Ozs7Ozs7QUFXdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBZ0MzRjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFnQjtJQUNoRCxJQUFJLEdBQUcsS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEMsTUFBTSxDQUFDLEdBQUcsR0FBc0IsQ0FBQztJQUNqQyxPQUFPLENBQ0wsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVE7UUFDM0IsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVE7UUFDOUIsQ0FBQyxDQUFDLFFBQVEsWUFBWSxLQUFLO1FBQzNCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxDQUFVO0lBQ3ZDLElBQUksQ0FBQyxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFpQixDQUFDO0lBQzVCLE9BQU8sT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssUUFBUSxDQUFDO0FBQ3hFLENBQUM7QUFRRCx1Q0FBdUM7QUFDdkMsTUFBTSxPQUFPLFVBQVU7SUFLckIsOEJBQThCO0lBQzlCLElBQUksRUFBRTtRQUNKLE9BQU8sdUJBQUEsSUFBSSxzQkFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLHVCQUFBLElBQUksd0JBQU0sQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7O09BS0c7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Qix1QkFBQSxJQUFJLCtCQUFjLEdBQUcsTUFBQSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLHlCQUF5QixDQUFDLElBQWM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxRSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBUyxFQUFFLE9BQWdCLFNBQVM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSx1QkFBQSxJQUFJLG1DQUFXLENBQUMsbUJBQW1CLENBQ3BELElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxFQUNKLElBQUksQ0FBQyxXQUFXLEVBQ2hCLE1BQU0sQ0FDUCxDQUFDO1FBQ0YsT0FBTyxJQUFJLFVBQVUsQ0FBQyx1QkFBQSxJQUFJLG1DQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwaUFkZEZpZG9DaGFsbGVuZ2UsXG4gIEFwaU1mYUZpZG9DaGFsbGVuZ2UsXG4gIEVtYWlsT3RwUmVzcG9uc2UsXG4gIE1mYVJlcXVlc3RJbmZvLFxuICBNZmFWb3RlLFxuICBUb3RwSW5mbyxcbn0gZnJvbSBcIi4vc2NoZW1hX3R5cGVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaUNsaWVudCB9IGZyb20gXCIuL2NsaWVudC9hcGlfY2xpZW50LnRzXCI7XG5pbXBvcnQgeyBjcmVkZW50aWFsVG9KU09OLCBwYXJzZUNyZWF0aW9uT3B0aW9ucywgcGFyc2VSZXF1ZXN0T3B0aW9ucyB9IGZyb20gXCIuL3Bhc3NrZXkudHNcIjtcblxuLyoqIE1GQSByZWNlaXB0ICovXG5leHBvcnQgaW50ZXJmYWNlIE1mYVJlY2VpcHQge1xuICAvKiogTUZBIHJlcXVlc3QgSUQgKi9cbiAgbWZhSWQ6IHN0cmluZztcbiAgLyoqIENvcnJlc3BvbmRpbmcgb3JnIElEICovXG4gIG1mYU9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBNRkEgY29uZmlybWF0aW9uIGNvZGUgKi9cbiAgbWZhQ29uZjogc3RyaW5nO1xufVxuXG4vKiogT25lIG9yIG1vcmUgTUZBIHJlY2VpcHRzICovXG5leHBvcnQgdHlwZSBNZmFSZWNlaXB0cyA9IE1mYVJlY2VpcHQgfCBNYW55TWZhUmVjZWlwdHM7XG5cbi8qKiBUaGUgTUZBIGlkIGFuZCBjb25maXJtYXRpb24gY29ycmVzcG9uZGluZyB0byBhIHNpbmdsZSByZWNlaXB0IGluIGEge0BsaW5rIE1hbnlNZmFSZWNlaXB0c30gKi9cbi8vIE5PVEU6IG11c3QgY29ycmVzcG9uZCB0byB0aGUgUnVzdCBkZWZpbml0aW9uXG5leHBvcnQgaW50ZXJmYWNlIE1mYUlkQW5kQ29uZiB7XG4gIC8qKiBNRkEgaWQgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIE1GQSBjb25maXJtYXRpb24gY29kZSAqL1xuICBjb25maXJtYXRpb246IHN0cmluZztcbn1cblxuLyoqIE1hbnkgTUZBIHJlY2VpcHRzICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbnlNZmFSZWNlaXB0cyB7XG4gIC8qKiBDb3JyZXNwb25kaW5nIG9yZyBpZCAqL1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogUmVjZWlwdCBjb25maXJtYXRpb24gY29kZXMgKi9cbiAgcmVjZWlwdHM6IE1mYUlkQW5kQ29uZltdO1xufVxuXG4vKipcbiAqIFR5cGUgbmFycm93aW5nIGZyb20ge0BsaW5rIE1mYVJlY2VpcHRzfSB0byB7QGxpbmsgTWFueU1mYVJlY2VpcHRzfVxuICpcbiAqIEBwYXJhbSByZWMgVGhlIGlucHV0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHtAbGluayByZWN9IGlzIG9mIHR5cGUge0BsaW5rIE1hbnlNZmFSZWNlaXB0c31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFueU1mYVJlY2VpcHRzKHJlYzogTWZhUmVjZWlwdHMpOiByZWMgaXMgTWFueU1mYVJlY2VpcHRzIHtcbiAgaWYgKHJlYyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHggPSByZWMgYXMgTWFueU1mYVJlY2VpcHRzO1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB4Lm9yZ0lkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHgucmVjZWlwdHMgPT09IFwib2JqZWN0XCIgJiZcbiAgICB4LnJlY2VpcHRzIGluc3RhbmNlb2YgQXJyYXkgJiZcbiAgICB4LnJlY2VpcHRzLmV2ZXJ5KGlzTWZhSWRBbmRDb25mKVxuICApO1xufVxuXG4vKipcbiAqIFR5cGUgbmFycm93aW5nIGZyb20gYHVua25vd25gIHRvIHtAbGluayBNZmFJZEFuZENvbmZ9XG4gKlxuICogQHBhcmFtIHggVGhlIGlucHV0XG4gKiBAcmV0dXJucyBXaGV0aGVyIHtAbGluayB4fSBpcyBvZiB0eXBlIHtAbGluayBNZmFJZEFuZENvbmZ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01mYUlkQW5kQ29uZih4OiB1bmtub3duKTogeCBpcyBNZmFJZEFuZENvbmYge1xuICBpZiAoeCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHkgPSB4IGFzIE1mYUlkQW5kQ29uZjtcbiAgcmV0dXJuIHR5cGVvZiB5LmlkID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB5LmNvbmZpcm1hdGlvbiA9PT0gXCJzdHJpbmdcIjtcbn1cblxuLyoqIE1GQSByZXF1ZXN0IGlkICovXG5leHBvcnQgdHlwZSBNZmFJZCA9IHN0cmluZztcblxuLyoqIE9yaWdpbmFsIHJlcXVlc3QgdHlwZSAqL1xuZXhwb3J0IHR5cGUgTWZhT3JpZ2luYWxSZXF1ZXN0ID0gTWZhUmVxdWVzdEluZm9bXCJyZXF1ZXN0XCJdO1xuXG4vKiogUmVwcmVzZW50YXRpb24gb2YgYW4gTUZBIHJlcXVlc3QgKi9cbmV4cG9ydCBjbGFzcyBNZmFSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgI2FwaUNsaWVudDogQXBpQ2xpZW50O1xuICAjaWQ6IE1mYUlkO1xuICAjZGF0YT86IE1mYVJlcXVlc3RJbmZvO1xuXG4gIC8qKiBAcmV0dXJucyBNRkEgcmVxdWVzdCBpZCAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBjYWNoZWQgcHJvcGVydGllcyBvZiB0aGlzIE1GQSByZXF1ZXN0LiBUaGUgY2FjaGVkIHByb3BlcnRpZXMgcmVmbGVjdCB0aGVcbiAgICogc3RhdGUgb2YgdGhlIGxhc3QgZmV0Y2ggb3IgdXBkYXRlLlxuICAgKi9cbiAgZ2V0IGNhY2hlZCgpOiBNZmFSZXF1ZXN0SW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSUQgb3IgdGhlIGRhdGEgb2YgdGhlIE1GQSByZXF1ZXN0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogTWZhSWQgfCBNZmFSZXF1ZXN0SW5mbykge1xuICAgIHRoaXMuI2FwaUNsaWVudCA9IGFwaUNsaWVudDtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuI2lkID0gZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jaWQgPSBkYXRhLmlkO1xuICAgICAgdGhpcy4jZGF0YSA9IGRhdGE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBNRkEgcmVxdWVzdCBoYXMgYSByZWNlaXB0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBNRkEgcmVxdWVzdCBoYXMgYSByZWNlaXB0XG4gICAqL1xuICBhc3luYyBoYXNSZWNlaXB0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlY2VpcHQgPSB0aGlzLiNkYXRhPy5yZWNlaXB0ID8/IChhd2FpdCB0aGlzLmZldGNoKCkpLnJlY2VpcHQ7XG4gICAgcmV0dXJuICEhcmVjZWlwdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9yaWdpbmFsIHJlcXVlc3QgdGhhdCB0aGUgTUZBIHJlcXVlc3QgaXMgZm9yLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdCgpOiBQcm9taXNlPE1mYU9yaWdpbmFsUmVxdWVzdD4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhY2hlZCA/PyAoYXdhaXQgdGhpcy5mZXRjaCgpKTtcbiAgICByZXR1cm4gZGF0YS5yZXF1ZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgTUZBIHJlY2VpcHQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBNRkEgcmVjZWlwdChzKVxuICAgKi9cbiAgYXN5bmMgcmVjZWlwdCgpOiBQcm9taXNlPE1mYVJlY2VpcHQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBDaGVjayBpZiByZWNlaXB0IGlzIGFscmVhZHkgYXZhaWxhYmxlLiBJZiBub3QsIGZldGNoIG5ld2VzdCBpbmZvcm1hdGlvbiBhYm91dCBNRkEgcmVxdWVzdFxuICAgIGNvbnN0IHJlY2VpcHQgPSB0aGlzLiNkYXRhPy5yZWNlaXB0ID8/IChhd2FpdCB0aGlzLmZldGNoKCkpLnJlY2VpcHQ7XG4gICAgaWYgKCFyZWNlaXB0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbWZhSWQ6IHRoaXMuI2lkLFxuICAgICAgbWZhT3JnSWQ6IHRoaXMuI2FwaUNsaWVudC5vcmdJZCxcbiAgICAgIG1mYUNvbmY6IHJlY2VpcHQuY29uZmlybWF0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGtleSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIE1GQSByZXF1ZXN0IGluZm9ybWF0aW9uLlxuICAgKi9cbiAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxNZmFSZXF1ZXN0SW5mbz4ge1xuICAgIHRoaXMuI2RhdGEgPSBhd2FpdCB0aGlzLiNhcGlDbGllbnQubWZhR2V0KHRoaXMuI2lkKTtcbiAgICByZXR1cm4gdGhpcy4jZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIGEgcGVuZGluZyBNRkEgcmVxdWVzdCB1c2luZyB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBNRkEgcmVxdWVzdFxuICAgKi9cbiAgYXN5bmMgYXBwcm92ZSgpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVDcyh0aGlzLiNpZCwgXCJhcHByb3ZlXCIpO1xuICAgIHJldHVybiBuZXcgTWZhUmVxdWVzdCh0aGlzLiNhcGlDbGllbnQsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdCBhIHBlbmRpbmcgTUZBIHJlcXVlc3QgdXNpbmcgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgTUZBIHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHJlamVjdCgpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVDcyh0aGlzLiNpZCwgXCJyZWplY3RcIik7XG4gICAgcmV0dXJuIG5ldyBNZmFSZXF1ZXN0KHRoaXMuI2FwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSBhIHBlbmRpbmcgTUZBIHJlcXVlc3QgdXNpbmcgVE9UUC5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgVGhlIFRPVFAgY29kZVxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIE1GQSByZXF1ZXN0XG4gICAqL1xuICBhc3luYyB0b3RwQXBwcm92ZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVUb3RwKHRoaXMuI2lkLCBjb2RlLCBcImFwcHJvdmVcIik7XG4gICAgcmV0dXJuIG5ldyBNZmFSZXF1ZXN0KHRoaXMuI2FwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IGEgcGVuZGluZyBNRkEgcmVxdWVzdCB1c2luZyBUT1RQLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSBUaGUgVE9UUCBjb2RlXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgTUZBIHJlcXVlc3RcbiAgICovXG4gIGFzeW5jIHRvdHBSZWplY3QoY29kZTogc3RyaW5nKTogUHJvbWlzZTxNZmFSZXF1ZXN0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuI2FwaUNsaWVudC5tZmFWb3RlVG90cCh0aGlzLiNpZCwgY29kZSwgXCJyZWplY3RcIik7XG4gICAgcmV0dXJuIG5ldyBNZmFSZXF1ZXN0KHRoaXMuI2FwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGUgYXBwcm92YWwvcmVqZWN0aW9uIG9mIGFuIGV4aXN0aW5nIE1GQSByZXF1ZXN0IHVzaW5nIEZJRE8uXG4gICAqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgTWZhRmlkb0NoYWxsZW5nZX0gdGhhdCBtdXN0IGJlIGFuc3dlcmVkIGJ5IGNhbGxpbmdcbiAgICoge0BsaW5rIE1mYUZpZG9DaGFsbGVuZ2UuYW5zd2VyfS5cbiAgICpcbiAgICogQHJldHVybnMgQSBjaGFsbGVuZ2UgdGhhdCBuZWVkcyB0byBiZSBhbnN3ZXJlZCB0byBjb21wbGV0ZSB0aGUgYXBwcm92YWwuXG4gICAqL1xuICBhc3luYyBmaWRvVm90ZSgpOiBQcm9taXNlPE1mYUZpZG9DaGFsbGVuZ2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYUZpZG9Jbml0KHRoaXMuI2lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZSBhcHByb3ZhbC9yZWplY3Rpb24gb2YgYW4gZXhpc3RpbmcgTUZBIHJlcXVlc3QgdXNpbmcgZW1haWwgT1RQLlxuICAgKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIE1mYUVtYWlsQ2hhbGxlbmdlfSB0aGF0IG11c3QgYmUgYW5zd2VyZWQgYnkgY2FsbGluZyB7QGxpbmsgTWZhRW1haWxDaGFsbGVuZ2UuYW5zd2VyfS5cbiAgICpcbiAgICogQHBhcmFtIG1mYVZvdGUgVGhlIHZvdGUsIGkuZS4sIFwiYXBwcm92ZVwiIG9yIFwicmVqZWN0XCIuXG4gICAqIEByZXR1cm5zIFRoZSBjaGFsbGVuZ2UgdG8gYW5zd2VyIGJ5IGVudGVyaW5nIHRoZSBPVFAgY29kZSByZWNlaXZlZCB2aWEgZW1haWwuXG4gICAqL1xuICBhc3luYyBlbWFpbFZvdGUobWZhVm90ZTogTWZhVm90ZSk6IFByb21pc2U8TWZhRW1haWxDaGFsbGVuZ2U+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jYXBpQ2xpZW50Lm1mYVZvdGVFbWFpbEluaXQodGhpcy5pZCwgbWZhVm90ZSk7XG4gIH1cbn1cblxuLyoqIFRPVFAgY2hhbGxlbmdlIHRoYXQgbXVzdCBiZSBhbnN3ZXJlZCBiZWZvcmUgdXNlcidzIFRPVFAgaXMgdXBkYXRlZCAqL1xuZXhwb3J0IGNsYXNzIFRvdHBDaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBBcGlDbGllbnQ7XG4gIHJlYWRvbmx5ICNpZDogc3RyaW5nO1xuICByZWFkb25seSAjdXJsPzogc3RyaW5nO1xuXG4gIC8qKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIGNoYWxsZW5nZSAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2lkO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBuZXcgVE9UUCBjb25maWd1cmF0aW9uICovXG4gIGdldCB1cmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYXBpIFVzZWQgd2hlbiBhbnN3ZXJpbmcgdGhlIGNoYWxsZW5nZS5cbiAgICogQHBhcmFtIGRhdGEgVE9UUCBjaGFsbGVuZ2UgaW5mb3JtYXRpb24gb3IgSUQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGk6IEFwaUNsaWVudCwgZGF0YTogVG90cEluZm8gfCBzdHJpbmcpIHtcbiAgICB0aGlzLiNhcGkgPSBhcGk7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLiNpZCA9IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2lkID0gZGF0YS50b3RwX2lkO1xuICAgICAgdGhpcy4jdXJsID0gZGF0YS50b3RwX3VybDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VyIHRoZSBjaGFsbGVuZ2Ugd2l0aCB0aGUgY29kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGB0aGlzLnRvdHBVcmxgLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSA2LWRpZ2l0IGNvZGUgdGhhdCBjb3JyZXNwb25kcyB0byBgdGhpcy50b3RwVXJsYC5cbiAgICovXG4gIGFzeW5jIGFuc3dlcihjb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoIS9eXFxkezEsNn0kLy50ZXN0KGNvZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVE9UUCBjb2RlOiAke2NvZGV9OyBpdCBtdXN0IGJlIGEgNi1kaWdpdCBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLiNhcGkudXNlclRvdHBSZXNldENvbXBsZXRlKHRoaXMuaWQsIGNvZGUpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgY3JlYXRpbmcgYSByZXF1ZXN0IHRvIGFkZCBhIG5ldyBGSURPIGRldmljZS5cbiAqIFByb3ZpZGVzIHNvbWUgaGVscGVyIG1ldGhvZHMgZm9yIGFuc3dlcmluZyB0aGlzIGNoYWxsZW5nZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFkZEZpZG9DaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpOiBBcGlDbGllbnQ7XG4gIHJlYWRvbmx5IGNoYWxsZW5nZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IGFueTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIGFwaSBUaGUgQVBJIGNsaWVudCB1c2VkIHRvIHJlcXVlc3QgdG8gYWRkIGEgRklETyBkZXZpY2VcbiAgICogQHBhcmFtIGNoYWxsZW5nZSBUaGUgY2hhbGxlbmdlIHJldHVybmVkIGJ5IHRoZSByZW1vdGUgZW5kLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBBcGlDbGllbnQsIGNoYWxsZW5nZTogQXBpQWRkRmlkb0NoYWxsZW5nZSkge1xuICAgIHRoaXMuI2FwaSA9IGFwaTtcbiAgICB0aGlzLmNoYWxsZW5nZUlkID0gY2hhbGxlbmdlLmNoYWxsZW5nZV9pZDtcbiAgICB0aGlzLm9wdGlvbnMgPSBwYXJzZUNyZWF0aW9uT3B0aW9ucyhjaGFsbGVuZ2Uub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSBieSB1c2luZyB0aGUgYENyZWRlbnRpYWxzQ29udGFpbmVyYCBBUEkgdG8gY3JlYXRlIGEgY3JlZGVudGlhbFxuICAgKiBiYXNlZCBvbiB0aGUgdGhlIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBjcmVhdGlvbiBvcHRpb25zIGZyb20gdGhpcyBjaGFsbGVuZ2UuXG4gICAqL1xuICBhc3luYyBjcmVhdGVDcmVkZW50aWFsQW5kQW5zd2VyKCkge1xuICAgIGNvbnN0IGNyZWQgPSBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHsgcHVibGljS2V5OiB0aGlzLm9wdGlvbnMgfSk7XG4gICAgYXdhaXQgdGhpcy5hbnN3ZXIoY3JlZCk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSB1c2luZyBhIGdpdmVuIGNyZWRlbnRpYWwgYGNyZWRgO1xuICAgKiB0aGUgY3JlZGVudGlhbCBzaG91bGQgYmUgb2J0YWluZWQgYnkgY2FsbGluZ1xuICAgKlxuICAgKiBgYGBcbiAgICogY29uc3QgY3JlZCA9IGF3YWl0IG5hdmlnYXRvci5jcmVkZW50aWFscy5jcmVhdGUoeyBwdWJsaWNLZXk6IHRoaXMub3B0aW9ucyB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBjcmVkIENyZWRlbnRpYWwgY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBgQ3JlZGVudGlhbENvbnRhaW5lcmAncyBgY3JlYXRlYCBtZXRob2RcbiAgICogICAgICAgICAgICAgICAgICAgYmFzZWQgb24gdGhlIHB1YmxpYyBrZXkgY3JlYXRpb24gb3B0aW9ucyBmcm9tIHRoaXMgY2hhbGxlbmdlLlxuICAgKi9cbiAgYXN5bmMgYW5zd2VyKGNyZWQ6IGFueSkge1xuICAgIGNvbnN0IGFuc3dlciA9IGNyZWRlbnRpYWxUb0pTT04oY3JlZCk7XG4gICAgYXdhaXQgdGhpcy4jYXBpLnVzZXJGaWRvUmVnaXN0ZXJDb21wbGV0ZSh0aGlzLmNoYWxsZW5nZUlkLCBhbnN3ZXIpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBhbiBNRkEgYXBwcm92YWwvcmVqZWN0aW9uIHZpYSBlbWFpbCBPVFAuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZmFFbWFpbENoYWxsZW5nZSB7XG4gIHJlYWRvbmx5ICNhcGlDbGllbnQ6IEFwaUNsaWVudDtcbiAgcmVhZG9ubHkgb3RwUmVzcG9uc2U6IEVtYWlsT3RwUmVzcG9uc2U7XG4gIHJlYWRvbmx5IG1mYUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IEN1YmVTaWduZXIgYXBpIGNsaWVudFxuICAgKiBAcGFyYW0gbWZhSWQgVGhlIGlkIG9mIHRoZSBNRkEgcmVxdWVzdC5cbiAgICogQHBhcmFtIG90cFJlc3BvbnNlIFRoZSByZXNwb25zZSByZXR1cm5lZCBieSB7QGxpbmsgQXBpQ2xpZW50Lm1mYVZvdGVFbWFpbEluaXR9LlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIG1mYUlkOiBzdHJpbmcsIG90cFJlc3BvbnNlOiBFbWFpbE90cFJlc3BvbnNlKSB7XG4gICAgdGhpcy4jYXBpQ2xpZW50ID0gYXBpQ2xpZW50O1xuICAgIHRoaXMub3RwUmVzcG9uc2UgPSBvdHBSZXNwb25zZTtcbiAgICB0aGlzLm1mYUlkID0gbWZhSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBwcmV2aW91c2x5IGluaXRpYXRlZCBNRkEgdm90ZSByZXF1ZXN0IHVzaW5nIGVtYWlsIE9UUC5cbiAgICpcbiAgICogQHBhcmFtIG90cENvZGUgVGhlIE1GQSBhcHByb3ZhbCBPVFAgY29kZSByZWNlaXZlZCB2aWEgZW1haWwuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgTUZBIHJlcXVlc3QuXG4gICAqL1xuICBhc3luYyBhbnN3ZXIob3RwQ29kZTogc3RyaW5nKTogUHJvbWlzZTxNZmFSZXF1ZXN0SW5mbz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLiNhcGlDbGllbnQubWZhVm90ZUVtYWlsQ29tcGxldGUoXG4gICAgICB0aGlzLm1mYUlkLFxuICAgICAgdGhpcy5vdHBSZXNwb25zZS5wYXJ0aWFsX3Rva2VuLFxuICAgICAgb3RwQ29kZSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBhbiBlbWFpbCByZXNldCBmbG93LlxuICovXG5leHBvcnQgY2xhc3MgUmVzZXRFbWFpbENoYWxsZW5nZSB7XG4gIHJlYWRvbmx5ICNhcGlDbGllbnQ6IEFwaUNsaWVudDtcbiAgcmVhZG9ubHkgb3RwUmVzcG9uc2U6IEVtYWlsT3RwUmVzcG9uc2U7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IEN1YmVTaWduZXIgYXBpIGNsaWVudFxuICAgKiBAcGFyYW0gb3RwUmVzcG9uc2UgVGhlIHJlc3BvbnNlIHJldHVybmVkIGJ5IHtAbGluayBBcGlDbGllbnQubWZhVm90ZUVtYWlsSW5pdH0uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgb3RwUmVzcG9uc2U6IEVtYWlsT3RwUmVzcG9uc2UpIHtcbiAgICB0aGlzLiNhcGlDbGllbnQgPSBhcGlDbGllbnQ7XG4gICAgdGhpcy5vdHBSZXNwb25zZSA9IG90cFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgcHJldmlvdXNseSBpbml0aWF0ZWQgZW1haWwgcmVzZXQgZmxvdyB1c2luZyBlbWFpbCBPVFAuXG4gICAqXG4gICAqIEBwYXJhbSBvdHBDb2RlIFRoZSB2ZXJpZmljYXRpb24gT1RQIGNvZGUgcmVjZWl2ZWQgdmlhIGVtYWlsLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBvbiBzdWNjZXNzIGFuZCByZWplY3RzIG9uIGVycm9yLlxuICAgKi9cbiAgYXN5bmMgYW5zd2VyKG90cENvZGU6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLiNhcGlDbGllbnQudXNlckVtYWlsUmVzZXRDb21wbGV0ZSh0aGlzLm90cFJlc3BvbnNlLnBhcnRpYWxfdG9rZW4sIG90cENvZGUpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuZWQgYWZ0ZXIgaW5pdGlhdGluZyBNRkEgYXBwcm92YWwgdXNpbmcgRklETy5cbiAqIFByb3ZpZGVzIHNvbWUgaGVscGVyIG1ldGhvZHMgZm9yIGFuc3dlcmluZyB0aGlzIGNoYWxsZW5nZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1mYUZpZG9DaGFsbGVuZ2Uge1xuICByZWFkb25seSAjYXBpQ2xpZW50OiBBcGlDbGllbnQ7XG4gIHJlYWRvbmx5IG1mYUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNoYWxsZW5nZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IGFueTtcblxuICAvKipcbiAgICogQHBhcmFtIGFwaSBUaGUgQVBJIGNsaWVudCB1c2VkIHRvIGluaXRpYXRlIE1GQSBhcHByb3ZhbCB1c2luZyBGSURPXG4gICAqIEBwYXJhbSBtZmFJZCBUaGUgTUZBIHJlcXVlc3QgaWQuXG4gICAqIEBwYXJhbSBjaGFsbGVuZ2UgVGhlIGNoYWxsZW5nZSByZXR1cm5lZCBieSB0aGUgcmVtb3RlIGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpOiBBcGlDbGllbnQsIG1mYUlkOiBzdHJpbmcsIGNoYWxsZW5nZTogQXBpTWZhRmlkb0NoYWxsZW5nZSkge1xuICAgIHRoaXMuI2FwaUNsaWVudCA9IGFwaTtcbiAgICB0aGlzLm1mYUlkID0gbWZhSWQ7XG4gICAgdGhpcy5jaGFsbGVuZ2VJZCA9IGNoYWxsZW5nZS5jaGFsbGVuZ2VfaWQ7XG4gICAgdGhpcy5vcHRpb25zID0gcGFyc2VSZXF1ZXN0T3B0aW9ucyhjaGFsbGVuZ2Uub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW5zd2VycyB0aGlzIGNoYWxsZW5nZSBieSB1c2luZyB0aGUgYENyZWRlbnRpYWxzQ29udGFpbmVyYCBBUEkgdG8gZ2V0IGEgY3JlZGVudGlhbFxuICAgKiBiYXNlZCBvbiB0aGUgdGhlIHB1YmxpYyBrZXkgY3JlZGVudGlhbCByZXF1ZXN0IG9wdGlvbnMgZnJvbSB0aGlzIGNoYWxsZW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHZvdGUgQXBwcm92ZSBvciByZWplY3QgdGhlIE1GQSByZXF1ZXN0LiBEZWZhdWx0cyB0byBcImFwcHJvdmVcIi5cbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgTWZhUmVxdWVzdCBhZnRlciBhbnN3ZXJpbmdcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUNyZWRlbnRpYWxBbmRBbnN3ZXIodm90ZT86IE1mYVZvdGUpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBjcmVkID0gYXdhaXQgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogdGhpcy5vcHRpb25zIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFuc3dlcihjcmVkLCB2b3RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIHRoaXMgY2hhbGxlbmdlIHVzaW5nIGEgZ2l2ZW4gY3JlZGVudGlhbCBgY3JlZGAuXG4gICAqIFRvIG9idGFpbiB0aGlzIGNyZWRlbnRpYWwsIGZvciBleGFtcGxlLCBjYWxsXG4gICAqXG4gICAqIGBgYFxuICAgKiBjb25zdCBjcmVkID0gYXdhaXQgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCh7IHB1YmxpY0tleTogdGhpcy5vcHRpb25zIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGNyZWQgQ3JlZGVudGlhbCBjcmVhdGVkIGJ5IGNhbGxpbmcgdGhlIGBDcmVkZW50aWFsQ29udGFpbmVyYCdzIGBnZXRgIG1ldGhvZFxuICAgKiAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgcHVibGljIGtleSBjcmVkZW50aWFsIHJlcXVlc3Qgb3B0aW9ucyBmcm9tIHRoaXMgY2hhbGxlbmdlLlxuICAgKiBAcGFyYW0gdm90ZSBBcHByb3ZlIG9yIHJlamVjdC4gRGVmYXVsdHMgdG8gXCJhcHByb3ZlXCIuXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIE1mYVJlcXVlc3QgYWZ0ZXIgYW5zd2VyaW5nXG4gICAqL1xuICBhc3luYyBhbnN3ZXIoY3JlZDogYW55LCB2b3RlOiBNZmFWb3RlID0gXCJhcHByb3ZlXCIpOiBQcm9taXNlPE1mYVJlcXVlc3Q+IHtcbiAgICBjb25zdCBhbnN3ZXIgPSBjcmVkZW50aWFsVG9KU09OKGNyZWQpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLiNhcGlDbGllbnQubWZhVm90ZUZpZG9Db21wbGV0ZShcbiAgICAgIHRoaXMubWZhSWQsXG4gICAgICB2b3RlLFxuICAgICAgdGhpcy5jaGFsbGVuZ2VJZCxcbiAgICAgIGFuc3dlcixcbiAgICApO1xuICAgIHJldHVybiBuZXcgTWZhUmVxdWVzdCh0aGlzLiNhcGlDbGllbnQsIGRhdGEpO1xuICB9XG59XG4iXX0=
|