@cubist-labs/cubesigner-sdk 0.4.244 → 0.4.246
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/spec/env/gamma.json +5 -0
- package/dist/src/audit_log.d.ts +3 -3
- package/dist/src/client/api_client.d.ts +13 -6
- package/dist/src/client/api_client.d.ts.map +1 -1
- package/dist/src/client/api_client.js +23 -13
- package/dist/src/client/base_client.d.ts +5 -1
- package/dist/src/client/base_client.d.ts.map +1 -1
- package/dist/src/client/base_client.js +15 -9
- package/dist/src/client/session.d.ts +3 -1
- package/dist/src/client/session.d.ts.map +1 -1
- package/dist/src/client/session.js +7 -3
- package/dist/src/client.d.ts +12 -5
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +15 -4
- package/dist/src/diffie_hellman.js +2 -2
- package/dist/src/env.d.ts +7 -0
- package/dist/src/env.d.ts.map +1 -1
- package/dist/src/env.js +14 -1
- package/dist/src/key.js +3 -3
- package/dist/src/policy.d.ts +24 -7
- package/dist/src/policy.d.ts.map +1 -1
- package/dist/src/policy.js +34 -16
- package/dist/src/response.d.ts +3 -3
- package/dist/src/response.d.ts.map +1 -1
- package/dist/src/response.js +3 -6
- package/dist/src/schema.d.ts +186 -33
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +1 -1
- package/dist/src/schema_types.d.ts.map +1 -1
- package/dist/src/schema_types.js +2 -1
- package/dist/src/scopes.d.ts.map +1 -1
- package/dist/src/scopes.js +14 -11
- package/dist/src/user_export.d.ts +1 -1
- package/dist/src/user_export.js +3 -3
- package/dist/src/util.d.ts +7 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +30 -7
- package/package.json +1 -1
- package/src/client/api_client.ts +26 -14
- package/src/client/base_client.ts +12 -2
- package/src/client/session.ts +10 -3
- package/src/client.ts +17 -4
- package/src/diffie_hellman.ts +1 -1
- package/src/env.ts +17 -0
- package/src/key.ts +2 -2
- package/src/policy.ts +34 -16
- package/src/response.ts +6 -9
- package/src/schema.ts +202 -49
- package/src/schema_types.ts +1 -0
- package/src/scopes.ts +13 -10
- package/src/user_export.ts +2 -2
- package/src/util.ts +34 -8
package/dist/src/policy.js
CHANGED
|
@@ -28,7 +28,7 @@ async function uploadWasmFunction(apiClient, policy) {
|
|
|
28
28
|
// get the SHA-256 hash of the function to get the upload url.
|
|
29
29
|
const subtle = await (0, _1.loadSubtleCrypto)();
|
|
30
30
|
const hashBytes = await subtle.digest("SHA-256", policy);
|
|
31
|
-
const hash =
|
|
31
|
+
const hash = (0, _1.encodeToHex)(new Uint8Array(hashBytes));
|
|
32
32
|
// get the upload URL
|
|
33
33
|
const { signed_url } = await apiClient.wasmPolicyUpload({ hash });
|
|
34
34
|
// upload the wasm object
|
|
@@ -476,25 +476,43 @@ class C2FInvocation {
|
|
|
476
476
|
get response() {
|
|
477
477
|
return __classPrivateFieldGet(this, _C2FInvocation_data, "f").response;
|
|
478
478
|
}
|
|
479
|
-
/**
|
|
480
|
-
|
|
481
|
-
|
|
479
|
+
/**
|
|
480
|
+
* The standard output stream as raw bytes. Usually a UTF-8 encoded string,
|
|
481
|
+
* use {@link TextDecoder} to decode.
|
|
482
|
+
*
|
|
483
|
+
* @returns The standard output stream.
|
|
484
|
+
*/
|
|
485
|
+
get stdoutBytes() {
|
|
486
|
+
return (0, _1.decodeFromHex)(__classPrivateFieldGet(this, _C2FInvocation_data, "f").stdout);
|
|
482
487
|
}
|
|
483
|
-
/**
|
|
484
|
-
|
|
485
|
-
|
|
488
|
+
/**
|
|
489
|
+
* The standard error stream as raw bytes. Usually a UTF-8 encoded string, use
|
|
490
|
+
* {@link TextDecoder} to decode.
|
|
491
|
+
*
|
|
492
|
+
* @returns The standard error stream.
|
|
493
|
+
*/
|
|
494
|
+
get stderrBytes() {
|
|
495
|
+
return (0, _1.decodeFromHex)(__classPrivateFieldGet(this, _C2FInvocation_data, "f").stderr);
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* The standard output stream as a Buffer. Usually a UTF-8 encoded string.
|
|
499
|
+
*
|
|
500
|
+
* @returns The standard output stream.
|
|
501
|
+
* @deprecated Use {@link stdoutBytes} instead for browser compatibility.
|
|
502
|
+
*/
|
|
503
|
+
get stdout() {
|
|
504
|
+
// eslint-disable-next-line no-restricted-globals -- Buffer return type preserved for backwards compatibility
|
|
505
|
+
return Buffer.from(this.stdoutBytes);
|
|
486
506
|
}
|
|
487
|
-
// --------------------------------------------------------------------------
|
|
488
|
-
// -- INTERNAL --------------------------------------------------------------
|
|
489
|
-
// --------------------------------------------------------------------------
|
|
490
507
|
/**
|
|
491
|
-
*
|
|
508
|
+
* The standard error stream as a Buffer. Usually a UTF-8 encoded string.
|
|
492
509
|
*
|
|
493
|
-
* @
|
|
494
|
-
* @
|
|
510
|
+
* @returns The standard error stream.
|
|
511
|
+
* @deprecated Use {@link stderrBytes} instead for browser compatibility.
|
|
495
512
|
*/
|
|
496
|
-
|
|
497
|
-
|
|
513
|
+
get stderr() {
|
|
514
|
+
// eslint-disable-next-line no-restricted-globals -- Buffer return type preserved for backwards compatibility
|
|
515
|
+
return Buffer.from(this.stderrBytes);
|
|
498
516
|
}
|
|
499
517
|
/**
|
|
500
518
|
* Constructor.
|
|
@@ -513,4 +531,4 @@ _C2FInvocation_data = new WeakMap();
|
|
|
513
531
|
exports.NamedWasmPolicy = C2FFunction;
|
|
514
532
|
/** The result of invoking a named WASM policy. */
|
|
515
533
|
exports.PolicyInvocation = C2FInvocation;
|
|
516
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFtR0EsZ0RBdUJDO0FBbkdELHdCQUFxQztBQW1FckM7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFNBQW9CLEVBQ3BCLE1BQWtCO0lBRWxCLDhEQUE4RDtJQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUJBQWdCLEdBQUUsQ0FBQztJQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzRCxxQkFBcUI7SUFDckIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVsRSx5QkFBeUI7SUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLE1BQU07S0FDYixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBRW5EOztHQUVHO0FBQ0gsTUFBc0IsV0FBVztJQUkvQjs7Ozs7O09B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ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQXBpQ2xpZW50LFxuICBDMkZSZXNwb25zZSxcbiAgQ3ViZVNpZ25lclJlc3BvbnNlLFxuICBFZGl0UG9saWN5LFxuICBFbXB0eSxcbiAgSW52b2tlQzJGUmVzcG9uc2UsXG4gIEpzb25WYWx1ZSxcbiAgS2V5UG9saWN5LFxuICBLZXlQb2xpY3lSdWxlLFxuICBNZmFSZWNlaXB0cyxcbiAgUG9saWN5QXR0YWNoZWRUb0lkLFxuICBQb2xpY3lUeXBlLFxuICBSb2xlUG9saWN5LFxuICBSb2xlUG9saWN5UnVsZSxcbiAgVXBkYXRlUG9saWN5UmVxdWVzdCxcbiAgV2FzbVJ1bGUsXG4gIEFjZUF0dHJpYnV0ZSxcbiAgUG9saWN5QWN0aW9uLFxuICBBY2UsXG4gIFBvbGljeUluZm8sXG59IGZyb20gXCIuXCI7XG5cbmltcG9ydCB7IGxvYWRTdWJ0bGVDcnlwdG8gfSBmcm9tIFwiLlwiO1xuXG4vKipcbiAqIE5hbWVkIHBvbGljeSBydWxlIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJ1bGUgPSBLZXlQb2xpY3lSdWxlIHwgUm9sZVBvbGljeVJ1bGUgfCBXYXNtUnVsZTtcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB7QGxpbmsgUG9saWN5SW5mb30gd2l0aCBhIG1vcmUgZGV0YWlsZWQgYGFjbGAgdHlwZS5cbiAqL1xudHlwZSBOYW1lZFBvbGljeUluZm8gPSBQb2xpY3lJbmZvICYge1xuICBhY2w/OiBQb2xpY3lBY2w7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBuYW1lZCBrZXkgcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBLZXlQb2xpY3lJbmZvID0gTmFtZWRQb2xpY3lJbmZvICYge1xuICBwb2xpY3lfdHlwZTogXCJLZXlcIjtcbn07XG5cbi8qKlxuICogVGhlIHBvbGljeSBpbmZvIGZvciBhIG5hbWVkIHJvbGUgcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBSb2xlUG9saWN5SW5mbyA9IE5hbWVkUG9saWN5SW5mbyAmIHtcbiAgcG9saWN5X3R5cGU6IFwiUm9sZVwiO1xufTtcblxuLyoqXG4gKiBUaGUgcG9saWN5IGluZm8gZm9yIGEgbmFtZWQgd2FzbSBwb2xpY3kuXG4gKi9cbmV4cG9ydCB0eXBlIFdhc21Qb2xpY3lJbmZvID0gTmFtZWRQb2xpY3lJbmZvICYge1xuICBwb2xpY3lfdHlwZTogXCJXYXNtXCI7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEMyRkluZm8gPSBXYXNtUG9saWN5SW5mbztcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB2YWxpZCBuYW1lZCBwb2xpY3kgdmVyc2lvbiBzdHJpbmdzLlxuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uID0gYHYke251bWJlcn1gIHwgYGxhdGVzdGA7XG5cbi8qKiBBIHBvbGljeSBhY2Nlc3MgY29udHJvbCBlbnRyeS4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeUFjZSA9IEFjZTxQb2xpY3lBY3Rpb24sIFBvbGljeUN0eD47XG5cbi8qKiBBIHBvbGljeSBhY2Nlc3MgY29udHJvbCBsaXN0LiAqL1xuZXhwb3J0IHR5cGUgUG9saWN5QWNsID0gUG9saWN5QWNlW107XG5cbi8qKiBBZGRpdGlvbmFsIGNvbnRleHRzIHdoZW4gdXNpbmcgcG9saWNpZXMuICovXG5leHBvcnQgdHlwZSBQb2xpY3lDdHggPSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2VzIChrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcykgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgZW50cnlcbiAgICogYXBwbGllcyB0by5cbiAgICovXG4gIHJlc291cmNlczogQWNlQXR0cmlidXRlPFBvbGljeVJlc291cmNlPjtcbn07XG5cbi8qKiBBIHJlc291cmNlIGEgcG9saWN5IGlzIGludm9rZWQgd2l0aCBvciBhdHRhY2hlZCB0by4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJlc291cmNlID1cbiAgLyoqIEEga2V5IG9yIHJvbGUgaWQuICovXG4gIHwgc3RyaW5nXG4gIC8qKiBLZXlzIGF0dGFjaGVkIHRvIHJvbGVzLiAqL1xuICB8IHsga2V5X2lkczogXCIqXCIgfCBzdHJpbmdbXTsgcm9sZV9pZHM6IFwiKlwiIHwgc3RyaW5nW10gfTtcblxuLyoqXG4gKiBVcGxvYWQgdGhlIGdpdmVuIFdhc20gQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICogQHBhcmFtIHBvbGljeSBUaGUgV2FzbSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBXYXNtIGZ1bmN0aW9uIG9iamVjdCBoYXNoIHRvIHVzZSBmb3IgY3JlYXRpbmcvdXBkYXRpbmcgQzJGIHBvbGljaWVzLlxuICogQHRocm93cyBpZiB1cGxvYWRpbmcgdGhlIHBvbGljeSBmYWlscy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBsb2FkV2FzbUZ1bmN0aW9uKFxuICBhcGlDbGllbnQ6IEFwaUNsaWVudCxcbiAgcG9saWN5OiBVaW50OEFycmF5LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gZ2V0IHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdXBsb2FkIHVybC5cbiAgY29uc3Qgc3VidGxlID0gYXdhaXQgbG9hZFN1YnRsZUNyeXB0bygpO1xuICBjb25zdCBoYXNoQnl0ZXMgPSBhd2FpdCBzdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBwb2xpY3kpO1xuICBjb25zdCBoYXNoID0gXCIweFwiICsgQnVmZmVyLmZyb20oaGFzaEJ5dGVzKS50b1N0cmluZyhcImhleFwiKTtcblxuICAvLyBnZXQgdGhlIHVwbG9hZCBVUkxcbiAgY29uc3QgeyBzaWduZWRfdXJsIH0gPSBhd2FpdCBhcGlDbGllbnQud2FzbVBvbGljeVVwbG9hZCh7IGhhc2ggfSk7XG5cbiAgLy8gdXBsb2FkIHRoZSB3YXNtIG9iamVjdFxuICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2goc2lnbmVkX3VybCwge1xuICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICBib2R5OiBwb2xpY3ksXG4gIH0pO1xuXG4gIGlmICghcmVzcC5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwbG9hZCBmdW5jdGlvbiB3aXRoIHN0YXR1czogJHtyZXNwLnN0YXR1c306ICR7cmVzcC5zdGF0dXNUZXh0fWApO1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cbi8qKlxuICogVXBsb2FkIHRoZSBnaXZlbiBXYXNtIHBvbGljeS5cbiAqXG4gKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAqIEBwYXJhbSBwb2xpY3kgVGhlIFdhc20gZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgV2FzbSBmdW5jdGlvbiBvYmplY3QgaGFzaCB0byB1c2UgZm9yIGNyZWF0aW5nL3VwZGF0aW5nIEMyRiBwb2xpY2llcy5cbiAqIEB0aHJvd3MgaWYgdXBsb2FkaW5nIHRoZSBwb2xpY3kgZmFpbHMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZFdhc21Qb2xpY3kgPSB1cGxvYWRXYXNtRnVuY3Rpb247XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIHNoYXJlZCBtZXRob2RzIGJldHdlZW4ga2V5LCByb2xlIGFuZCBXYXNtIHBvbGljaWVzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmFtZWRQb2xpY3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBpQ2xpZW50OiBBcGlDbGllbnQ7XG4gIHByb3RlY3RlZCBkYXRhOiBOYW1lZFBvbGljeUluZm87XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbmFtZWQgcG9saWN5IGZyb20gYSBwb2xpY3kgaW5mby5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgYXBpIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBpbmZvIFRoZSBwb2xpY3kgaW5mby5cbiAgICogQHJldHVybnMgVGhlIG5hbWVkIHBvbGljeSBvYmplY3QgZm9yIHRoZSBnaXZlbiBpbmZvLlxuICAgKi9cbiAgc3RhdGljIGZyb21JbmZvKGFwaUNsaWVudDogQXBpQ2xpZW50LCBpbmZvOiBQb2xpY3lJbmZvKTogTmFtZWRQb2xpY3kge1xuICAgIHN3aXRjaCAoaW5mby5wb2xpY3lfdHlwZSkge1xuICAgICAgY2FzZSBcIktleVwiOlxuICAgICAgICByZXR1cm4gbmV3IE5hbWVkS2V5UG9saWN5KGFwaUNsaWVudCwgaW5mbyBhcyBLZXlQb2xpY3lJbmZvKTtcbiAgICAgIGNhc2UgXCJSb2xlXCI6XG4gICAgICAgIHJldHVybiBuZXcgTmFtZWRSb2xlUG9saWN5KGFwaUNsaWVudCwgaW5mbyBhcyBSb2xlUG9saWN5SW5mbyk7XG4gICAgICBjYXNlIFwiV2FzbVwiOlxuICAgICAgICByZXR1cm4gbmV3IEMyRkZ1bmN0aW9uKGFwaUNsaWVudCwgaW5mbyBhcyBDMkZJbmZvKTtcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHBvbGljeSBpZCAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBvbGljeV9pZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgcG9saWN5IHR5cGUgKi9cbiAgZ2V0IHBvbGljeVR5cGUoKTogUG9saWN5VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wb2xpY3lfdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBwb2xpY3kgdmVyc2lvbiB0byBnZXQuXG4gICAqIEByZXR1cm5zIFRoZSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqL1xuICBhc3luYyB2ZXJzaW9uKHZlcnNpb246IFZlcnNpb24pOiBQcm9taXNlPE5hbWVkUG9saWN5UnVsZXM+IHtcbiAgICBsZXQgdmVyc2lvbkluZm87XG5cbiAgICBpZiAodmVyc2lvbiA9PSBgdiR7dGhpcy5kYXRhLnZlcnNpb259YCkge1xuICAgICAgdmVyc2lvbkluZm8gPSB0aGlzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZlcnNpb25JbmZvID0gKGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCB2ZXJzaW9uKSkgYXMgTmFtZWRQb2xpY3lJbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmFtZWRQb2xpY3lSdWxlcyh0aGlzLmFwaUNsaWVudCwgdmVyc2lvbkluZm8pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqL1xuICBhc3luYyBsYXRlc3QoKTogUHJvbWlzZTxOYW1lZFBvbGljeVJ1bGVzPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goXCJsYXRlc3RcIik7XG4gICAgcmV0dXJuIG5ldyBOYW1lZFBvbGljeVJ1bGVzKHRoaXMuYXBpQ2xpZW50LCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IG5hbWUgb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBuYW1lLlxuICAgKi9cbiAgYXN5bmMgbmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgbmFtZSBmb3IgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5ldyBwb2xpY3kgbmFtZS5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldE5hbWUobmFtZTogc3RyaW5nLCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IG5hbWUgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgY3VycmVudCBvd25lciBvZiB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdXNlciBpZCBvZiB0aGUgcG9saWN5IG93bmVyLlxuICAgKiBAZXhhbXBsZSBVc2VyI2MzYjkzNzljLTRlOGMtNDIxNi1iZDBhLTY1YWNlNTNjZjk4ZlxuICAgKi9cbiAgYXN5bmMgb3duZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLm93bmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5ldyBvd25lciBmb3IgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIG93bmVyIFRoZSBuZXcgb3duZXIgb2YgdGhlIHBvbGljeS5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldE93bmVyKG93bmVyOiBzdHJpbmcsIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgb3duZXIgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgbWV0YWRhdGEuXG4gICAqL1xuICBhc3luYyBtZXRhZGF0YSgpOiBQcm9taXNlPEpzb25WYWx1ZT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEubWV0YWRhdGEgYXMgSnNvblZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcgbWV0YWRhdGEgdmFsdWUgZm9yIHRoZSBuYW1lZCBwb2xpY3kgKG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyB2YWx1ZSkuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSBUaGUgbmV3IG1ldGFkYXRhIGZvciB0aGUgbmFtZWQgcG9saWN5LlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgc2V0TWV0YWRhdGEobWV0YWRhdGE6IEpzb25WYWx1ZSwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBtZXRhZGF0YSB9LCBtZmFSZWNlaXB0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbmQgcmV0dXJuIHRoZSBlZGl0IHBvbGljeSBmb3IgdGhlIG5hbWVkIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGVkaXQgcG9saWN5IGZvciB0aGlzIG5hbWVkIHBvbGljeS5cbiAgICovXG4gIGFzeW5jIGVkaXRQb2xpY3koKTogUHJvbWlzZTxFZGl0UG9saWN5IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5lZGl0X3BvbGljeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgZWRpdCBwb2xpY3kgZm9yIHRoZSBuYW1lZCBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0UG9saWN5IFRoZSBuZXcgZWRpdCBwb2xpY3kuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRFZGl0UG9saWN5KGVkaXRQb2xpY3k6IEVkaXRQb2xpY3ksIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgZWRpdF9wb2xpY3k6IGVkaXRQb2xpY3kgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgYWNjZXNzIGNvbnRyb2wgZW50cmllcyBmb3IgdGhlIG5hbWVkIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjY2VzcyBjb250cm9sIGVudHJpZXMgZm9yIHRoaXMgbmFtZWQgcG9saWN5LlxuICAgKi9cbiAgYXN5bmMgYWNsKCk6IFByb21pc2U8UG9saWN5QWNsIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5hY2w7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBuZXcgYWNjZXNzIGNvbnRyb2wgZW50cmllcyBmb3IgdGhlIG5hbWVkIHBvbGljeSAob3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nIGVudHJpZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gYWNsIFRoZSBhY2Nlc3MgY29udHJvbCBlbnRyaWVzIHRvIHNldC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldEFjbChhY2w6IFBvbGljeUFjbCwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBhY2wgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIGFsbCBrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcyB0aGF0IGFsbCB2ZXJzaW9ucyBvZiB0aGlzIHBvbGljeVxuICAgKiBhcmUgYXR0YWNoZWQgdG8uXG4gICAqL1xuICBhc3luYyBhbGxBdHRhY2hlZCgpOiBQcm9taXNlPFBvbGljeUF0dGFjaGVkVG9JZFtdPiB7XG4gICAgLy8gdGhlcmUgaXMgbm8gc2luZ2xlLWNhbGwgd2F5IHRvIGFjaGlldmUgdGhpcy4gU28gaW5zdGVhZCwgd2VcbiAgICAvLyAxLiBHZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwb2xpY3lcbiAgICAvLyAyLiBGb3IgYWxsIHZlcnNpb25zIGB2MGAgdG8gYGxhdGVzdGAsIGZldGNoIHRoZSBwb2xpY3kgaW5mb1xuICAgIC8vIDMuIEpvaW4gYWxsIHBvbGljeSBgYXR0YWNoZWRfdG9gIGFycmF5c1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKFwibGF0ZXN0XCIpO1xuXG4gICAgY29uc3QgbGF0ZXN0ID0gZGF0YS52ZXJzaW9uO1xuICAgIGNvbnN0IHZlcnNpb25zID0gQXJyYXkuZnJvbShBcnJheShsYXRlc3QgKyAxKS5rZXlzKCkpO1xuICAgIGNvbnN0IGJhdGNoU2l6ZSA9IDEwO1xuICAgIGxldCBhbGxBdHRhY2hlZDogUG9saWN5QXR0YWNoZWRUb0lkW10gPSBbXTtcblxuICAgIGZvciAobGV0IGJhdGNoID0gMDsgYmF0Y2ggPCB2ZXJzaW9ucy5sZW5ndGg7IGJhdGNoICs9IGJhdGNoU2l6ZSkge1xuICAgICAgY29uc3QgcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdmVyc2lvbnMuc2xpY2UoYmF0Y2gsIGJhdGNoICsgYmF0Y2hTaXplKS5tYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5hcGlDbGllbnQucG9saWN5R2V0KHRoaXMuaWQsIGB2JHt2ZXJzaW9ufWApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBhbGxBdHRhY2hlZCA9IGFsbEF0dGFjaGVkLmNvbmNhdChycy5mbGF0TWFwKChwb2xpY3kpID0+IHBvbGljeS5hdHRhY2hlZF90bykpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxBdHRhY2hlZC5jb25jYXQoZGF0YS5hdHRhY2hlZF90byk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHRoaXMgcG9saWN5LlxuICAgKlxuICAgKiBUaGlzIGNhbiBmYWlsIGlmIHRoZSBwb2xpY3kgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYW55IGtleSwgcm9sZSwgb3Iga2V5IGluIHJvbGUuXG4gICAqXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAcmV0dXJucyBBIHJlc3BvbnNlIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcHJvdmUgTUZBIGlmIG5lZWRlZFxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBkZWxldGUobWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8RW1wdHk+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeURlbGV0ZSh0aGlzLmlkLCBtZmFSZWNlaXB0KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIGRhdGE6IE5hbWVkUG9saWN5SW5mbykge1xuICAgIHRoaXMuYXBpQ2xpZW50ID0gYXBpQ2xpZW50O1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IFRoZSBKU09OIHJlcXVlc3QgdG8gc2VuZCB0byB0aGUgQVBJIHNlcnZlci5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGUoXG4gICAgcmVxdWVzdDogVXBkYXRlUG9saWN5UmVxdWVzdCxcbiAgICBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMsXG4gICk6IFByb21pc2U8TmFtZWRQb2xpY3lJbmZvPiB7XG4gICAgY29uc3QgcmVzcCA9IGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeVVwZGF0ZSh0aGlzLmlkLCByZXF1ZXN0LCBtZmFSZWNlaXB0KTtcbiAgICB0aGlzLmRhdGEgPSByZXNwLmRhdGEoKSBhcyBOYW1lZFBvbGljeUluZm87XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgcG9saWN5IGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgcG9saWN5IHRvIGZldGNoLiBEZWZhdWx0cyB0byBcImxhdGVzdFwiLlxuICAgKiBAcmV0dXJucyBUaGUgcG9saWN5IGluZm9ybWF0aW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaCh2ZXJzaW9uOiBWZXJzaW9uID0gXCJsYXRlc3RcIik6IFByb21pc2U8TmFtZWRQb2xpY3lJbmZvPiB7XG4gICAgdGhpcy5kYXRhID0gKGF3YWl0IHRoaXMuYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCB2ZXJzaW9uKSkgYXMgTmFtZWRQb2xpY3lJbmZvO1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmFtZWQga2V5IHBvbGljeS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hbWVkS2V5UG9saWN5IGV4dGVuZHMgTmFtZWRQb2xpY3kge1xuICBvdmVycmlkZSBkYXRhOiBLZXlQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBvbGljeSB3aXRoIG5ldyBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHJ1bGVzIFRoZSBuZXcgcnVsZXMgdG8gdXBkYXRlIHRoZSBwb2xpY3kgd2l0aC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldFJ1bGVzKHJ1bGVzOiBLZXlQb2xpY3ksIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgcnVsZXMgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIGRhdGE6IEtleVBvbGljeUluZm8pIHtcbiAgICBzdXBlcihhcGlDbGllbnQsIGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmFtZWQgcm9sZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lZFJvbGVQb2xpY3kgZXh0ZW5kcyBOYW1lZFBvbGljeSB7XG4gIG92ZXJyaWRlIGRhdGE6IFJvbGVQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBvbGljeSB3aXRoIG5ldyBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtIHJ1bGVzIFRoZSBuZXcgcnVsZXMgdG8gdXBkYXRlIHRoZSBwb2xpY3kgd2l0aC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldFJ1bGVzKHJ1bGVzOiBSb2xlUG9saWN5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IHJ1bGVzIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBBUEkgc2VydmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBSb2xlUG9saWN5SW5mbykge1xuICAgIHN1cGVyKGFwaUNsaWVudCwgZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVwcmVzZW50YXRpb24gb2YgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24gKEMyRikuXG4gKlxuICogVGhpcyBjbGFzcyBleHRlbmRzIE5hbWVkUG9saWN5IGJlY2F1c2UgQzJGIGZ1bmN0aW9ucyBjYW4gYmUgYXR0YWNoZWRcbiAqIHRvIGtleXMgYW5kIHJvbGVzIGxpa2UgYSBuYW1lZCBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBDMkZGdW5jdGlvbiBleHRlbmRzIE5hbWVkUG9saWN5IHtcbiAgb3ZlcnJpZGUgZGF0YTogQzJGSW5mbztcblxuICAvKipcbiAgICogVXBkYXRlIHRoaXMgQzJGIGZ1bmN0aW9uIHdpdGggYSBuZXcgV2FzbSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgbmV3IFdhc20gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIHVwbG9hZGluZyB0aGUgZnVuY3Rpb24gZmFpbHMuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICBhc3luYyBzZXRXYXNtRnVuY3Rpb24ocG9saWN5OiBVaW50OEFycmF5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICAvLyB1cGxvYWQgdGhlIHBvbGljeSBvYmplY3RcbiAgICBjb25zdCBoYXNoID0gYXdhaXQgdXBsb2FkV2FzbUZ1bmN0aW9uKHRoaXMuYXBpQ2xpZW50LCBwb2xpY3kpO1xuXG4gICAgLy8gdXBkYXRlIHRoaXMgcG9saWN5IHdpdGggdGhlIG5ldyBwb2xpY3kgdmVyc2lvbi5cbiAgICBjb25zdCBib2R5OiBVcGRhdGVQb2xpY3lSZXF1ZXN0ID0geyBydWxlczogW3sgaGFzaCB9XSB9O1xuICAgIHRoaXMuZGF0YSA9IChhd2FpdCB0aGlzLnVwZGF0ZShib2R5LCBtZmFSZWNlaXB0KSkgYXMgQzJGSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhpcyBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBrZXlJZCBUaGUgb3B0aW9uYWwga2V5IGlkIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoLlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gdG8gaW52b2tlLiBEZWZhdWx0cyB0byBcImxhdGVzdFwiLlxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgb3B0aW9uYWwgc2lnbiByZXF1ZXN0IGJvZHkgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gcm9sZUlkIFRoZSBvcHRpb25hbCByb2xlIGlkIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBieS5cbiAgICogSWYgYHVuZGVmaW5lZGAsIHRoZSBwb2xpY3kgd2lsbCBiZSBpbnZva2VkIGJ5IHRoZSB1c2VyIHNlc3Npb24uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgYXN5bmMgaW52b2tlKFxuICAgIGtleUlkPzogc3RyaW5nLFxuICAgIHZlcnNpb246IFZlcnNpb24gPSBcImxhdGVzdFwiLFxuICAgIHJlcXVlc3Q/OiBKc29uVmFsdWUsXG4gICAgcm9sZUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEMyRkludm9jYXRpb24+IHtcbiAgICAvLyBUT0RPIElkZWFsbHksIGB2ZXJzaW9uYCBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlci4gQnV0IGZvciBiYWNrd2FyZHNcbiAgICAvLyBjb21wYXRpYmlsaXR5LCB3ZSBrZWVwIGBrZXlJZGAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBmb3Igbm93LlxuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lJbnZva2UodGhpcy5pZCwgdmVyc2lvbiwge1xuICAgICAga2V5X2lkOiBrZXlJZCxcbiAgICAgIHJlcXVlc3QsXG4gICAgICByb2xlX2lkOiByb2xlSWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQb2xpY3lJbnZvY2F0aW9uKHJlc3ApO1xuICB9XG5cbiAgLy8gQmFja3dhcmRzIGNvbXBhYmlsaXR5IHdpdGggTmFtZWQgV2FzbSBQb2xpY3kgbmFtZXNcbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcG9saWN5IHdpdGggdGhlIG5ldyBXYXNtIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgbmV3IFdhc20gcG9saWN5IG9iamVjdC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgdXBsb2FkaW5nIHRoZSBwb2xpY3kgb2JqZWN0IGZhaWxzLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgc2V0V2FzbVBvbGljeSA9IHRoaXMuc2V0V2FzbUZ1bmN0aW9uO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogQzJGSW5mbykge1xuICAgIHN1cGVyKGFwaUNsaWVudCwgZGF0YSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIG5hbWVkIHBvbGljeS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hbWVkUG9saWN5UnVsZXMge1xuICAvKiogVGhlIEN1YmVTaWduZXIgaW5zdGFuY2UgdGhhdCB0aGlzIHBvbGljeSBpcyBhc3NvY2lhdGVkIHdpdGggKi9cbiAgcmVhZG9ubHkgI2FwaUNsaWVudDogQXBpQ2xpZW50O1xuICAjZGF0YTogTmFtZWRQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQGV4YW1wbGUgTmFtZWRQb2xpY3kjYTRhNDVjYzItMDY0Mi00Yzk4LWI2YmQtMGRhMzQ3ZDYwOGE0XG4gICAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0YS5wb2xpY3lfaWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHZlcnNpb24gb2YgdGhlIHBvbGljeSB0aGlzIG9iamVjdCBjb250YWlucy5cbiAgICovXG4gIGdldCB2ZXJzaW9uKCk6IFZlcnNpb24ge1xuICAgIHJldHVybiBgdiR7dGhpcy4jZGF0YS52ZXJzaW9ufWA7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBydWxlcy5cbiAgICpcbiAgICogQGV4YW1wbGUgWyBcIkFzc2VydEVyYzIwVHhcIiBdXG4gICAqL1xuICBnZXQgcnVsZXMoKTogUG9saWN5UnVsZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0YS5ydWxlcyBhcyBQb2xpY3lSdWxlW107XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIGFsbCBrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcyB0aGlzIHZlcnNpb24gb2YgdGhlIHBvbGljeVxuICAgKiAgICAgICAgICBpcyBhdHRhY2hlZCB0by5cbiAgICovXG4gIGFzeW5jIGFsbEF0dGFjaGVkKCk6IFByb21pc2U8UG9saWN5QXR0YWNoZWRUb0lkW10+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLmF0dGFjaGVkX3RvO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBBUEkgc2VydmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBOYW1lZFBvbGljeUluZm8pIHtcbiAgICB0aGlzLiNhcGlDbGllbnQgPSBhcGlDbGllbnQ7XG4gICAgdGhpcy4jZGF0YSA9IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoKCk6IFByb21pc2U8TmFtZWRQb2xpY3lJbmZvPiB7XG4gICAgdGhpcy4jZGF0YSA9IChhd2FpdCB0aGlzLiNhcGlDbGllbnQucG9saWN5R2V0KHRoaXMuaWQsIHRoaXMudmVyc2lvbikpIGFzIE5hbWVkUG9saWN5SW5mbztcbiAgICByZXR1cm4gdGhpcy4jZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgaW52b2tpbmcgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDMkZJbnZvY2F0aW9uIHtcbiAgcmVhZG9ubHkgI2RhdGE6IEludm9rZUMyRlJlc3BvbnNlO1xuXG4gIC8qKiBAcmV0dXJucyBUaGUgcG9saWN5IHJlc3BvbnNlIGl0c2VsZi4gKi9cbiAgZ2V0IHJlc3BvbnNlKCk6IEMyRlJlc3BvbnNlIHtcbiAgICByZXR1cm4gdGhpcy4jZGF0YS5yZXNwb25zZTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbS4gVXN1YWxseSBhIFVURi04IGVuY29kZWQgc3RyaW5nLiAqL1xuICBnZXQgc3Rkb3V0KCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUhleCh0aGlzLiNkYXRhLnN0ZG91dCk7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4gVXN1YWxseSBhIFVURi04IGVuY29kZWQgc3RyaW5nLiAqL1xuICBnZXQgc3RkZXJyKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUhleCh0aGlzLiNkYXRhLnN0ZGVycik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjb252ZXJ0aW5nIGhleC1lbmNvZGVkIGRhdGEgdG8gYSBgQnVmZmVyYC5cbiAgICpcbiAgICogQHBhcmFtIGhleCBUaGUgaGV4LWVuY29kZWQgZGF0YS5cbiAgICogQHJldHVybnMgVGhlIGRhdGEuXG4gICAqL1xuICBwcml2YXRlIGZyb21IZXgoaGV4OiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShoZXguc3RhcnRzV2l0aChcIjB4XCIpID8gaGV4LnNsaWNlKDIpIDogaGV4LCBcImhleFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhOiBJbnZva2VDMkZSZXNwb25zZSkge1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG59XG5cbi8vIEJhY2t3YXJkcyBjb21wYWJpbGl0eSB3aXRoIE5hbWVkIFdhc20gUG9saWN5IG5hbWVzXG5cbi8qKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgV2FzbSBwb2xpY3kuICovXG5leHBvcnQgdHlwZSBOYW1lZFdhc21Qb2xpY3kgPSBDMkZGdW5jdGlvbjtcbi8qKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgV2FzbSBwb2xpY3kuICovXG5leHBvcnQgY29uc3QgTmFtZWRXYXNtUG9saWN5ID0gQzJGRnVuY3Rpb247XG5cbi8qKiBUaGUgcmVzdWx0IG9mIGludm9raW5nIGEgbmFtZWQgV0FTTSBwb2xpY3kuICovXG5leHBvcnQgdHlwZSBQb2xpY3lJbnZvY2F0aW9uID0gQzJGSW52b2NhdGlvbjtcbi8qKiBUaGUgcmVzdWx0IG9mIGludm9raW5nIGEgbmFtZWQgV0FTTSBwb2xpY3kuICovXG5leHBvcnQgY29uc3QgUG9saWN5SW52b2NhdGlvbiA9IEMyRkludm9jYXRpb247XG4iXX0=
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFtR0EsZ0RBdUJDO0FBbkdELHdCQUFpRTtBQW1FakU7Ozs7Ozs7O0dBUUc7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFNBQW9CLEVBQ3BCLE1BQWtCO0lBRWxCLDhEQUE4RDtJQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbUJBQWdCLEdBQUUsQ0FBQztJQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUEsY0FBVyxFQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFcEQscUJBQXFCO0lBQ3JCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbEUseUJBQXlCO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUNuQyxNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUVuRDs7R0FFRztBQUNILE1BQXNCLFdBQVc7SUFJL0I7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFFB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RlJlc3BvbnNlLFxuICBDdWJlU2lnbmVyUmVzcG9uc2UsXG4gIEVkaXRQb2xpY3ksXG4gIEVtcHR5LFxuICBJbnZva2VDMkZSZXNwb25zZSxcbiAgSnNvblZhbHVlLFxuICBLZXlQb2xpY3ksXG4gIEtleVBvbGljeVJ1bGUsXG4gIE1mYVJlY2VpcHRzLFxuICBQb2xpY3lBdHRhY2hlZFRvSWQsXG4gIFBvbGljeVR5cGUsXG4gIFJvbGVQb2xpY3ksXG4gIFJvbGVQb2xpY3lSdWxlLFxuICBVcGRhdGVQb2xpY3lSZXF1ZXN0LFxuICBXYXNtUnVsZSxcbiAgQWNlQXR0cmlidXRlLFxuICBQb2xpY3lBY3Rpb24sXG4gIEFjZSxcbiAgUG9saWN5SW5mbyxcbn0gZnJvbSBcIi5cIjtcblxuaW1wb3J0IHsgbG9hZFN1YnRsZUNyeXB0bywgZW5jb2RlVG9IZXgsIGRlY29kZUZyb21IZXggfSBmcm9tIFwiLlwiO1xuXG4vKipcbiAqIE5hbWVkIHBvbGljeSBydWxlIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJ1bGUgPSBLZXlQb2xpY3lSdWxlIHwgUm9sZVBvbGljeVJ1bGUgfCBXYXNtUnVsZTtcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB7QGxpbmsgUG9saWN5SW5mb30gd2l0aCBhIG1vcmUgZGV0YWlsZWQgYGFjbGAgdHlwZS5cbiAqL1xudHlwZSBOYW1lZFBvbGljeUluZm8gPSBQb2xpY3lJbmZvICYge1xuICBhY2w/OiBQb2xpY3lBY2w7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBuYW1lZCBrZXkgcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBLZXlQb2xpY3lJbmZvID0gTmFtZWRQb2xpY3lJbmZvICYge1xuICBwb2xpY3lfdHlwZTogXCJLZXlcIjtcbn07XG5cbi8qKlxuICogVGhlIHBvbGljeSBpbmZvIGZvciBhIG5hbWVkIHJvbGUgcG9saWN5LlxuICovXG5leHBvcnQgdHlwZSBSb2xlUG9saWN5SW5mbyA9IE5hbWVkUG9saWN5SW5mbyAmIHtcbiAgcG9saWN5X3R5cGU6IFwiUm9sZVwiO1xufTtcblxuLyoqXG4gKiBUaGUgcG9saWN5IGluZm8gZm9yIGEgbmFtZWQgd2FzbSBwb2xpY3kuXG4gKi9cbmV4cG9ydCB0eXBlIFdhc21Qb2xpY3lJbmZvID0gTmFtZWRQb2xpY3lJbmZvICYge1xuICBwb2xpY3lfdHlwZTogXCJXYXNtXCI7XG59O1xuXG4vKipcbiAqIFRoZSBwb2xpY3kgaW5mbyBmb3IgYSBDb25maWRlbnRpYWwgQ2xvdWQgRnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEMyRkluZm8gPSBXYXNtUG9saWN5SW5mbztcblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlIGZvciB2YWxpZCBuYW1lZCBwb2xpY3kgdmVyc2lvbiBzdHJpbmdzLlxuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uID0gYHYke251bWJlcn1gIHwgYGxhdGVzdGA7XG5cbi8qKiBBIHBvbGljeSBhY2Nlc3MgY29udHJvbCBlbnRyeS4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeUFjZSA9IEFjZTxQb2xpY3lBY3Rpb24sIFBvbGljeUN0eD47XG5cbi8qKiBBIHBvbGljeSBhY2Nlc3MgY29udHJvbCBsaXN0LiAqL1xuZXhwb3J0IHR5cGUgUG9saWN5QWNsID0gUG9saWN5QWNlW107XG5cbi8qKiBBZGRpdGlvbmFsIGNvbnRleHRzIHdoZW4gdXNpbmcgcG9saWNpZXMuICovXG5leHBvcnQgdHlwZSBQb2xpY3lDdHggPSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2VzIChrZXlzLCByb2xlcywgYW5kIGtleS1pbi1yb2xlcykgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgZW50cnlcbiAgICogYXBwbGllcyB0by5cbiAgICovXG4gIHJlc291cmNlczogQWNlQXR0cmlidXRlPFBvbGljeVJlc291cmNlPjtcbn07XG5cbi8qKiBBIHJlc291cmNlIGEgcG9saWN5IGlzIGludm9rZWQgd2l0aCBvciBhdHRhY2hlZCB0by4gKi9cbmV4cG9ydCB0eXBlIFBvbGljeVJlc291cmNlID1cbiAgLyoqIEEga2V5IG9yIHJvbGUgaWQuICovXG4gIHwgc3RyaW5nXG4gIC8qKiBLZXlzIGF0dGFjaGVkIHRvIHJvbGVzLiAqL1xuICB8IHsga2V5X2lkczogXCIqXCIgfCBzdHJpbmdbXTsgcm9sZV9pZHM6IFwiKlwiIHwgc3RyaW5nW10gfTtcblxuLyoqXG4gKiBVcGxvYWQgdGhlIGdpdmVuIFdhc20gQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICogQHBhcmFtIHBvbGljeSBUaGUgV2FzbSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBXYXNtIGZ1bmN0aW9uIG9iamVjdCBoYXNoIHRvIHVzZSBmb3IgY3JlYXRpbmcvdXBkYXRpbmcgQzJGIHBvbGljaWVzLlxuICogQHRocm93cyBpZiB1cGxvYWRpbmcgdGhlIHBvbGljeSBmYWlscy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBsb2FkV2FzbUZ1bmN0aW9uKFxuICBhcGlDbGllbnQ6IEFwaUNsaWVudCxcbiAgcG9saWN5OiBVaW50OEFycmF5LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gZ2V0IHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgdXBsb2FkIHVybC5cbiAgY29uc3Qgc3VidGxlID0gYXdhaXQgbG9hZFN1YnRsZUNyeXB0bygpO1xuICBjb25zdCBoYXNoQnl0ZXMgPSBhd2FpdCBzdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLCBwb2xpY3kpO1xuICBjb25zdCBoYXNoID0gZW5jb2RlVG9IZXgobmV3IFVpbnQ4QXJyYXkoaGFzaEJ5dGVzKSk7XG5cbiAgLy8gZ2V0IHRoZSB1cGxvYWQgVVJMXG4gIGNvbnN0IHsgc2lnbmVkX3VybCB9ID0gYXdhaXQgYXBpQ2xpZW50Lndhc21Qb2xpY3lVcGxvYWQoeyBoYXNoIH0pO1xuXG4gIC8vIHVwbG9hZCB0aGUgd2FzbSBvYmplY3RcbiAgY29uc3QgcmVzcCA9IGF3YWl0IGZldGNoKHNpZ25lZF91cmwsIHtcbiAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgYm9keTogcG9saWN5LFxuICB9KTtcblxuICBpZiAoIXJlc3Aub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB1cGxvYWQgZnVuY3Rpb24gd2l0aCBzdGF0dXM6ICR7cmVzcC5zdGF0dXN9OiAke3Jlc3Auc3RhdHVzVGV4dH1gKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufVxuXG4vKipcbiAqIFVwbG9hZCB0aGUgZ2l2ZW4gV2FzbSBwb2xpY3kuXG4gKlxuICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gKiBAcGFyYW0gcG9saWN5IFRoZSBXYXNtIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIFdhc20gZnVuY3Rpb24gb2JqZWN0IGhhc2ggdG8gdXNlIGZvciBjcmVhdGluZy91cGRhdGluZyBDMkYgcG9saWNpZXMuXG4gKiBAdGhyb3dzIGlmIHVwbG9hZGluZyB0aGUgcG9saWN5IGZhaWxzLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRXYXNtUG9saWN5ID0gdXBsb2FkV2FzbUZ1bmN0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIGZvciBzaGFyZWQgbWV0aG9kcyBiZXR3ZWVuIGtleSwgcm9sZSBhbmQgV2FzbSBwb2xpY2llcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hbWVkUG9saWN5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaUNsaWVudDogQXBpQ2xpZW50O1xuICBwcm90ZWN0ZWQgZGF0YTogTmFtZWRQb2xpY3lJbmZvO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIG5hbWVkIHBvbGljeSBmcm9tIGEgcG9saWN5IGluZm8uXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIGFwaSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gaW5mbyBUaGUgcG9saWN5IGluZm8uXG4gICAqIEByZXR1cm5zIFRoZSBuYW1lZCBwb2xpY3kgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gaW5mby5cbiAgICovXG4gIHN0YXRpYyBmcm9tSW5mbyhhcGlDbGllbnQ6IEFwaUNsaWVudCwgaW5mbzogUG9saWN5SW5mbyk6IE5hbWVkUG9saWN5IHtcbiAgICBzd2l0Y2ggKGluZm8ucG9saWN5X3R5cGUpIHtcbiAgICAgIGNhc2UgXCJLZXlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBOYW1lZEtleVBvbGljeShhcGlDbGllbnQsIGluZm8gYXMgS2V5UG9saWN5SW5mbyk7XG4gICAgICBjYXNlIFwiUm9sZVwiOlxuICAgICAgICByZXR1cm4gbmV3IE5hbWVkUm9sZVBvbGljeShhcGlDbGllbnQsIGluZm8gYXMgUm9sZVBvbGljeUluZm8pO1xuICAgICAgY2FzZSBcIldhc21cIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDMkZGdW5jdGlvbihhcGlDbGllbnQsIGluZm8gYXMgQzJGSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSBwb2xpY3kgaWQgKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wb2xpY3lfaWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHBvbGljeSB0eXBlICovXG4gIGdldCBwb2xpY3lUeXBlKCk6IFBvbGljeVR5cGUge1xuICAgIHJldHVybiB0aGlzLmRhdGEucG9saWN5X3R5cGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgcG9saWN5IHZlcnNpb24gdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBUaGUgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcG9saWN5LlxuICAgKi9cbiAgYXN5bmMgdmVyc2lvbih2ZXJzaW9uOiBWZXJzaW9uKTogUHJvbWlzZTxOYW1lZFBvbGljeVJ1bGVzPiB7XG4gICAgbGV0IHZlcnNpb25JbmZvO1xuXG4gICAgaWYgKHZlcnNpb24gPT0gYHYke3RoaXMuZGF0YS52ZXJzaW9ufWApIHtcbiAgICAgIHZlcnNpb25JbmZvID0gdGhpcy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2ZXJzaW9uSW5mbyA9IChhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lHZXQodGhpcy5pZCwgdmVyc2lvbikpIGFzIE5hbWVkUG9saWN5SW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE5hbWVkUG9saWN5UnVsZXModGhpcy5hcGlDbGllbnQsIHZlcnNpb25JbmZvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcG9saWN5LlxuICAgKi9cbiAgYXN5bmMgbGF0ZXN0KCk6IFByb21pc2U8TmFtZWRQb2xpY3lSdWxlcz4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKFwibGF0ZXN0XCIpO1xuICAgIHJldHVybiBuZXcgTmFtZWRQb2xpY3lSdWxlcyh0aGlzLmFwaUNsaWVudCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgbmFtZS5cbiAgICovXG4gIGFzeW5jIG5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IG5hbWUgZm9yIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuZXcgcG9saWN5IG5hbWUuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXROYW1lKG5hbWU6IHN0cmluZywgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBuYW1lIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIHBvbGljeS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHVzZXIgaWQgb2YgdGhlIHBvbGljeSBvd25lci5cbiAgICogQGV4YW1wbGUgVXNlciNjM2I5Mzc5Yy00ZThjLTQyMTYtYmQwYS02NWFjZTUzY2Y5OGZcbiAgICovXG4gIGFzeW5jIG93bmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5vd25lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgb3duZXIgZm9yIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBvd25lciBUaGUgbmV3IG93bmVyIG9mIHRoZSBwb2xpY3kuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRPd25lcihvd25lcjogc3RyaW5nLCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IG93bmVyIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCByZXR1cm4gdGhlIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcG9saWN5IG1ldGFkYXRhLlxuICAgKi9cbiAgYXN5bmMgbWV0YWRhdGEoKTogUHJvbWlzZTxKc29uVmFsdWU+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaCgpO1xuICAgIHJldHVybiBkYXRhLm1ldGFkYXRhIGFzIEpzb25WYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgbmFtZWQgcG9saWN5IChvdmVyd3JpdGluZyB0aGUgZXhpc3RpbmcgdmFsdWUpLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0YWRhdGEgVGhlIG5ldyBtZXRhZGF0YSBmb3IgdGhlIG5hbWVkIHBvbGljeS5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocykuXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIHNldE1ldGFkYXRhKG1ldGFkYXRhOiBKc29uVmFsdWUsIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgbWV0YWRhdGEgfSwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW5kIHJldHVybiB0aGUgZWRpdCBwb2xpY3kgZm9yIHRoZSBuYW1lZCBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBlZGl0IHBvbGljeSBmb3IgdGhpcyBuYW1lZCBwb2xpY3kuXG4gICAqL1xuICBhc3luYyBlZGl0UG9saWN5KCk6IFByb21pc2U8RWRpdFBvbGljeSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEuZWRpdF9wb2xpY3k7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IGVkaXQgcG9saWN5IGZvciB0aGUgbmFtZWQgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0gZWRpdFBvbGljeSBUaGUgbmV3IGVkaXQgcG9saWN5LlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgc2V0RWRpdFBvbGljeShlZGl0UG9saWN5OiBFZGl0UG9saWN5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IGVkaXRfcG9saWN5OiBlZGl0UG9saWN5IH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCByZXR1cm4gdGhlIGFjY2VzcyBjb250cm9sIGVudHJpZXMgZm9yIHRoZSBuYW1lZCBwb2xpY3kuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY2Nlc3MgY29udHJvbCBlbnRyaWVzIGZvciB0aGlzIG5hbWVkIHBvbGljeS5cbiAgICovXG4gIGFzeW5jIGFjbCgpOiBQcm9taXNlPFBvbGljeUFjbCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmZldGNoKCk7XG4gICAgcmV0dXJuIGRhdGEuYWNsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbmV3IGFjY2VzcyBjb250cm9sIGVudHJpZXMgZm9yIHRoZSBuYW1lZCBwb2xpY3kgKG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyBlbnRyaWVzKS5cbiAgICpcbiAgICogQHBhcmFtIGFjbCBUaGUgYWNjZXNzIGNvbnRyb2wgZW50cmllcyB0byBzZXQuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRBY2woYWNsOiBQb2xpY3lBY2wsIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cykge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlKHsgYWNsIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgbGlzdCBvZiBhbGwga2V5cywgcm9sZXMsIGFuZCBrZXktaW4tcm9sZXMgdGhhdCBhbGwgdmVyc2lvbnMgb2YgdGhpcyBwb2xpY3lcbiAgICogYXJlIGF0dGFjaGVkIHRvLlxuICAgKi9cbiAgYXN5bmMgYWxsQXR0YWNoZWQoKTogUHJvbWlzZTxQb2xpY3lBdHRhY2hlZFRvSWRbXT4ge1xuICAgIC8vIHRoZXJlIGlzIG5vIHNpbmdsZS1jYWxsIHdheSB0byBhY2hpZXZlIHRoaXMuIFNvIGluc3RlYWQsIHdlXG4gICAgLy8gMS4gR2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcG9saWN5XG4gICAgLy8gMi4gRm9yIGFsbCB2ZXJzaW9ucyBgdjBgIHRvIGBsYXRlc3RgLCBmZXRjaCB0aGUgcG9saWN5IGluZm9cbiAgICAvLyAzLiBKb2luIGFsbCBwb2xpY3kgYGF0dGFjaGVkX3RvYCBhcnJheXNcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5mZXRjaChcImxhdGVzdFwiKTtcblxuICAgIGNvbnN0IGxhdGVzdCA9IGRhdGEudmVyc2lvbjtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IEFycmF5LmZyb20oQXJyYXkobGF0ZXN0ICsgMSkua2V5cygpKTtcbiAgICBjb25zdCBiYXRjaFNpemUgPSAxMDtcbiAgICBsZXQgYWxsQXR0YWNoZWQ6IFBvbGljeUF0dGFjaGVkVG9JZFtdID0gW107XG5cbiAgICBmb3IgKGxldCBiYXRjaCA9IDA7IGJhdGNoIDwgdmVyc2lvbnMubGVuZ3RoOyBiYXRjaCArPSBiYXRjaFNpemUpIHtcbiAgICAgIGNvbnN0IHJzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHZlcnNpb25zLnNsaWNlKGJhdGNoLCBiYXRjaCArIGJhdGNoU2l6ZSkubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCBgdiR7dmVyc2lvbn1gKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYWxsQXR0YWNoZWQgPSBhbGxBdHRhY2hlZC5jb25jYXQocnMuZmxhdE1hcCgocG9saWN5KSA9PiBwb2xpY3kuYXR0YWNoZWRfdG8pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsQXR0YWNoZWQuY29uY2F0KGRhdGEuYXR0YWNoZWRfdG8pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGlzIHBvbGljeS5cbiAgICpcbiAgICogVGhpcyBjYW4gZmFpbCBpZiB0aGUgcG9saWN5IGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFueSBrZXksIHJvbGUsIG9yIGtleSBpbiByb2xlLlxuICAgKlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHJldHVybnMgQSByZXNwb25zZSB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHByb3ZlIE1GQSBpZiBuZWVkZWRcbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cyk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPEVtcHR5Pj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lEZWxldGUodGhpcy5pZCwgbWZhUmVjZWlwdCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBOYW1lZFBvbGljeUluZm8pIHtcbiAgICB0aGlzLmFwaUNsaWVudCA9IGFwaUNsaWVudDtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcG9saWN5LlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBUaGUgSlNPTiByZXF1ZXN0IHRvIHNlbmQgdG8gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBwb2xpY3kgaW5mb3JtYXRpb24uXG4gICAqIEB0aHJvd3MgaWYgTUZBIGlzIHJlcXVpcmVkIGFuZCBubyByZWNlaXB0cyBhcmUgcHJvdmlkZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlKFxuICAgIHJlcXVlc3Q6IFVwZGF0ZVBvbGljeVJlcXVlc3QsXG4gICAgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzLFxuICApOiBQcm9taXNlPE5hbWVkUG9saWN5SW5mbz4ge1xuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lVcGRhdGUodGhpcy5pZCwgcmVxdWVzdCwgbWZhUmVjZWlwdCk7XG4gICAgdGhpcy5kYXRhID0gcmVzcC5kYXRhKCkgYXMgTmFtZWRQb2xpY3lJbmZvO1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIHBvbGljeSB0byBmZXRjaC4gRGVmYXVsdHMgdG8gXCJsYXRlc3RcIi5cbiAgICogQHJldHVybnMgVGhlIHBvbGljeSBpbmZvcm1hdGlvbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgZmV0Y2godmVyc2lvbjogVmVyc2lvbiA9IFwibGF0ZXN0XCIpOiBQcm9taXNlPE5hbWVkUG9saWN5SW5mbz4ge1xuICAgIHRoaXMuZGF0YSA9IChhd2FpdCB0aGlzLmFwaUNsaWVudC5wb2xpY3lHZXQodGhpcy5pZCwgdmVyc2lvbikpIGFzIE5hbWVkUG9saWN5SW5mbztcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhIG5hbWVkIGtleSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lZEtleVBvbGljeSBleHRlbmRzIE5hbWVkUG9saWN5IHtcbiAgb3ZlcnJpZGUgZGF0YTogS2V5UG9saWN5SW5mbztcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwb2xpY3kgd2l0aCBuZXcgcnVsZXMuXG4gICAqXG4gICAqIEBwYXJhbSBydWxlcyBUaGUgbmV3IHJ1bGVzIHRvIHVwZGF0ZSB0aGUgcG9saWN5IHdpdGguXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRSdWxlcyhydWxlczogS2V5UG9saWN5LCBtZmFSZWNlaXB0PzogTWZhUmVjZWlwdHMpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZSh7IHJ1bGVzIH0sIG1mYVJlY2VpcHQpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlDbGllbnQgVGhlIEFQSSBjbGllbnQgdG8gdXNlLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBBUEkgc2VydmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKGFwaUNsaWVudDogQXBpQ2xpZW50LCBkYXRhOiBLZXlQb2xpY3lJbmZvKSB7XG4gICAgc3VwZXIoYXBpQ2xpZW50LCBkYXRhKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbi8qKlxuICogQSByZXByZXNlbnRhdGlvbiBvZiBhIG5hbWVkIHJvbGUgcG9saWN5LlxuICovXG5leHBvcnQgY2xhc3MgTmFtZWRSb2xlUG9saWN5IGV4dGVuZHMgTmFtZWRQb2xpY3kge1xuICBvdmVycmlkZSBkYXRhOiBSb2xlUG9saWN5SW5mbztcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwb2xpY3kgd2l0aCBuZXcgcnVsZXMuXG4gICAqXG4gICAqIEBwYXJhbSBydWxlcyBUaGUgbmV3IHJ1bGVzIHRvIHVwZGF0ZSB0aGUgcG9saWN5IHdpdGguXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkXG4gICAqL1xuICBhc3luYyBzZXRSdWxlcyhydWxlczogUm9sZVBvbGljeSwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGUoeyBydWxlcyB9LCBtZmFSZWNlaXB0KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogUm9sZVBvbGljeUluZm8pIHtcbiAgICBzdXBlcihhcGlDbGllbnQsIGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIG9mIGEgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uIChDMkYpLlxuICpcbiAqIFRoaXMgY2xhc3MgZXh0ZW5kcyBOYW1lZFBvbGljeSBiZWNhdXNlIEMyRiBmdW5jdGlvbnMgY2FuIGJlIGF0dGFjaGVkXG4gKiB0byBrZXlzIGFuZCByb2xlcyBsaWtlIGEgbmFtZWQgcG9saWN5LlxuICovXG5leHBvcnQgY2xhc3MgQzJGRnVuY3Rpb24gZXh0ZW5kcyBOYW1lZFBvbGljeSB7XG4gIG92ZXJyaWRlIGRhdGE6IEMyRkluZm87XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGlzIEMyRiBmdW5jdGlvbiB3aXRoIGEgbmV3IFdhc20gZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwb2xpY3kgVGhlIG5ldyBXYXNtIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBPcHRpb25hbCBNRkEgcmVjZWlwdChzKS5cbiAgICogQHRocm93cyBpZiB1cGxvYWRpbmcgdGhlIGZ1bmN0aW9uIGZhaWxzLlxuICAgKiBAdGhyb3dzIGlmIE1GQSBpcyByZXF1aXJlZCBhbmQgbm8gcmVjZWlwdHMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgYXN5bmMgc2V0V2FzbUZ1bmN0aW9uKHBvbGljeTogVWludDhBcnJheSwgbWZhUmVjZWlwdD86IE1mYVJlY2VpcHRzKSB7XG4gICAgLy8gdXBsb2FkIHRoZSBwb2xpY3kgb2JqZWN0XG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IHVwbG9hZFdhc21GdW5jdGlvbih0aGlzLmFwaUNsaWVudCwgcG9saWN5KTtcblxuICAgIC8vIHVwZGF0ZSB0aGlzIHBvbGljeSB3aXRoIHRoZSBuZXcgcG9saWN5IHZlcnNpb24uXG4gICAgY29uc3QgYm9keTogVXBkYXRlUG9saWN5UmVxdWVzdCA9IHsgcnVsZXM6IFt7IGhhc2ggfV0gfTtcbiAgICB0aGlzLmRhdGEgPSAoYXdhaXQgdGhpcy51cGRhdGUoYm9keSwgbWZhUmVjZWlwdCkpIGFzIEMyRkluZm87XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIHRoaXMgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5SWQgVGhlIG9wdGlvbmFsIGtleSBpZCB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgd2l0aC5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIHRvIGludm9rZS4gRGVmYXVsdHMgdG8gXCJsYXRlc3RcIi5cbiAgICogQHBhcmFtIHJlcXVlc3QgVGhlIG9wdGlvbmFsIHNpZ24gcmVxdWVzdCBib2R5IHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHJvbGVJZCBUaGUgb3B0aW9uYWwgcm9sZSBpZCB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgYnkuXG4gICAqIElmIGB1bmRlZmluZWRgLCB0aGUgcG9saWN5IHdpbGwgYmUgaW52b2tlZCBieSB0aGUgdXNlciBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIGFzeW5jIGludm9rZShcbiAgICBrZXlJZD86IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBWZXJzaW9uID0gXCJsYXRlc3RcIixcbiAgICByZXF1ZXN0PzogSnNvblZhbHVlLFxuICAgIHJvbGVJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDMkZJbnZvY2F0aW9uPiB7XG4gICAgLy8gVE9ETyBJZGVhbGx5LCBgdmVyc2lvbmAgc2hvdWxkIGJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIEJ1dCBmb3IgYmFja3dhcmRzXG4gICAgLy8gY29tcGF0aWJpbGl0eSwgd2Uga2VlcCBga2V5SWRgIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgZm9yIG5vdy5cbiAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5hcGlDbGllbnQucG9saWN5SW52b2tlKHRoaXMuaWQsIHZlcnNpb24sIHtcbiAgICAgIGtleV9pZDoga2V5SWQsXG4gICAgICByZXF1ZXN0LFxuICAgICAgcm9sZV9pZDogcm9sZUlkLFxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUG9saWN5SW52b2NhdGlvbihyZXNwKTtcbiAgfVxuXG4gIC8vIEJhY2t3YXJkcyBjb21wYWJpbGl0eSB3aXRoIE5hbWVkIFdhc20gUG9saWN5IG5hbWVzXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBvbGljeSB3aXRoIHRoZSBuZXcgV2FzbSBwb2xpY3kuXG4gICAqXG4gICAqIEBwYXJhbSBwb2xpY3kgVGhlIG5ldyBXYXNtIHBvbGljeSBvYmplY3QuXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE9wdGlvbmFsIE1GQSByZWNlaXB0KHMpLlxuICAgKiBAdGhyb3dzIGlmIHVwbG9hZGluZyB0aGUgcG9saWN5IG9iamVjdCBmYWlscy5cbiAgICogQHRocm93cyBpZiBNRkEgaXMgcmVxdWlyZWQgYW5kIG5vIHJlY2VpcHRzIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHNldFdhc21Qb2xpY3kgPSB0aGlzLnNldFdhc21GdW5jdGlvbjtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLSBJTlRFUk5BTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGFwaUNsaWVudCBUaGUgQVBJIGNsaWVudCB0byB1c2UuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBpQ2xpZW50OiBBcGlDbGllbnQsIGRhdGE6IEMyRkluZm8pIHtcbiAgICBzdXBlcihhcGlDbGllbnQsIGRhdGEpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNwZWNpZmljIHZlcnNpb24gb2YgYSBuYW1lZCBwb2xpY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYW1lZFBvbGljeVJ1bGVzIHtcbiAgLyoqIFRoZSBDdWJlU2lnbmVyIGluc3RhbmNlIHRoYXQgdGhpcyBwb2xpY3kgaXMgYXNzb2NpYXRlZCB3aXRoICovXG4gIHJlYWRvbmx5ICNhcGlDbGllbnQ6IEFwaUNsaWVudDtcbiAgI2RhdGE6IE5hbWVkUG9saWN5SW5mbztcblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBwb2xpY3kuXG4gICAqXG4gICAqIEBleGFtcGxlIE5hbWVkUG9saWN5I2E0YTQ1Y2MyLTA2NDItNGM5OC1iNmJkLTBkYTM0N2Q2MDhhNFxuICAgKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGEucG9saWN5X2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSB2ZXJzaW9uIG9mIHRoZSBwb2xpY3kgdGhpcyBvYmplY3QgY29udGFpbnMuXG4gICAqL1xuICBnZXQgdmVyc2lvbigpOiBWZXJzaW9uIHtcbiAgICByZXR1cm4gYHYke3RoaXMuI2RhdGEudmVyc2lvbn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgcnVsZXMuXG4gICAqXG4gICAqIEBleGFtcGxlIFsgXCJBc3NlcnRFcmMyMFR4XCIgXVxuICAgKi9cbiAgZ2V0IHJ1bGVzKCk6IFBvbGljeVJ1bGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGEucnVsZXMgYXMgUG9saWN5UnVsZVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGEgbGlzdCBvZiBhbGwga2V5cywgcm9sZXMsIGFuZCBrZXktaW4tcm9sZXMgdGhpcyB2ZXJzaW9uIG9mIHRoZSBwb2xpY3lcbiAgICogICAgICAgICAgaXMgYXR0YWNoZWQgdG8uXG4gICAqL1xuICBhc3luYyBhbGxBdHRhY2hlZCgpOiBQcm9taXNlPFBvbGljeUF0dGFjaGVkVG9JZFtdPiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2goKTtcbiAgICByZXR1cm4gZGF0YS5hdHRhY2hlZF90bztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tIElOVEVSTkFMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gYXBpQ2xpZW50IFRoZSBBUEkgY2xpZW50IHRvIHVzZS5cbiAgICogQHBhcmFtIGRhdGEgVGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgQVBJIHNlcnZlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcGlDbGllbnQ6IEFwaUNsaWVudCwgZGF0YTogTmFtZWRQb2xpY3lJbmZvKSB7XG4gICAgdGhpcy4jYXBpQ2xpZW50ID0gYXBpQ2xpZW50O1xuICAgIHRoaXMuI2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBwb2xpY3kgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBwb2xpY3kgaW5mb3JtYXRpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaCgpOiBQcm9taXNlPE5hbWVkUG9saWN5SW5mbz4ge1xuICAgIHRoaXMuI2RhdGEgPSAoYXdhaXQgdGhpcy4jYXBpQ2xpZW50LnBvbGljeUdldCh0aGlzLmlkLCB0aGlzLnZlcnNpb24pKSBhcyBOYW1lZFBvbGljeUluZm87XG4gICAgcmV0dXJuIHRoaXMuI2RhdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGludm9raW5nIGEgQ29uZmlkZW50aWFsIENsb3VkIEZ1bmN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQzJGSW52b2NhdGlvbiB7XG4gIHJlYWRvbmx5ICNkYXRhOiBJbnZva2VDMkZSZXNwb25zZTtcblxuICAvKiogQHJldHVybnMgVGhlIHBvbGljeSByZXNwb25zZSBpdHNlbGYuICovXG4gIGdldCByZXNwb25zZSgpOiBDMkZSZXNwb25zZSB7XG4gICAgcmV0dXJuIHRoaXMuI2RhdGEucmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gYXMgcmF3IGJ5dGVzLiBVc3VhbGx5IGEgVVRGLTggZW5jb2RlZCBzdHJpbmcsXG4gICAqIHVzZSB7QGxpbmsgVGV4dERlY29kZXJ9IHRvIGRlY29kZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uXG4gICAqL1xuICBnZXQgc3Rkb3V0Qnl0ZXMoKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIGRlY29kZUZyb21IZXgodGhpcy4jZGF0YS5zdGRvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYXMgcmF3IGJ5dGVzLiBVc3VhbGx5IGEgVVRGLTggZW5jb2RlZCBzdHJpbmcsIHVzZVxuICAgKiB7QGxpbmsgVGV4dERlY29kZXJ9IHRvIGRlY29kZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS5cbiAgICovXG4gIGdldCBzdGRlcnJCeXRlcygpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gZGVjb2RlRnJvbUhleCh0aGlzLiNkYXRhLnN0ZGVycik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gYXMgYSBCdWZmZXIuIFVzdWFsbHkgYSBVVEYtOCBlbmNvZGVkIHN0cmluZy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uXG4gICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgc3Rkb3V0Qnl0ZXN9IGluc3RlYWQgZm9yIGJyb3dzZXIgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIGdldCBzdGRvdXQoKTogQnVmZmVyIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIEJ1ZmZlciByZXR1cm4gdHlwZSBwcmVzZXJ2ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuc3Rkb3V0Qnl0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYXMgYSBCdWZmZXIuIFVzdWFsbHkgYSBVVEYtOCBlbmNvZGVkIHN0cmluZy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBzdGRlcnJCeXRlc30gaW5zdGVhZCBmb3IgYnJvd3NlciBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgZ2V0IHN0ZGVycigpOiBCdWZmZXIge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gQnVmZmVyIHJldHVybiB0eXBlIHByZXNlcnZlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5zdGRlcnJCeXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBKU09OIHJlc3BvbnNlIGZyb20gdGhlIEFQSSBzZXJ2ZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogSW52b2tlQzJGUmVzcG9uc2UpIHtcbiAgICB0aGlzLiNkYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGFiaWxpdHkgd2l0aCBOYW1lZCBXYXNtIFBvbGljeSBuYW1lc1xuXG4vKiogQSByZXByZXNlbnRhdGlvbiBvZiBhIFdhc20gcG9saWN5LiAqL1xuZXhwb3J0IHR5cGUgTmFtZWRXYXNtUG9saWN5ID0gQzJGRnVuY3Rpb247XG4vKiogQSByZXByZXNlbnRhdGlvbiBvZiBhIFdhc20gcG9saWN5LiAqL1xuZXhwb3J0IGNvbnN0IE5hbWVkV2FzbVBvbGljeSA9IEMyRkZ1bmN0aW9uO1xuXG4vKiogVGhlIHJlc3VsdCBvZiBpbnZva2luZyBhIG5hbWVkIFdBU00gcG9saWN5LiAqL1xuZXhwb3J0IHR5cGUgUG9saWN5SW52b2NhdGlvbiA9IEMyRkludm9jYXRpb247XG4vKiogVGhlIHJlc3VsdCBvZiBpbnZva2luZyBhIG5hbWVkIFdBU00gcG9saWN5LiAqL1xuZXhwb3J0IGNvbnN0IFBvbGljeUludm9jYXRpb24gPSBDMkZJbnZvY2F0aW9uO1xuIl19
|
package/dist/src/response.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EnvInterface, MfaReceipts, MfaRequired } from ".";
|
|
2
|
-
import { CubeSignerClient } from ".";
|
|
2
|
+
import { CubeSignerClient, MultiRegionEnv } from ".";
|
|
3
3
|
import type { AcceptedResponse, AcceptedValue, BinanceDryRun, SignDryRun } from "./schema_types";
|
|
4
4
|
/**
|
|
5
5
|
* Response type, which can be either a value of type {@link U}
|
|
@@ -110,7 +110,7 @@ export declare class CubeSignerResponse<U> {
|
|
|
110
110
|
* @param resp The response as returned by the OpenAPI client.
|
|
111
111
|
* @internal
|
|
112
112
|
*/
|
|
113
|
-
protected constructor(env:
|
|
113
|
+
protected constructor(env: MultiRegionEnv, requestFn: RequestFn<U>, resp: Response<U>);
|
|
114
114
|
/**
|
|
115
115
|
* Static constructor.
|
|
116
116
|
*
|
|
@@ -122,7 +122,7 @@ export declare class CubeSignerResponse<U> {
|
|
|
122
122
|
* @returns New instance of this class.
|
|
123
123
|
* @internal
|
|
124
124
|
*/
|
|
125
|
-
static create<U>(env: EnvInterface, requestFn: RequestFn<U>, mfaReceipt?: MfaReceipts): Promise<CubeSignerResponse<U>>;
|
|
125
|
+
static create<U>(env: EnvInterface | MultiRegionEnv, requestFn: RequestFn<U>, mfaReceipt?: MfaReceipts): Promise<CubeSignerResponse<U>>;
|
|
126
126
|
/**
|
|
127
127
|
* Return HTTP headers containing a given MFA receipt.
|
|
128
128
|
*
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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,EAAE,cAAc,EAAqB,MAAM,GAAG,CAAC;AAExE,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;IAexD,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,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAMrF;;;;;;;;;;OAUG;WACU,MAAM,CAAC,CAAC,EACnB,GAAG,EAAE,YAAY,GAAG,cAAc,EAClC,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
|
@@ -103,11 +103,8 @@ class CubeSignerResponse {
|
|
|
103
103
|
const session = this.asMfaRequired()?.session ?? undefined;
|
|
104
104
|
if (session === undefined)
|
|
105
105
|
return;
|
|
106
|
-
const env = __classPrivateFieldGet(this, _CubeSignerResponse_env, "f");
|
|
107
106
|
return await _1.CubeSignerClient.create({
|
|
108
|
-
env:
|
|
109
|
-
"Dev-CubeSignerStack": env,
|
|
110
|
-
},
|
|
107
|
+
env: __classPrivateFieldGet(this, _CubeSignerResponse_env, "f").spec,
|
|
111
108
|
org_id: this.mfaRequired.org_id,
|
|
112
109
|
session_exp: session.expiration,
|
|
113
110
|
session_info: session.session_info,
|
|
@@ -203,7 +200,7 @@ class CubeSignerResponse {
|
|
|
203
200
|
*/
|
|
204
201
|
static async create(env, requestFn, mfaReceipt) {
|
|
205
202
|
const seed = await requestFn(this.getMfaHeaders(mfaReceipt));
|
|
206
|
-
return new CubeSignerResponse(env, requestFn, seed);
|
|
203
|
+
return new CubeSignerResponse(_1.MultiRegionEnv.create(env), requestFn, seed);
|
|
207
204
|
}
|
|
208
205
|
/**
|
|
209
206
|
* Return HTTP headers containing a given MFA receipt.
|
|
@@ -280,4 +277,4 @@ async function _CubeSignerResponse_mfaVote(client, mfaVote) {
|
|
|
280
277
|
}
|
|
281
278
|
return await this.execWithMfaApproval({ mfaId, mfaOrgId, mfaConf });
|
|
282
279
|
};
|
|
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==
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLGtDQU1DO0FBbkNELHdCQUF3RTtBQUN4RSxpQ0FBMkM7QUFvQjNDOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixXQUFXLENBQU8sSUFBaUIsRUFBRSxLQUFrQjtJQUNyRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQXdCLENBQUM7SUFDbEMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQyxJQUFTLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsVUFBVSxDQUFJLElBQWlCO0lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQXdCLENBQUM7SUFDOUMsT0FBTyxZQUFZLENBQUMsVUFBVSxLQUFLLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLGFBQWE7UUFDMUYsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUM7UUFDdEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUs3Qjs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLFVBQVUsQ0FBQyx1QkFBQSxJQUFJLGdDQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsVUFBVSxJQUFJLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2Is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T0FBZ0I7SUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFZLENBQUMsTUFBTSxDQUFDO0lBRTFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO0lBRWxELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTWZhVm90ZSwgRW52SW50ZXJmYWNlLCBNZmFSZWNlaXB0cywgTWZhUmVxdWlyZWQgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgQ3ViZVNpZ25lckNsaWVudCwgTXVsdGlSZWdpb25FbnYsIGlzTWFueU1mYVJlY2VpcHRzIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IGVuY29kZVRvQmFzZTY0VXJsIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRlZFJlc3BvbnNlLCBBY2NlcHRlZFZhbHVlLCBCaW5hbmNlRHJ5UnVuLCBTaWduRHJ5UnVuIH0gZnJvbSBcIi4vc2NoZW1hX3R5cGVzXCI7XG5cbi8qKlxuICogUmVzcG9uc2UgdHlwZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIHZhbHVlIG9mIHR5cGUge0BsaW5rIFV9XG4gKiBvciB7QGxpbmsgQWNjZXB0ZWRSZXNwb25zZX0gKHN0YXR1cyBjb2RlIDIwMikgd2hpY2ggcmVxdWlyZXMgTUZBLlxuICovXG5leHBvcnQgdHlwZSBSZXNwb25zZTxVPiA9IFUgfCBBY2NlcHRlZFJlc3BvbnNlO1xuXG4vKipcbiAqIFJlcXVlc3QgZnVuY3Rpb24gd2hpY2ggb3B0aW9uYWxseSB0YWtlcyBhZGRpdGlvbmFsIGhlYWRlcnNcbiAqICh3aGljaCwgZm9yIGV4YW1wbGUsIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBhbiBNRkEgcmVjZWlwdCkuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVlc3RGbjxVPiA9IChoZWFkZXJzPzogSGVhZGVyc0luaXQpID0+IFByb21pc2U8UmVzcG9uc2U8VT4+O1xuXG4vKipcbiAqIE1hcCBmdW5jdGlvbiBvY2Nhc2lvbmFsbHkgdXNlZCB0byBtYXAgYSByZXNwb25zZSBmcm9tIHRoZSBBUEkgaW50byBhIGhpZ2hlci1sZXZlbCB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBNYXBGbjxVLCBWPiA9ICh1OiBVKSA9PiBWO1xuXG4vKipcbiAqIFRha2UgYSB7QGxpbmsgUmVzcG9uc2U8VT59IGFuZCBhIHtAbGluayBNYXBGbjxVLCBWPn0gZnVuY3Rpb24gYW5kIHJldHVyblxuICogYSB7QGxpbmsgUmVzcG9uc2U8Vj59IHRoYXQgbWFwcyB0aGUgdmFsdWUgb2YgdGhlIG9yaWdpbmFsIHJlc3BvbnNlIHdoZW4gaXRzIHN0YXR1cyBjb2RlIGlzIDIwMC5cbiAqXG4gKiBAcGFyYW0gcmVzcCBPcmlnaW5hbCByZXNwb25zZVxuICogQHBhcmFtIG1hcEZuIE1hcCB0byBhcHBseSB0byB0aGUgcmVzcG9uc2UgdmFsdWUgd2hlbiBpdHMgc3RhdHVzIGNvZGUgaXMgMjAwLlxuICogQHJldHVybnMgUmVzcG9uc2Ugd2hvc2UgdmFsdWUgZm9yIHN0YXR1cyBjb2RlIDIwMCBpcyBtYXBwZWQgZnJvbSBVIHRvIFZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFJlc3BvbnNlPFUsIFY+KHJlc3A6IFJlc3BvbnNlPFU+LCBtYXBGbjogTWFwRm48VSwgVj4pOiBSZXNwb25zZTxWPiB7XG4gIGlmIChhc0FjY2VwdGVkKHJlc3ApICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzcCBhcyBBY2NlcHRlZFJlc3BvbnNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYXBGbihyZXNwIGFzIFUpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHJlc3AgVGhlIHJlc3BvbnNlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEFjY2VwdGVkVmFsdWV9IGlmIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZSBpcyAyMDIuXG4gKi9cbmZ1bmN0aW9uIGFzQWNjZXB0ZWQ8VT4ocmVzcDogUmVzcG9uc2U8VT4pOiBBY2NlcHRlZFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWNjZXB0ZWRSZXNwID0gcmVzcCBhcyBBY2NlcHRlZFJlc3BvbnNlO1xuICByZXR1cm4gYWNjZXB0ZWRSZXNwLmVycm9yX2NvZGUgPT09IFwiU2lnbkRyeVJ1blwiIHx8IGFjY2VwdGVkUmVzcC5lcnJvcl9jb2RlID09PSBcIk1mYVJlcXVpcmVkXCJcbiAgICA/IChhY2NlcHRlZFJlc3AuYWNjZXB0ZWQgPz8gdW5kZWZpbmVkKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgcmVzcG9uc2Ugb2YgYSBDdWJlU2lnbmVyIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdWJlU2lnbmVyUmVzcG9uc2U8VT4ge1xuICByZWFkb25seSAjZW52OiBNdWx0aVJlZ2lvbkVudjtcbiAgcmVhZG9ubHkgI3JlcXVlc3RGbjogUmVxdWVzdEZuPFU+O1xuICByZWFkb25seSAjcmVzcDogUmVzcG9uc2U8VT47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWNjZXB0ZWRWYWx1ZX0gaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMi5cbiAgICovXG4gIGFzQWNjZXB0ZWQoKTogQWNjZXB0ZWRWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGFzQWNjZXB0ZWQodGhpcy4jcmVzcCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIGFzc29jaWF0ZWQge0BsaW5rIE1mYVJlcXVpcmVkfSB2YWx1ZSwgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMiBhbmQgdGhlIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IE1GQSBpcyByZXF1aXJlZC5cbiAgICovXG4gIGFzTWZhUmVxdWlyZWQoKTogTWZhUmVxdWlyZWQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFzQWNjZXB0ZWQoKT8uTWZhUmVxdWlyZWQgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBhc3NvY2lhdGVkIHtAbGluayBTaWduRHJ5UnVufSB2YWx1ZSwgaWYgdGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGlzIDIwMiBhbmQgdGhlIHJlc3BvbnNlIGlzIGEgZHJ5IHJ1biBvZiBhIHNpZ24gb3BlcmF0aW9uLlxuICAgKi9cbiAgYXNTaWduRHJ5UnVuKCk6IFNpZ25EcnlSdW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFzQWNjZXB0ZWQoKT8uU2lnbkRyeVJ1biA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgVGhlIGFzc29jaWF0ZWQge0BsaW5rIEJpbmFuY2VEcnlSdW59IHZhbHVlLCBpZiB0aGUgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgaXMgMjAyIGFuZCB0aGUgcmVzcG9uc2UgaXMgYSBkcnkgcnVuIG9mIGEgc2lnbiBvcGVyYXRpb24uXG4gICAqL1xuICBhc0JpbmFuY2VEcnlSdW4oKTogQmluYW5jZURyeVJ1biB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXNBY2NlcHRlZCgpPy5CaW5hbmNlRHJ5UnVuID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoaXMgcmVzcG9uc2UgaXMgYSBcIjIwMCBTdWNjZXNzXCIgKGluIHdoaWNoIGNhc2UgaXQgaXMgc2FmZSB0byBjYWxsIHtAbGluayBkYXRhfSlcbiAgICovXG4gIGlzU3VjY2VzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hc0FjY2VwdGVkKCkgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgdW5kZXJseWluZyB7QGxpbmsgTWZhUmVxdWlyZWR9IHJlc3BvbnNlIChpZiBhbnkpLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgbWZhUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNBY2NlcHRlZCgpPy5NZmFSZXF1aXJlZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgZmlyc3QgTUZBIGlkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QgKGlmIGFueSkgKi9cbiAgbWZhSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZmFSZXF1aXJlZD8uaWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIE1GQSBpZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCAoaWYgYW55KSAqL1xuICBtZmFJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLm1mYVJlcXVpcmVkPy5pZHMgPz8gW107XG4gIH1cblxuICAvKiogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIHJlcXVlc3QgcmVxdWlyZXMgYW4gTUZBIGFwcHJvdmFsICovXG4gIHJlcXVpcmVzTWZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1mYVJlcXVpcmVkICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgU2Vzc2lvbiBpbmZvcm1hdGlvbiB0byB1c2UgZm9yIGFueSBNRkEgYXBwcm92YWwgcmVxdWVzdHMgKGlmIGFueSB3YXMgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlKS5cbiAgICovXG4gIGFzeW5jIG1mYUNsaWVudCgpOiBQcm9taXNlPEN1YmVTaWduZXJDbGllbnQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy5tZmFSZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuYXNNZmFSZXF1aXJlZCgpPy5zZXNzaW9uID8/IHVuZGVmaW5lZDtcbiAgICBpZiAoc2Vzc2lvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICByZXR1cm4gYXdhaXQgQ3ViZVNpZ25lckNsaWVudC5jcmVhdGUoe1xuICAgICAgZW52OiB0aGlzLiNlbnYuc3BlYyxcbiAgICAgIG9yZ19pZDogdGhpcy5tZmFSZXF1aXJlZC5vcmdfaWQsXG4gICAgICBzZXNzaW9uX2V4cDogc2Vzc2lvbi5leHBpcmF0aW9uLFxuICAgICAgc2Vzc2lvbl9pbmZvOiBzZXNzaW9uLnNlc3Npb25faW5mbyxcbiAgICAgIHRva2VuOiBzZXNzaW9uLnRva2VuLFxuICAgICAgcmVmcmVzaF90b2tlbjogc2Vzc2lvbi5yZWZyZXNoX3Rva2VuLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIFRoZSByZXNwb25zZSBkYXRhLCBpZiBubyBNRkEgaXMgcmVxdWlyZWQgKi9cbiAgZGF0YSgpOiBVIHtcbiAgICBpZiAoIXRoaXMuaXNTdWNjZXNzKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgY2FsbCBgZGF0YSgpYCBvbiBhIDIwMiBBY2NlcHRlZCByZXNwb25zZTsgdXNlIGBhc01mYVJlcXVpcmVkKClgIG9yIGBhc1NpZ25EcnlSdW4oKWBcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNyZXNwIGFzIFU7XG4gIH1cblxuICAvKipcbiAgICogQXBwcm92ZSB0aGUgTUZBIHJlcXVlc3QgdXNpbmcgYSBnaXZlbiBzZXNzaW9uIGFuZCBhIFRPVFAgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudCBDdWJlU2lnbmVyIHdob3NlIHNlc3Npb24gdG8gdXNlXG4gICAqIEBwYXJhbSBjb2RlIDYtZGlnaXQgVE9UUCBjb2RlXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgcmVzdWJtaXR0aW5nIHRoZSByZXF1ZXN0IHdpdGggdGhlIGFwcHJvdmFsXG4gICAqL1xuICBhc3luYyB0b3RwQXBwcm92ZShjbGllbnQ6IEN1YmVTaWduZXJDbGllbnQsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuI21mYVRvdHBWb3RlKGNsaWVudCwgY29kZSwgXCJhcHByb3ZlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdCB0aGUgTUZBIHJlcXVlc3QgdXNpbmcgYSBnaXZlbiBzZXNzaW9uIGFuZCBhIFRPVFAgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudCBDdWJlU2lnbmVyIHdob3NlIHNlc3Npb24gdG8gdXNlXG4gICAqIEBwYXJhbSBjb2RlIDYtZGlnaXQgVE9UUCBjb2RlXG4gICAqL1xuICBhc3luYyB0b3RwUmVqZWN0KGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCwgY29kZTogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy4jbWZhVG90cFZvdGUoY2xpZW50LCBjb2RlLCBcInJlamVjdFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIG9yIHJlamVjdCBhbiBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHNlc3Npb24gYW5kIGEgVE9UUCBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIGNvZGUgNi1kaWdpdCBUT1RQIGNvZGVcbiAgICogQHBhcmFtIHZvdGUgQXBwcm92ZSBvciByZWplY3RcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jICNtZmFUb3RwVm90ZShcbiAgICBjbGllbnQ6IEN1YmVTaWduZXJDbGllbnQsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHZvdGU6IE1mYVZvdGUsXG4gICk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgbWZhSWQgPSB0aGlzLm1mYUlkKCk7XG4gICAgaWYgKG1mYUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG1mYU9yZ0lkID0gdGhpcy5tZmFSZXF1aXJlZCEub3JnX2lkO1xuICAgIGNvbnN0IG1mYUFwcHJvdmFsID0gYXdhaXQgY2xpZW50LmFwaUNsaWVudC5tZmFWb3RlVG90cChtZmFJZCwgY29kZSwgdm90ZSk7XG4gICAgY29uc3QgbWZhQ29uZiA9IG1mYUFwcHJvdmFsLnJlY2VpcHQ/LmNvbmZpcm1hdGlvbjtcblxuICAgIGlmICghbWZhQ29uZikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY1dpdGhNZmFBcHByb3ZhbCh7IG1mYUlkLCBtZmFPcmdJZCwgbWZhQ29uZiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIHRoZSBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHtAbGluayBDdWJlU2lnbmVyQ2xpZW50fSBpbnN0YW5jZSAoaS5lLiwgaXRzIHNlc3Npb24pLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jIGFwcHJvdmUoY2xpZW50OiBDdWJlU2lnbmVyQ2xpZW50KTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy4jbWZhVm90ZShjbGllbnQsIFwiYXBwcm92ZVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIE1GQSByZXF1ZXN0IHVzaW5nIGEgZ2l2ZW4ge0BsaW5rIEN1YmVTaWduZXJDbGllbnR9IGluc3RhbmNlIChpLmUuLCBpdHMgc2Vzc2lvbikuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgQ3ViZVNpZ25lciB3aG9zZSBzZXNzaW9uIHRvIHVzZVxuICAgKi9cbiAgYXN5bmMgcmVqZWN0KGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCkge1xuICAgIGF3YWl0IHRoaXMuI21mYVZvdGUoY2xpZW50LCBcInJlamVjdFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHByb3ZlIG9yIHJlamVjdCBhbiBNRkEgcmVxdWVzdCB1c2luZyBhIGdpdmVuIHtAbGluayBDdWJlU2lnbmVyQ2xpZW50fSBpbnN0YW5jZSAoaS5lLiwgaXRzIHNlc3Npb24pLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEN1YmVTaWduZXIgd2hvc2Ugc2Vzc2lvbiB0byB1c2VcbiAgICogQHBhcmFtIG1mYVZvdGUgQXBwcm92ZSBvciByZWplY3RcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiByZXN1Ym1pdHRpbmcgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgYXBwcm92YWxcbiAgICovXG4gIGFzeW5jICNtZmFWb3RlKGNsaWVudDogQ3ViZVNpZ25lckNsaWVudCwgbWZhVm90ZTogTWZhVm90ZSk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgbWZhSWQgPSB0aGlzLm1mYUlkKCk7XG4gICAgaWYgKG1mYUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG1mYU9yZ0lkID0gdGhpcy5tZmFSZXF1aXJlZCEub3JnX2lkO1xuXG4gICAgY29uc3QgbWZhQXBwcm92YWwgPSBhd2FpdCBjbGllbnQuYXBpQ2xpZW50Lm1mYVZvdGVDcyhtZmFJZCwgbWZhVm90ZSk7XG4gICAgY29uc3QgbWZhQ29uZiA9IG1mYUFwcHJvdmFsLnJlY2VpcHQ/LmNvbmZpcm1hdGlvbjtcblxuICAgIGlmICghbWZhQ29uZikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY1dpdGhNZmFBcHByb3ZhbCh7IG1mYUlkLCBtZmFPcmdJZCwgbWZhQ29uZiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1Ym1pdHMgdGhlIHJlcXVlc3Qgd2l0aCBhIGdpdmVuIE1GQSByZWNlaXB0KHMpIGF0dGFjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbWZhUmVjZWlwdCBUaGUgTUZBIHJlY2VpcHQocylcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiBzaWduaW5nIGFmdGVyIE1GQSBhcHByb3ZhbFxuICAgKi9cbiAgYXN5bmMgZXhlY1dpdGhNZmFBcHByb3ZhbChtZmFSZWNlaXB0OiBNZmFSZWNlaXB0cyk6IFByb21pc2U8Q3ViZVNpZ25lclJlc3BvbnNlPFU+PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IEN1YmVTaWduZXJSZXNwb25zZS5nZXRNZmFIZWFkZXJzKG1mYVJlY2VpcHQpO1xuICAgIHJldHVybiBuZXcgQ3ViZVNpZ25lclJlc3BvbnNlKHRoaXMuI2VudiwgdGhpcy4jcmVxdWVzdEZuLCBhd2FpdCB0aGlzLiNyZXF1ZXN0Rm4oaGVhZGVycykpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0gSU5URVJOQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBlbnYgVGhlIGVudmlyb25tZW50IHdoZXJlIHRoZSByZXNwb25zZSBjb21lcyBmcm9tXG4gICAqIEBwYXJhbSByZXF1ZXN0Rm5cbiAgICogICAgVGhlIGZ1bmN0aW9uIHRoYXQgdGhpcyByZXNwb25zZSBpcyBmcm9tLlxuICAgKiAgICBUaGlzIGFyZ3VtZW50IGlzIHVzZWQgdG8gcmVzZW5kIHJlcXVlc3RzIHdpdGggZGlmZmVyZW50IGhlYWRlcnMgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0gcmVzcCBUaGUgcmVzcG9uc2UgYXMgcmV0dXJuZWQgYnkgdGhlIE9wZW5BUEkgY2xpZW50LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlbnY6IE11bHRpUmVnaW9uRW52LCByZXF1ZXN0Rm46IFJlcXVlc3RGbjxVPiwgcmVzcDogUmVzcG9uc2U8VT4pIHtcbiAgICB0aGlzLiNlbnYgPSBlbnY7XG4gICAgdGhpcy4jcmVxdWVzdEZuID0gcmVxdWVzdEZuO1xuICAgIHRoaXMuI3Jlc3AgPSByZXNwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIGVudiBUaGUgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHJlc3BvbnNlIGNvbWVzIGZyb21cbiAgICogQHBhcmFtIHJlcXVlc3RGblxuICAgKiAgICBUaGUgcmVxdWVzdCBmdW5jdGlvbiB0aGF0IHRoaXMgcmVzcG9uc2UgaXMgZnJvbS5cbiAgICogICAgVGhpcyBhcmd1bWVudCBpcyB1c2VkIHRvIHJlc2VuZCByZXF1ZXN0cyB3aXRoIGRpZmZlcmVudCBoZWFkZXJzIGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIG1mYVJlY2VpcHQgT3B0aW9uYWwgTUZBIHJlY2VpcHQocylcbiAgICogQHJldHVybnMgTmV3IGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZTxVPihcbiAgICBlbnY6IEVudkludGVyZmFjZSB8IE11bHRpUmVnaW9uRW52LFxuICAgIHJlcXVlc3RGbjogUmVxdWVzdEZuPFU+LFxuICAgIG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cyxcbiAgKTogUHJvbWlzZTxDdWJlU2lnbmVyUmVzcG9uc2U8VT4+IHtcbiAgICBjb25zdCBzZWVkID0gYXdhaXQgcmVxdWVzdEZuKHRoaXMuZ2V0TWZhSGVhZGVycyhtZmFSZWNlaXB0KSk7XG4gICAgcmV0dXJuIG5ldyBDdWJlU2lnbmVyUmVzcG9uc2UoTXVsdGlSZWdpb25FbnYuY3JlYXRlKGVudiksIHJlcXVlc3RGbiwgc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIEhUVFAgaGVhZGVycyBjb250YWluaW5nIGEgZ2l2ZW4gTUZBIHJlY2VpcHQuXG4gICAqXG4gICAqIEBwYXJhbSBtZmFSZWNlaXB0IE1GQSByZWNlaXB0KHMpXG4gICAqIEByZXR1cm5zIEhlYWRlcnMgaW5jbHVkaW5nIHtAbGluayBtZmFSZWNlaXB0fVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN0YXRpYyBnZXRNZmFIZWFkZXJzKG1mYVJlY2VpcHQ/OiBNZmFSZWNlaXB0cyk6IEhlYWRlcnNJbml0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobWZhUmVjZWlwdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYyA9IGlzTWFueU1mYVJlY2VpcHRzKG1mYVJlY2VpcHQpXG4gICAgICA/IG1mYVJlY2VpcHRcbiAgICAgIDoge1xuICAgICAgICAgIG9yZ0lkOiBtZmFSZWNlaXB0Lm1mYU9yZ0lkLFxuICAgICAgICAgIHJlY2VpcHRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiBtZmFSZWNlaXB0Lm1mYUlkLFxuICAgICAgICAgICAgICBjb25maXJtYXRpb246IG1mYVJlY2VpcHQubWZhQ29uZixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgIGlmIChyZWMucmVjZWlwdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwieC1jdWJpc3QtbWZhLW9yZy1pZFwiOiByZWMub3JnSWQsXG4gICAgICBcIngtY3ViaXN0LW1mYS1yZWNlaXB0c1wiOiBlbmNvZGVUb0Jhc2U2NFVybCh0ZXh0RW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocmVjLnJlY2VpcHRzKSkpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|