@bitgo/sdk-core 38.17.0 → 38.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +3 -3
- package/dist/src/account-lib/index.d.ts +0 -1
- package/dist/src/account-lib/index.d.ts.map +1 -1
- package/dist/src/account-lib/index.js +1 -2
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +14 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/keychain/keychains.js +4 -4
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +3 -21
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +6 -145
- package/dist/src/bitgo/safe/iSafe.d.ts +5 -0
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/iSafe.js +1 -1
- package/dist/src/bitgo/safe/index.d.ts +1 -1
- package/dist/src/bitgo/safe/index.d.ts.map +1 -1
- package/dist/src/bitgo/safe/index.js +2 -2
- package/dist/src/bitgo/safe/safe.d.ts +5 -1
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +23 -37
- package/dist/src/bitgo/safe/safes.js +4 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +20 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +18 -11
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +13 -5
- package/dist/src/bitgo/wallet/safeKeychain.js +3 -3
- package/dist/test/unit/bitgo/safe/safe.js +28 -2
- package/dist/test/unit/bitgo/safe/safeDerivation.js +5 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +0 -52
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +0 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +0 -91
- package/dist/src/bitgo/safe/safeDerivation.d.ts +0 -43
- package/dist/src/bitgo/safe/safeDerivation.d.ts.map +0 -1
- package/dist/src/bitgo/safe/safeDerivation.js +0 -151
|
@@ -82,7 +82,7 @@ export declare class EcdsaVrfMPCv2Utils extends EcdsaMPCv2Utils {
|
|
|
82
82
|
originalPasscodeEncryptionCode?: string;
|
|
83
83
|
webauthnInfo?: WebauthnKeyEncryptionInfo;
|
|
84
84
|
encryptionVersion?: EncryptionVersion;
|
|
85
|
-
}): Promise<
|
|
85
|
+
}): Promise<KeychainsTriplet>;
|
|
86
86
|
private createSigningDkgSessions;
|
|
87
87
|
}
|
|
88
88
|
//# sourceMappingURL=ecdsaVrfMPCv2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAW,MAAM,oBAAoB,CAAC;AAIrF,OAAO,EAEL,yBAAyB,EAEzB,yBAAyB,EACzB,yBAAyB,EAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAyDlC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAY/C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAsB5F;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKhE;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QAEtC,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAua7B;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,SAAS,CAAC,eAAe,EAClC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,yBAAyB,CAAC;IAmBrC;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,CAAC,eAAe,GACjC,OAAO,CAAC,yBAAyB,CAAC;IAYrC;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,yBAAyB,CAAC;IAKrC;;OAEG;IACG,wBAAwB,CAAC,MAAM,EAAE;QACrC,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,uCAAuC;QACvC,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"ecdsaVrfMPCv2.d.ts","sourceRoot":"","sources":["../../../../../../src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAW,MAAM,oBAAoB,CAAC;AAIrF,OAAO,EAEL,yBAAyB,EAEzB,yBAAyB,EACzB,yBAAyB,EAI1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAyDlC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAC9B,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAY/C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAsB5F;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKhE;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,kBAAkB;IACZ,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,wBAAwB,CAAC;QACpC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QAEtC,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAua7B;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,SAAS,CAAC,eAAe,EAClC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,yBAAyB,CAAC;IAmBrC;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,CAAC,eAAe,GACjC,OAAO,CAAC,yBAAyB,CAAC;IAYrC;;OAEG;IACG,4BAA4B,CAChC,QAAQ,EAAE,yBAAyB,CAAC,yBAAyB,CAAC,EAC9D,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,yBAAyB,CAAC;IAKrC;;OAEG;IACG,wBAAwB,CAAC,MAAM,EAAE;QACrC,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,uCAAuC;QACvC,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,YAAY,CAAC,EAAE,yBAAyB,CAAC;QACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;KACvC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6I7B,OAAO,CAAC,wBAAwB;CAgBjC"}
|
|
@@ -464,10 +464,18 @@ class EcdsaVrfMPCv2Utils extends ecdsaMPCv2_1.EcdsaMPCv2Utils {
|
|
|
464
464
|
assert_1.default.equal(commonKeychain, userCommonKeychain, 'User and BitGo common keychains do not match');
|
|
465
465
|
const encryptionSession = params.encryptionVersion === 2 ? await this.bitgo.createEncryptionSession(params.passphrase) : undefined;
|
|
466
466
|
try {
|
|
467
|
-
const userKeychainPromise = this.
|
|
468
|
-
const backupKeychainPromise = this.
|
|
469
|
-
const
|
|
470
|
-
|
|
467
|
+
const userKeychainPromise = this.addUserKeychain(commonKeychain, userPrivateMaterial, userReducedPrivateMaterial, params.passphrase, params.originalPasscodeEncryptionCode, params.webauthnInfo, encryptionSession, params.encryptionVersion, params.enterprise, params.safeId, { parentKeyId: params.userRootKeyId, index: params.derivationIndex });
|
|
468
|
+
const backupKeychainPromise = this.addBackupKeychain(commonKeychain, undefined, undefined, params.passphrase, params.originalPasscodeEncryptionCode, encryptionSession, params.encryptionVersion, params.safeId, { parentKeyId: params.backupRootKeyId, index: params.derivationIndex });
|
|
469
|
+
const bitgoKeychainPromise = this.addBitgoKeychain(commonKeychain, params.safeId, {
|
|
470
|
+
parentKeyId: params.parentKeyId,
|
|
471
|
+
index: params.derivationIndex,
|
|
472
|
+
});
|
|
473
|
+
const [userKeychain, backupKeychain, bitgoKeychain] = await Promise.all([
|
|
474
|
+
userKeychainPromise,
|
|
475
|
+
backupKeychainPromise,
|
|
476
|
+
bitgoKeychainPromise,
|
|
477
|
+
]);
|
|
478
|
+
return { userKeychain, backupKeychain, bitgoKeychain };
|
|
471
479
|
}
|
|
472
480
|
finally {
|
|
473
481
|
encryptionSession?.destroy();
|
|
@@ -491,4 +499,4 @@ class EcdsaVrfMPCv2Utils extends ecdsaMPCv2_1.EcdsaMPCv2Utils {
|
|
|
491
499
|
}
|
|
492
500
|
}
|
|
493
501
|
exports.EcdsaVrfMPCv2Utils = EcdsaVrfMPCv2Utils;
|
|
494
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3RkEsb0RBZ0JDO0FBT0Qsb0RBc0JDO0FBUUQsd0RBS0M7QUFsSkQsb0RBQXFGO0FBQ3JGLG1DQUF3QztBQUN4QyxvREFBNEI7QUFDNUIsNkNBQTZDO0FBQzdDLHNEQVM2QjtBQUk3QixxREFBd0Q7QUFFeEQsNERBQThGO0FBQzlGLDZDQUErQztBQUMvQyxxRUFJa0M7QUFDbEMsNkNBQThFO0FBRTlFOzs7OztHQUtHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFPbkMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxhQUFhLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDdkgsQ0FBQztBQWVELFNBQVMsb0JBQW9CLENBQUMsUUFBd0M7SUFDcEUsTUFBTSxTQUFTLEdBQXlCO1FBQ3RDLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ1IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7U0FDbkQsQ0FBQyxDQUFDO0tBQ0osQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLElBQVksRUFBRSxRQUFnQjtJQUM1RCxNQUFNLFNBQVMsR0FBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxTQUFTO2FBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUM7YUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RixXQUFXLEVBQUUsU0FBUzthQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQTRDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQzthQUMxRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZHLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FDbEMsZUFBdUIsRUFDdkIsc0JBQThCLEVBQzlCLFdBQW1CO0lBRW5CLE1BQU0sUUFBUSxHQUFHLElBQUEsZUFBTSxFQUFDO1FBQ3RCLE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUM1QyxHQUFHLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDO0tBQ2pDLENBQUMsQ0FBQztJQUNILE1BQU0sZUFBZSxHQUFHLElBQUEsZUFBTSxFQUFDO1FBQzdCLE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLHNCQUFzQixDQUFDO1FBQ25ELEdBQUcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUM7S0FDakMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7QUFDNUYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxhQUFxQjtJQUN4RCxJQUFJLFFBQWlCLENBQUM7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsUUFBUSxHQUFHLElBQUEsZUFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDL0MsSUFBSSxPQUFPLEtBQUssd0JBQXdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLFlBQVksVUFBVSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDdEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsS0FBYTtJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUcsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsNEJBQWU7SUFDckQsa0JBQWtCO0lBQ2xCLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFTckI7UUFDQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxxQkFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNFLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSxpQ0FBa0IsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUEsaUNBQWtCLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0Qsa0VBQWtFO1FBQ2xFLG9FQUFvRTtRQUNwRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRyxNQUFNLFFBQVEsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQy9ELElBQUEsZ0JBQU0sRUFBQyxRQUFRLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUM3RCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUzQyxJQUFJLElBQUEsOENBQStCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekQsdUZBQXVGO1lBQ3ZGLElBQUEsZ0JBQU0sRUFBQyxJQUFBLCtCQUFnQixFQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUEwQjtZQUMzQyxPQUFPLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtZQUM5QixNQUFNLEVBQUUsVUFBVSxDQUFDLFVBQVU7U0FDOUIsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUEwQjtZQUM3QyxPQUFPLEVBQUUsNkJBQWdCLENBQUMsTUFBTTtZQUNoQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFVBQVU7U0FDaEMsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUEwQjtZQUM1QyxPQUFPLEVBQUUsNkJBQWdCLENBQUMsS0FBSztZQUMvQixNQUFNLEVBQUUsaUJBQWlCO1NBQzFCLENBQUM7UUFFRixrQkFBa0I7UUFDbEIsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTVELE1BQU0sd0JBQXdCLEdBQUcsdUJBQVMsQ0FBQyxpQkFBaUIsQ0FBQztZQUMzRCxpQkFBaUIsRUFBRSxDQUFDLHNCQUFzQixFQUFFLHdCQUF3QixDQUFDO1lBQ3JFLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sY0FBYyxHQUFHLE1BQU0sdUJBQVMsQ0FBQyw4QkFBOEIsQ0FDbkUsd0JBQXdCLEVBQ3hCLENBQUMsY0FBYyxDQUFDLEVBQ2hCLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUNqQyxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDekcsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDN0csSUFBQSxnQkFBTSxFQUFDLFFBQVEsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDO1FBQ25FLElBQUEsZ0JBQU0sRUFBQyxVQUFVLEVBQUUsa0RBQWtELENBQUMsQ0FBQztRQUV2RSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDOUMsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ2xELElBQUEsZ0JBQU0sRUFBQyw0QkFBYyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDL0UsSUFBQSxnQkFBTSxFQUFDLDRCQUFjLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztRQUNuRiwwREFBMEQ7UUFDMUQsTUFBTSxZQUFZLEdBQUcsSUFBQSxrREFBeUIsRUFDNUMsSUFBSSxDQUFDLEtBQUssRUFDVixNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7UUFDRixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxZQUFZLENBQ25HLG1DQUFvQixDQUFDLFVBQVUsQ0FBQyxFQUNoQztZQUNFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUU7WUFDdEQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLDZCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLFVBQVUsRUFBRTtZQUM1RCxnQkFBZ0I7WUFDaEIsa0JBQWtCO1lBQ2xCLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNuRCxhQUFhLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCLENBQUM7WUFDdkQsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUTtTQUNwQyxDQUNGLENBQUM7UUFDRixJQUFBLGdCQUFNLEVBQUMsWUFBWSxFQUFFLG1EQUFtRCxDQUFDLENBQUM7UUFDMUUsYUFBYTtRQUViLGtCQUFrQjtRQUNsQixNQUFNLDRCQUE0QixHQUFHLE1BQU0sdUJBQVMsQ0FBQyxnQ0FBZ0MsQ0FDbkYsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFDckYsQ0FBQyxjQUFjLENBQUMsRUFDaEIsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQ2pDLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUFHLDRCQUE0QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDakYsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsS0FBSyxDQUN6QyxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLHVCQUF1QixFQUFFLGlEQUFpRCxDQUFDLENBQUM7UUFFbkYsTUFBTSxxQkFBcUIsR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUM7WUFDL0QsV0FBVyxFQUFFLEVBQUU7WUFDZixpQkFBaUIsRUFBRSxDQUFDLHVCQUFTLENBQUMsMkJBQTJCLENBQUMsdUJBQXVCLENBQUMsRUFBRSx3QkFBd0IsQ0FBQztTQUM5RyxDQUFDLENBQUM7UUFFSCxNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM1RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyw2QkFBZ0IsQ0FBQyxLQUFLLENBQzNFLENBQUM7UUFDRixJQUFBLGdCQUFNLEVBQUMsZUFBZSxFQUFFLDBDQUEwQyxDQUFDLENBQUM7UUFDcEUsTUFBTSx5QkFBeUIsR0FBRyx1QkFBUyxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWpGLE1BQU0sdUJBQXVCLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQ25FLFdBQVcsRUFBRSxFQUFFO1lBQ2YsaUJBQWlCLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx1QkFBUyxDQUFDLDJCQUEyQixDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDNUcsQ0FBQyxDQUFDO1FBQ0gsTUFBTSwyQkFBMkIsR0FBRyx1QkFBUyxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdkcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsS0FBSyxDQUM3RSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLDJCQUEyQixFQUFFLDRDQUE0QyxDQUFDLENBQUM7UUFFbEYsdUZBQXVGO1FBQ3ZGLHFGQUFxRjtRQUNyRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sY0FBYyxDQUFDLHNCQUFzQixDQUFDO1lBQ3hFLGlCQUFpQixFQUFFO2dCQUNqQixHQUFHLGtCQUFrQixDQUFDLGlCQUFpQjtnQkFDdkMsR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCO2FBQ2pGO1lBQ0QsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQzVFLGlCQUFpQixFQUFFO2dCQUNqQixHQUFHLGdCQUFnQixDQUFDLGlCQUFpQjtnQkFDckMsR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsNkJBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsaUJBQWlCO2FBQ25GO1lBQ0QsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsTUFBTSx1QkFBUyxDQUFDLDhCQUE4QixDQUNuRSxFQUFFLFdBQVcsRUFBRSxDQUFDLHlCQUF5QixFQUFFLDJCQUEyQixDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQ2hHLENBQUMsY0FBYyxDQUFDLEVBQ2hCLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUNqQyxDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25ELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDZCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLDZCQUFnQixDQUFDLEtBQUssQ0FDM0UsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNyRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyw2QkFBZ0IsQ0FBQyxLQUFLLENBQzdFLENBQUM7UUFDRixJQUFBLGdCQUFNLEVBQUMsYUFBYSxFQUFFLG1EQUFtRCxDQUFDLENBQUM7UUFDM0UsSUFBQSxnQkFBTSxFQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztRQUN2RixJQUFBLGdCQUFNLEVBQUMsZUFBZSxFQUFFLHFEQUFxRCxDQUFDLENBQUM7UUFDL0UsSUFBQSxnQkFBTSxFQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsc0RBQXNELENBQUMsQ0FBQztRQUMzRixJQUFBLGdCQUFNLEVBQUMsNEJBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFDNUYsSUFBQSxnQkFBTSxFQUFDLDRCQUFjLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sWUFBWSxHQUFHLElBQUEsa0RBQXlCLEVBQzVDLElBQUksQ0FBQyxLQUFLLEVBQ1YsTUFBTSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztRQUNGLE1BQU0sRUFDSixTQUFTLEVBQUUsZUFBZSxFQUMxQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixZQUFZLEdBQ2IsR0FBRyxNQUFNLFlBQVksQ0FBQyxtQ0FBb0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2RCxTQUFTO1lBQ1QsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxJQUFJO2dCQUMzQixFQUFFLEVBQUUsNkJBQWdCLENBQUMsS0FBSztnQkFDMUIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUztnQkFDMUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7YUFDekQ7WUFDRCxlQUFlLEVBQUUsYUFBYSxDQUFDLFVBQVU7WUFDekMsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNO2dCQUM3QixFQUFFLEVBQUUsNkJBQWdCLENBQUMsS0FBSztnQkFDMUIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUztnQkFDNUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7YUFDM0Q7WUFDRCxpQkFBaUIsRUFBRSxlQUFlLENBQUMsVUFBVTtZQUM3QyxXQUFXLEVBQUUsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7WUFDeEQsYUFBYSxFQUFFLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDO1NBQzdELENBQUMsQ0FBQztRQUNILGFBQWE7UUFFYixrQkFBa0I7UUFDbEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ25GLElBQUEsZ0JBQU0sRUFBQyxZQUFZLEVBQUUsbURBQW1ELENBQUMsQ0FBQztRQUUxRSxzRkFBc0Y7UUFDdEYsd0ZBQXdGO1FBQ3hGLHlDQUF5QztRQUN6QyxNQUFNLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQztZQUMxQyxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLFdBQVcsRUFBRTtnQkFDWCxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUNsRixHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUNwRixHQUFHLHNCQUFzQixDQUFDLFlBQVksRUFBRSw2QkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXO2FBQzNFO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUM1QyxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLFdBQVcsRUFBRTtnQkFDWCxHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsTUFBTSxDQUFDO2dCQUNwRixHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsTUFBTSxDQUFDO2dCQUN0RixHQUFHLHNCQUFzQixDQUFDLFlBQVksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXO2FBQzdFO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLHVCQUFTLENBQUMsZ0NBQWdDLENBQ3JGLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQ2hGLENBQUMsY0FBYyxDQUFDLEVBQ2hCLENBQUMsYUFBYSxDQUFDLENBQ2hCLENBQUM7UUFDRixNQUFNLDhCQUE4QixHQUFHLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3BGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDZCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLDZCQUFnQixDQUFDLElBQUksQ0FDM0UsQ0FBQztRQUNGLElBQUEsZ0JBQU0sRUFBQyw4QkFBOEIsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sb0JBQW9CLEdBQUcsdUJBQVMsQ0FBQyxxQkFBcUIsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBRTdGLE1BQU0sK0JBQStCLEdBQUcsTUFBTSx1QkFBUyxDQUFDLGdDQUFnQyxDQUN0RixFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQ2xGLENBQUMsY0FBYyxDQUFDLEVBQ2hCLENBQUMsZUFBZSxDQUFDLENBQ2xCLENBQUM7UUFDRixNQUFNLGdDQUFnQyxHQUFHLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3ZGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLDZCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLDZCQUFnQixDQUFDLE1BQU0sQ0FDN0UsQ0FBQztRQUNGLElBQUEsZ0JBQU0sRUFBQyxnQ0FBZ0MsRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sc0JBQXNCLEdBQUcsdUJBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRWpHLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDN0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsTUFBTSxDQUM1RSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLGdCQUFnQixFQUFFLG9EQUFvRCxDQUFDLENBQUM7UUFFL0UsTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUMvRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyw2QkFBZ0IsQ0FBQyxJQUFJLENBQzVFLENBQUM7UUFDRixJQUFBLGdCQUFNLEVBQUMsZ0JBQWdCLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztRQUUvRSxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztZQUM1RCxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDO1NBQ3RELENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDMUQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsTUFBTSxDQUM1RSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLGdCQUFnQixFQUFFLG9EQUFvRCxDQUFDLENBQUM7UUFDL0UsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDekQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsS0FBSyxDQUMzRSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLGVBQWUsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO1FBQzdFLE1BQU0seUJBQXlCLEdBQUcsdUJBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVqRixNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUNoRSxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDO1NBQ3hELENBQUMsQ0FBQztRQUVILE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDNUQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsSUFBSSxDQUM1RSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLGdCQUFnQixFQUFFLG9EQUFvRCxDQUFDLENBQUM7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM3RCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyw2QkFBZ0IsQ0FBQyxLQUFLLENBQzdFLENBQUM7UUFDRixJQUFBLGdCQUFNLEVBQUMsaUJBQWlCLEVBQUUscURBQXFELENBQUMsQ0FBQztRQUNqRixNQUFNLDJCQUEyQixHQUFHLHVCQUFTLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyRixNQUFNLGtDQUFrQyxHQUFHLE1BQU0sdUJBQVMsQ0FBQyxnQ0FBZ0MsQ0FDekYsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFDbEcsQ0FBQyxjQUFjLENBQUMsRUFDaEIsQ0FBQyxhQUFhLENBQUMsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sOEJBQThCLEdBQUcsa0NBQWtDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDeEYsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsSUFBSSxDQUMzRSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLDhCQUE4QixFQUFFLG1EQUFtRCxDQUFDLENBQUM7UUFDNUYsTUFBTSxvQkFBb0IsR0FBRyx1QkFBUyxDQUFDLHFCQUFxQixDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFN0YsTUFBTSxvQ0FBb0MsR0FBRyxNQUFNLHVCQUFTLENBQUMsZ0NBQWdDLENBQzNGLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFDcEcsQ0FBQyxjQUFjLENBQUMsRUFDaEIsQ0FBQyxlQUFlLENBQUMsQ0FDbEIsQ0FBQztRQUNGLE1BQU0sZ0NBQWdDLEdBQUcsb0NBQW9DLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDNUYsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssNkJBQWdCLENBQUMsTUFBTSxDQUM3RSxDQUFDO1FBQ0YsSUFBQSxnQkFBTSxFQUFDLGdDQUFnQyxFQUFFLHFEQUFxRCxDQUFDLENBQUM7UUFDaEcsTUFBTSxzQkFBc0IsR0FBRyx1QkFBUyxDQUFDLHFCQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFakcsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUM7WUFDNUQsV0FBVyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUM7WUFDckQsaUJBQWlCLEVBQUUsRUFBRTtTQUN0QixDQUFDLENBQUM7UUFFSCxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsSCxJQUFBLGdCQUFNLEVBQUMsc0JBQXNCLEVBQUUsZ0RBQWdELENBQUMsQ0FBQztRQUNqRixNQUFNLGdDQUFnQyxHQUFHLHVCQUFTLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVyRyxNQUFNLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUNoRSxXQUFXLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQztZQUN2RCxpQkFBaUIsRUFBRSxFQUFFO1NBQ3RCLENBQUMsQ0FBQztRQUNILE1BQU0sd0JBQXdCLEdBQUcsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUMxRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxNQUFNLENBQzFDLENBQUM7UUFDRixJQUFBLGdCQUFNLEVBQUMsd0JBQXdCLEVBQUUsa0RBQWtELENBQUMsQ0FBQztRQUNyRixNQUFNLGtDQUFrQyxHQUFHLHVCQUFTLENBQUMseUJBQXlCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUV6RyxNQUFNLGNBQWMsR0FBRyxNQUFNLHVCQUFTLENBQUMsOEJBQThCLENBQ25FO1lBQ0UsV0FBVyxFQUFFLENBQUMseUJBQXlCLEVBQUUsMkJBQTJCLENBQUM7WUFDckUsaUJBQWlCLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxrQ0FBa0MsQ0FBQztTQUMxRixFQUNELENBQUMsY0FBYyxDQUFDLEVBQ2hCLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUNqQyxDQUFDO1FBRUYsTUFBTSxFQUNKLFNBQVMsRUFBRSxlQUFlLEVBQzFCLFNBQVMsRUFDVCxjQUFjLEVBQUUsbUJBQW1CLEdBQ3BDLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFckYsYUFBYTtRQUViLDRCQUE0QjtRQUM1QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDbkYsTUFBTSw0QkFBNEIsR0FBRyx1QkFBUyxDQUFDLG1CQUFtQixDQUNoRSxNQUFNLHVCQUFTLENBQUMsZ0NBQWdDLENBQzlDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQ3JGLENBQUMsY0FBYyxDQUFDLEVBQ2hCLEVBQUUsQ0FDSCxDQUNGLENBQUMsaUJBQWlCLENBQUM7UUFDcEIsTUFBTSx1QkFBdUIsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUcsSUFBQSxnQkFBTSxFQUFDLHVCQUF1QixFQUFFLGlEQUFpRCxDQUFDLENBQUM7UUFDbkYsV0FBVyxDQUFDLHNCQUFzQixDQUFDO1lBQ2pDLFdBQVcsRUFBRSxFQUFFO1lBQ2YsaUJBQWlCLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSx3QkFBd0IsQ0FBQztTQUN2RSxDQUFDLENBQUM7UUFFSCxhQUFhLENBQUMsc0JBQXNCLENBQUM7WUFDbkMsV0FBVyxFQUFFLEVBQUU7WUFDZixpQkFBaUIsRUFBRSxDQUFDLHVCQUF1QixFQUFFLHNCQUFzQixDQUFDO1NBQ3JFLENBQUMsQ0FBQztRQUVILE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RELE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFELE1BQU0sMEJBQTBCLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDcEUsTUFBTSw0QkFBNEIsR0FBRyxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4RSxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV6RCxNQUFNLGtCQUFrQixHQUFHLHVCQUFTLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RSxNQUFNLG9CQUFvQixHQUFHLHVCQUFTLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVoRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3RHLGdCQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdEQUFnRCxDQUFDLENBQUM7UUFFMUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsb0JBQW9CLENBQzNGLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsb0JBQW9CLENBQy9GLHFCQUFxQixFQUNyQiw0QkFBNEIsRUFDNUIsaUJBQWlCLENBQ2xCLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUNyQixNQUFNLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0csSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQ3hELDZCQUFnQixDQUFDLElBQUksRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLDhCQUE4QixFQUNyQyxNQUFNLENBQUMsWUFBWSxFQUNuQixpQkFBaUIsRUFDakIsTUFBTSxDQUFDLGlCQUFpQixFQUN4QixNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7WUFDRixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDMUQsNkJBQWdCLENBQUMsTUFBTSxFQUN2QixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsOEJBQThCLEVBQ3JDLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxDQUFDLGlCQUFpQixFQUN4QixTQUFTLEVBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO1lBQ0YsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQ3pELDZCQUFnQixDQUFDLEtBQUssRUFDdEIsbUJBQW1CLEVBQ25CLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FDZCxDQUFDO1lBRUYsTUFBTSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUN0RSxtQkFBbUI7Z0JBQ25CLHFCQUFxQjtnQkFDckIsb0JBQW9CO2FBQ3JCLENBQUMsQ0FBQztZQUNILGFBQWE7WUFFYixPQUFPO2dCQUNMLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxhQUFhO2FBQ2QsQ0FBQztRQUNKLENBQUM7Z0JBQVMsQ0FBQztZQUNULGlCQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLFFBQThELEVBQzlELGdCQUF3QixFQUN4QixPQUFrQyxFQUNsQyxXQUFtQixFQUNuQixlQUF1QjtRQUV2QixJQUFBLGdCQUFNLEVBQUMsNEJBQWMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO1FBQy9FLElBQUEsZ0JBQU0sRUFBQyw0QkFBYyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQ2xHLElBQUEsZ0JBQU0sRUFBQyxRQUFRLEVBQUUsZ0RBQWdELENBQUMsQ0FBQztRQUVuRSxJQUFBLGdCQUFNLEVBQ0osdUNBQXdCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQ2xFLHNEQUFzRCxDQUN2RCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQTZCO1lBQ3hDLGdCQUFnQjtZQUNoQixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFFO1lBQ3RELFdBQVc7WUFDWCxlQUFlO1NBQ2hCLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxtQ0FBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyw0QkFBNEIsQ0FDaEMsUUFBOEQsRUFDOUQsU0FBaUIsRUFDakIsT0FBa0M7UUFFbEMsSUFBQSxnQkFBTSxFQUFDLDRCQUFjLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyw2QkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDbEcsSUFBQSxnQkFBTSxFQUFDLFFBQVEsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDO1FBRW5FLE1BQU0sT0FBTyxHQUE2QjtZQUN4QyxTQUFTO1lBQ1QsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLDZCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRTtTQUN2RCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsbUNBQW9CLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLFFBQThELEVBQzlELFNBQWlCO1FBRWpCLElBQUEsZ0JBQU0sRUFBQyw0QkFBYyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sUUFBUSxDQUFDLG1DQUFvQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQWM5QjtRQUNDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSxpQ0FBa0IsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUV6RCxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRyxNQUFNLFFBQVEsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQy9ELElBQUEsZ0JBQU0sRUFBQyxRQUFRLEVBQUUsMENBQTBDLENBQUMsQ0FBQztRQUM3RCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUzQyxJQUFJLElBQUEsOENBQStCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBQSxnQkFBTSxFQUFDLElBQUEsK0JBQWdCLEVBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQTBCO1lBQzNDLE9BQU8sRUFBRSw2QkFBZ0IsQ0FBQyxJQUFJO1lBQzlCLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVTtTQUM5QixDQUFDO1FBQ0YsTUFBTSxjQUFjLEdBQTBCO1lBQzVDLE9BQU8sRUFBRSw2QkFBZ0IsQ0FBQyxLQUFLO1lBQy9CLE1BQU0sRUFBRSxpQkFBaUI7U0FDMUIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxNQUFNLGlCQUFpQixHQUFHLElBQUkscUJBQU8sQ0FBQyxNQUFNLENBQzFDLENBQUMsRUFDRCxDQUFDLEVBQ0QsNkJBQWdCLENBQUMsSUFBSSxFQUNyQixNQUFNLENBQUMsZ0JBQWdCLEVBQ3ZCLE1BQU0sQ0FBQyxtQkFBbUIsRUFDMUIsSUFBSSxDQUNMLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzRCxNQUFNLGNBQWMsR0FBRyxNQUFNLHVCQUFTLENBQUMsOEJBQThCLENBQ25FO1lBQ0UsaUJBQWlCLEVBQUUsQ0FBQyx1QkFBUyxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZFLFdBQVcsRUFBRSxFQUFFO1NBQ2hCLEVBQ0QsQ0FBQyxjQUFjLENBQUMsRUFDaEIsQ0FBQyxhQUFhLENBQUMsQ0FDaEIsQ0FBQztRQUNGLElBQUEsZ0JBQU0sRUFBQyw0QkFBYyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNuRixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUN0RSxJQUFBLGlEQUF3QixFQUE0QixJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNqRyxVQUFVLENBQUMsU0FBUyxFQUNwQixjQUFjLEVBQ2QsTUFBTSxDQUFDLFdBQVcsRUFDbEIsTUFBTSxDQUFDLGVBQWUsQ0FDdkIsQ0FBQztRQUVGLDBFQUEwRTtRQUMxRSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sdUJBQVMsQ0FBQyxnQ0FBZ0MsQ0FDM0UsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFDckYsQ0FBQyxjQUFjLENBQUMsRUFDaEIsRUFBRSxDQUNILENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0csSUFBQSxnQkFBTSxFQUFDLGNBQWMsRUFBRSx3REFBd0QsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsc0JBQXNCLENBQUM7WUFDbEUsV0FBVyxFQUFFLEVBQUU7WUFDZixpQkFBaUIsRUFBRSxDQUFDLHVCQUFTLENBQUMsMkJBQTJCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDM0UsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSx1QkFBUyxDQUFDLDhCQUE4QixDQUNuRSx1QkFBUyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEVBQy9DLENBQUMsY0FBYyxDQUFDLEVBQ2hCLENBQUMsYUFBYSxDQUFDLENBQ2hCLENBQUM7UUFDRixNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyw0QkFBNEIsQ0FDdkYsSUFBQSxpREFBd0IsRUFBNEIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDakcsU0FBUyxFQUNULGNBQWMsQ0FDZixDQUFDO1FBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO1FBRW5GLCtEQUErRDtRQUMvRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sdUJBQVMsQ0FBQyxnQ0FBZ0MsQ0FDM0UsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFDckYsQ0FBQyxjQUFjLENBQUMsRUFDaEIsRUFBRSxDQUNILENBQUM7UUFDRixNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssNkJBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0csSUFBQSxnQkFBTSxFQUFDLGNBQWMsRUFBRSx3REFBd0QsQ0FBQyxDQUFDO1FBQ2pGLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDO1lBQ3ZDLFdBQVcsRUFBRSxFQUFFO1lBQ2YsaUJBQWlCLEVBQUUsQ0FBQyx1QkFBUyxDQUFDLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzNFLENBQUMsQ0FBQztRQUVILHNEQUFzRDtRQUN0RCxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyw0QkFBNEIsQ0FDNUYsSUFBQSxpREFBd0IsRUFBNEIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDakcsU0FBUyxDQUNWLENBQUM7UUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFFbkYsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1RCxNQUFNLDBCQUEwQixHQUFHLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUUsTUFBTSxrQkFBa0IsR0FBRyx1QkFBUyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDNUUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLGtCQUFrQixFQUFFLDhDQUE4QyxDQUFDLENBQUM7UUFFakcsTUFBTSxpQkFBaUIsR0FDckIsTUFBTSxDQUFDLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNHLElBQUksQ0FBQztZQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUN4RCw2QkFBZ0IsQ0FBQyxJQUFJLEVBQ3JCLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsMEJBQTBCLEVBQzFCLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyw4QkFBOEIsRUFDckMsTUFBTSxDQUFDLFlBQVksRUFDbkIsaUJBQWlCLEVBQ2pCLE1BQU0sQ0FBQyxpQkFBaUIsRUFDeEIsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLE1BQU0sRUFDYixFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQ3JFLENBQUM7WUFDRixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDMUQsNkJBQWdCLENBQUMsTUFBTSxFQUN2QixjQUFjLEVBQ2QsU0FBUyxFQUNULFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsOEJBQThCLEVBQ3JDLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxDQUFDLGlCQUFpQixFQUN4QixTQUFTLEVBQ1QsTUFBTSxDQUFDLE1BQU0sRUFDYixFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQ3ZFLENBQUM7WUFFRixNQUFNLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUN2RyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzFDLENBQUM7Z0JBQVMsQ0FBQztZQUNULGlCQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsUUFBbUM7UUFDbEUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDMUQsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQjtnQkFDNUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjthQUNqRCxDQUFDLENBQUM7WUFDSCxPQUFPO2dCQUNMLFdBQVcsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3BHLGFBQWEsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsbUJBQW1CLENBQUM7YUFDM0csQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUkscUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSw2QkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekQsYUFBYSxFQUFFLElBQUkscUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNLENBQUM7U0FDOUQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZwQkQsZ0RBdXBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERrbHNDb21tcywgRGtsc0RrZywgRGtsc0RydiwgRGtsc1R5cGVzLCBEa2xzVnJmIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE5vbkVtcHR5U3RyaW5nIH0gZnJvbSAnaW8tdHMtdHlwZXMnO1xuaW1wb3J0IHtcbiAgTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LFxuICBNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlLFxuICBNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QsXG4gIE1QQ3YyRGVyaXZlUm91bmQyUmVzcG9uc2UsXG4gIE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuUm91bmQyUmVzcG9uc2UsXG4gIE1QQ3YyS2V5R2VuU3RhdGVFbnVtLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi8uLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9rZXljaGFpbi9pS2V5Y2hhaW5zJztcbmltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpJztcbmltcG9ydCB7IGdlbmVyYXRlR1BHS2V5UGFpciB9IGZyb20gJy4uLy4uL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvIH0gZnJvbSAnLi4vLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgaXNCaXRnb01wY1B1YktleSB9IGZyb20gJy4uLy4uLy4uL3Rzcy9iaXRnb1B1YktleXMnO1xuaW1wb3J0IHsgRWNkc2FNUEN2MlV0aWxzIH0gZnJvbSAnLi9lY2RzYU1QQ3YyJztcbmltcG9ydCB7XG4gIEVjZHNhTVBDdjJEZXJpdmVLZXlTZW5kRm4sXG4gIEtleUdlblNlbmRlckZvckVudGVycHJpc2UsXG4gIEtleUdlblNlbmRlckZvclNhZmVDaGlsZCxcbn0gZnJvbSAnLi9lY2RzYU1QQ3YyS2V5R2VuU2VuZGVyJztcbmltcG9ydCB7IE1QQ3YyUGFydGllc0VudW0sIE1wY1YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHMgfSBmcm9tICcuL3R5cGVzTVBDdjInO1xuXG4vKipcbiAqIFZlcnNpb24gZmllbGQgb2YgdGhlIGBlbmNyeXB0ZWRQcnZgIGVudmVsb3BlIHVzZWQgd2hlbiBhIGNlcmVtb255IHByb2R1Y2VzIGJvdGggYVxuICogc2lnbmluZyBrZXlzaGFyZSBhbmQgYSBWUkYga2V5c2hhcmUuIFRoZSBwbGFpbnRleHQgaGFuZGVkIHRvIGVuY3J5cHQoKSBpc1xuICogYGJhc2U2NChjYm9yRW5jb2RlKGVudmVsb3BlKSlgLCBrZWVwaW5nIGl0IGEgc2luZ2xlIG9wYXF1ZSBiYXNlNjQgdG9rZW4gZXhhY3RseSBhc1xuICogdGhlIG9yZGluYXJ5IE1QQ3YyIGZvcm1hdCBkb2VzLlxuICovXG5jb25zdCBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04gPSAxO1xudHlwZSBWcmZLZXlFbnZlbG9wZSA9IHtcbiAgdmVyc2lvbjogdW5rbm93bjtcbiAgcHJ2S2V5U2hhcmU6IHVua25vd247XG4gIHZyZjogdW5rbm93bjtcbn07XG5cbmZ1bmN0aW9uIGlzVnJmS2V5RW52ZWxvcGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBWcmZLZXlFbnZlbG9wZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICd2ZXJzaW9uJyBpbiB2YWx1ZSAmJiAncHJ2S2V5U2hhcmUnIGluIHZhbHVlICYmICd2cmYnIGluIHZhbHVlO1xufVxuXG4vKipcbiAqIFdpcmUgZm9ybWF0IGZvciBWUkYgREtHIG1lc3NhZ2VzIHJpZGluZyB0aGUgTVBDdjItUjEvUjIgcGF5bG9hZHM6IGFuIG9wYXF1ZSBibG9iLFxuICogYGJhc2U2NChKU09OLnN0cmluZ2lmeShWcmZNZXNzYWdlVHJhbnNmZXJbXSkpYCwgY2FycnlpbmcgdGhlIHBhcnR5J3MgZnVsbCBiYXRjaCBvZlxuICogZW1pdHRlZCBtZXNzYWdlcy4gVGhlIFZSRiBES0cgZW1pdHMgYnJvYWRjYXN0IGNvbW1pdG1lbnRzIChSMSkgYW5kIHBlci1yZWNpcGllbnRcbiAqIG9wZW5pbmcgbWVzc2FnZXMgYWRkcmVzc2VkIHRvIGVhY2ggcGFydHkgaW5jbHVkaW5nIHRoZSBzZW5kZXIgKFIyKSwgc28gdGhlIHJlY2VpdmluZ1xuICogc2lkZSByb3V0ZXMgYnkgYHRvYCBhbmQga2VlcHMgbWVzc2FnZXMgYWRkcmVzc2VkIHRvIGl0c2VsZi5cbiAqL1xuaW50ZXJmYWNlIFZyZk1lc3NhZ2VUcmFuc2ZlciB7XG4gIGZyb206IG51bWJlcjtcbiAgdG8/OiBudW1iZXI7XG4gIHBheWxvYWQ6IHN0cmluZzsgLy8gYmFzZTY0XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKG1lc3NhZ2VzOiBEa2xzVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBzdHJpbmcge1xuICBjb25zdCB0cmFuc2ZlcnM6IFZyZk1lc3NhZ2VUcmFuc2ZlcltdID0gW1xuICAgIC4uLm1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcCgobSkgPT4gKHsgZnJvbTogbS5mcm9tLCBwYXlsb2FkOiBCdWZmZXIuZnJvbShtLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSB9KSksXG4gICAgLi4ubWVzc2FnZXMucDJwTWVzc2FnZXMubWFwKChtKSA9PiAoe1xuICAgICAgZnJvbTogbS5mcm9tLFxuICAgICAgdG86IG0udG8sXG4gICAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9KSksXG4gIF07XG4gIHJldHVybiBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeSh0cmFuc2ZlcnMpKS50b1N0cmluZygnYmFzZTY0Jyk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYmxvYjogc3RyaW5nLCBmb3JQYXJ0eTogbnVtYmVyKTogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgY29uc3QgdHJhbnNmZXJzOiBWcmZNZXNzYWdlVHJhbnNmZXJbXSA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20oYmxvYiwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCkpO1xuICByZXR1cm4ge1xuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiB0cmFuc2ZlcnNcbiAgICAgIC5maWx0ZXIoKHQpID0+IHQudG8gPT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKHQpID0+ICh7IGZyb206IHQuZnJvbSwgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odC5wYXlsb2FkLCAnYmFzZTY0JykpIH0pKSxcbiAgICBwMnBNZXNzYWdlczogdHJhbnNmZXJzXG4gICAgICAuZmlsdGVyKCh0KTogdCBpcyBWcmZNZXNzYWdlVHJhbnNmZXIgJiB7IHRvOiBudW1iZXIgfSA9PiB0LnRvID09PSBmb3JQYXJ0eSlcbiAgICAgIC5tYXAoKHQpID0+ICh7IGZyb206IHQuZnJvbSwgdG86IHQudG8sIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHQucGF5bG9hZCwgJ2Jhc2U2NCcpKSB9KSksXG4gIH07XG59XG5cbi8qKlxuICogQ29tYmluZXMgdGhlIHNpZ25pbmcga2V5c2hhcmUgd2l0aCB0aGUgVlJGIGtleXNoYXJlIGludG8gdGhlIGBlbmNyeXB0ZWRQcnZgIGVudmVsb3BlXG4gKiAoYGJhc2U2NChjYm9yRW5jb2RlKHt2ZXJzaW9uLCBwcnZLZXlTaGFyZSwgdnJmfSkpYCBvbmNlIHRoZSBjYWxsZXIgYmFzZTY0LWVuY29kZXMgdGhlXG4gKiByZXR1cm5lZCBidWZmZXJzKS4gVGhlIHNhbWUgY29udGFpbmVyIHdyYXBzIHRoZSByZWR1Y2VkIHNpZ25pbmcgc2hhcmUgZm9yXG4gKiBgcmVkdWNlZEVuY3J5cHRlZFBydmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgcHJpdmF0ZU1hdGVyaWFsOiBCdWZmZXIsXG4gIHJlZHVjZWRQcml2YXRlTWF0ZXJpYWw6IEJ1ZmZlcixcbiAgdnJmS2V5U2hhcmU6IEJ1ZmZlclxuKTogeyBlbnZlbG9wZTogQnVmZmVyOyByZWR1Y2VkRW52ZWxvcGU6IEJ1ZmZlciB9IHtcbiAgY29uc3QgZW52ZWxvcGUgPSBlbmNvZGUoe1xuICAgIHZlcnNpb246IFZSRl9LRVlfRU5WRUxPUEVfVkVSU0lPTixcbiAgICBwcnZLZXlTaGFyZTogbmV3IFVpbnQ4QXJyYXkocHJpdmF0ZU1hdGVyaWFsKSxcbiAgICB2cmY6IG5ldyBVaW50OEFycmF5KHZyZktleVNoYXJlKSxcbiAgfSk7XG4gIGNvbnN0IHJlZHVjZWRFbnZlbG9wZSA9IGVuY29kZSh7XG4gICAgdmVyc2lvbjogVlJGX0tFWV9FTlZFTE9QRV9WRVJTSU9OLFxuICAgIHBydktleVNoYXJlOiBuZXcgVWludDhBcnJheShyZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsKSxcbiAgICB2cmY6IG5ldyBVaW50OEFycmF5KHZyZktleVNoYXJlKSxcbiAgfSk7XG4gIHJldHVybiB7IGVudmVsb3BlOiBCdWZmZXIuZnJvbShlbnZlbG9wZSksIHJlZHVjZWRFbnZlbG9wZTogQnVmZmVyLmZyb20ocmVkdWNlZEVudmVsb3BlKSB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGRlY3J5cHRlZCByb290IGJsb2IgcHJvZHVjZWQgYnkge0BsaW5rIGJ1aWxkVnJmS2V5RW52ZWxvcGVzfTogYSBDQk9SXG4gKiBlbnZlbG9wZSBge3ZlcnNpb246IDEsIHBydktleVNoYXJlLCB2cmZ9YC4gUmV0dXJucyB0aGUgc2lnbmluZyBhbmQgVlJGIGtleXNoYXJlc1xuICogYXMgQnVmZmVycy4gVGhyb3dzIGlmIHRoZSBibG9iIGlzIG5vdCBhIHZhbGlkIFZSRiBrZXkgZW52ZWxvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZyZktleUVudmVsb3BlcyhkZWNyeXB0ZWRCbG9iOiBzdHJpbmcpOiB7IHNpZ25pbmc6IEJ1ZmZlcjsgdnJmOiBCdWZmZXIgfSB7XG4gIGxldCBlbnZlbG9wZTogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBlbnZlbG9wZSA9IGRlY29kZShCdWZmZXIuZnJvbShkZWNyeXB0ZWRCbG9iLCAnYmFzZTY0JykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgc2FmZSBNUEMgcm9vdCBrZXkgZW52ZWxvcGU6ICR7bWVzc2FnZX1gKTtcbiAgfVxuICBpZiAoIWlzVnJmS2V5RW52ZWxvcGUoZW52ZWxvcGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlOiBleHBlY3RlZCB2ZXJzaW9uLCBzaWduaW5nIGtleXNoYXJlLCBhbmQgVlJGIGtleXNoYXJlJyk7XG4gIH1cbiAgY29uc3QgeyB2ZXJzaW9uLCBwcnZLZXlTaGFyZSwgdnJmIH0gPSBlbnZlbG9wZTtcbiAgaWYgKHZlcnNpb24gIT09IFZSRl9LRVlfRU5WRUxPUEVfVkVSU0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2FmZSBNUEMgcm9vdCBrZXkgZW52ZWxvcGUgdmVyc2lvbjogJHtTdHJpbmcodmVyc2lvbil9YCk7XG4gIH1cbiAgaWYgKCEocHJ2S2V5U2hhcmUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBwcnZLZXlTaGFyZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlIGlzIG1pc3NpbmcgYSBzaWduaW5nIGtleXNoYXJlJyk7XG4gIH1cbiAgaWYgKCEodnJmIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgdnJmLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2FmZSBNUEMgcm9vdCBrZXkgZW52ZWxvcGUgaXMgbWlzc2luZyBhIFZSRiBrZXlzaGFyZScpO1xuICB9XG4gIHJldHVybiB7IHNpZ25pbmc6IEJ1ZmZlci5mcm9tKHBydktleVNoYXJlKSwgdnJmOiBCdWZmZXIuZnJvbSh2cmYpIH07XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIGhhcmRlbmVkIGRlcml2YXRpb24gaW5kZXggYXMgdGhlIGJ5dGUgcGF0aCB0aGUgREtMUyBoYXJkLWRlcml2ZSB3YXNtXG4gKiBleHBlY3RzOiBvbmUgYmlnLWVuZGlhbiB1MzIgd2l0aCB0aGUgaGFyZGVuZWQgYml0ICgweDgwMDAwMDAwKSBzZXQg4oCUIGkuZS4gdGhlXG4gKiBjaGlsZCBwYXRoIGBtLzxpbmRleD4nYC4gVGhlIHNlcnZlciBkZXJpdmVzIHRoZSBzYW1lIGhhcmRlbmVkIHBhdGggZnJvbSB0aGVcbiAqIGBkZXJpdmF0aW9uSW5kZXhgIGl0IHJlY2VpdmVzIG9uIHJvdW5kIDEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXJkZW5lZERlcml2YXRpb25QYXRoKGluZGV4OiBudW1iZXIpOiBVaW50OEFycmF5IHtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPiAweDdmZmZmZmZmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlcml2YXRpb24gaW5kZXg6ICR7aW5kZXh9YCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFsweDgwIHwgKGluZGV4ID4+PiAyNCksIChpbmRleCA+Pj4gMTYpICYgMHhmZiwgKGluZGV4ID4+PiA4KSAmIDB4ZmYsIGluZGV4ICYgMHhmZl0pO1xufVxuXG4vKipcbiAqIEVjZHNhTVBDdjJVdGlscyB2YXJpYW50IHRoYXQgcnVucyB0aGUgUmlzdHJldHRvIFZSRiBES0cgYWxvbmdzaWRlIHRoZSBzaWduaW5nIERLTFNcbiAqIERLRyBpbnNpZGUgdGhlIHNhbWUgTVBDdjIga2V5Z2VuIHJvdW5kcywgZm9yIHNhZmUgTVBDIHJvb3QgY3JlYXRpb24uXG4gKlxuICogVGhlIHJvdW5kIGVudW0gaXMgdW5jaGFuZ2VkOiB0aGUgVlJGIGNvbW1pdG1lbnQgcmlkZXMgTVBDdjItUjEsIHRoZSBvcGVuaW5nIHJpZGVzXG4gKiBNUEN2Mi1SMiwgYW5kIHRoZSBWUkYgREtHIGZpbmFsaXplcyBsb2NhbGx5IGJlZm9yZSBNUEN2Mi1SMy4gVlJGIG1lc3NhZ2VzIHRyYXZlbCBhc1xuICogb3BhcXVlIGJhc2U2NCBmaWVsZHMgb24gdGhlIHJvdW5kIHBheWxvYWRzLCBuZXZlciB0aHJvdWdoIHRoZSBES0xTIGJyb2FkY2FzdC9wMnAgc2xvdHMuXG4gKiBBdCB0aGUgZW5kLCB0aGUgc2lnbmluZyBhbmQgVlJGIGtleXNoYXJlcyBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBDQk9SIGVudmVsb3BlXG4gKiBiZWZvcmUgZW5jcnlwdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEVjZHNhVnJmTVBDdjJVdGlscyBleHRlbmRzIEVjZHNhTVBDdjJVdGlscyB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U6IHN0cmluZztcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gICAgcmV0cm9maXQ/OiBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQ7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICAgIC8vIFRhZ3MgdGhlIHJlc3VsdGluZyB1c2VyL2JhY2t1cC9iaXRnbyByb290IGtleXMgd2l0aCB0aGlzIHNhZmUuXG4gICAgc2FmZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCB7IHVzZXJTZXNzaW9uLCBiYWNrdXBTZXNzaW9uIH0gPSB0aGlzLmNyZWF0ZVNpZ25pbmdEa2dTZXNzaW9ucyhwYXJhbXMucmV0cm9maXQpO1xuICAgIGNvbnN0IHVzZXJWcmZTZXNzaW9uID0gbmV3IERrbHNWcmYuVnJmRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgY29uc3QgYmFja3VwVnJmU2Vzc2lvbiA9IG5ldyBEa2xzVnJmLlZyZkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCk7XG5cbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcbiAgICBjb25zdCBiYWNrdXBHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuXG4gICAgLy8gR2V0IHRoZSBCaXRHbyBwdWJsaWMga2V5IGJhc2VkIG9uIHVzZXIvZW50ZXJwcmlzZSBmZWF0dXJlIGZsYWdzXG4gICAgLy8gSWYgaXQgZG9lc24ndCB3b3JrLCB1c2UgdGhlIGRlZmF1bHQgcHVibGljIGtleSBmcm9tIHRoZSBjb25zdGFudHNcbiAgICBjb25zdCB7IG1wY3YyUHVibGljS2V5IH0gPSBhd2FpdCB0aGlzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhwYXJhbXMuZW50ZXJwcmlzZSwgdHJ1ZSk7XG4gICAgY29uc3QgbXBjdjJLZXkgPSBtcGN2MlB1YmxpY0tleSA/PyB0aGlzLmJpdGdvTVBDdjJQdWJsaWNHcGdLZXk7XG4gICAgYXNzZXJ0KG1wY3YyS2V5LCAnRmFpbGVkIHRvIGdldCBCaXRHbyBNUEN2MiBHUEcgcHVibGljIGtleScpO1xuICAgIGNvbnN0IGJpdGdvUHVibGljR3BnS2V5ID0gbXBjdjJLZXkuYXJtb3IoKTtcblxuICAgIGlmIChlbnZSZXF1aXJlc0JpdGdvUHViR3BnS2V5Q29uZmlnKHRoaXMuYml0Z28uZ2V0RW52KCkpKSB7XG4gICAgICAvLyBFbnN1cmUgdGhlIHB1YmxpYyBrZXkgaXMgb25lIG9mIHRoZSBleHBlY3RlZCBCaXRHbyBwdWJsaWMga2V5cyB3aGVuIGluIHRlc3Qgb3IgcHJvZC5cbiAgICAgIGFzc2VydChpc0JpdGdvTXBjUHViS2V5KGJpdGdvUHVibGljR3BnS2V5LCAnbXBjdjInKSwgJ0ludmFsaWQgQml0R28gR1BHIHB1YmxpYyBrZXknKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyR3BnUHJ2S2V5OiBEa2xzVHlwZXMuUGFydHlHcGdLZXkgPSB7XG4gICAgICBwYXJ0eUlkOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICBncGdLZXk6IHVzZXJHcGdLZXkucHJpdmF0ZUtleSxcbiAgICB9O1xuICAgIGNvbnN0IGJhY2t1cEdwZ1BydktleTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5ID0ge1xuICAgICAgcGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsXG4gICAgICBncGdLZXk6IGJhY2t1cEdwZ0tleS5wcml2YXRlS2V5LFxuICAgIH07XG4gICAgY29uc3QgYml0Z29HcGdQdWJLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBncGdLZXk6IGJpdGdvUHVibGljR3BnS2V5LFxuICAgIH07XG5cbiAgICAvLyAjcmVnaW9uIHJvdW5kIDFcbiAgICBjb25zdCB1c2VyUm91bmQxQnJvYWRjYXN0TXNnID0gYXdhaXQgdXNlclNlc3Npb24uaW5pdERrZygpO1xuICAgIGNvbnN0IGJhY2t1cFJvdW5kMUJyb2FkY2FzdE1zZyA9IGF3YWl0IGJhY2t1cFNlc3Npb24uaW5pdERrZygpO1xuICAgIGNvbnN0IHVzZXJWcmZSb3VuZDFNc2cgPSBhd2FpdCB1c2VyVnJmU2Vzc2lvbi5pbml0RGtnKCk7XG4gICAgY29uc3QgYmFja3VwVnJmUm91bmQxTXNnID0gYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5pbml0RGtnKCk7XG5cbiAgICBjb25zdCByb3VuZDFTZXJpYWxpemVkTWVzc2FnZXMgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFt1c2VyUm91bmQxQnJvYWRjYXN0TXNnLCBiYWNrdXBSb3VuZDFCcm9hZGNhc3RNc2ddLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMU1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIHJvdW5kMVNlcmlhbGl6ZWRNZXNzYWdlcyxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleSwgYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgdXNlck1zZzEgPSByb3VuZDFNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik/LnBheWxvYWQ7XG4gICAgY29uc3QgYmFja3VwTXNnMSA9IHJvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApPy5wYXlsb2FkO1xuICAgIGFzc2VydCh1c2VyTXNnMSwgJ1VzZXIgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQoYmFja3VwTXNnMSwgJ0JhY2t1cCBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgdXNlckdwZ1B1YmxpY0tleSA9IHVzZXJHcGdLZXkucHVibGljS2V5O1xuICAgIGNvbnN0IGJhY2t1cEdwZ1B1YmxpY0tleSA9IGJhY2t1cEdwZ0tleS5wdWJsaWNLZXk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdQdWJsaWNLZXkpLCAnVXNlciBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhiYWNrdXBHcGdQdWJsaWNLZXkpLCAnQmFja3VwIEdQRyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkJyk7XG4gICAgLy8gS2VlcCBWUkYgbWVzc2FnZXMgb3BhcXVlIG9uIHRoZSBrZXktZ2VuZXJhdGlvbiByZXF1ZXN0LlxuICAgIGNvbnN0IHJvdW5kMVNlbmRlciA9IEtleUdlblNlbmRlckZvckVudGVycHJpc2U8TVBDdjJLZXlHZW5Sb3VuZDFSZXNwb25zZSAmIE1wY1YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM+KFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICk7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIGJpdGdvTXNnMSwgYml0Z29Ub0JhY2t1cE1zZzIsIGJpdGdvVG9Vc2VyTXNnMiwgYml0Z29WcmZNc2cxIH0gPSBhd2FpdCByb3VuZDFTZW5kZXIoXG4gICAgICBNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjEnXSxcbiAgICAgIHtcbiAgICAgICAgdXNlck1zZzE6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCAuLi51c2VyTXNnMSB9LFxuICAgICAgICBiYWNrdXBNc2cxOiB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCAuLi5iYWNrdXBNc2cxIH0sXG4gICAgICAgIHVzZXJHcGdQdWJsaWNLZXksXG4gICAgICAgIGJhY2t1cEdwZ1B1YmxpY0tleSxcbiAgICAgICAgdXNlclZyZk1zZzE6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKHVzZXJWcmZSb3VuZDFNc2cpLFxuICAgICAgICBiYWNrdXBWcmZNc2cxOiBzZXJpYWxpemVWcmZNZXNzYWdlcyhiYWNrdXBWcmZSb3VuZDFNc2cpLFxuICAgICAgICB3YWxsZXRJZDogcGFyYW1zLnJldHJvZml0Py53YWxsZXRJZCxcbiAgICAgIH1cbiAgICApO1xuICAgIGFzc2VydChiaXRnb1ZyZk1zZzEsICdCaXRHbyBWUkYgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiByb3VuZCAxIHJlc3BvbnNlJyk7XG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiByb3VuZCAyXG4gICAgY29uc3QgYml0Z29Sb3VuZDFCcm9hZGNhc3RNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMSldIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXksIGJhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnID0gYml0Z29Sb3VuZDFCcm9hZGNhc3RNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnLCAnQml0R28gbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcblxuICAgIGNvbnN0IHVzZXJSb3VuZDJQMlBNZXNzYWdlcyA9IHVzZXJTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtEa2xzVHlwZXMuZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnKSwgYmFja3VwUm91bmQxQnJvYWRjYXN0TXNnXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZXJUb0JpdGdvTXNnMiA9IHVzZXJSb3VuZDJQMlBNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CaXRnb01zZzIsICdVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMiA9IERrbHNUeXBlcy5zZXJpYWxpemVQMlBNZXNzYWdlKHVzZXJUb0JpdGdvTXNnMik7XG5cbiAgICBjb25zdCBiYWNrdXBSb3VuZDJQMlBNZXNzYWdlcyA9IGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW3VzZXJSb3VuZDFCcm9hZGNhc3RNc2csIERrbHNUeXBlcy5kZXNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UoYml0Z29Sb3VuZDFCcm9hZGNhc3RNc2cpXSxcbiAgICB9KTtcbiAgICBjb25zdCBzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzIgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoYmFja3VwUm91bmQyUDJQTWVzc2FnZXMpLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2cyLCAnQmFja3VwIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG5cbiAgICAvLyBWUkY6IGNvbnN1bWUgQml0R28ncyBhbmQgdGhlIGNvdW50ZXJwYXJ0eSdzIGNvbW1pdG1lbnRzLCBlbWl0IHRoaXMgcGFydHkncyBvcGVuaW5ncy5cbiAgICAvLyBPcGVuaW5ncyBjb21lIGJhY2sgYXMgcDJwIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBlYWNoIHBhcnR5IChpbmNsdWRpbmcgdGhlIHNlbmRlcikuXG4gICAgY29uc3QgdXNlclZyZlJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgdXNlclZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICAuLi5iYWNrdXBWcmZSb3VuZDFNc2cuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cxLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhY2t1cFZyZlJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZSb3VuZDFNc2cuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cxLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCkuYnJvYWRjYXN0TWVzc2FnZXMsXG4gICAgICBdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm91bmQyTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW3NlcmlhbGl6ZWRVc2VyVG9CaXRnb01zZzIsIHNlcmlhbGl6ZWRCYWNrdXBUb0JpdGdvTXNnMl0sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5LCBiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCB1c2VyUm91bmQyTXNnID0gcm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBjb25zdCBiYWNrdXBSb3VuZDJNc2cgPSByb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDJNc2csICdVc2VyIHRvIEJpdGdvIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDJNc2cuY29tbWl0bWVudCwgJ1VzZXIgdG8gQml0Z28gY29tbWl0bWVudCBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KGJhY2t1cFJvdW5kMk1zZywgJ0JhY2t1cCB0byBCaXRnbyBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGFzc2VydChiYWNrdXBSb3VuZDJNc2cuY29tbWl0bWVudCwgJ0JhY2t1cCB0byBCaXRnbyBjb21taXRtZW50IG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXModXNlclJvdW5kMk1zZy5jb21taXRtZW50KSwgJ1VzZXIgdG8gQml0Z28gY29tbWl0bWVudCBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhiYWNrdXBSb3VuZDJNc2cuY29tbWl0bWVudCksICdCYWNrdXAgdG8gQml0Z28gY29tbWl0bWVudCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHJvdW5kMlNlbmRlciA9IEtleUdlblNlbmRlckZvckVudGVycHJpc2U8TVBDdjJLZXlHZW5Sb3VuZDJSZXNwb25zZSAmIE1wY1YyVnJmS2V5R2VuUmVzcG9uc2VGaWVsZHM+KFxuICAgICAgdGhpcy5iaXRnbyxcbiAgICAgIHBhcmFtcy5lbnRlcnByaXNlXG4gICAgKTtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMixcbiAgICAgIGJpdGdvQ29tbWl0bWVudDIsXG4gICAgICBiaXRnb1RvVXNlck1zZzMsXG4gICAgICBiaXRnb1RvQmFja3VwTXNnMyxcbiAgICAgIGJpdGdvVnJmTXNnMixcbiAgICB9ID0gYXdhaXQgcm91bmQyU2VuZGVyKE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMiddLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB1c2VyTXNnMjoge1xuICAgICAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICAgIHRvOiBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgICBzaWduYXR1cmU6IHVzZXJSb3VuZDJNc2cucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHVzZXJSb3VuZDJNc2cucGF5bG9hZC5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHVzZXJDb21taXRtZW50MjogdXNlclJvdW5kMk1zZy5jb21taXRtZW50LFxuICAgICAgYmFja3VwTXNnMjoge1xuICAgICAgICBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCxcbiAgICAgICAgdG86IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICAgIHNpZ25hdHVyZTogYmFja3VwUm91bmQyTXNnLnBheWxvYWQuc2lnbmF0dXJlLFxuICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiBiYWNrdXBSb3VuZDJNc2cucGF5bG9hZC5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIGJhY2t1cENvbW1pdG1lbnQyOiBiYWNrdXBSb3VuZDJNc2cuY29tbWl0bWVudCxcbiAgICAgIHVzZXJWcmZNc2cyOiBzZXJpYWxpemVWcmZNZXNzYWdlcyh1c2VyVnJmUm91bmQyTWVzc2FnZXMpLFxuICAgICAgYmFja3VwVnJmTXNnMjogc2VyaWFsaXplVnJmTWVzc2FnZXMoYmFja3VwVnJmUm91bmQyTWVzc2FnZXMpLFxuICAgIH0pO1xuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gcm91bmQgM1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMiwgJ1JvdW5kIDEgYW5kIDIgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG4gICAgYXNzZXJ0KGJpdGdvVnJmTXNnMiwgJ0JpdEdvIFZSRiBtZXNzYWdlIDIgbm90IGZvdW5kIGluIHJvdW5kIDIgcmVzcG9uc2UnKTtcblxuICAgIC8vIFZSRjogZmluYWxpemUgYm90aCBES0dzIGxvY2FsbHkgYnkgY29uc3VtaW5nIHRoZSBvcGVuaW5nIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBlYWNoXG4gICAgLy8gcGFydHkgKGluY2x1ZGluZyBlYWNoIHBhcnR5J3Mgb3duKSBmcm9tIHRoZSBSMiBleGNoYW5nZXMuIFRoZSBWUkYgREtHIGNvbXBsZXRlcyBoZXJlLFxuICAgIC8vIGEgZnVsbCByb3VuZCBvZiBzbGFjayBiZWZvcmUgTVBDdjItUjMuXG4gICAgYXdhaXQgdXNlclZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLFxuICAgICAgICAuLi5iYWNrdXBWcmZSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLnAycE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBhd2FpdCBiYWNrdXBWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgICAgICAuLi5iYWNrdXBWcmZSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKSxcbiAgICAgICAgLi4uZGVzZXJpYWxpemVWcmZNZXNzYWdlcyhiaXRnb1ZyZk1zZzIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKS5wMnBNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kMk1zZ3MgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICB7IHAycE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRQMlBNZXNzYWdlKGJpdGdvVG9Vc2VyTXNnMildLCBicm9hZGNhc3RNZXNzYWdlczogW10gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kMk1zZyA9IGRlY3J5cHRlZEJpdGdvVG9Vc2VyUm91bmQyTXNncy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVJcbiAgICApO1xuICAgIGFzc2VydChzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDJNc2csICdCaXRHbyB0byBVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgYml0Z29Ub1VzZXJSb3VuZDJNc2cgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVQMlBNZXNzYWdlKHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kMk1zZyk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW3RoaXMuZm9ybWF0UDJQTWVzc2FnZShiaXRnb1RvQmFja3VwTXNnMildLCBicm9hZGNhc3RNZXNzYWdlczogW10gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2cgPSBkZWNyeXB0ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2csICdCaXRHbyB0byBCYWNrdXAgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwUm91bmQyTXNnID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplUDJQTWVzc2FnZShzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kMk1zZyk7XG5cbiAgICBjb25zdCB1c2VyVG9CYWNrdXBNc2cyID0gdXNlclJvdW5kMlAyUE1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CYWNrdXBNc2cyLCAnVXNlciB0byBCYWNrdXAgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcblxuICAgIGNvbnN0IGJhY2t1cFRvVXNlck1zZzIgPSBiYWNrdXBSb3VuZDJQMlBNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwVG9Vc2VyTXNnMiwgJ0JhY2t1cCB0byBVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCB1c2VyUm91bmQzTWVzc2FnZXMgPSB1c2VyU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Ub1VzZXJSb3VuZDJNc2csIGJhY2t1cFRvVXNlck1zZzJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHVzZXJUb0JhY2t1cE1zZzMgPSB1c2VyUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG4gICAgYXNzZXJ0KHVzZXJUb0JhY2t1cE1zZzMsICdVc2VyIHRvIEJhY2t1cCBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvTXNnMyA9IHVzZXJSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CaXRnb01zZzMsICdVc2VyIHRvIEJpdGdvIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMyA9IERrbHNUeXBlcy5zZXJpYWxpemVQMlBNZXNzYWdlKHVzZXJUb0JpdGdvTXNnMyk7XG5cbiAgICBjb25zdCBiYWNrdXBSb3VuZDNNZXNzYWdlcyA9IGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW2JpdGdvVG9CYWNrdXBSb3VuZDJNc2csIHVzZXJUb0JhY2t1cE1zZzJdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYmFja3VwVG9Vc2VyTXNnMyA9IGJhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVJcbiAgICApO1xuICAgIGFzc2VydChiYWNrdXBUb1VzZXJNc2czLCAnQmFja3VwIHRvIFVzZXIgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvTXNnMyA9IGJhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwVG9CaXRnb01zZzMsICdCYWNrdXAgdG8gQml0Z28gbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzMgPSBEa2xzVHlwZXMuc2VyaWFsaXplUDJQTWVzc2FnZShiYWNrdXBUb0JpdGdvTXNnMyk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kM01lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRQMlBNZXNzYWdlKGJpdGdvVG9Vc2VyTXNnMywgYml0Z29Db21taXRtZW50MildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDNNc2cgPSBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUlxuICAgICk7XG4gICAgYXNzZXJ0KHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kM01zZywgJ0JpdEdvIHRvIFVzZXIgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvVXNlclJvdW5kM01zZyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZVAyUE1lc3NhZ2Uoc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQzTXNnKTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJpdGdvVG9CYWNrdXBSb3VuZDNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW3RoaXMuZm9ybWF0UDJQTWVzc2FnZShiaXRnb1RvQmFja3VwTXNnMywgYml0Z29Db21taXRtZW50MildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW2JhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQzTXNnID0gZGVjcnlwdGVkQml0Z29Ub0JhY2t1cFJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDNNc2csICdCaXRHbyB0byBCYWNrdXAgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwUm91bmQzTXNnID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplUDJQTWVzc2FnZShzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kM01zZyk7XG5cbiAgICBjb25zdCB1c2VyUm91bmQ0TWVzc2FnZXMgPSB1c2VyU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbYmFja3VwVG9Vc2VyTXNnMywgYml0Z29Ub1VzZXJSb3VuZDNNc2ddLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXNlclJvdW5kNEJyb2FkY2FzdE1zZyA9IHVzZXJSb3VuZDRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgYXNzZXJ0KHVzZXJSb3VuZDRCcm9hZGNhc3RNc2csICdVc2VyIG1lc3NhZ2UgNCBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVzZXJSb3VuZDRCcm9hZGNhc3RNc2cgPSBEa2xzVHlwZXMuc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZSh1c2VyUm91bmQ0QnJvYWRjYXN0TXNnKTtcblxuICAgIGNvbnN0IGJhY2t1cFJvdW5kNE1lc3NhZ2VzID0gYmFja3VwU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbdXNlclRvQmFja3VwTXNnMywgYml0Z29Ub0JhY2t1cFJvdW5kM01zZ10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgfSk7XG4gICAgY29uc3QgYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnID0gYmFja3VwUm91bmQ0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnLCAnQmFja3VwIG1lc3NhZ2UgNCBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZyA9IERrbHNUeXBlcy5zZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZyk7XG5cbiAgICBjb25zdCByb3VuZDNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICB7XG4gICAgICAgIHAycE1lc3NhZ2VzOiBbc2VyaWFsaXplZFVzZXJUb0JpdGdvTXNnMywgc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2czXSxcbiAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtzZXJpYWxpemVkVXNlclJvdW5kNEJyb2FkY2FzdE1zZywgc2VyaWFsaXplZEJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZ10sXG4gICAgICB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5LCBiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkUm91bmQzLFxuICAgICAgYml0Z29Nc2c0LFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGJpdGdvQ29tbW9uS2V5Y2hhaW4sXG4gICAgfSA9IGF3YWl0IHRoaXMuc2VuZEtleUdlbmVyYXRpb25Sb3VuZDMocGFyYW1zLmVudGVycHJpc2UsIHNlc3Npb25JZCwgcm91bmQzTWVzc2FnZXMpO1xuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiBrZXljaGFpbiBjcmVhdGlvblxuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMywgJ1JvdW5kIDEgYW5kIDMgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG4gICAgY29uc3QgYml0Z29Sb3VuZDRCcm9hZGNhc3RNZXNzYWdlcyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKFxuICAgICAgYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgICB7IHAycE1lc3NhZ2VzOiBbXSwgYnJvYWRjYXN0TWVzc2FnZXM6IFt0aGlzLmZvcm1hdEJpdGdvQnJvYWRjYXN0TWVzc2FnZShiaXRnb01zZzQpXSB9LFxuICAgICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICkuYnJvYWRjYXN0TWVzc2FnZXM7XG4gICAgY29uc3QgYml0Z29Sb3VuZDRCcm9hZGNhc3RNc2cgPSBiaXRnb1JvdW5kNEJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG5cbiAgICBhc3NlcnQoYml0Z29Sb3VuZDRCcm9hZGNhc3RNc2csICdCaXRHbyBtZXNzYWdlIDQgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIHVzZXJTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb1JvdW5kNEJyb2FkY2FzdE1zZywgYmFja3VwUm91bmQ0QnJvYWRjYXN0TXNnXSxcbiAgICB9KTtcblxuICAgIGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW2JpdGdvUm91bmQ0QnJvYWRjYXN0TXNnLCB1c2VyUm91bmQ0QnJvYWRjYXN0TXNnXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZXJQcml2YXRlTWF0ZXJpYWwgPSB1c2VyU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IGJhY2t1cFByaXZhdGVNYXRlcmlhbCA9IGJhY2t1cFNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IHVzZXJTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IGJhY2t1cFJlZHVjZWRQcml2YXRlTWF0ZXJpYWwgPSBiYWNrdXBTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJWcmZLZXlTaGFyZSA9IHVzZXJWcmZTZXNzaW9uLmdldEtleVNoYXJlKCk7XG4gICAgY29uc3QgYmFja3VwVnJmS2V5U2hhcmUgPSBiYWNrdXBWcmZTZXNzaW9uLmdldEtleVNoYXJlKCk7XG5cbiAgICBjb25zdCB1c2VyQ29tbW9uS2V5Y2hhaW4gPSBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4odXNlclByaXZhdGVNYXRlcmlhbCk7XG4gICAgY29uc3QgYmFja3VwQ29tbW9uS2V5Y2hhaW4gPSBEa2xzVHlwZXMuZ2V0Q29tbW9uS2V5Y2hhaW4oYmFja3VwUHJpdmF0ZU1hdGVyaWFsKTtcblxuICAgIGFzc2VydC5lcXVhbChiaXRnb0NvbW1vbktleWNoYWluLCB1c2VyQ29tbW9uS2V5Y2hhaW4sICdVc2VyIGFuZCBCaXRnbyBDb21tb24ga2V5Y2hhaW5zIGRvIG5vdCBtYXRjaCcpO1xuICAgIGFzc2VydC5lcXVhbChiaXRnb0NvbW1vbktleWNoYWluLCBiYWNrdXBDb21tb25LZXljaGFpbiwgJ0JhY2t1cCBhbmQgQml0Z28gQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcblxuICAgIGNvbnN0IHsgZW52ZWxvcGU6IHVzZXJFbnZlbG9wZSwgcmVkdWNlZEVudmVsb3BlOiB1c2VyUmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgICAgIHVzZXJQcml2YXRlTWF0ZXJpYWwsXG4gICAgICB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCxcbiAgICAgIHVzZXJWcmZLZXlTaGFyZVxuICAgICk7XG4gICAgY29uc3QgeyBlbnZlbG9wZTogYmFja3VwRW52ZWxvcGUsIHJlZHVjZWRFbnZlbG9wZTogYmFja3VwUmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFZyZktleUVudmVsb3BlcyhcbiAgICAgIGJhY2t1cFByaXZhdGVNYXRlcmlhbCxcbiAgICAgIGJhY2t1cFJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICBiYWNrdXBWcmZLZXlTaGFyZVxuICAgICk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uU2Vzc2lvbiA9XG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24gPT09IDIgPyBhd2FpdCB0aGlzLmJpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uKHBhcmFtcy5wYXNzcGhyYXNlKSA6IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgICBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgICAgICB1c2VyRW52ZWxvcGUsXG4gICAgICAgIHVzZXJSZWR1Y2VkRW52ZWxvcGUsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsXG4gICAgICAgIGJpdGdvQ29tbW9uS2V5Y2hhaW4sXG4gICAgICAgIGJhY2t1cEVudmVsb3BlLFxuICAgICAgICBiYWNrdXBSZWR1Y2VkRW52ZWxvcGUsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uLFxuICAgICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgICBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgICBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zLnNhZmVJZFxuICAgICAgKTtcblxuICAgICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB1c2VyS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgICBiYWNrdXBLZXljaGFpblByb21pc2UsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgXSk7XG4gICAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgICAgYmFja3VwS2V5Y2hhaW4sXG4gICAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlbmNyeXB0aW9uU2Vzc2lvbj8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2VuZHMgcm91bmQgMSBmb3IgdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmUgY2VyZW1vbnkuXG4gICAqL1xuICBhc3luYyBzZW5kRGVyaXZhdGlvblJvdW5kMUJ5U2VuZGVyKFxuICAgIHNlbmRlckZuOiBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuPE1QQ3YyRGVyaXZlUm91bmQxUmVzcG9uc2U+LFxuICAgIHVzZXJHcGdQdWJsaWNLZXk6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBEa2xzVHlwZXMuQXV0aEVuY01lc3NhZ2VzLFxuICAgIHBhcmVudEtleUlkOiBzdHJpbmcsXG4gICAgZGVyaXZhdGlvbkluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlPiB7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdQdWJsaWNLZXkpLCAnVXNlciBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhwYXJlbnRLZXlJZCksICdQYXJlbnQga2V5IGlkIGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgdXNlck1zZzEgPSBwYXlsb2FkLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKT8ucGF5bG9hZDtcbiAgICBhc3NlcnQodXNlck1zZzEsICdVc2VyIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG5cbiAgICBhc3NlcnQoXG4gICAgICBNUEN2MkRlcml2ZVJvdW5kMVJlcXVlc3QucHJvcHMuZGVyaXZhdGlvbkluZGV4LmlzKGRlcml2YXRpb25JbmRleCksXG4gICAgICAnRGVyaXZhdGlvbiBpbmRleCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIHNhZmUgaW50ZWdlcidcbiAgICApO1xuICAgIGNvbnN0IHJlcXVlc3Q6IE1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCA9IHtcbiAgICAgIHVzZXJHcGdQdWJsaWNLZXksXG4gICAgICB1c2VyTXNnMTogeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIC4uLnVzZXJNc2cxIH0sXG4gICAgICBwYXJlbnRLZXlJZCxcbiAgICAgIGRlcml2YXRpb25JbmRleCxcbiAgICB9O1xuICAgIHJldHVybiBzZW5kZXJGbihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjJEZXJpdmUtUjEnXSwgcmVxdWVzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgcm91bmQgMiBmb3IgdGhlIHVzZXIvQml0R28gaGFyZC1kZXJpdmUgY2VyZW1vbnkuXG4gICAqL1xuICBhc3luYyBzZW5kRGVyaXZhdGlvblJvdW5kMkJ5U2VuZGVyKFxuICAgIHNlbmRlckZuOiBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuPE1QQ3YyRGVyaXZlUm91bmQyUmVzcG9uc2U+LFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHBheWxvYWQ6IERrbHNUeXBlcy5BdXRoRW5jTWVzc2FnZXNcbiAgKTogUHJvbWlzZTxNUEN2MkRlcml2ZVJvdW5kMlJlc3BvbnNlPiB7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHNlc3Npb25JZCksICdTZXNzaW9uIElEIGlzIHJlcXVpcmVkJyk7XG4gICAgY29uc3QgdXNlck1zZzIgPSBwYXlsb2FkLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKT8ucGF5bG9hZDtcbiAgICBhc3NlcnQodXNlck1zZzIsICdVc2VyIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB1c2VyTXNnMjogeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIC4uLnVzZXJNc2cyIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc2VuZGVyRm4oTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIyJ10sIHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyByb3VuZCAzIGFuZCByZXR1cm5zIHRoZSBjaGlsZCBjb21tb24ga2V5Y2hhaW4uXG4gICAqL1xuICBhc3luYyBzZW5kRGVyaXZhdGlvblJvdW5kM0J5U2VuZGVyKFxuICAgIHNlbmRlckZuOiBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuPE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2U+LFxuICAgIHNlc3Npb25JZDogc3RyaW5nXG4gICk6IFByb21pc2U8TVBDdjJEZXJpdmVSb3VuZDNSZXNwb25zZT4ge1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhzZXNzaW9uSWQpLCAnU2Vzc2lvbiBJRCBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybiBzZW5kZXJGbihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjJEZXJpdmUtUjMnXSwgeyBzZXNzaW9uSWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgc2FmZSBjaGlsZCBoYXJkLWRlcml2ZSBjZXJlbW9ueSBhbmQgcmVnaXN0ZXJzIGNoaWxkIGtleSBkb2N1bWVudHMuXG4gICAqL1xuICBhc3luYyBjcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U6IHN0cmluZztcbiAgICBzYWZlSWQ6IHN0cmluZztcbiAgICAvKiogUm9vdCBrZXkgSUQgdXNlZCBmb3IgdGhlIGRlcml2ZS4gKi9cbiAgICBwYXJlbnRLZXlJZDogc3RyaW5nO1xuICAgIGRlcml2YXRpb25JbmRleDogbnVtYmVyO1xuICAgIHVzZXJSb290S2V5SWQ6IHN0cmluZztcbiAgICBiYWNrdXBSb290S2V5SWQ6IHN0cmluZztcbiAgICB1c2VyUm9vdEtleVNoYXJlOiBCdWZmZXI7XG4gICAgdXNlclJvb3RWcmZLZXlTaGFyZTogQnVmZmVyO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgICB3ZWJhdXRobkluZm8/OiBXZWJhdXRobktleUVuY3J5cHRpb25JbmZvO1xuICAgIGVuY3J5cHRpb25WZXJzaW9uPzogRW5jcnlwdGlvblZlcnNpb247XG4gIH0pOiBQcm9taXNlPFBpY2s8S2V5Y2hhaW5zVHJpcGxldCwgJ3VzZXJLZXljaGFpbicgfCAnYmFja3VwS2V5Y2hhaW4nPj4ge1xuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ3NlY3AyNTZrMScpO1xuXG4gICAgY29uc3QgeyBtcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdGhpcy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MocGFyYW1zLmVudGVycHJpc2UsIHRydWUpO1xuICAgIGNvbnN0IG1wY3YyS2V5ID0gbXBjdjJQdWJsaWNLZXkgPz8gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICAgIGFzc2VydChtcGN2MktleSwgJ0ZhaWxlZCB0byBnZXQgQml0R28gTVBDdjIgR1BHIHB1YmxpYyBrZXknKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IG1wY3YyS2V5LmFybW9yKCk7XG5cbiAgICBpZiAoZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZyh0aGlzLmJpdGdvLmdldEVudigpKSkge1xuICAgICAgYXNzZXJ0KGlzQml0Z29NcGNQdWJLZXkoYml0Z29QdWJsaWNHcGdLZXksICdtcGN2MicpLCAnSW52YWxpZCBCaXRHbyBHUEcgcHVibGljIGtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJHcGdQcnZLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgIGdwZ0tleTogdXNlckdwZ0tleS5wcml2YXRlS2V5LFxuICAgIH07XG4gICAgY29uc3QgYml0Z29HcGdQdWJLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBncGdLZXk6IGJpdGdvUHVibGljR3BnS2V5LFxuICAgIH07XG5cbiAgICBjb25zdCBwYXRoID0gaGFyZGVuZWREZXJpdmF0aW9uUGF0aChwYXJhbXMuZGVyaXZhdGlvbkluZGV4KTtcbiAgICBjb25zdCB1c2VyRGVyaXZlU2Vzc2lvbiA9IG5ldyBEa2xzRHJ2LkRlcml2ZShcbiAgICAgIDMsXG4gICAgICAyLFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgcGFyYW1zLnVzZXJSb290S2V5U2hhcmUsXG4gICAgICBwYXJhbXMudXNlclJvb3RWcmZLZXlTaGFyZSxcbiAgICAgIHBhdGhcbiAgICApO1xuXG4gICAgLy8gUm91bmQgMTogc2VuZCB0aGUgdXNlcidzIGZpcnN0IG1lc3NhZ2UuXG4gICAgY29uc3QgdXNlclJvdW5kMU1zZyA9IGF3YWl0IHVzZXJEZXJpdmVTZXNzaW9uLmluaXREZXJpdmUoKTtcbiAgICBjb25zdCByb3VuZDFNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICB7XG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UodXNlclJvdW5kMU1zZyldLFxuICAgICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdLZXkucHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZCwgYml0Z29Nc2cxIH0gPSBhd2FpdCB0aGlzLnNlbmREZXJpdmF0aW9uUm91bmQxQnlTZW5kZXIoXG4gICAgICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQ8TVBDdjJEZXJpdmVSb3VuZDFSZXNwb25zZT4odGhpcy5iaXRnbywgcGFyYW1zLmVudGVycHJpc2UsIHBhcmFtcy5zYWZlSWQpLFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICByb3VuZDFNZXNzYWdlcyxcbiAgICAgIHBhcmFtcy5wYXJlbnRLZXlJZCxcbiAgICAgIHBhcmFtcy5kZXJpdmF0aW9uSW5kZXhcbiAgICApO1xuXG4gICAgLy8gUm91bmQgMjogcHJvY2VzcyB0aGUgcGVlcidzIGZpcnN0IG1lc3NhZ2UgYW5kIHJldHVybiB0aGUgdXNlcidzIHNlY29uZC5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1JvdW5kMSA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMSldIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQxTXNnID0gZGVjcnlwdGVkQml0Z29Sb3VuZDEuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDFNc2csICdCaXRHbyBkZXJpdmUgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBjb25zdCB1c2VyUm91bmQyTWVzc2FnZXMgPSB1c2VyRGVyaXZlU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMU1zZyldLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh1c2VyUm91bmQyTWVzc2FnZXMpLFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMiwgYml0Z29Nc2cyIH0gPSBhd2FpdCB0aGlzLnNlbmREZXJpdmF0aW9uUm91bmQyQnlTZW5kZXIoXG4gICAgICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQ8TVBDdjJEZXJpdmVSb3VuZDJSZXNwb25zZT4odGhpcy5iaXRnbywgcGFyYW1zLmVudGVycHJpc2UsIHBhcmFtcy5zYWZlSWQpLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcm91bmQyTWVzc2FnZXNcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMiwgJ1JvdW5kIDEgYW5kIDIgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICAvLyBQcm9jZXNzIHRoZSBwZWVyIHJlc3BvbnNlIHRvIGZpbmFsaXplIHRoZSBsb2NhbCBjaGlsZCBzaGFyZS5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1JvdW5kMiA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQyTXNnID0gZGVjcnlwdGVkQml0Z29Sb3VuZDIuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDJNc2csICdCaXRHbyBkZXJpdmUgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICB1c2VyRGVyaXZlU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMk1zZyldLFxuICAgIH0pO1xuXG4gICAgLy8gUm91bmQgMzogb2J0YWluIHRoZSBjaGlsZCBjb21tb24ta2V5Y2hhaW4gbWV0YWRhdGEuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMywgY29tbW9uS2V5Y2hhaW4gfSA9IGF3YWl0IHRoaXMuc2VuZERlcml2YXRpb25Sb3VuZDNCeVNlbmRlcihcbiAgICAgIEtleUdlblNlbmRlckZvclNhZmVDaGlsZDxNUEN2MkRlcml2ZVJvdW5kM1Jlc3BvbnNlPih0aGlzLmJpdGdvLCBwYXJhbXMuZW50ZXJwcmlzZSwgcGFyYW1zLnNhZmVJZCksXG4gICAgICBzZXNzaW9uSWRcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMywgJ1JvdW5kIDEgYW5kIDMgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCB1c2VyUHJpdmF0ZU1hdGVyaWFsID0gdXNlckRlcml2ZVNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IHVzZXJEZXJpdmVTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyUHJpdmF0ZU1hdGVyaWFsKTtcbiAgICBhc3NlcnQuZXF1YWwoY29tbW9uS2V5Y2hhaW4sIHVzZXJDb21tb25LZXljaGFpbiwgJ1VzZXIgYW5kIEJpdEdvIGNvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uU2Vzc2lvbiA9XG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24gPT09IDIgPyBhd2FpdCB0aGlzLmJpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uKHBhcmFtcy5wYXNzcGhyYXNlKSA6IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAgdXNlclByaXZhdGVNYXRlcmlhbCxcbiAgICAgICAgdXNlclJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgICAgcGFyYW1zLnNhZmVJZCxcbiAgICAgICAgeyBwYXJlbnRLZXlJZDogcGFyYW1zLnVzZXJSb290S2V5SWQsIGluZGV4OiBwYXJhbXMuZGVyaXZhdGlvbkluZGV4IH1cbiAgICAgICk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGVuY3J5cHRpb25TZXNzaW9uLFxuICAgICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zLnNhZmVJZCxcbiAgICAgICAgeyBwYXJlbnRLZXlJZDogcGFyYW1zLmJhY2t1cFJvb3RLZXlJZCwgaW5kZXg6IHBhcmFtcy5kZXJpdmF0aW9uSW5kZXggfVxuICAgICAgKTtcblxuICAgICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJLZXljaGFpblByb21pc2UsIGJhY2t1cEtleWNoYWluUHJvbWlzZV0pO1xuICAgICAgcmV0dXJuIHsgdXNlcktleWNoYWluLCBiYWNrdXBLZXljaGFpbiB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlbmNyeXB0aW9uU2Vzc2lvbj8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2lnbmluZ0RrZ1Nlc3Npb25zKHJldHJvZml0PzogRGVjcnlwdGVkUmV0cm9maXRQYXlsb2FkKSB7XG4gICAgaWYgKHJldHJvZml0KSB7XG4gICAgICBjb25zdCByZXRyb2ZpdERhdGEgPSB0aGlzLmdldE1wY1YyUmV0cm9maXREYXRhRnJvbU1wY1YxS2V5cyh7XG4gICAgICAgIG1wY3YxVXNlcktleVNoYXJlOiByZXRyb2ZpdC5kZWNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBtcGN2MUJhY2t1cEtleVNoYXJlOiByZXRyb2ZpdC5kZWNyeXB0ZWRCYWNrdXBLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVzZXJTZXNzaW9uOiBuZXcgRGtsc0RrZy5Ea2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCB1bmRlZmluZWQsIHJldHJvZml0RGF0YS5tcGN2MlVzZXJLZXlTaGFyZSksXG4gICAgICAgIGJhY2t1cFNlc3Npb246IG5ldyBEa2xzRGtnLkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCwgdW5kZWZpbmVkLCByZXRyb2ZpdERhdGEubXBjdjJCYWNrdXBLZXlTaGFyZSksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdXNlclNlc3Npb246IG5ldyBEa2xzRGtnLkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLFxuICAgICAgYmFja3VwU2Vzc2lvbjogbmV3IERrbHNEa2cuRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3RkEsb0RBZ0JDO0FBT0Qsb0RBc0JDO0FBUUQsd0RBS0M7QUFsSkQsb0RBQXFGO0FBQ3JGLG1DQUF3QztBQUN4QyxvREFBNEI7QUFDNUIsNkNBQTZDO0FBQzdDLHNEQVM2QjtBQUk3QixxREFBd0Q7QUFFeEQsNERBQThGO0FBQzlGLDZDQUErQztBQUMvQyxxRUFJa0M7QUFDbEMsNkNBQThFO0FBRTlFOzs7OztHQUtHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFPbkMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxhQUFhLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDdkgsQ0FBQztBQWVELFNBQVMsb0JBQW9CLENBQUMsUUFBd0M7SUFDcEUsTUFBTSxTQUFTLEdBQXlCO1FBQ3RDLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osRUFBRSxFQUFFLENBQUMsQ0FB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QUFtQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxXQUFXLEVBQUUsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixDQUFDO2dCQUNwRyxhQUFhLEVBQUUsSUFBSSxxQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDZCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLG1CQUFtQixDQUFDO2FBQzNHLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztZQUNMLFdBQVcsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pELGFBQWEsRUFBRSxJQUFJLHFCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsNkJBQWdCLENBQUMsTUFBTSxDQUFDO1NBQzlELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExcEJELGdEQTBwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEa2xzQ29tbXMsIERrbHNEa2csIERrbHNEcnYsIERrbHNUeXBlcywgRGtsc1ZyZiB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBkZWNvZGUsIGVuY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBOb25FbXB0eVN0cmluZyB9IGZyb20gJ2lvLXRzLXR5cGVzJztcbmltcG9ydCB7XG4gIE1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCxcbiAgTVBDdjJEZXJpdmVSb3VuZDFSZXNwb25zZSxcbiAgTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0LFxuICBNUEN2MkRlcml2ZVJvdW5kMlJlc3BvbnNlLFxuICBNUEN2MkRlcml2ZVJvdW5kM1Jlc3BvbnNlLFxuICBNUEN2MktleUdlblJvdW5kMVJlc3BvbnNlLFxuICBNUEN2MktleUdlblJvdW5kMlJlc3BvbnNlLFxuICBNUEN2MktleUdlblN0YXRlRW51bSxcbn0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgRGVjcnlwdGVkUmV0cm9maXRQYXlsb2FkIH0gZnJvbSAnLi4vLi4vLi4va2V5Y2hhaW4vaUtleWNoYWlucyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVmVyc2lvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBnZW5lcmF0ZUdQR0tleVBhaXIgfSBmcm9tICcuLi8uLi9vcGVuZ3BnVXRpbHMnO1xuaW1wb3J0IHsgV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbyB9IGZyb20gJy4uLy4uLy4uL2tleWNoYWluJztcbmltcG9ydCB7IGVudlJlcXVpcmVzQml0Z29QdWJHcGdLZXlDb25maWcsIGlzQml0Z29NcGNQdWJLZXkgfSBmcm9tICcuLi8uLi8uLi90c3MvYml0Z29QdWJLZXlzJztcbmltcG9ydCB7IEVjZHNhTVBDdjJVdGlscyB9IGZyb20gJy4vZWNkc2FNUEN2Mic7XG5pbXBvcnQge1xuICBFY2RzYU1QQ3YyRGVyaXZlS2V5U2VuZEZuLFxuICBLZXlHZW5TZW5kZXJGb3JFbnRlcnByaXNlLFxuICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQsXG59IGZyb20gJy4vZWNkc2FNUEN2MktleUdlblNlbmRlcic7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtLCBNcGNWMlZyZktleUdlblJlc3BvbnNlRmllbGRzIH0gZnJvbSAnLi90eXBlc01QQ3YyJztcblxuLyoqXG4gKiBWZXJzaW9uIGZpZWxkIG9mIHRoZSBgZW5jcnlwdGVkUHJ2YCBlbnZlbG9wZSB1c2VkIHdoZW4gYSBjZXJlbW9ueSBwcm9kdWNlcyBib3RoIGFcbiAqIHNpZ25pbmcga2V5c2hhcmUgYW5kIGEgVlJGIGtleXNoYXJlLiBUaGUgcGxhaW50ZXh0IGhhbmRlZCB0byBlbmNyeXB0KCkgaXNcbiAqIGBiYXNlNjQoY2JvckVuY29kZShlbnZlbG9wZSkpYCwga2VlcGluZyBpdCBhIHNpbmdsZSBvcGFxdWUgYmFzZTY0IHRva2VuIGV4YWN0bHkgYXNcbiAqIHRoZSBvcmRpbmFyeSBNUEN2MiBmb3JtYXQgZG9lcy5cbiAqL1xuY29uc3QgVlJGX0tFWV9FTlZFTE9QRV9WRVJTSU9OID0gMTtcbnR5cGUgVnJmS2V5RW52ZWxvcGUgPSB7XG4gIHZlcnNpb246IHVua25vd247XG4gIHBydktleVNoYXJlOiB1bmtub3duO1xuICB2cmY6IHVua25vd247XG59O1xuXG5mdW5jdGlvbiBpc1ZyZktleUVudmVsb3BlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVnJmS2V5RW52ZWxvcGUge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAndmVyc2lvbicgaW4gdmFsdWUgJiYgJ3BydktleVNoYXJlJyBpbiB2YWx1ZSAmJiAndnJmJyBpbiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBXaXJlIGZvcm1hdCBmb3IgVlJGIERLRyBtZXNzYWdlcyByaWRpbmcgdGhlIE1QQ3YyLVIxL1IyIHBheWxvYWRzOiBhbiBvcGFxdWUgYmxvYixcbiAqIGBiYXNlNjQoSlNPTi5zdHJpbmdpZnkoVnJmTWVzc2FnZVRyYW5zZmVyW10pKWAsIGNhcnJ5aW5nIHRoZSBwYXJ0eSdzIGZ1bGwgYmF0Y2ggb2ZcbiAqIGVtaXR0ZWQgbWVzc2FnZXMuIFRoZSBWUkYgREtHIGVtaXRzIGJyb2FkY2FzdCBjb21taXRtZW50cyAoUjEpIGFuZCBwZXItcmVjaXBpZW50XG4gKiBvcGVuaW5nIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBlYWNoIHBhcnR5IGluY2x1ZGluZyB0aGUgc2VuZGVyIChSMiksIHNvIHRoZSByZWNlaXZpbmdcbiAqIHNpZGUgcm91dGVzIGJ5IGB0b2AgYW5kIGtlZXBzIG1lc3NhZ2VzIGFkZHJlc3NlZCB0byBpdHNlbGYuXG4gKi9cbmludGVyZmFjZSBWcmZNZXNzYWdlVHJhbnNmZXIge1xuICBmcm9tOiBudW1iZXI7XG4gIHRvPzogbnVtYmVyO1xuICBwYXlsb2FkOiBzdHJpbmc7IC8vIGJhc2U2NFxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVWcmZNZXNzYWdlcyhtZXNzYWdlczogRGtsc1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2VzKTogc3RyaW5nIHtcbiAgY29uc3QgdHJhbnNmZXJzOiBWcmZNZXNzYWdlVHJhbnNmZXJbXSA9IFtcbiAgICAuLi5tZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoKG0pID0+ICh7IGZyb206IG0uZnJvbSwgcGF5bG9hZDogQnVmZmVyLmZyb20obS5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JykgfSkpLFxuICAgIC4uLm1lc3NhZ2VzLnAycE1lc3NhZ2VzLm1hcCgobSkgPT4gKHtcbiAgICAgIGZyb206IG0uZnJvbSxcbiAgICAgIHRvOiBtLnRvLFxuICAgICAgcGF5bG9hZDogQnVmZmVyLmZyb20obS5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgfSkpLFxuICBdO1xuICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodHJhbnNmZXJzKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJsb2I6IHN0cmluZywgZm9yUGFydHk6IG51bWJlcik6IERrbHNUeXBlcy5EZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIGNvbnN0IHRyYW5zZmVyczogVnJmTWVzc2FnZVRyYW5zZmVyW10gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGJsb2IsICdiYXNlNjQnKS50b1N0cmluZygpKTtcbiAgcmV0dXJuIHtcbiAgICBicm9hZGNhc3RNZXNzYWdlczogdHJhbnNmZXJzXG4gICAgICAuZmlsdGVyKCh0KSA9PiB0LnRvID09PSB1bmRlZmluZWQpXG4gICAgICAubWFwKCh0KSA9PiAoeyBmcm9tOiB0LmZyb20sIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHQucGF5bG9hZCwgJ2Jhc2U2NCcpKSB9KSksXG4gICAgcDJwTWVzc2FnZXM6IHRyYW5zZmVyc1xuICAgICAgLmZpbHRlcigodCk6IHQgaXMgVnJmTWVzc2FnZVRyYW5zZmVyICYgeyB0bzogbnVtYmVyIH0gPT4gdC50byA9PT0gZm9yUGFydHkpXG4gICAgICAubWFwKCh0KSA9PiAoeyBmcm9tOiB0LmZyb20sIHRvOiB0LnRvLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh0LnBheWxvYWQsICdiYXNlNjQnKSkgfSkpLFxuICB9O1xufVxuXG4vKipcbiAqIENvbWJpbmVzIHRoZSBzaWduaW5nIGtleXNoYXJlIHdpdGggdGhlIFZSRiBrZXlzaGFyZSBpbnRvIHRoZSBgZW5jcnlwdGVkUHJ2YCBlbnZlbG9wZVxuICogKGBiYXNlNjQoY2JvckVuY29kZSh7dmVyc2lvbiwgcHJ2S2V5U2hhcmUsIHZyZn0pKWAgb25jZSB0aGUgY2FsbGVyIGJhc2U2NC1lbmNvZGVzIHRoZVxuICogcmV0dXJuZWQgYnVmZmVycykuIFRoZSBzYW1lIGNvbnRhaW5lciB3cmFwcyB0aGUgcmVkdWNlZCBzaWduaW5nIHNoYXJlIGZvclxuICogYHJlZHVjZWRFbmNyeXB0ZWRQcnZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWcmZLZXlFbnZlbG9wZXMoXG4gIHByaXZhdGVNYXRlcmlhbDogQnVmZmVyLFxuICByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsOiBCdWZmZXIsXG4gIHZyZktleVNoYXJlOiBCdWZmZXJcbik6IHsgZW52ZWxvcGU6IEJ1ZmZlcjsgcmVkdWNlZEVudmVsb3BlOiBCdWZmZXIgfSB7XG4gIGNvbnN0IGVudmVsb3BlID0gZW5jb2RlKHtcbiAgICB2ZXJzaW9uOiBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04sXG4gICAgcHJ2S2V5U2hhcmU6IG5ldyBVaW50OEFycmF5KHByaXZhdGVNYXRlcmlhbCksXG4gICAgdnJmOiBuZXcgVWludDhBcnJheSh2cmZLZXlTaGFyZSksXG4gIH0pO1xuICBjb25zdCByZWR1Y2VkRW52ZWxvcGUgPSBlbmNvZGUoe1xuICAgIHZlcnNpb246IFZSRl9LRVlfRU5WRUxPUEVfVkVSU0lPTixcbiAgICBwcnZLZXlTaGFyZTogbmV3IFVpbnQ4QXJyYXkocmVkdWNlZFByaXZhdGVNYXRlcmlhbCksXG4gICAgdnJmOiBuZXcgVWludDhBcnJheSh2cmZLZXlTaGFyZSksXG4gIH0pO1xuICByZXR1cm4geyBlbnZlbG9wZTogQnVmZmVyLmZyb20oZW52ZWxvcGUpLCByZWR1Y2VkRW52ZWxvcGU6IEJ1ZmZlci5mcm9tKHJlZHVjZWRFbnZlbG9wZSkgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBkZWNyeXB0ZWQgcm9vdCBibG9iIHByb2R1Y2VkIGJ5IHtAbGluayBidWlsZFZyZktleUVudmVsb3Blc306IGEgQ0JPUlxuICogZW52ZWxvcGUgYHt2ZXJzaW9uOiAxLCBwcnZLZXlTaGFyZSwgdnJmfWAuIFJldHVybnMgdGhlIHNpZ25pbmcgYW5kIFZSRiBrZXlzaGFyZXNcbiAqIGFzIEJ1ZmZlcnMuIFRocm93cyBpZiB0aGUgYmxvYiBpcyBub3QgYSB2YWxpZCBWUkYga2V5IGVudmVsb3BlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWcmZLZXlFbnZlbG9wZXMoZGVjcnlwdGVkQmxvYjogc3RyaW5nKTogeyBzaWduaW5nOiBCdWZmZXI7IHZyZjogQnVmZmVyIH0ge1xuICBsZXQgZW52ZWxvcGU6IHVua25vd247XG4gIHRyeSB7XG4gICAgZW52ZWxvcGUgPSBkZWNvZGUoQnVmZmVyLmZyb20oZGVjcnlwdGVkQmxvYiwgJ2Jhc2U2NCcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIHNhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlOiAke21lc3NhZ2V9YCk7XG4gIH1cbiAgaWYgKCFpc1ZyZktleUVudmVsb3BlKGVudmVsb3BlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzYWZlIE1QQyByb290IGtleSBlbnZlbG9wZTogZXhwZWN0ZWQgdmVyc2lvbiwgc2lnbmluZyBrZXlzaGFyZSwgYW5kIFZSRiBrZXlzaGFyZScpO1xuICB9XG4gIGNvbnN0IHsgdmVyc2lvbiwgcHJ2S2V5U2hhcmUsIHZyZiB9ID0gZW52ZWxvcGU7XG4gIGlmICh2ZXJzaW9uICE9PSBWUkZfS0VZX0VOVkVMT1BFX1ZFUlNJT04pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHNhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlIHZlcnNpb246ICR7U3RyaW5nKHZlcnNpb24pfWApO1xuICB9XG4gIGlmICghKHBydktleVNoYXJlIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgcHJ2S2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTYWZlIE1QQyByb290IGtleSBlbnZlbG9wZSBpcyBtaXNzaW5nIGEgc2lnbmluZyBrZXlzaGFyZScpO1xuICB9XG4gIGlmICghKHZyZiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IHZyZi5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NhZmUgTVBDIHJvb3Qga2V5IGVudmVsb3BlIGlzIG1pc3NpbmcgYSBWUkYga2V5c2hhcmUnKTtcbiAgfVxuICByZXR1cm4geyBzaWduaW5nOiBCdWZmZXIuZnJvbShwcnZLZXlTaGFyZSksIHZyZjogQnVmZmVyLmZyb20odnJmKSB9O1xufVxuXG4vKipcbiAqIEVuY29kZXMgYSBoYXJkZW5lZCBkZXJpdmF0aW9uIGluZGV4IGFzIHRoZSBieXRlIHBhdGggdGhlIERLTFMgaGFyZC1kZXJpdmUgd2FzbVxuICogZXhwZWN0czogb25lIGJpZy1lbmRpYW4gdTMyIHdpdGggdGhlIGhhcmRlbmVkIGJpdCAoMHg4MDAwMDAwMCkgc2V0IOKAlCBpLmUuIHRoZVxuICogY2hpbGQgcGF0aCBgbS88aW5kZXg+J2AuIFRoZSBzZXJ2ZXIgZGVyaXZlcyB0aGUgc2FtZSBoYXJkZW5lZCBwYXRoIGZyb20gdGhlXG4gKiBgZGVyaXZhdGlvbkluZGV4YCBpdCByZWNlaXZlcyBvbiByb3VuZCAxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFyZGVuZWREZXJpdmF0aW9uUGF0aChpbmRleDogbnVtYmVyKTogVWludDhBcnJheSB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gMHg3ZmZmZmZmZikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXJpdmF0aW9uIGluZGV4OiAke2luZGV4fWApO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShbMHg4MCB8IChpbmRleCA+Pj4gMjQpLCAoaW5kZXggPj4+IDE2KSAmIDB4ZmYsIChpbmRleCA+Pj4gOCkgJiAweGZmLCBpbmRleCAmIDB4ZmZdKTtcbn1cblxuLyoqXG4gKiBFY2RzYU1QQ3YyVXRpbHMgdmFyaWFudCB0aGF0IHJ1bnMgdGhlIFJpc3RyZXR0byBWUkYgREtHIGFsb25nc2lkZSB0aGUgc2lnbmluZyBES0xTXG4gKiBES0cgaW5zaWRlIHRoZSBzYW1lIE1QQ3YyIGtleWdlbiByb3VuZHMsIGZvciBzYWZlIE1QQyByb290IGNyZWF0aW9uLlxuICpcbiAqIFRoZSByb3VuZCBlbnVtIGlzIHVuY2hhbmdlZDogdGhlIFZSRiBjb21taXRtZW50IHJpZGVzIE1QQ3YyLVIxLCB0aGUgb3BlbmluZyByaWRlc1xuICogTVBDdjItUjIsIGFuZCB0aGUgVlJGIERLRyBmaW5hbGl6ZXMgbG9jYWxseSBiZWZvcmUgTVBDdjItUjMuIFZSRiBtZXNzYWdlcyB0cmF2ZWwgYXNcbiAqIG9wYXF1ZSBiYXNlNjQgZmllbGRzIG9uIHRoZSByb3VuZCBwYXlsb2FkcywgbmV2ZXIgdGhyb3VnaCB0aGUgREtMUyBicm9hZGNhc3QvcDJwIHNsb3RzLlxuICogQXQgdGhlIGVuZCwgdGhlIHNpZ25pbmcgYW5kIFZSRiBrZXlzaGFyZXMgYXJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgQ0JPUiBlbnZlbG9wZVxuICogYmVmb3JlIGVuY3J5cHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBFY2RzYVZyZk1QQ3YyVXRpbHMgZXh0ZW5kcyBFY2RzYU1QQ3YyVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlOiBzdHJpbmc7XG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nO1xuICAgIHJldHJvZml0PzogRGVjcnlwdGVkUmV0cm9maXRQYXlsb2FkO1xuICAgIHdlYmF1dGhuSW5mbz86IFdlYmF1dGhuS2V5RW5jcnlwdGlvbkluZm87XG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbjtcbiAgICAvLyBUYWdzIHRoZSByZXN1bHRpbmcgdXNlci9iYWNrdXAvYml0Z28gcm9vdCBrZXlzIHdpdGggdGhpcyBzYWZlLlxuICAgIHNhZmVJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgeyB1c2VyU2Vzc2lvbiwgYmFja3VwU2Vzc2lvbiB9ID0gdGhpcy5jcmVhdGVTaWduaW5nRGtnU2Vzc2lvbnMocGFyYW1zLnJldHJvZml0KTtcbiAgICBjb25zdCB1c2VyVnJmU2Vzc2lvbiA9IG5ldyBEa2xzVnJmLlZyZkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGNvbnN0IGJhY2t1cFZyZlNlc3Npb24gPSBuZXcgRGtsc1ZyZi5WcmZEa2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuXG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgYmFja3VwR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdzZWNwMjU2azEnKTtcblxuICAgIC8vIEdldCB0aGUgQml0R28gcHVibGljIGtleSBiYXNlZCBvbiB1c2VyL2VudGVycHJpc2UgZmVhdHVyZSBmbGFnc1xuICAgIC8vIElmIGl0IGRvZXNuJ3Qgd29yaywgdXNlIHRoZSBkZWZhdWx0IHB1YmxpYyBrZXkgZnJvbSB0aGUgY29uc3RhbnRzXG4gICAgY29uc3QgeyBtcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdGhpcy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MocGFyYW1zLmVudGVycHJpc2UsIHRydWUpO1xuICAgIGNvbnN0IG1wY3YyS2V5ID0gbXBjdjJQdWJsaWNLZXkgPz8gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICAgIGFzc2VydChtcGN2MktleSwgJ0ZhaWxlZCB0byBnZXQgQml0R28gTVBDdjIgR1BHIHB1YmxpYyBrZXknKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IG1wY3YyS2V5LmFybW9yKCk7XG5cbiAgICBpZiAoZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZyh0aGlzLmJpdGdvLmdldEVudigpKSkge1xuICAgICAgLy8gRW5zdXJlIHRoZSBwdWJsaWMga2V5IGlzIG9uZSBvZiB0aGUgZXhwZWN0ZWQgQml0R28gcHVibGljIGtleXMgd2hlbiBpbiB0ZXN0IG9yIHByb2QuXG4gICAgICBhc3NlcnQoaXNCaXRnb01wY1B1YktleShiaXRnb1B1YmxpY0dwZ0tleSwgJ21wY3YyJyksICdJbnZhbGlkIEJpdEdvIEdQRyBwdWJsaWMga2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckdwZ1BydktleTogRGtsc1R5cGVzLlBhcnR5R3BnS2V5ID0ge1xuICAgICAgcGFydHlJZDogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgZ3BnS2V5OiB1c2VyR3BnS2V5LnByaXZhdGVLZXksXG4gICAgfTtcbiAgICBjb25zdCBiYWNrdXBHcGdQcnZLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgICAgZ3BnS2V5OiBiYWNrdXBHcGdLZXkucHJpdmF0ZUtleSxcbiAgICB9O1xuICAgIGNvbnN0IGJpdGdvR3BnUHViS2V5OiBEa2xzVHlwZXMuUGFydHlHcGdLZXkgPSB7XG4gICAgICBwYXJ0eUlkOiBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgZ3BnS2V5OiBiaXRnb1B1YmxpY0dwZ0tleSxcbiAgICB9O1xuXG4gICAgLy8gI3JlZ2lvbiByb3VuZCAxXG4gICAgY29uc3QgdXNlclJvdW5kMUJyb2FkY2FzdE1zZyA9IGF3YWl0IHVzZXJTZXNzaW9uLmluaXREa2coKTtcbiAgICBjb25zdCBiYWNrdXBSb3VuZDFCcm9hZGNhc3RNc2cgPSBhd2FpdCBiYWNrdXBTZXNzaW9uLmluaXREa2coKTtcbiAgICBjb25zdCB1c2VyVnJmUm91bmQxTXNnID0gYXdhaXQgdXNlclZyZlNlc3Npb24uaW5pdERrZygpO1xuICAgIGNvbnN0IGJhY2t1cFZyZlJvdW5kMU1zZyA9IGF3YWl0IGJhY2t1cFZyZlNlc3Npb24uaW5pdERrZygpO1xuXG4gICAgY29uc3Qgcm91bmQxU2VyaWFsaXplZE1lc3NhZ2VzID0gRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdXNlclJvdW5kMUJyb2FkY2FzdE1zZywgYmFja3VwUm91bmQxQnJvYWRjYXN0TXNnXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCByb3VuZDFNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICByb3VuZDFTZXJpYWxpemVkTWVzc2FnZXMsXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXksIGJhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gcm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpPy5wYXlsb2FkO1xuICAgIGNvbnN0IGJhY2t1cE1zZzEgPSByb3VuZDFNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKT8ucGF5bG9hZDtcbiAgICBhc3NlcnQodXNlck1zZzEsICdVc2VyIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KGJhY2t1cE1zZzEsICdCYWNrdXAgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcblxuICAgIGNvbnN0IHVzZXJHcGdQdWJsaWNLZXkgPSB1c2VyR3BnS2V5LnB1YmxpY0tleTtcbiAgICBjb25zdCBiYWNrdXBHcGdQdWJsaWNLZXkgPSBiYWNrdXBHcGdLZXkucHVibGljS2V5O1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyh1c2VyR3BnUHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMoYmFja3VwR3BnUHVibGljS2V5KSwgJ0JhY2t1cCBHUEcgcHVibGljIGtleSBpcyByZXF1aXJlZCcpO1xuICAgIC8vIEtlZXAgVlJGIG1lc3NhZ2VzIG9wYXF1ZSBvbiB0aGUga2V5LWdlbmVyYXRpb24gcmVxdWVzdC5cbiAgICBjb25zdCByb3VuZDFTZW5kZXIgPSBLZXlHZW5TZW5kZXJGb3JFbnRlcnByaXNlPE1QQ3YyS2V5R2VuUm91bmQxUmVzcG9uc2UgJiBNcGNWMlZyZktleUdlblJlc3BvbnNlRmllbGRzPihcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICApO1xuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBiaXRnb01zZzEsIGJpdGdvVG9CYWNrdXBNc2cyLCBiaXRnb1RvVXNlck1zZzIsIGJpdGdvVnJmTXNnMSB9ID0gYXdhaXQgcm91bmQxU2VuZGVyKFxuICAgICAgTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIxJ10sXG4gICAgICB7XG4gICAgICAgIHVzZXJNc2cxOiB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUiwgLi4udXNlck1zZzEgfSxcbiAgICAgICAgYmFja3VwTXNnMTogeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCwgLi4uYmFja3VwTXNnMSB9LFxuICAgICAgICB1c2VyR3BnUHVibGljS2V5LFxuICAgICAgICBiYWNrdXBHcGdQdWJsaWNLZXksXG4gICAgICAgIHVzZXJWcmZNc2cxOiBzZXJpYWxpemVWcmZNZXNzYWdlcyh1c2VyVnJmUm91bmQxTXNnKSxcbiAgICAgICAgYmFja3VwVnJmTXNnMTogc2VyaWFsaXplVnJmTWVzc2FnZXMoYmFja3VwVnJmUm91bmQxTXNnKSxcbiAgICAgICAgd2FsbGV0SWQ6IHBhcmFtcy5yZXRyb2ZpdD8ud2FsbGV0SWQsXG4gICAgICB9XG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29WcmZNc2cxLCAnQml0R28gVlJGIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gcm91bmQgMSByZXNwb25zZScpO1xuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gcm91bmQgMlxuICAgIGNvbnN0IGJpdGdvUm91bmQxQnJvYWRjYXN0TWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICB7IHAycE1lc3NhZ2VzOiBbXSwgYnJvYWRjYXN0TWVzc2FnZXM6IFt0aGlzLmZvcm1hdEJpdGdvQnJvYWRjYXN0TWVzc2FnZShiaXRnb01zZzEpXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5LCBiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCBiaXRnb1JvdW5kMUJyb2FkY2FzdE1zZyA9IGJpdGdvUm91bmQxQnJvYWRjYXN0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydChiaXRnb1JvdW5kMUJyb2FkY2FzdE1zZywgJ0JpdEdvIG1lc3NhZ2UgMSBub3QgZm91bmQgaW4gYnJvYWRjYXN0IG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCB1c2VyUm91bmQyUDJQTWVzc2FnZXMgPSB1c2VyU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMUJyb2FkY2FzdE1zZyksIGJhY2t1cFJvdW5kMUJyb2FkY2FzdE1zZ10sXG4gICAgfSk7XG5cbiAgICBjb25zdCB1c2VyVG9CaXRnb01zZzIgPSB1c2VyUm91bmQyUDJQTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQodXNlclRvQml0Z29Nc2cyLCAnVXNlciBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRVc2VyVG9CaXRnb01zZzIgPSBEa2xzVHlwZXMuc2VyaWFsaXplUDJQTWVzc2FnZSh1c2VyVG9CaXRnb01zZzIpO1xuXG4gICAgY29uc3QgYmFja3VwUm91bmQyUDJQTWVzc2FnZXMgPSBiYWNrdXBTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFt1c2VyUm91bmQxQnJvYWRjYXN0TXNnLCBEa2xzVHlwZXMuZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKGJpdGdvUm91bmQxQnJvYWRjYXN0TXNnKV0sXG4gICAgfSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2cyID0gRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKGJhY2t1cFJvdW5kMlAyUE1lc3NhZ2VzKS5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KHNlcmlhbGl6ZWRCYWNrdXBUb0JpdGdvTXNnMiwgJ0JhY2t1cCBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuXG4gICAgLy8gVlJGOiBjb25zdW1lIEJpdEdvJ3MgYW5kIHRoZSBjb3VudGVycGFydHkncyBjb21taXRtZW50cywgZW1pdCB0aGlzIHBhcnR5J3Mgb3BlbmluZ3MuXG4gICAgLy8gT3BlbmluZ3MgY29tZSBiYWNrIGFzIHAycCBtZXNzYWdlcyBhZGRyZXNzZWQgdG8gZWFjaCBwYXJ0eSAoaW5jbHVkaW5nIHRoZSBzZW5kZXIpLlxuICAgIGNvbnN0IHVzZXJWcmZSb3VuZDJNZXNzYWdlcyA9IGF3YWl0IHVzZXJWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgLi4uYmFja3VwVnJmUm91bmQxTXNnLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMSwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKS5icm9hZGNhc3RNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgfSk7XG5cbiAgICBjb25zdCBiYWNrdXBWcmZSb3VuZDJNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cFZyZlNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICAuLi51c2VyVnJmUm91bmQxTXNnLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMSwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLmJyb2FkY2FzdE1lc3NhZ2VzLFxuICAgICAgXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtzZXJpYWxpemVkVXNlclRvQml0Z29Nc2cyLCBzZXJpYWxpemVkQmFja3VwVG9CaXRnb01zZzJdLCBicm9hZGNhc3RNZXNzYWdlczogW10gfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleSwgYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgdXNlclJvdW5kMk1zZyA9IHJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgY29uc3QgYmFja3VwUm91bmQyTXNnID0gcm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR09cbiAgICApO1xuICAgIGFzc2VydCh1c2VyUm91bmQyTXNnLCAnVXNlciB0byBCaXRnbyBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGFzc2VydCh1c2VyUm91bmQyTXNnLmNvbW1pdG1lbnQsICdVc2VyIHRvIEJpdGdvIGNvbW1pdG1lbnQgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGFzc2VydChiYWNrdXBSb3VuZDJNc2csICdCYWNrdXAgdG8gQml0Z28gbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBhc3NlcnQoYmFja3VwUm91bmQyTXNnLmNvbW1pdG1lbnQsICdCYWNrdXAgdG8gQml0Z28gY29tbWl0bWVudCBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJSb3VuZDJNc2cuY29tbWl0bWVudCksICdVc2VyIHRvIEJpdGdvIGNvbW1pdG1lbnQgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMoYmFja3VwUm91bmQyTXNnLmNvbW1pdG1lbnQpLCAnQmFja3VwIHRvIEJpdGdvIGNvbW1pdG1lbnQgaXMgcmVxdWlyZWQnKTtcbiAgICBjb25zdCByb3VuZDJTZW5kZXIgPSBLZXlHZW5TZW5kZXJGb3JFbnRlcnByaXNlPE1QQ3YyS2V5R2VuUm91bmQyUmVzcG9uc2UgJiBNcGNWMlZyZktleUdlblJlc3BvbnNlRmllbGRzPihcbiAgICAgIHRoaXMuYml0Z28sXG4gICAgICBwYXJhbXMuZW50ZXJwcmlzZVxuICAgICk7XG4gICAgY29uc3Qge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRSb3VuZDIsXG4gICAgICBiaXRnb0NvbW1pdG1lbnQyLFxuICAgICAgYml0Z29Ub1VzZXJNc2czLFxuICAgICAgYml0Z29Ub0JhY2t1cE1zZzMsXG4gICAgICBiaXRnb1ZyZk1zZzIsXG4gICAgfSA9IGF3YWl0IHJvdW5kMlNlbmRlcihNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjInXSwge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgdXNlck1zZzI6IHtcbiAgICAgICAgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgICB0bzogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgICAgc2lnbmF0dXJlOiB1c2VyUm91bmQyTXNnLnBheWxvYWQuc2lnbmF0dXJlLFxuICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiB1c2VyUm91bmQyTXNnLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICB1c2VyQ29tbWl0bWVudDI6IHVzZXJSb3VuZDJNc2cuY29tbWl0bWVudCxcbiAgICAgIGJhY2t1cE1zZzI6IHtcbiAgICAgICAgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsXG4gICAgICAgIHRvOiBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLFxuICAgICAgICBzaWduYXR1cmU6IGJhY2t1cFJvdW5kMk1zZy5wYXlsb2FkLnNpZ25hdHVyZSxcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogYmFja3VwUm91bmQyTXNnLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBiYWNrdXBDb21taXRtZW50MjogYmFja3VwUm91bmQyTXNnLmNvbW1pdG1lbnQsXG4gICAgICB1c2VyVnJmTXNnMjogc2VyaWFsaXplVnJmTWVzc2FnZXModXNlclZyZlJvdW5kMk1lc3NhZ2VzKSxcbiAgICAgIGJhY2t1cFZyZk1zZzI6IHNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJhY2t1cFZyZlJvdW5kMk1lc3NhZ2VzKSxcbiAgICB9KTtcbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyAjcmVnaW9uIHJvdW5kIDNcbiAgICBhc3NlcnQuZXF1YWwoc2Vzc2lvbklkLCBzZXNzaW9uSWRSb3VuZDIsICdSb3VuZCAxIGFuZCAyIFNlc3Npb24gSURzIGRvIG5vdCBtYXRjaCcpO1xuICAgIGFzc2VydChiaXRnb1ZyZk1zZzIsICdCaXRHbyBWUkYgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiByb3VuZCAyIHJlc3BvbnNlJyk7XG5cbiAgICAvLyBWUkY6IGZpbmFsaXplIGJvdGggREtHcyBsb2NhbGx5IGJ5IGNvbnN1bWluZyB0aGUgb3BlbmluZyBtZXNzYWdlcyBhZGRyZXNzZWQgdG8gZWFjaFxuICAgIC8vIHBhcnR5IChpbmNsdWRpbmcgZWFjaCBwYXJ0eSdzIG93bikgZnJvbSB0aGUgUjIgZXhjaGFuZ2VzLiBUaGUgVlJGIERLRyBjb21wbGV0ZXMgaGVyZSxcbiAgICAvLyBhIGZ1bGwgcm91bmQgb2Ygc2xhY2sgYmVmb3JlIE1QQ3YyLVIzLlxuICAgIGF3YWl0IHVzZXJWcmZTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtcbiAgICAgICAgLi4udXNlclZyZlJvdW5kMk1lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKSxcbiAgICAgICAgLi4uYmFja3VwVnJmUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpLFxuICAgICAgICAuLi5kZXNlcmlhbGl6ZVZyZk1lc3NhZ2VzKGJpdGdvVnJmTXNnMiwgTVBDdjJQYXJ0aWVzRW51bS5VU0VSKS5wMnBNZXNzYWdlcyxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgYXdhaXQgYmFja3VwVnJmU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIC4uLnVzZXJWcmZSb3VuZDJNZXNzYWdlcy5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKSxcbiAgICAgICAgLi4uYmFja3VwVnJmUm91bmQyTWVzc2FnZXMucDJwTWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCksXG4gICAgICAgIC4uLmRlc2VyaWFsaXplVnJmTWVzc2FnZXMoYml0Z29WcmZNc2cyLCBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCkucDJwTWVzc2FnZXMsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQml0Z29Ub1VzZXJSb3VuZDJNc2dzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgICAgeyBwMnBNZXNzYWdlczogW3RoaXMuZm9ybWF0UDJQTWVzc2FnZShiaXRnb1RvVXNlck1zZzIpXSwgYnJvYWRjYXN0TWVzc2FnZXM6IFtdIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW3VzZXJHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDJNc2cgPSBkZWNyeXB0ZWRCaXRnb1RvVXNlclJvdW5kMk1zZ3MucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08gJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSXG4gICAgKTtcbiAgICBhc3NlcnQoc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQyTXNnLCAnQml0R28gdG8gVXNlciBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IGJpdGdvVG9Vc2VyUm91bmQyTXNnID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplUDJQTWVzc2FnZShzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDJNc2cpO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQml0Z29Ub0JhY2t1cFJvdW5kMk1zZyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFt0aGlzLmZvcm1hdFAyUE1lc3NhZ2UoYml0Z29Ub0JhY2t1cE1zZzIpXSwgYnJvYWRjYXN0TWVzc2FnZXM6IFtdIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW2JhY2t1cEdwZ1BydktleV1cbiAgICApO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnID0gZGVjcnlwdGVkQml0Z29Ub0JhY2t1cFJvdW5kMk1zZy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG4gICAgYXNzZXJ0KHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQyTXNnLCAnQml0R28gdG8gQmFja3VwIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cFJvdW5kMk1zZyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZVAyUE1lc3NhZ2Uoc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDJNc2cpO1xuXG4gICAgY29uc3QgdXNlclRvQmFja3VwTXNnMiA9IHVzZXJSb3VuZDJQMlBNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcbiAgICBhc3NlcnQodXNlclRvQmFja3VwTXNnMiwgJ1VzZXIgdG8gQmFja3VwIG1lc3NhZ2UgMiBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG5cbiAgICBjb25zdCBiYWNrdXBUb1VzZXJNc2cyID0gYmFja3VwUm91bmQyUDJQTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQICYmIG0udG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUlxuICAgICk7XG4gICAgYXNzZXJ0KGJhY2t1cFRvVXNlck1zZzIsICdCYWNrdXAgdG8gVXNlciBtZXNzYWdlIDIgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgdXNlclJvdW5kM01lc3NhZ2VzID0gdXNlclNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gICAgICBwMnBNZXNzYWdlczogW2JpdGdvVG9Vc2VyUm91bmQyTXNnLCBiYWNrdXBUb1VzZXJNc2cyXSxcbiAgICB9KTtcbiAgICBjb25zdCB1c2VyVG9CYWNrdXBNc2czID0gdXNlclJvdW5kM01lc3NhZ2VzLnAycE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVBcbiAgICApO1xuICAgIGFzc2VydCh1c2VyVG9CYWNrdXBNc2czLCAnVXNlciB0byBCYWNrdXAgbWVzc2FnZSAzIG5vdCBmb3VuZCBpbiBQMlAgbWVzc2FnZXMnKTtcbiAgICBjb25zdCB1c2VyVG9CaXRnb01zZzMgPSB1c2VyUm91bmQzTWVzc2FnZXMucDJwTWVzc2FnZXMuZmluZChcbiAgICAgIChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUiAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXG4gICAgKTtcbiAgICBhc3NlcnQodXNlclRvQml0Z29Nc2czLCAnVXNlciB0byBCaXRnbyBtZXNzYWdlIDMgbm90IGZvdW5kIGluIFAyUCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRVc2VyVG9CaXRnb01zZzMgPSBEa2xzVHlwZXMuc2VyaWFsaXplUDJQTWVzc2FnZSh1c2VyVG9CaXRnb01zZzMpO1xuXG4gICAgY29uc3QgYmFja3VwUm91bmQzTWVzc2FnZXMgPSBiYWNrdXBTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgcDJwTWVzc2FnZXM6IFtiaXRnb1RvQmFja3VwUm91bmQyTXNnLCB1c2VyVG9CYWNrdXBNc2cyXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJhY2t1cFRvVXNlck1zZzMgPSBiYWNrdXBSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSXG4gICAgKTtcbiAgICBhc3NlcnQoYmFja3VwVG9Vc2VyTXNnMywgJ0JhY2t1cCB0byBVc2VyIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgYmFja3VwVG9CaXRnb01zZzMgPSBiYWNrdXBSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAgJiYgbS50byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHT1xuICAgICk7XG4gICAgYXNzZXJ0KGJhY2t1cFRvQml0Z29Nc2czLCAnQmFja3VwIHRvIEJpdGdvIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJhY2t1cFRvQml0Z29Nc2czID0gRGtsc1R5cGVzLnNlcmlhbGl6ZVAyUE1lc3NhZ2UoYmFja3VwVG9CaXRnb01zZzMpO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQml0Z29Ub1VzZXJSb3VuZDNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW3RoaXMuZm9ybWF0UDJQTWVzc2FnZShiaXRnb1RvVXNlck1zZzMsIGJpdGdvQ29tbWl0bWVudDIpXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEJpdGdvVG9Vc2VyUm91bmQzTXNnID0gZGVjcnlwdGVkQml0Z29Ub1VzZXJSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVJcbiAgICApO1xuICAgIGFzc2VydChzZXJpYWxpemVkQml0Z29Ub1VzZXJSb3VuZDNNc2csICdCaXRHbyB0byBVc2VyIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgYml0Z29Ub1VzZXJSb3VuZDNNc2cgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVQMlBNZXNzYWdlKHNlcmlhbGl6ZWRCaXRnb1RvVXNlclJvdW5kM01zZyk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1RvQmFja3VwUm91bmQzTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAgICB7IGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSwgcDJwTWVzc2FnZXM6IFt0aGlzLmZvcm1hdFAyUE1lc3NhZ2UoYml0Z29Ub0JhY2t1cE1zZzMsIGJpdGdvQ29tbWl0bWVudDIpXSB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFtiYWNrdXBHcGdQcnZLZXldXG4gICAgKTtcbiAgICBjb25zdCBzZXJpYWxpemVkQml0Z29Ub0JhY2t1cFJvdW5kM01zZyA9IGRlY3J5cHRlZEJpdGdvVG9CYWNrdXBSb3VuZDNNZXNzYWdlcy5wMnBNZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uZnJvbSA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyAmJiBtLnRvID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG4gICAgYXNzZXJ0KHNlcmlhbGl6ZWRCaXRnb1RvQmFja3VwUm91bmQzTXNnLCAnQml0R28gdG8gQmFja3VwIG1lc3NhZ2UgMyBub3QgZm91bmQgaW4gUDJQIG1lc3NhZ2VzJyk7XG4gICAgY29uc3QgYml0Z29Ub0JhY2t1cFJvdW5kM01zZyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZVAyUE1lc3NhZ2Uoc2VyaWFsaXplZEJpdGdvVG9CYWNrdXBSb3VuZDNNc2cpO1xuXG4gICAgY29uc3QgdXNlclJvdW5kNE1lc3NhZ2VzID0gdXNlclNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW2JhY2t1cFRvVXNlck1zZzMsIGJpdGdvVG9Vc2VyUm91bmQzTXNnXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHVzZXJSb3VuZDRCcm9hZGNhc3RNc2cgPSB1c2VyUm91bmQ0TWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLlVTRVIpO1xuICAgIGFzc2VydCh1c2VyUm91bmQ0QnJvYWRjYXN0TXNnLCAnVXNlciBtZXNzYWdlIDQgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRVc2VyUm91bmQ0QnJvYWRjYXN0TXNnID0gRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UodXNlclJvdW5kNEJyb2FkY2FzdE1zZyk7XG5cbiAgICBjb25zdCBiYWNrdXBSb3VuZDRNZXNzYWdlcyA9IGJhY2t1cFNlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW3VzZXJUb0JhY2t1cE1zZzMsIGJpdGdvVG9CYWNrdXBSb3VuZDNNc2ddLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgIH0pO1xuICAgIGNvbnN0IGJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZyA9IGJhY2t1cFJvdW5kNE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLmZpbmQoXG4gICAgICAobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUFxuICAgICk7XG4gICAgYXNzZXJ0KGJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZywgJ0JhY2t1cCBtZXNzYWdlIDQgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRCYWNrdXBSb3VuZDRCcm9hZGNhc3RNc2cgPSBEa2xzVHlwZXMuc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiYWNrdXBSb3VuZDRCcm9hZGNhc3RNc2cpO1xuXG4gICAgY29uc3Qgcm91bmQzTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgICAge1xuICAgICAgICBwMnBNZXNzYWdlczogW3NlcmlhbGl6ZWRVc2VyVG9CaXRnb01zZzMsIHNlcmlhbGl6ZWRCYWNrdXBUb0JpdGdvTXNnM10sXG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbc2VyaWFsaXplZFVzZXJSb3VuZDRCcm9hZGNhc3RNc2csIHNlcmlhbGl6ZWRCYWNrdXBSb3VuZDRCcm9hZGNhc3RNc2ddLFxuICAgICAgfSxcbiAgICAgIFtiaXRnb0dwZ1B1YktleV0sXG4gICAgICBbdXNlckdwZ1BydktleSwgYmFja3VwR3BnUHJ2S2V5XVxuICAgICk7XG5cbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMyxcbiAgICAgIGJpdGdvTXNnNCxcbiAgICAgIGNvbW1vbktleWNoYWluOiBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgIH0gPSBhd2FpdCB0aGlzLnNlbmRLZXlHZW5lcmF0aW9uUm91bmQzKHBhcmFtcy5lbnRlcnByaXNlLCBzZXNzaW9uSWQsIHJvdW5kM01lc3NhZ2VzKTtcblxuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24ga2V5Y2hhaW4gY3JlYXRpb25cbiAgICBhc3NlcnQuZXF1YWwoc2Vzc2lvbklkLCBzZXNzaW9uSWRSb3VuZDMsICdSb3VuZCAxIGFuZCAzIFNlc3Npb24gSURzIGRvIG5vdCBtYXRjaCcpO1xuICAgIGNvbnN0IGJpdGdvUm91bmQ0QnJvYWRjYXN0TWVzc2FnZXMgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyhcbiAgICAgIGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgICAgeyBwMnBNZXNzYWdlczogW10sIGJyb2FkY2FzdE1lc3NhZ2VzOiBbdGhpcy5mb3JtYXRCaXRnb0Jyb2FkY2FzdE1lc3NhZ2UoYml0Z29Nc2c0KV0gfSxcbiAgICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApLmJyb2FkY2FzdE1lc3NhZ2VzO1xuICAgIGNvbnN0IGJpdGdvUm91bmQ0QnJvYWRjYXN0TXNnID0gYml0Z29Sb3VuZDRCcm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuXG4gICAgYXNzZXJ0KGJpdGdvUm91bmQ0QnJvYWRjYXN0TXNnLCAnQml0R28gbWVzc2FnZSA0IG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICB1c2VyU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDRCcm9hZGNhc3RNc2csIGJhY2t1cFJvdW5kNEJyb2FkY2FzdE1zZ10sXG4gICAgfSk7XG5cbiAgICBiYWNrdXBTZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb1JvdW5kNEJyb2FkY2FzdE1zZywgdXNlclJvdW5kNEJyb2FkY2FzdE1zZ10sXG4gICAgfSk7XG5cbiAgICBjb25zdCB1c2VyUHJpdmF0ZU1hdGVyaWFsID0gdXNlclNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCBiYWNrdXBQcml2YXRlTWF0ZXJpYWwgPSBiYWNrdXBTZXNzaW9uLmdldEtleVNoYXJlKCk7XG4gICAgY29uc3QgdXNlclJlZHVjZWRQcml2YXRlTWF0ZXJpYWwgPSB1c2VyU2Vzc2lvbi5nZXRSZWR1Y2VkS2V5U2hhcmUoKTtcbiAgICBjb25zdCBiYWNrdXBSZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsID0gYmFja3VwU2Vzc2lvbi5nZXRSZWR1Y2VkS2V5U2hhcmUoKTtcbiAgICBjb25zdCB1c2VyVnJmS2V5U2hhcmUgPSB1c2VyVnJmU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IGJhY2t1cFZyZktleVNoYXJlID0gYmFja3VwVnJmU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuXG4gICAgY29uc3QgdXNlckNvbW1vbktleWNoYWluID0gRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKHVzZXJQcml2YXRlTWF0ZXJpYWwpO1xuICAgIGNvbnN0IGJhY2t1cENvbW1vbktleWNoYWluID0gRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKGJhY2t1cFByaXZhdGVNYXRlcmlhbCk7XG5cbiAgICBhc3NlcnQuZXF1YWwoYml0Z29Db21tb25LZXljaGFpbiwgdXNlckNvbW1vbktleWNoYWluLCAnVXNlciBhbmQgQml0Z28gQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gnKTtcbiAgICBhc3NlcnQuZXF1YWwoYml0Z29Db21tb25LZXljaGFpbiwgYmFja3VwQ29tbW9uS2V5Y2hhaW4sICdCYWNrdXAgYW5kIEJpdGdvIENvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCB7IGVudmVsb3BlOiB1c2VyRW52ZWxvcGUsIHJlZHVjZWRFbnZlbG9wZTogdXNlclJlZHVjZWRFbnZlbG9wZSB9ID0gYnVpbGRWcmZLZXlFbnZlbG9wZXMoXG4gICAgICB1c2VyUHJpdmF0ZU1hdGVyaWFsLFxuICAgICAgdXNlclJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICB1c2VyVnJmS2V5U2hhcmVcbiAgICApO1xuICAgIGNvbnN0IHsgZW52ZWxvcGU6IGJhY2t1cEVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGU6IGJhY2t1cFJlZHVjZWRFbnZlbG9wZSB9ID0gYnVpbGRWcmZLZXlFbnZlbG9wZXMoXG4gICAgICBiYWNrdXBQcml2YXRlTWF0ZXJpYWwsXG4gICAgICBiYWNrdXBSZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsLFxuICAgICAgYmFja3VwVnJmS2V5U2hhcmVcbiAgICApO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvblNlc3Npb24gPVxuICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uID09PSAyID8gYXdhaXQgdGhpcy5iaXRnby5jcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbihwYXJhbXMucGFzc3BocmFzZSkgOiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXJLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICAgIE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgICAgYml0Z29Db21tb25LZXljaGFpbixcbiAgICAgICAgdXNlckVudmVsb3BlLFxuICAgICAgICB1c2VyUmVkdWNlZEVudmVsb3BlLFxuICAgICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgcGFyYW1zLndlYmF1dGhuSW5mbyxcbiAgICAgICAgZW5jcnlwdGlvblNlc3Npb24sXG4gICAgICAgIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICAgICk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgICAgICBiaXRnb0NvbW1vbktleWNoYWluLFxuICAgICAgICBiYWNrdXBFbnZlbG9wZSxcbiAgICAgICAgYmFja3VwUmVkdWNlZEVudmVsb3BlLFxuICAgICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICAgICk7XG4gICAgICBjb25zdCBiaXRnb0tleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgICAgYml0Z29Db21tb25LZXljaGFpbixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5zYWZlSWRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdXNlcktleWNoYWluUHJvbWlzZSxcbiAgICAgICAgYmFja3VwS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgICBiaXRnb0tleWNoYWluUHJvbWlzZSxcbiAgICAgIF0pO1xuICAgICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1c2VyS2V5Y2hhaW4sXG4gICAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZW5jcnlwdGlvblNlc3Npb24/LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIHJvdW5kIDEgZm9yIHRoZSB1c2VyL0JpdEdvIGhhcmQtZGVyaXZlIGNlcmVtb255LlxuICAgKi9cbiAgYXN5bmMgc2VuZERlcml2YXRpb25Sb3VuZDFCeVNlbmRlcihcbiAgICBzZW5kZXJGbjogRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbjxNUEN2MkRlcml2ZVJvdW5kMVJlc3BvbnNlPixcbiAgICB1c2VyR3BnUHVibGljS2V5OiBzdHJpbmcsXG4gICAgcGF5bG9hZDogRGtsc1R5cGVzLkF1dGhFbmNNZXNzYWdlcyxcbiAgICBwYXJlbnRLZXlJZDogc3RyaW5nLFxuICAgIGRlcml2YXRpb25JbmRleDogbnVtYmVyXG4gICk6IFByb21pc2U8TVBDdjJEZXJpdmVSb3VuZDFSZXNwb25zZT4ge1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyh1c2VyR3BnUHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMocGFyZW50S2V5SWQpLCAnUGFyZW50IGtleSBpZCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHVzZXJNc2cxID0gcGF5bG9hZC5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik/LnBheWxvYWQ7XG4gICAgYXNzZXJ0KHVzZXJNc2cxLCAnVXNlciBtZXNzYWdlIDEgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgYXNzZXJ0KFxuICAgICAgTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LnByb3BzLmRlcml2YXRpb25JbmRleC5pcyhkZXJpdmF0aW9uSW5kZXgpLFxuICAgICAgJ0Rlcml2YXRpb24gaW5kZXggbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBzYWZlIGludGVnZXInXG4gICAgKTtcbiAgICBjb25zdCByZXF1ZXN0OiBNUEN2MkRlcml2ZVJvdW5kMVJlcXVlc3QgPSB7XG4gICAgICB1c2VyR3BnUHVibGljS2V5LFxuICAgICAgdXNlck1zZzE6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCAuLi51c2VyTXNnMSB9LFxuICAgICAgcGFyZW50S2V5SWQsXG4gICAgICBkZXJpdmF0aW9uSW5kZXgsXG4gICAgfTtcbiAgICByZXR1cm4gc2VuZGVyRm4oTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIxJ10sIHJlcXVlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHJvdW5kIDIgZm9yIHRoZSB1c2VyL0JpdEdvIGhhcmQtZGVyaXZlIGNlcmVtb255LlxuICAgKi9cbiAgYXN5bmMgc2VuZERlcml2YXRpb25Sb3VuZDJCeVNlbmRlcihcbiAgICBzZW5kZXJGbjogRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbjxNUEN2MkRlcml2ZVJvdW5kMlJlc3BvbnNlPixcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICBwYXlsb2FkOiBEa2xzVHlwZXMuQXV0aEVuY01lc3NhZ2VzXG4gICk6IFByb21pc2U8TVBDdjJEZXJpdmVSb3VuZDJSZXNwb25zZT4ge1xuICAgIGFzc2VydChOb25FbXB0eVN0cmluZy5pcyhzZXNzaW9uSWQpLCAnU2Vzc2lvbiBJRCBpcyByZXF1aXJlZCcpO1xuICAgIGNvbnN0IHVzZXJNc2cyID0gcGF5bG9hZC5icm9hZGNhc3RNZXNzYWdlcy5maW5kKChtKSA9PiBtLmZyb20gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik/LnBheWxvYWQ7XG4gICAgYXNzZXJ0KHVzZXJNc2cyLCAnVXNlciBtZXNzYWdlIDIgbm90IGZvdW5kIGluIGJyb2FkY2FzdCBtZXNzYWdlcycpO1xuXG4gICAgY29uc3QgcmVxdWVzdDogTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0ID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgdXNlck1zZzI6IHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCAuLi51c2VyTXNnMiB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNlbmRlckZuKE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2MkRlcml2ZS1SMiddLCByZXF1ZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgcm91bmQgMyBhbmQgcmV0dXJucyB0aGUgY2hpbGQgY29tbW9uIGtleWNoYWluLlxuICAgKi9cbiAgYXN5bmMgc2VuZERlcml2YXRpb25Sb3VuZDNCeVNlbmRlcihcbiAgICBzZW5kZXJGbjogRWNkc2FNUEN2MkRlcml2ZUtleVNlbmRGbjxNUEN2MkRlcml2ZVJvdW5kM1Jlc3BvbnNlPixcbiAgICBzZXNzaW9uSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPE1QQ3YyRGVyaXZlUm91bmQzUmVzcG9uc2U+IHtcbiAgICBhc3NlcnQoTm9uRW1wdHlTdHJpbmcuaXMoc2Vzc2lvbklkKSwgJ1Nlc3Npb24gSUQgaXMgcmVxdWlyZWQnKTtcbiAgICByZXR1cm4gc2VuZGVyRm4oTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIzJ10sIHsgc2Vzc2lvbklkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHNhZmUgY2hpbGQgaGFyZC1kZXJpdmUgY2VyZW1vbnkgYW5kIHJlZ2lzdGVycyBjaGlsZCBrZXkgZG9jdW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlOiBzdHJpbmc7XG4gICAgc2FmZUlkOiBzdHJpbmc7XG4gICAgLyoqIFJvb3Qga2V5IElEIHVzZWQgZm9yIHRoZSBkZXJpdmUuICovXG4gICAgcGFyZW50S2V5SWQ6IHN0cmluZztcbiAgICBkZXJpdmF0aW9uSW5kZXg6IG51bWJlcjtcbiAgICB1c2VyUm9vdEtleUlkOiBzdHJpbmc7XG4gICAgYmFja3VwUm9vdEtleUlkOiBzdHJpbmc7XG4gICAgdXNlclJvb3RLZXlTaGFyZTogQnVmZmVyO1xuICAgIHVzZXJSb290VnJmS2V5U2hhcmU6IEJ1ZmZlcjtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgY29uc3QgdXNlckdwZ0tleSA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignc2VjcDI1NmsxJyk7XG4gICAgY29uc3QgeyBtcGN2MlB1YmxpY0tleSB9ID0gYXdhaXQgdGhpcy5nZXRCaXRnb0dwZ1B1YmtleUJhc2VkT25GZWF0dXJlRmxhZ3MocGFyYW1zLmVudGVycHJpc2UsIHRydWUpO1xuICAgIGNvbnN0IG1wY3YyS2V5ID0gbXBjdjJQdWJsaWNLZXkgPz8gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICAgIGFzc2VydChtcGN2MktleSwgJ0ZhaWxlZCB0byBnZXQgQml0R28gTVBDdjIgR1BHIHB1YmxpYyBrZXknKTtcbiAgICBjb25zdCBiaXRnb1B1YmxpY0dwZ0tleSA9IG1wY3YyS2V5LmFybW9yKCk7XG5cbiAgICBpZiAoZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZyh0aGlzLmJpdGdvLmdldEVudigpKSkge1xuICAgICAgYXNzZXJ0KGlzQml0Z29NcGNQdWJLZXkoYml0Z29QdWJsaWNHcGdLZXksICdtcGN2MicpLCAnSW52YWxpZCBCaXRHbyBHUEcgcHVibGljIGtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJHcGdQcnZLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgIGdwZ0tleTogdXNlckdwZ0tleS5wcml2YXRlS2V5LFxuICAgIH07XG4gICAgY29uc3QgYml0Z29HcGdQdWJLZXk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSA9IHtcbiAgICAgIHBhcnR5SWQ6IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICBncGdLZXk6IGJpdGdvUHVibGljR3BnS2V5LFxuICAgIH07XG5cbiAgICBjb25zdCBwYXRoID0gaGFyZGVuZWREZXJpdmF0aW9uUGF0aChwYXJhbXMuZGVyaXZhdGlvbkluZGV4KTtcbiAgICBjb25zdCB1c2VyRGVyaXZlU2Vzc2lvbiA9IG5ldyBEa2xzRHJ2LkRlcml2ZShcbiAgICAgIDMsXG4gICAgICAyLFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgcGFyYW1zLnVzZXJSb290S2V5U2hhcmUsXG4gICAgICBwYXJhbXMudXNlclJvb3RWcmZLZXlTaGFyZSxcbiAgICAgIHBhdGhcbiAgICApO1xuXG4gICAgLy8gUm91bmQgMTogc2VuZCB0aGUgdXNlcidzIGZpcnN0IG1lc3NhZ2UuXG4gICAgY29uc3QgdXNlclJvdW5kMU1zZyA9IGF3YWl0IHVzZXJEZXJpdmVTZXNzaW9uLmluaXREZXJpdmUoKTtcbiAgICBjb25zdCByb3VuZDFNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgICB7XG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLnNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UodXNlclJvdW5kMU1zZyldLFxuICAgICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICB9LFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgYXNzZXJ0KE5vbkVtcHR5U3RyaW5nLmlzKHVzZXJHcGdLZXkucHVibGljS2V5KSwgJ1VzZXIgR1BHIHB1YmxpYyBrZXkgaXMgcmVxdWlyZWQnKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZCwgYml0Z29Nc2cxIH0gPSBhd2FpdCB0aGlzLnNlbmREZXJpdmF0aW9uUm91bmQxQnlTZW5kZXIoXG4gICAgICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQ8TVBDdjJEZXJpdmVSb3VuZDFSZXNwb25zZT4odGhpcy5iaXRnbywgcGFyYW1zLmVudGVycHJpc2UsIHBhcmFtcy5zYWZlSWQpLFxuICAgICAgdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICByb3VuZDFNZXNzYWdlcyxcbiAgICAgIHBhcmFtcy5wYXJlbnRLZXlJZCxcbiAgICAgIHBhcmFtcy5kZXJpdmF0aW9uSW5kZXhcbiAgICApO1xuXG4gICAgLy8gUm91bmQgMjogcHJvY2VzcyB0aGUgcGVlcidzIGZpcnN0IG1lc3NhZ2UgYW5kIHJldHVybiB0aGUgdXNlcidzIHNlY29uZC5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1JvdW5kMSA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMSldIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQxTXNnID0gZGVjcnlwdGVkQml0Z29Sb3VuZDEuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDFNc2csICdCaXRHbyBkZXJpdmUgbWVzc2FnZSAxIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICBjb25zdCB1c2VyUm91bmQyTWVzc2FnZXMgPSB1c2VyRGVyaXZlU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMU1zZyldLFxuICAgIH0pO1xuICAgIGNvbnN0IHJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmVuY3J5cHRBbmRBdXRoT3V0Z29pbmdNZXNzYWdlcyhcbiAgICAgIERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh1c2VyUm91bmQyTWVzc2FnZXMpLFxuICAgICAgW2JpdGdvR3BnUHViS2V5XSxcbiAgICAgIFt1c2VyR3BnUHJ2S2V5XVxuICAgICk7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMiwgYml0Z29Nc2cyIH0gPSBhd2FpdCB0aGlzLnNlbmREZXJpdmF0aW9uUm91bmQyQnlTZW5kZXIoXG4gICAgICBLZXlHZW5TZW5kZXJGb3JTYWZlQ2hpbGQ8TVBDdjJEZXJpdmVSb3VuZDJSZXNwb25zZT4odGhpcy5iaXRnbywgcGFyYW1zLmVudGVycHJpc2UsIHBhcmFtcy5zYWZlSWQpLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcm91bmQyTWVzc2FnZXNcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMiwgJ1JvdW5kIDEgYW5kIDIgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICAvLyBQcm9jZXNzIHRoZSBwZWVyIHJlc3BvbnNlIHRvIGZpbmFsaXplIHRoZSBsb2NhbCBjaGlsZCBzaGFyZS5cbiAgICBjb25zdCBkZWNyeXB0ZWRCaXRnb1JvdW5kMiA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICAgIHsgcDJwTWVzc2FnZXM6IFtdLCBicm9hZGNhc3RNZXNzYWdlczogW3RoaXMuZm9ybWF0Qml0Z29Ccm9hZGNhc3RNZXNzYWdlKGJpdGdvTXNnMildIH0sXG4gICAgICBbYml0Z29HcGdQdWJLZXldLFxuICAgICAgW11cbiAgICApO1xuICAgIGNvbnN0IGJpdGdvUm91bmQyTXNnID0gZGVjcnlwdGVkQml0Z29Sb3VuZDIuYnJvYWRjYXN0TWVzc2FnZXMuZmluZCgobSkgPT4gbS5mcm9tID09PSBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICBhc3NlcnQoYml0Z29Sb3VuZDJNc2csICdCaXRHbyBkZXJpdmUgbWVzc2FnZSAyIG5vdCBmb3VuZCBpbiBicm9hZGNhc3QgbWVzc2FnZXMnKTtcbiAgICB1c2VyRGVyaXZlU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbRGtsc1R5cGVzLmRlc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShiaXRnb1JvdW5kMk1zZyldLFxuICAgIH0pO1xuXG4gICAgLy8gUm91bmQgMzogb2J0YWluIHRoZSBjaGlsZCBjb21tb24ta2V5Y2hhaW4gbWV0YWRhdGEuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQ6IHNlc3Npb25JZFJvdW5kMywgY29tbW9uS2V5Y2hhaW4gfSA9IGF3YWl0IHRoaXMuc2VuZERlcml2YXRpb25Sb3VuZDNCeVNlbmRlcihcbiAgICAgIEtleUdlblNlbmRlckZvclNhZmVDaGlsZDxNUEN2MkRlcml2ZVJvdW5kM1Jlc3BvbnNlPih0aGlzLmJpdGdvLCBwYXJhbXMuZW50ZXJwcmlzZSwgcGFyYW1zLnNhZmVJZCksXG4gICAgICBzZXNzaW9uSWRcbiAgICApO1xuICAgIGFzc2VydC5lcXVhbChzZXNzaW9uSWQsIHNlc3Npb25JZFJvdW5kMywgJ1JvdW5kIDEgYW5kIDMgU2Vzc2lvbiBJRHMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCB1c2VyUHJpdmF0ZU1hdGVyaWFsID0gdXNlckRlcml2ZVNlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCB1c2VyUmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IHVzZXJEZXJpdmVTZXNzaW9uLmdldFJlZHVjZWRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IHVzZXJDb21tb25LZXljaGFpbiA9IERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyUHJpdmF0ZU1hdGVyaWFsKTtcbiAgICBhc3NlcnQuZXF1YWwoY29tbW9uS2V5Y2hhaW4sIHVzZXJDb21tb25LZXljaGFpbiwgJ1VzZXIgYW5kIEJpdEdvIGNvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uU2Vzc2lvbiA9XG4gICAgICBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24gPT09IDIgPyBhd2FpdCB0aGlzLmJpdGdvLmNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uKHBhcmFtcy5wYXNzcGhyYXNlKSA6IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuYWRkVXNlcktleWNoYWluKFxuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAgdXNlclByaXZhdGVNYXRlcmlhbCxcbiAgICAgICAgdXNlclJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgICAgcGFyYW1zLnNhZmVJZCxcbiAgICAgICAgeyBwYXJlbnRLZXlJZDogcGFyYW1zLnVzZXJSb290S2V5SWQsIGluZGV4OiBwYXJhbXMuZGVyaXZhdGlvbkluZGV4IH1cbiAgICAgICk7XG4gICAgICBjb25zdCBiYWNrdXBLZXljaGFpblByb21pc2UgPSB0aGlzLmFkZEJhY2t1cEtleWNoYWluKFxuICAgICAgICBjb21tb25LZXljaGFpbixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICBwYXJhbXMuc2FmZUlkLFxuICAgICAgICB7IHBhcmVudEtleUlkOiBwYXJhbXMuYmFja3VwUm9vdEtleUlkLCBpbmRleDogcGFyYW1zLmRlcml2YXRpb25JbmRleCB9XG4gICAgICApO1xuICAgICAgY29uc3QgYml0Z29LZXljaGFpblByb21pc2UgPSB0aGlzLmFkZEJpdGdvS2V5Y2hhaW4oY29tbW9uS2V5Y2hhaW4sIHBhcmFtcy5zYWZlSWQsIHtcbiAgICAgICAgcGFyZW50S2V5SWQ6IHBhcmFtcy5wYXJlbnRLZXlJZCxcbiAgICAgICAgaW5kZXg6IHBhcmFtcy5kZXJpdmF0aW9uSW5kZXgsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW4sIGJpdGdvS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICB1c2VyS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgICBiYWNrdXBLZXljaGFpblByb21pc2UsXG4gICAgICAgIGJpdGdvS2V5Y2hhaW5Qcm9taXNlLFxuICAgICAgXSk7XG4gICAgICByZXR1cm4geyB1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuY3J5cHRpb25TZXNzaW9uPy5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTaWduaW5nRGtnU2Vzc2lvbnMocmV0cm9maXQ/OiBEZWNyeXB0ZWRSZXRyb2ZpdFBheWxvYWQpIHtcbiAgICBpZiAocmV0cm9maXQpIHtcbiAgICAgIGNvbnN0IHJldHJvZml0RGF0YSA9IHRoaXMuZ2V0TXBjVjJSZXRyb2ZpdERhdGFGcm9tTXBjVjFLZXlzKHtcbiAgICAgICAgbXBjdjFVc2VyS2V5U2hhcmU6IHJldHJvZml0LmRlY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIG1wY3YxQmFja3VwS2V5U2hhcmU6IHJldHJvZml0LmRlY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXNlclNlc3Npb246IG5ldyBEa2xzRGtnLkRrZygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHVuZGVmaW5lZCwgcmV0cm9maXREYXRhLm1wY3YyVXNlcktleVNoYXJlKSxcbiAgICAgICAgYmFja3VwU2Vzc2lvbjogbmV3IERrbHNEa2cuRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCB1bmRlZmluZWQsIHJldHJvZml0RGF0YS5tcGN2MkJhY2t1cEtleVNoYXJlKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB1c2VyU2Vzc2lvbjogbmV3IERrbHNEa2cuRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uVVNFUiksXG4gICAgICBiYWNrdXBTZXNzaW9uOiBuZXcgRGtsc0RrZy5Ea2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -6,7 +6,7 @@ exports.fetchRootKeychainForSafeChild = fetchRootKeychainForSafeChild;
|
|
|
6
6
|
exports.resolveSafeOwnerSigningPrv = resolveSafeOwnerSigningPrv;
|
|
7
7
|
exports.resolveSafeChildPrvForSharing = resolveSafeChildPrvForSharing;
|
|
8
8
|
const keychain_1 = require("../keychain");
|
|
9
|
-
const
|
|
9
|
+
const sdk_lib_safes_1 = require("@bitgo/sdk-lib-safes");
|
|
10
10
|
const errors_1 = require("../errors");
|
|
11
11
|
class InvalidRootKeychainSourceError extends Error {
|
|
12
12
|
constructor(id, source) {
|
|
@@ -95,7 +95,7 @@ async function resolveSafeKeyMaterial(params) {
|
|
|
95
95
|
if (childKeychain.derivedFromParentWithPath === undefined) {
|
|
96
96
|
throw new Error(`Safe wallet ${walletId}: child keychain is missing derivedFromParentWithPath`);
|
|
97
97
|
}
|
|
98
|
-
const derived = (0,
|
|
98
|
+
const derived = (0, sdk_lib_safes_1.deriveSafeChildHardenedFromXprv)(rootPrv, (0, sdk_lib_safes_1.parseDerivedFromParentWithHardenedPath)(childKeychain.derivedFromParentWithPath));
|
|
99
99
|
if (derived.pub !== childKeychain.pub) {
|
|
100
100
|
throw new SafeDerivedPublicKeyMismatchError(walletId, childKeychain.pub, derived.pub);
|
|
101
101
|
}
|
|
@@ -148,4 +148,4 @@ async function resolveSafeChildPrvForSharing(params) {
|
|
|
148
148
|
makeNotImplementedError: (slot, walletId) => new SafeShareNotImplementedError(walletId, safeShareSlotDetail(slot, params)),
|
|
149
149
|
});
|
|
150
150
|
}
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUtleWNoYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9zYWZlS2V5Y2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcURBLHNFQUtDO0FBTUQsc0VBZUM7QUE2RkQsZ0VBZ0JDO0FBeUJELHNFQVFDO0FBek5ELDBDQUF3RztBQUN4RywyREFBaUg7QUFDakgsc0NBQW1EO0FBR25ELE1BQWEsOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUFZLEVBQVUsRUFBRSxNQUEwQjtRQUNoRCxLQUFLLENBQ0gsaUJBQWlCLEVBQUUsZ0JBQWdCLE1BQU0sSUFBSSxTQUFTLHNCQUFzQjtZQUMxRSxxREFBcUQsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0NBQWdDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBUkQsd0VBUUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBYSxpQ0FBa0MsU0FBUSxLQUFLO0lBQzFELFlBQVksUUFBZ0IsRUFBRSxXQUFtQixFQUFFLFVBQWtCO1FBQ25FLEtBQUssQ0FDSCxlQUFlLFFBQVEscUVBQXFFO1lBQzFGLFlBQVksV0FBVyxTQUFTLFVBQVUsR0FBRyxDQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFSRCw4RUFRQztBQUVELGtHQUFrRztBQUNsRyxNQUFhLG1DQUFvQyxTQUFRLEtBQUs7SUFDNUQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxxQ0FBcUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFMRCxrRkFLQztBQUVELG1HQUFtRztBQUNuRyxNQUFhLDRCQUE2QixTQUFRLEtBQUs7SUFDckQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMs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TUFBTSxDQUFDLFlBQVksS0FBSyxPQUFPO1FBQ3BDLENBQUMsQ0FBQyw2RUFBNkU7UUFDL0UsQ0FBQyxDQUFDLDRFQUE0RSxDQUFDO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsTUFBMkM7SUFFM0MsT0FBTyxzQkFBc0IsQ0FBQztRQUM1QixHQUFHLE1BQU07UUFDVCx1QkFBdUIsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUMxQyxJQUFJLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDaEYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5LCBJS2V5Y2hhaW5zLCBLZXljaGFpbiwgS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2IH0gZnJvbSAnLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydiwgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggfSBmcm9tICcuLi9zYWZlL3NhZmVEZXJpdmF0aW9uJztcbmltcG9ydCB7IEluY29ycmVjdFBhc3N3b3JkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0ZWRLZXljaGFpbkRhdGEgfSBmcm9tICcuL2lXYWxsZXQnO1xuXG5leHBvcnQgY2xhc3MgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyKFxuICAgICAgYFJvb3Qga2V5Y2hhaW4gJHtpZH0gaGFzIHNvdXJjZSAnJHtzb3VyY2UgPz8gJ3Vua25vd24nfSc7IGV4cGVjdGVkICd1c2VyJy4gYCArXG4gICAgICAgIGBVc2luZyBhIGJhY2t1cCBvciBCaXRHbyByb290IHdvdWxkIGZhaWwgYXQgc2lnbmluZy5gXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yJztcbiAgfVxufVxuXG4vKiogVGhyb3duIHdoZW4gaGFyZGVuZWQgZGVyaXZhdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnaXN0ZXJlZCBjaGlsZCBwdWJsaWMga2V5LiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iod2FsbGV0SWQ6IHN0cmluZywgZXhwZWN0ZWRQdWI6IHN0cmluZywgZGVyaXZlZFB1Yjogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGRlcml2ZWQgY2hpbGQgcHVibGljIGtleSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVnaXN0ZXJlZCB1c2VyIGtleS4gYCArXG4gICAgICAgIGBFeHBlY3RlZCAke2V4cGVjdGVkUHVifSwgZ290ICR7ZGVyaXZlZFB1Yn0uYFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ1NhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRocm93biB3aGVuIG93bmVyIHNpZ25pbmcgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHNhZmUgc2xvdCAoVFNTLCBlZDI1NTE5IG11bHRpc2lnLCDigKYpLiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih3YWxsZXRJZDogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgIHN1cGVyKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogJHtkZXRhaWx9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1NhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yJztcbiAgfVxufVxuXG4vKiogVGhyb3duIHdoZW4gd2FsbGV0IHNoYXJpbmcgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHNhZmUgc2xvdCAoVFNTLCBlZDI1NTE5IG11bHRpc2lnLCDigKYpLiAqL1xuZXhwb3J0IGNsYXNzIFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHdhbGxldElkOiBzdHJpbmcsIGRldGFpbDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFNhZmUgd2FsbGV0ICR7d2FsbGV0SWR9OiAke2RldGFpbH1gKTtcbiAgICB0aGlzLm5hbWUgPSAnU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqIGVkMjU1MTkgb25jaGFpbiBtdWx0aXNpZyAoc2xvdCDikaMpLiBOZWVkcyBTTElQLTAwMTAsIG5vdCBzZWNwMjU2azEgQklQMzIuICovXG5jb25zdCBFRDI1NTE5X09OQ0hBSU5fRkFNSUxJRVMgPSBuZXcgU2V0KFsnYWxnbycsICd4bG0nLCAnaGJhciddKTtcblxuLyoqXG4gKiBUcnVlIHdoZW4gdGhpcyBpcyB0aGUgc2FmZSBtaW50ZXIncyB1c2VyIGtleTogd2FsbGV0IGlzIGluIGEgc2FmZSwgdGhlIGtleVxuICogaGFzIGEgcGFyZW50IHJvb3QsIGFuZCB0aGVyZSBpcyBubyBjaGlsZC1sZXZlbCBlbmNyeXB0ZWRQcnYgKHNoYXJlZXMgaGF2ZSBvbmUpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlQ2hpbGRQdWJsaWNPbmx5S2V5Y2hhaW4oXG4gIHdhbGxldFNhZmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBrZXljaGFpbjogS2V5Y2hhaW4gfCB1bmRlZmluZWRcbik6IGtleWNoYWluIGlzIEtleWNoYWluICYgeyBwYXJlbnQ6IHN0cmluZyB9IHtcbiAgcmV0dXJuICEhKHdhbGxldFNhZmVJZCAmJiBrZXljaGFpbj8ucGFyZW50ICYmICFrZXljaGFpbi5lbmNyeXB0ZWRQcnYpO1xufVxuXG4vKipcbiAqIEZldGNoIHRoZSByb290IHVzZXIga2V5Y2hhaW4gZm9yIGEgc2FmZSBjaGlsZCBrZXkuXG4gKiBSZXF1aXJlcyBgc291cmNlID09PSAndXNlcidgIHNvIGEgbWlzY29uZmlndXJlZCBwYXJlbnQgZmFpbHMgZWFybHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChcbiAga2V5Y2hhaW5zOiBJS2V5Y2hhaW5zLFxuICBjaGlsZEtleWNoYWluOiBLZXljaGFpblxuKTogUHJvbWlzZTxLZXljaGFpbldpdGhFbmNyeXB0ZWRQcnY+IHtcbiAgaWYgKCFjaGlsZEtleWNoYWluLnBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2hpbGRLZXljaGFpbi5wYXJlbnQgaXMgcmVxdWlyZWQgdG8gZmV0Y2ggdGhlIHJvb3Qga2V5Y2hhaW4nKTtcbiAgfVxuICBjb25zdCByb290ID0gYXdhaXQga2V5Y2hhaW5zLmdldCh7IGlkOiBjaGlsZEtleWNoYWluLnBhcmVudCB9KTtcbiAgaWYgKHJvb3Quc291cmNlICE9PSAndXNlcicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFJvb3RLZXljaGFpblNvdXJjZUVycm9yKHJvb3QuaWQsIHJvb3Quc291cmNlKTtcbiAgfVxuICBpZiAoIXJvb3QuZW5jcnlwdGVkUHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByb290IGtleWNoYWluICR7cm9vdC5pZH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBlbmNyeXB0ZWRQcnZgKTtcbiAgfVxuICByZXR1cm4gcm9vdCBhcyBLZXljaGFpbldpdGhFbmNyeXB0ZWRQcnY7XG59XG5cbi8qKlxuICogU2hhcmVkIHBhcmFtcyBmb3IgcmVzb2x2aW5nIHNhZmUtb3duZXIga2V5IG1hdGVyaWFsIChvd25lciBzaWduaW5nIGFuZCB3YWxsZXQgc2hhcmluZykuXG4gKiBCb3RoIHJlc29sdmVycyBleHRlbmQgdGhpcyBzbyB0aGUgcHJlY29uZGl0aW9uL2Rlcml2YXRpb24gcGF0aCBjYW5ub3QgZGl2ZXJnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zIHtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAga2V5Y2hhaW5zOiBJS2V5Y2hhaW5zO1xuICB3YWxsZXRJZDogc3RyaW5nO1xuICAvKiogT25jaGFpbiBzZWNwMjU2azE6IGhhcmRlbmVkLWRlcml2ZSBhbmQgdmVyaWZ5IHB1Yi4gT3RoZXIgc2xvdHMgdGhyb3cuICovXG4gIG11bHRpc2lnVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb2luRmFtaWx5OiBzdHJpbmc7XG4gIGNoaWxkS2V5Y2hhaW46IEtleWNoYWluO1xuICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmc7XG4gIC8qKiBXaGVuIGFscmVhZHkgZmV0Y2hlZCAocGFzc3BocmFzZSBwcmVmbGlnaHQpLCBza2lwIGEgc2Vjb25kIEdFVC4gKi9cbiAgcm9vdEtleWNoYWluPzogS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2O1xufVxuXG5leHBvcnQgdHlwZSBSZXNvbHZlU2FmZU93bmVyU2lnbmluZ1BydlBhcmFtcyA9IFNhZmVLZXlNYXRlcmlhbEJhc2VQYXJhbXM7XG5cbnR5cGUgU2FmZUtleU1hdGVyaWFsU2xvdCA9ICd0c3MnIHwgJ2VkMjU1MTknO1xuXG50eXBlIFJlc29sdmVTYWZlS2V5TWF0ZXJpYWxQYXJhbXMgPSBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zICYge1xuICAvKiogQ29uc3RydWN0cyB0aGUgbm90LWltcGxlbWVudGVkIGVycm9yIGZvciB0aGUgY3VycmVudCByZXNvbHZlciAoc2lnbmluZyB2cyBzaGFyaW5nKS4gKi9cbiAgbWFrZU5vdEltcGxlbWVudGVkRXJyb3I6IChzbG90OiBTYWZlS2V5TWF0ZXJpYWxTbG90LCB3YWxsZXRJZDogc3RyaW5nKSA9PiBFcnJvcjtcbn07XG5cbi8qKlxuICogU2hhcmVkIGNvcmUgdGhhdCByZXNvbHZlcyBzYWZlIGtleSBtYXRlcmlhbCBmb3IgYSBwdWItb25seSBzYWZlIGNoaWxkLiBSZXR1cm5zIHRoZSBDSElMRFxuICogYHtwcnYsIHB1Yn1gIG9ubHkg4oCUIG5ldmVyIHRoZSByb290IOKAlCBzbyB0aGUgcm9vdCBjYW4gbmV2ZXIgbGVhayBpbnRvIGEgc2hhcmUgZG9jdW1lbnQuXG4gKlxuICogT25jaGFpbiBzZWNwMjU2azE6IGRlY3J5cHQgcm9vdCwgaGFyZGVuZWQtZGVyaXZlIGF0IGBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoYFxuICogKGBtLzxuPidgKSwgYW5kIHZlcmlmeSB0aGUgcmVnaXN0ZXJlZCBwdWIuIFRTUyBhbmQgZWQyNTUxOSBvbmNoYWluIHRocm93IHZpYVxuICogYG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yYCDigJQgdGhlIGNhbGxlciBjb25zdHJ1Y3RzIGl0cyBvd24gZXJyb3IgY2xhc3MgKyBtZXNzYWdlLCBzbyB0aGVcbiAqIGd1YXJkIHNldCBzdGF5cyBzaGFyZWQgd2hpbGUgc2lnbmluZy9zaGFyaW5nIHJlcG9ydCB0aGVpciBvd24gZXJyb3JzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZUtleU1hdGVyaWFsKHBhcmFtczogUmVzb2x2ZVNhZmVLZXlNYXRlcmlhbFBhcmFtcyk6IFByb21pc2U8eyBwcnY6IHN0cmluZzsgcHViOiBzdHJpbmcgfT4ge1xuICBjb25zdCB7XG4gICAgYml0Z28sXG4gICAga2V5Y2hhaW5zLFxuICAgIHdhbGxldElkLFxuICAgIG11bHRpc2lnVHlwZSxcbiAgICBjb2luRmFtaWx5LFxuICAgIGNoaWxkS2V5Y2hhaW4sXG4gICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgfSA9IHBhcmFtcztcblxuICBpZiAobXVsdGlzaWdUeXBlICE9PSAnb25jaGFpbicpIHtcbiAgICB0aHJvdyBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcigndHNzJywgd2FsbGV0SWQpO1xuICB9XG4gIGlmIChFRDI1NTE5X09OQ0hBSU5fRkFNSUxJRVMuaGFzKGNvaW5GYW1pbHkpKSB7XG4gICAgdGhyb3cgbWFrZU5vdEltcGxlbWVudGVkRXJyb3IoJ2VkMjU1MTknLCB3YWxsZXRJZCk7XG4gIH1cblxuICBjb25zdCByb290S2V5Y2hhaW4gPSBwYXJhbXMucm9vdEtleWNoYWluID8/IChhd2FpdCBmZXRjaFJvb3RLZXljaGFpbkZvclNhZmVDaGlsZChrZXljaGFpbnMsIGNoaWxkS2V5Y2hhaW4pKTtcbiAgY29uc3Qgcm9vdFBydiA9IGF3YWl0IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIHJvb3RLZXljaGFpbiwgd2FsbGV0UGFzc3BocmFzZSk7XG4gIGlmICghcm9vdFBydikge1xuICAgIHRocm93IG5ldyBJbmNvcnJlY3RQYXNzd29yZEVycm9yKCk7XG4gIH1cblxuICBpZiAoIWNoaWxkS2V5Y2hhaW4ucHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogY2hpbGQga2V5Y2hhaW4gaXMgbWlzc2luZyBwdWIgZm9yIHByZS1zaWduIHZlcmlmaWNhdGlvbmApO1xuICB9XG4gIGlmIChjaGlsZEtleWNoYWluLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGNoaWxkIGtleWNoYWluIGlzIG1pc3NpbmcgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aGApO1xuICB9XG5cbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYoXG4gICAgcm9vdFBydixcbiAgICBwYXJzZURlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aChjaGlsZEtleWNoYWluLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGgpXG4gICk7XG4gIGlmIChkZXJpdmVkLnB1YiAhPT0gY2hpbGRLZXljaGFpbi5wdWIpIHtcbiAgICB0aHJvdyBuZXcgU2FmZURlcml2ZWRQdWJsaWNLZXlNaXNtYXRjaEVycm9yKHdhbGxldElkLCBjaGlsZEtleWNoYWluLnB1YiwgZGVyaXZlZC5wdWIpO1xuICB9XG5cbiAgaWYgKGRlcml2ZWQucHViID09PSByb290S2V5Y2hhaW4ucHViKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogZGVyaXZlZCBjaGlsZCBwdWIgdW5leHBlY3RlZGx5IGVxdWFscyB0aGUgcm9vdCBwdWJgKTtcbiAgfVxuICByZXR1cm4geyBwcnY6IGRlcml2ZWQucHJ2LCBwdWI6IGRlcml2ZWQucHViIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzaWduaW5nIG1hdGVyaWFsIGZvciBhIHNhZmUgb3duZXIgKGNoaWxkIGtleSBoYXMgbm8gZW5jcnlwdGVkUHJ2KS5cbiAqXG4gKiBPbmNoYWluIHNlY3AyNTZrMTogZGVjcnlwdCByb290LCBoYXJkZW5lZC1kZXJpdmUgYXQgYGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGhgXG4gKiAoYG0vPG4+J2ApLCBhbmQgdmVyaWZ5IHRoZSByZWdpc3RlcmVkIHB1Yi5cbiAqIFRTUyBhbmQgZWQyNTUxOSBvbmNoYWluOiB0aHJvdyDigJQgZG8gbm90IHJldHVybiByb290IG1hdGVyaWFsIG9yIEJJUDMyLWRlcml2ZSB0aGUgd3JvbmcgY3VydmUuXG4gKlxuICogRG8gbm90IHVzZSBmb3Igd2FsbGV0IHNoYXJpbmcg4oCUIHRoYXQgbXVzdCBub3QgcmVjZWl2ZSByb290IGtleSBtYXRlcmlhbC5cbiAqIENhbGwgb25seSB3aGVuIGBpc1NhZmVDaGlsZFB1YmxpY09ubHlLZXljaGFpbmAgaXMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTYWZlT3duZXJTaWduaW5nUHJ2KHBhcmFtczogUmVzb2x2ZVNhZmVPd25lclNpZ25pbmdQcnZQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBydiB9ID0gYXdhaXQgcmVzb2x2ZVNhZmVLZXlNYXRlcmlhbCh7XG4gICAgLi4ucGFyYW1zLFxuICAgIG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yOiAoc2xvdCwgd2FsbGV0SWQpID0+XG4gICAgICBzbG90ID09PSAnZWQyNTUxOSdcbiAgICAgICAgPyBuZXcgU2FmZU93bmVyU2lnbmluZ05vdEltcGxlbWVudGVkRXJyb3IoXG4gICAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICAgIGBlZDI1NTE5IG11bHRpc2lnIG93bmVyIGRlcml2YXRpb24gKCR7cGFyYW1zLmNvaW5GYW1pbHl9KSBpcyBub3QgaW1wbGVtZW50ZWQ7IEJJUDMyIHdvdWxkIHByb2R1Y2UgdGhlIHdyb25nIGNoaWxkIGtleS5gXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcihcbiAgICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgICAgJ1RTUyBvd25lciBzaWduaW5nIGZyb20gdGhlIHJvb3Qga2V5c2hhcmUgaXMgbm90IGltcGxlbWVudGVkLiAnICtcbiAgICAgICAgICAgICAgJ1JldHVybmluZyB0aGUgcm9vdCBwcml2YXRlIGtleSB3b3VsZCBleHBvc2UgbWF0ZXJpYWwgdGhhdCBjYW4gZGVyaXZlIGV2ZXJ5IGNoaWxkIGluIHRoaXMgc2xvdC4nXG4gICAgICAgICAgKSxcbiAgfSk7XG4gIHJldHVybiBwcnY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVNhZmVDaGlsZFBydkZvclNoYXJpbmdQYXJhbXMgZXh0ZW5kcyBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zIHtcbiAgbXBjQWxnb3JpdGhtPzogJ2VjZHNhJyB8ICdlZGRzYSc7XG59XG5cbi8qKiBTbG90LW5hbWVkIG5vdC1pbXBsZW1lbnRlZCBkZXRhaWwgZm9yIHdhbGxldCBzaGFyaW5nLiAqL1xuZnVuY3Rpb24gc2FmZVNoYXJlU2xvdERldGFpbChzbG90OiBTYWZlS2V5TWF0ZXJpYWxTbG90LCBwYXJhbXM6IFJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nUGFyYW1zKTogc3RyaW5nIHtcbiAgaWYgKHNsb3QgPT09ICdlZDI1NTE5Jykge1xuICAgIHJldHVybiBgZWQyNTUxOSBtdWx0aXNpZyBzYWZlIHNoYXJpbmcgKCR7cGFyYW1zLmNvaW5GYW1pbHl9KSBpcyBub3QgaW1wbGVtZW50ZWQ7IEJJUDMyIHdvdWxkIGRlcml2ZSB0aGUgd3JvbmcgY2hpbGQuYDtcbiAgfVxuICByZXR1cm4gcGFyYW1zLm1wY0FsZ29yaXRobSA9PT0gJ2VkZHNhJ1xuICAgID8gJ2VkZHNhTXBjIHNhZmUgc2hhcmluZyBpcyBub3QgaW1wbGVtZW50ZWQgKG5lZWRzIHRoZSBFZERTQSBkZXJpdmUgY2VyZW1vbnkpLidcbiAgICA6ICdlY2RzYU1wYyBzYWZlIHNoYXJpbmcgaXMgbm90IGltcGxlbWVudGVkIChuZWVkcyB0aGUgREtMUyBkZXJpdmUgY2VyZW1vbnkpLic7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzaGFyaW5nIG1hdGVyaWFsIGZvciBhIHNhZmUgb3duZXIgKGNoaWxkIGtleSBoYXMgbm8gZW5jcnlwdGVkUHJ2KS5cbiAqXG4gKiBPbmNoYWluIHNlY3AyNTZrMTogZGVjcnlwdCByb290LCBoYXJkZW5lZC1kZXJpdmUgYXQgYGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGhgXG4gKiAoYG0vPG4+J2ApLCB2ZXJpZnkgdGhlIHJlZ2lzdGVyZWQgcHViLCBhbmQgcmV0dXJuIHRoZSBDSElMRCBge3BydiwgcHVifWAg4oCUIG5ldmVyIHRoZSByb290LlxuICogVFNTIGFuZCBlZDI1NTE5IG9uY2hhaW46IHRocm93IGBTYWZlU2hhcmVOb3RJbXBsZW1lbnRlZEVycm9yYCBuYW1pbmcgdGhlIHNsb3QgKyBibG9ja2VyLlxuICpcbiAqIENhbGwgb25seSB3aGVuIGBpc1NhZmVDaGlsZFB1YmxpY09ubHlLZXljaGFpbmAgaXMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nKFxuICBwYXJhbXM6IFJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nUGFyYW1zXG4pOiBQcm9taXNlPERlY3J5cHRlZEtleWNoYWluRGF0YT4ge1xuICByZXR1cm4gcmVzb2x2ZVNhZmVLZXlNYXRlcmlhbCh7XG4gICAgLi4ucGFyYW1zLFxuICAgIG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yOiAoc2xvdCwgd2FsbGV0SWQpID0+XG4gICAgICBuZXcgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcih3YWxsZXRJZCwgc2FmZVNoYXJlU2xvdERldGFpbChzbG90LCBwYXJhbXMpKSxcbiAgfSk7XG59XG4iXX0=
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZUtleWNoYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9zYWZlS2V5Y2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcURBLHNFQUtDO0FBTUQsc0VBZUM7QUE2RkQsZ0VBZ0JDO0FBeUJELHNFQVFDO0FBek5ELDBDQUF3RztBQUN4Ryx3REFBK0c7QUFDL0csc0NBQW1EO0FBR25ELE1BQWEsOEJBQStCLFNBQVEsS0FBSztJQUN2RCxZQUFZLEVBQVUsRUFBRSxNQUEwQjtRQUNoRCxLQUFLLENBQ0gsaUJBQWlCLEVBQUUsZ0JBQWdCLE1BQU0sSUFBSSxTQUFTLHNCQUFzQjtZQUMxRSxxREFBcUQsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0NBQWdDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBUkQsd0VBUUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBYSxpQ0FBa0MsU0FBUSxLQUFLO0lBQzFELFlBQVksUUFBZ0IsRUFBRSxXQUFtQixFQUFFLFVBQWtCO1FBQ25FLEtBQUssQ0FDSCxlQUFlLFFBQVEscUVBQXFFO1lBQzFGLFlBQVksV0FBVyxTQUFTLFVBQVUsR0FBRyxDQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxtQ0FBbUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFSRCw4RUFRQztBQUVELGtHQUFrRztBQUNsRyxNQUFhLG1DQUFvQyxTQUFRLEtBQUs7SUFDNUQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMsS0FBSyxDQUFDLGVBQWUsUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxxQ0FBcUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFMRCxrRkFLQztBQUVELG1HQUFtRztBQUNuRyxNQUFhLDRCQUE2QixTQUFRLEtBQUs7SUFDckQsWUFBWSxRQUFnQixFQUFFLE1BQWM7UUFDMUMs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TUFBTSxDQUFDLFlBQVksS0FBSyxPQUFPO1FBQ3BDLENBQUMsQ0FBQyw2RUFBNkU7UUFDL0UsQ0FBQyxDQUFDLDRFQUE0RSxDQUFDO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsTUFBMkM7SUFFM0MsT0FBTyxzQkFBc0IsQ0FBQztRQUM1QixHQUFHLE1BQU07UUFDVCx1QkFBdUIsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUMxQyxJQUFJLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDaEYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5LCBJS2V5Y2hhaW5zLCBLZXljaGFpbiwgS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2IH0gZnJvbSAnLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZGVyaXZlU2FmZUNoaWxkSGFyZGVuZWRGcm9tWHBydiwgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGggfSBmcm9tICdAYml0Z28vc2RrLWxpYi1zYWZlcyc7XG5pbXBvcnQgeyBJbmNvcnJlY3RQYXNzd29yZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB0eXBlIHsgRGVjcnlwdGVkS2V5Y2hhaW5EYXRhIH0gZnJvbSAnLi9pV2FsbGV0JztcblxuZXhwb3J0IGNsYXNzIEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSb290IGtleWNoYWluICR7aWR9IGhhcyBzb3VyY2UgJyR7c291cmNlID8/ICd1bmtub3duJ30nOyBleHBlY3RlZCAndXNlcicuIGAgK1xuICAgICAgICBgVXNpbmcgYSBiYWNrdXAgb3IgQml0R28gcm9vdCB3b3VsZCBmYWlsIGF0IHNpZ25pbmcuYFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRocm93biB3aGVuIGhhcmRlbmVkIGRlcml2YXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgY2hpbGQgcHVibGljIGtleS4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHdhbGxldElkOiBzdHJpbmcsIGV4cGVjdGVkUHViOiBzdHJpbmcsIGRlcml2ZWRQdWI6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYFNhZmUgd2FsbGV0ICR7d2FsbGV0SWR9OiBkZXJpdmVkIGNoaWxkIHB1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2lzdGVyZWQgdXNlciBrZXkuIGAgK1xuICAgICAgICBgRXhwZWN0ZWQgJHtleHBlY3RlZFB1Yn0sIGdvdCAke2Rlcml2ZWRQdWJ9LmBcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdTYWZlRGVyaXZlZFB1YmxpY0tleU1pc21hdGNoRXJyb3InO1xuICB9XG59XG5cbi8qKiBUaHJvd24gd2hlbiBvd25lciBzaWduaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBzYWZlIHNsb3QgKFRTUywgZWQyNTUxOSBtdWx0aXNpZywg4oCmKS4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iod2FsbGV0SWQ6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06ICR7ZGV0YWlsfWApO1xuICAgIHRoaXMubmFtZSA9ICdTYWZlT3duZXJTaWduaW5nTm90SW1wbGVtZW50ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRocm93biB3aGVuIHdhbGxldCBzaGFyaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBzYWZlIHNsb3QgKFRTUywgZWQyNTUxOSBtdWx0aXNpZywg4oCmKS4gKi9cbmV4cG9ydCBjbGFzcyBTYWZlU2hhcmVOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih3YWxsZXRJZDogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgIHN1cGVyKGBTYWZlIHdhbGxldCAke3dhbGxldElkfTogJHtkZXRhaWx9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1NhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3InO1xuICB9XG59XG5cbi8qKiBlZDI1NTE5IG9uY2hhaW4gbXVsdGlzaWcgKHNsb3Qg4pGjKS4gTmVlZHMgU0xJUC0wMDEwLCBub3Qgc2VjcDI1NmsxIEJJUDMyLiAqL1xuY29uc3QgRUQyNTUxOV9PTkNIQUlOX0ZBTUlMSUVTID0gbmV3IFNldChbJ2FsZ28nLCAneGxtJywgJ2hiYXInXSk7XG5cbi8qKlxuICogVHJ1ZSB3aGVuIHRoaXMgaXMgdGhlIHNhZmUgbWludGVyJ3MgdXNlciBrZXk6IHdhbGxldCBpcyBpbiBhIHNhZmUsIHRoZSBrZXlcbiAqIGhhcyBhIHBhcmVudCByb290LCBhbmQgdGhlcmUgaXMgbm8gY2hpbGQtbGV2ZWwgZW5jcnlwdGVkUHJ2IChzaGFyZWVzIGhhdmUgb25lKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmZUNoaWxkUHVibGljT25seUtleWNoYWluKFxuICB3YWxsZXRTYWZlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAga2V5Y2hhaW46IEtleWNoYWluIHwgdW5kZWZpbmVkXG4pOiBrZXljaGFpbiBpcyBLZXljaGFpbiAmIHsgcGFyZW50OiBzdHJpbmcgfSB7XG4gIHJldHVybiAhISh3YWxsZXRTYWZlSWQgJiYga2V5Y2hhaW4/LnBhcmVudCAmJiAha2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KTtcbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgcm9vdCB1c2VyIGtleWNoYWluIGZvciBhIHNhZmUgY2hpbGQga2V5LlxuICogUmVxdWlyZXMgYHNvdXJjZSA9PT0gJ3VzZXInYCBzbyBhIG1pc2NvbmZpZ3VyZWQgcGFyZW50IGZhaWxzIGVhcmx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQoXG4gIGtleWNoYWluczogSUtleWNoYWlucyxcbiAgY2hpbGRLZXljaGFpbjogS2V5Y2hhaW5cbik6IFByb21pc2U8S2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2PiB7XG4gIGlmICghY2hpbGRLZXljaGFpbi5wYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkS2V5Y2hhaW4ucGFyZW50IGlzIHJlcXVpcmVkIHRvIGZldGNoIHRoZSByb290IGtleWNoYWluJyk7XG4gIH1cbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGtleWNoYWlucy5nZXQoeyBpZDogY2hpbGRLZXljaGFpbi5wYXJlbnQgfSk7XG4gIGlmIChyb290LnNvdXJjZSAhPT0gJ3VzZXInKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRSb290S2V5Y2hhaW5Tb3VyY2VFcnJvcihyb290LmlkLCByb290LnNvdXJjZSk7XG4gIH1cbiAgaWYgKCFyb290LmVuY3J5cHRlZFBydikge1xuICAgIHRocm93IG5ldyBFcnJvcihgcm9vdCBrZXljaGFpbiAke3Jvb3QuaWR9IGRvZXMgbm90IGhhdmUgcHJvcGVydHkgZW5jcnlwdGVkUHJ2YCk7XG4gIH1cbiAgcmV0dXJuIHJvb3QgYXMgS2V5Y2hhaW5XaXRoRW5jcnlwdGVkUHJ2O1xufVxuXG4vKipcbiAqIFNoYXJlZCBwYXJhbXMgZm9yIHJlc29sdmluZyBzYWZlLW93bmVyIGtleSBtYXRlcmlhbCAob3duZXIgc2lnbmluZyBhbmQgd2FsbGV0IHNoYXJpbmcpLlxuICogQm90aCByZXNvbHZlcnMgZXh0ZW5kIHRoaXMgc28gdGhlIHByZWNvbmRpdGlvbi9kZXJpdmF0aW9uIHBhdGggY2Fubm90IGRpdmVyZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FmZUtleU1hdGVyaWFsQmFzZVBhcmFtcyB7XG4gIGJpdGdvOiBCaXRHb0Jhc2U7XG4gIGtleWNoYWluczogSUtleWNoYWlucztcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgLyoqIE9uY2hhaW4gc2VjcDI1NmsxOiBoYXJkZW5lZC1kZXJpdmUgYW5kIHZlcmlmeSBwdWIuIE90aGVyIHNsb3RzIHRocm93LiAqL1xuICBtdWx0aXNpZ1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29pbkZhbWlseTogc3RyaW5nO1xuICBjaGlsZEtleWNoYWluOiBLZXljaGFpbjtcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAvKiogV2hlbiBhbHJlYWR5IGZldGNoZWQgKHBhc3NwaHJhc2UgcHJlZmxpZ2h0KSwgc2tpcCBhIHNlY29uZCBHRVQuICovXG4gIHJvb3RLZXljaGFpbj86IEtleWNoYWluV2l0aEVuY3J5cHRlZFBydjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzb2x2ZVNhZmVPd25lclNpZ25pbmdQcnZQYXJhbXMgPSBTYWZlS2V5TWF0ZXJpYWxCYXNlUGFyYW1zO1xuXG50eXBlIFNhZmVLZXlNYXRlcmlhbFNsb3QgPSAndHNzJyB8ICdlZDI1NTE5JztcblxudHlwZSBSZXNvbHZlU2FmZUtleU1hdGVyaWFsUGFyYW1zID0gU2FmZUtleU1hdGVyaWFsQmFzZVBhcmFtcyAmIHtcbiAgLyoqIENvbnN0cnVjdHMgdGhlIG5vdC1pbXBsZW1lbnRlZCBlcnJvciBmb3IgdGhlIGN1cnJlbnQgcmVzb2x2ZXIgKHNpZ25pbmcgdnMgc2hhcmluZykuICovXG4gIG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yOiAoc2xvdDogU2FmZUtleU1hdGVyaWFsU2xvdCwgd2FsbGV0SWQ6IHN0cmluZykgPT4gRXJyb3I7XG59O1xuXG4vKipcbiAqIFNoYXJlZCBjb3JlIHRoYXQgcmVzb2x2ZXMgc2FmZSBrZXkgbWF0ZXJpYWwgZm9yIGEgcHViLW9ubHkgc2FmZSBjaGlsZC4gUmV0dXJucyB0aGUgQ0hJTERcbiAqIGB7cHJ2LCBwdWJ9YCBvbmx5IOKAlCBuZXZlciB0aGUgcm9vdCDigJQgc28gdGhlIHJvb3QgY2FuIG5ldmVyIGxlYWsgaW50byBhIHNoYXJlIGRvY3VtZW50LlxuICpcbiAqIE9uY2hhaW4gc2VjcDI1NmsxOiBkZWNyeXB0IHJvb3QsIGhhcmRlbmVkLWRlcml2ZSBhdCBgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aGBcbiAqIChgbS88bj4nYCksIGFuZCB2ZXJpZnkgdGhlIHJlZ2lzdGVyZWQgcHViLiBUU1MgYW5kIGVkMjU1MTkgb25jaGFpbiB0aHJvdyB2aWFcbiAqIGBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcmAg4oCUIHRoZSBjYWxsZXIgY29uc3RydWN0cyBpdHMgb3duIGVycm9yIGNsYXNzICsgbWVzc2FnZSwgc28gdGhlXG4gKiBndWFyZCBzZXQgc3RheXMgc2hhcmVkIHdoaWxlIHNpZ25pbmcvc2hhcmluZyByZXBvcnQgdGhlaXIgb3duIGVycm9ycy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNhZmVLZXlNYXRlcmlhbChwYXJhbXM6IFJlc29sdmVTYWZlS2V5TWF0ZXJpYWxQYXJhbXMpOiBQcm9taXNlPHsgcHJ2OiBzdHJpbmc7IHB1Yjogc3RyaW5nIH0+IHtcbiAgY29uc3Qge1xuICAgIGJpdGdvLFxuICAgIGtleWNoYWlucyxcbiAgICB3YWxsZXRJZCxcbiAgICBtdWx0aXNpZ1R5cGUsXG4gICAgY29pbkZhbWlseSxcbiAgICBjaGlsZEtleWNoYWluLFxuICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgbWFrZU5vdEltcGxlbWVudGVkRXJyb3IsXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKG11bHRpc2lnVHlwZSAhPT0gJ29uY2hhaW4nKSB7XG4gICAgdGhyb3cgbWFrZU5vdEltcGxlbWVudGVkRXJyb3IoJ3RzcycsIHdhbGxldElkKTtcbiAgfVxuICBpZiAoRUQyNTUxOV9PTkNIQUlOX0ZBTUlMSUVTLmhhcyhjb2luRmFtaWx5KSkge1xuICAgIHRocm93IG1ha2VOb3RJbXBsZW1lbnRlZEVycm9yKCdlZDI1NTE5Jywgd2FsbGV0SWQpO1xuICB9XG5cbiAgY29uc3Qgcm9vdEtleWNoYWluID0gcGFyYW1zLnJvb3RLZXljaGFpbiA/PyAoYXdhaXQgZmV0Y2hSb290S2V5Y2hhaW5Gb3JTYWZlQ2hpbGQoa2V5Y2hhaW5zLCBjaGlsZEtleWNoYWluKSk7XG4gIGNvbnN0IHJvb3RQcnYgPSBhd2FpdCBkZWNyeXB0S2V5Y2hhaW5Qcml2YXRlS2V5KGJpdGdvLCByb290S2V5Y2hhaW4sIHdhbGxldFBhc3NwaHJhc2UpO1xuICBpZiAoIXJvb3RQcnYpIHtcbiAgICB0aHJvdyBuZXcgSW5jb3JyZWN0UGFzc3dvcmRFcnJvcigpO1xuICB9XG5cbiAgaWYgKCFjaGlsZEtleWNoYWluLnB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGNoaWxkIGtleWNoYWluIGlzIG1pc3NpbmcgcHViIGZvciBwcmUtc2lnbiB2ZXJpZmljYXRpb25gKTtcbiAgfVxuICBpZiAoY2hpbGRLZXljaGFpbi5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNhZmUgd2FsbGV0ICR7d2FsbGV0SWR9OiBjaGlsZCBrZXljaGFpbiBpcyBtaXNzaW5nIGRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGhgKTtcbiAgfVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2KFxuICAgIHJvb3RQcnYsXG4gICAgcGFyc2VEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgoY2hpbGRLZXljaGFpbi5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoKVxuICApO1xuICBpZiAoZGVyaXZlZC5wdWIgIT09IGNoaWxkS2V5Y2hhaW4ucHViKSB7XG4gICAgdGhyb3cgbmV3IFNhZmVEZXJpdmVkUHVibGljS2V5TWlzbWF0Y2hFcnJvcih3YWxsZXRJZCwgY2hpbGRLZXljaGFpbi5wdWIsIGRlcml2ZWQucHViKTtcbiAgfVxuXG4gIGlmIChkZXJpdmVkLnB1YiA9PT0gcm9vdEtleWNoYWluLnB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2FmZSB3YWxsZXQgJHt3YWxsZXRJZH06IGRlcml2ZWQgY2hpbGQgcHViIHVuZXhwZWN0ZWRseSBlcXVhbHMgdGhlIHJvb3QgcHViYCk7XG4gIH1cbiAgcmV0dXJuIHsgcHJ2OiBkZXJpdmVkLnBydiwgcHViOiBkZXJpdmVkLnB1YiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgc2lnbmluZyBtYXRlcmlhbCBmb3IgYSBzYWZlIG93bmVyIChjaGlsZCBrZXkgaGFzIG5vIGVuY3J5cHRlZFBydikuXG4gKlxuICogT25jaGFpbiBzZWNwMjU2azE6IGRlY3J5cHQgcm9vdCwgaGFyZGVuZWQtZGVyaXZlIGF0IGBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoYFxuICogKGBtLzxuPidgKSwgYW5kIHZlcmlmeSB0aGUgcmVnaXN0ZXJlZCBwdWIuXG4gKiBUU1MgYW5kIGVkMjU1MTkgb25jaGFpbjogdGhyb3cg4oCUIGRvIG5vdCByZXR1cm4gcm9vdCBtYXRlcmlhbCBvciBCSVAzMi1kZXJpdmUgdGhlIHdyb25nIGN1cnZlLlxuICpcbiAqIERvIG5vdCB1c2UgZm9yIHdhbGxldCBzaGFyaW5nIOKAlCB0aGF0IG11c3Qgbm90IHJlY2VpdmUgcm9vdCBrZXkgbWF0ZXJpYWwuXG4gKiBDYWxsIG9ubHkgd2hlbiBgaXNTYWZlQ2hpbGRQdWJsaWNPbmx5S2V5Y2hhaW5gIGlzIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZU93bmVyU2lnbmluZ1BydihwYXJhbXM6IFJlc29sdmVTYWZlT3duZXJTaWduaW5nUHJ2UGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwcnYgfSA9IGF3YWl0IHJlc29sdmVTYWZlS2V5TWF0ZXJpYWwoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcjogKHNsb3QsIHdhbGxldElkKSA9PlxuICAgICAgc2xvdCA9PT0gJ2VkMjU1MTknXG4gICAgICAgID8gbmV3IFNhZmVPd25lclNpZ25pbmdOb3RJbXBsZW1lbnRlZEVycm9yKFxuICAgICAgICAgICAgd2FsbGV0SWQsXG4gICAgICAgICAgICBgZWQyNTUxOSBtdWx0aXNpZyBvd25lciBkZXJpdmF0aW9uICgke3BhcmFtcy5jb2luRmFtaWx5fSkgaXMgbm90IGltcGxlbWVudGVkOyBCSVAzMiB3b3VsZCBwcm9kdWNlIHRoZSB3cm9uZyBjaGlsZCBrZXkuYFxuICAgICAgICAgIClcbiAgICAgICAgOiBuZXcgU2FmZU93bmVyU2lnbmluZ05vdEltcGxlbWVudGVkRXJyb3IoXG4gICAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICAgICdUU1Mgb3duZXIgc2lnbmluZyBmcm9tIHRoZSByb290IGtleXNoYXJlIGlzIG5vdCBpbXBsZW1lbnRlZC4gJyArXG4gICAgICAgICAgICAgICdSZXR1cm5pbmcgdGhlIHJvb3QgcHJpdmF0ZSBrZXkgd291bGQgZXhwb3NlIG1hdGVyaWFsIHRoYXQgY2FuIGRlcml2ZSBldmVyeSBjaGlsZCBpbiB0aGlzIHNsb3QuJ1xuICAgICAgICAgICksXG4gIH0pO1xuICByZXR1cm4gcHJ2O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVTYWZlQ2hpbGRQcnZGb3JTaGFyaW5nUGFyYW1zIGV4dGVuZHMgU2FmZUtleU1hdGVyaWFsQmFzZVBhcmFtcyB7XG4gIG1wY0FsZ29yaXRobT86ICdlY2RzYScgfCAnZWRkc2EnO1xufVxuXG4vKiogU2xvdC1uYW1lZCBub3QtaW1wbGVtZW50ZWQgZGV0YWlsIGZvciB3YWxsZXQgc2hhcmluZy4gKi9cbmZ1bmN0aW9uIHNhZmVTaGFyZVNsb3REZXRhaWwoc2xvdDogU2FmZUtleU1hdGVyaWFsU2xvdCwgcGFyYW1zOiBSZXNvbHZlU2FmZUNoaWxkUHJ2Rm9yU2hhcmluZ1BhcmFtcyk6IHN0cmluZyB7XG4gIGlmIChzbG90ID09PSAnZWQyNTUxOScpIHtcbiAgICByZXR1cm4gYGVkMjU1MTkgbXVsdGlzaWcgc2FmZSBzaGFyaW5nICgke3BhcmFtcy5jb2luRmFtaWx5fSkgaXMgbm90IGltcGxlbWVudGVkOyBCSVAzMiB3b3VsZCBkZXJpdmUgdGhlIHdyb25nIGNoaWxkLmA7XG4gIH1cbiAgcmV0dXJuIHBhcmFtcy5tcGNBbGdvcml0aG0gPT09ICdlZGRzYSdcbiAgICA/ICdlZGRzYU1wYyBzYWZlIHNoYXJpbmcgaXMgbm90IGltcGxlbWVudGVkIChuZWVkcyB0aGUgRWREU0EgZGVyaXZlIGNlcmVtb255KS4nXG4gICAgOiAnZWNkc2FNcGMgc2FmZSBzaGFyaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCAobmVlZHMgdGhlIERLTFMgZGVyaXZlIGNlcmVtb255KS4nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgc2hhcmluZyBtYXRlcmlhbCBmb3IgYSBzYWZlIG93bmVyIChjaGlsZCBrZXkgaGFzIG5vIGVuY3J5cHRlZFBydikuXG4gKlxuICogT25jaGFpbiBzZWNwMjU2azE6IGRlY3J5cHQgcm9vdCwgaGFyZGVuZWQtZGVyaXZlIGF0IGBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoYFxuICogKGBtLzxuPidgKSwgdmVyaWZ5IHRoZSByZWdpc3RlcmVkIHB1YiwgYW5kIHJldHVybiB0aGUgQ0hJTEQgYHtwcnYsIHB1Yn1gIOKAlCBuZXZlciB0aGUgcm9vdC5cbiAqIFRTUyBhbmQgZWQyNTUxOSBvbmNoYWluOiB0aHJvdyBgU2FmZVNoYXJlTm90SW1wbGVtZW50ZWRFcnJvcmAgbmFtaW5nIHRoZSBzbG90ICsgYmxvY2tlci5cbiAqXG4gKiBDYWxsIG9ubHkgd2hlbiBgaXNTYWZlQ2hpbGRQdWJsaWNPbmx5S2V5Y2hhaW5gIGlzIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2FmZUNoaWxkUHJ2Rm9yU2hhcmluZyhcbiAgcGFyYW1zOiBSZXNvbHZlU2FmZUNoaWxkUHJ2Rm9yU2hhcmluZ1BhcmFtc1xuKTogUHJvbWlzZTxEZWNyeXB0ZWRLZXljaGFpbkRhdGE+IHtcbiAgcmV0dXJuIHJlc29sdmVTYWZlS2V5TWF0ZXJpYWwoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBtYWtlTm90SW1wbGVtZW50ZWRFcnJvcjogKHNsb3QsIHdhbGxldElkKSA9PlxuICAgICAgbmV3IFNhZmVTaGFyZU5vdEltcGxlbWVudGVkRXJyb3Iod2FsbGV0SWQsIHNhZmVTaGFyZVNsb3REZXRhaWwoc2xvdCwgcGFyYW1zKSksXG4gIH0pO1xufVxuIl19
|