@bitgo/sdk-core 39.0.0 → 39.1.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/bitgo/keychain/iKeychains.d.ts +2 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +18 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +39 -3
- package/dist/src/bitgo/safe/recovery.d.ts +44 -3
- package/dist/src/bitgo/safe/recovery.d.ts.map +1 -1
- package/dist/src/bitgo/safe/recovery.js +74 -46
- package/dist/src/bitgo/safe/safe.d.ts +5 -5
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +24 -16
- package/dist/src/bitgo/tss/common.d.ts +11 -2
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +16 -4
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +10 -5
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +11 -6
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +2 -1
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +6 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +5 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +5 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +4 -9
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +16 -21
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +5 -4
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +2 -3
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +4 -2
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +10 -7
- package/dist/src/bitgo/wallet/iWallet.d.ts +6 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/safeKeychain.js +4 -3
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +12 -3
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +29 -1
- package/dist/test/unit/bitgo/safe/recovery.d.ts.map +1 -1
- package/dist/test/unit/bitgo/safe/recovery.js +164 -6
- package/dist/test/unit/bitgo/safe/safe.js +54 -32
- package/dist/test/unit/bitgo/safe/safeDerivation.js +15 -53
- package/dist/test/unit/bitgo/tss/common.js +12 -5
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +24 -22
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +29 -49
- package/dist/test/unit/bitgo/wallet/safeShareWallet.js +5 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -7,69 +7,31 @@ const src_1 = require("../../../../src");
|
|
|
7
7
|
// The secp256k1 ROOT_XPRV vector is secret and lives only here; the leaf's own
|
|
8
8
|
// test/unit/safeDerivation.ts pins a public BIP32 vector instead.
|
|
9
9
|
// 32-byte synthetic root seed. The StrKey spelling was generated with stellar-sdk
|
|
10
|
-
// (Keypair.fromRawEd25519Seed); the
|
|
11
|
-
// SLIP-0010 implementation written from the spec and cross-checked against published vectors
|
|
12
|
-
// (SLIP-0010 test vector 1 seed 000102...0f derives m/0' to 68e0fe46...dade7a3).
|
|
10
|
+
// (Keypair.fromRawEd25519Seed); the leaf pins the same seed at the same BIP44 path.
|
|
13
11
|
const ROOT_SEED_STRKEY = 'SAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB6NKI';
|
|
14
12
|
const ROOT_XPRV = 'xprv9s21ZrQH143K3hekyNj7TciR4XNYe1kMj68W2ipjJGNHETWP7o42AjDnSPgKhdZ4x8NBAvaL72RrXjuXNdmkMqLERZza73oYugGtbLFXG8g';
|
|
15
13
|
describe('safeDerivation', function () {
|
|
16
|
-
describe('parseSafeDerivationIndex', function () {
|
|
17
|
-
it('accepts numbers and digit strings', function () {
|
|
18
|
-
(0, src_1.parseSafeDerivationIndex)(0).should.equal(0);
|
|
19
|
-
(0, src_1.parseSafeDerivationIndex)(7).should.equal(7);
|
|
20
|
-
(0, src_1.parseSafeDerivationIndex)('42').should.equal(42);
|
|
21
|
-
(0, src_1.parseSafeDerivationIndex)(0x7fffffff).should.equal(0x7fffffff);
|
|
22
|
-
});
|
|
23
|
-
it('rejects negatives, non-integers, and out-of-range values', function () {
|
|
24
|
-
(() => (0, src_1.parseSafeDerivationIndex)(-1)).should.throw(/Invalid safe derivation index/);
|
|
25
|
-
(() => (0, src_1.parseSafeDerivationIndex)(1.5)).should.throw(/Invalid safe derivation index/);
|
|
26
|
-
(() => (0, src_1.parseSafeDerivationIndex)(0x80000000)).should.throw(/Invalid safe derivation index/);
|
|
27
|
-
});
|
|
28
|
-
it('rejects non-numeric strings', function () {
|
|
29
|
-
(() => (0, src_1.parseSafeDerivationIndex)("0'")).should.throw(/Invalid safe derivation index/);
|
|
30
|
-
(() => (0, src_1.parseSafeDerivationIndex)('m/0')).should.throw(/Invalid safe derivation index/);
|
|
31
|
-
(() => (0, src_1.parseSafeDerivationIndex)('')).should.throw(/Invalid safe derivation index/);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
describe('getSafeHardenedDerivationPath', function () {
|
|
35
|
-
it('formats m/<index> with hardened apostrophe', function () {
|
|
36
|
-
(0, src_1.getSafeHardenedDerivationPath)(0).should.equal("m/0'");
|
|
37
|
-
(0, src_1.getSafeHardenedDerivationPath)('7').should.equal("m/7'");
|
|
38
|
-
(0, src_1.getSafeHardenedDerivationPath)('007').should.equal("m/7'");
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
14
|
describe('deriveSafeChildHardenedFromXprv', function () {
|
|
42
|
-
it(
|
|
43
|
-
const child = (0, src_1.deriveSafeChildHardenedFromXprv)(ROOT_XPRV, 0);
|
|
44
|
-
child.derivationPath.should.equal("m/0'");
|
|
45
|
-
child.pub.should.equal('
|
|
46
|
-
child.prv.should.equal('
|
|
15
|
+
it("derives m/44'/0'/1'/0' from the root xprv", function () {
|
|
16
|
+
const child = (0, src_1.deriveSafeChildHardenedFromXprv)(ROOT_XPRV, (0, src_1.buildSafeBip44Path)(0, 'secp256k1Multisig', 0));
|
|
17
|
+
child.derivationPath.should.equal("m/44'/0'/1'/0'");
|
|
18
|
+
child.pub.should.equal('xpub6DpagSiper5rGnEAK4gGmRJPdgDQCzmWZSY59iJ63NUw6BecfdX71APcU5Wfrq3rCcaFoah1dh7ot2fp1nt5AJMJysxSouPCT5xuHtptAaz');
|
|
19
|
+
child.prv.should.equal('xprv9zqEGwBvpUXZ4J9hD39GQHMf5eNuoY3fCDcUMKtUV2wxDPKU86CrTN58cpUVsjJFu4XqVDZS8SFFX11kZfoRxY7pgaHL2NCqPye1oVPDuad');
|
|
47
20
|
});
|
|
48
21
|
});
|
|
49
22
|
describe('deriveSafeChildEd25519Hardened', function () {
|
|
50
|
-
it(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
derivationPath: "m/0'",
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
it('derives m/7 to the pinned SLIP-0010 vector', function () {
|
|
59
|
-
const child = (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY, '7');
|
|
60
|
-
child.should.eql({
|
|
61
|
-
prv: 'd54701e221cf51e9e208a7c59e3fe3e4cfbb6b91fd3f35ce092a471c35228217',
|
|
62
|
-
pub: 'GC2Y5EU2XA22SOSCRSZRNDEY3UAA4OJSLZ5NQUFUZDBQSLMVCIZCBHIN',
|
|
63
|
-
derivationPath: "m/7'",
|
|
23
|
+
it("derives m/44'/148'/2'/0' to the pinned SLIP-0010 vector", function () {
|
|
24
|
+
(0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY, (0, src_1.buildSafeBip44Path)(148, 'ed25519Multisig', 0)).should.eql({
|
|
25
|
+
prv: '855e8d991b48037b3e0161fd57f1643044878d6afe0db0243719b5201e2e4f69',
|
|
26
|
+
pub: 'GDD3VVFKM64URLG6PO2UFWQXJH67N5UDOV5HZ23M5FJJT5G4LUO7RJWG',
|
|
27
|
+
derivationPath: "m/44'/148'/2'/0'",
|
|
64
28
|
});
|
|
65
29
|
});
|
|
66
30
|
it('rejects a malformed root seed', function () {
|
|
67
|
-
|
|
68
|
-
(() => (0, src_1.deriveSafeChildEd25519Hardened)(
|
|
69
|
-
|
|
70
|
-
it('rejects an invalid index', function () {
|
|
71
|
-
(() => (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY, -1)).should.throw(/Invalid safe derivation index/);
|
|
31
|
+
const path = (0, src_1.buildSafeBip44Path)(148, 'ed25519Multisig', 0);
|
|
32
|
+
(() => (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_SEED_STRKEY.slice(0, 55), path)).should.throw(/Invalid ed25519 StrKey secret seed/);
|
|
33
|
+
(() => (0, src_1.deriveSafeChildEd25519Hardened)(ROOT_XPRV, path)).should.throw(/Invalid ed25519 StrKey secret seed/);
|
|
72
34
|
});
|
|
73
35
|
});
|
|
74
36
|
});
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZURlcml2YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlRGVyaXZhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQix5Q0FLeUI7QUFFekIsdUZBQXVGO0FBQ3ZGLHlGQUF5RjtBQUN6RiwrRUFBK0U7QUFDL0Usa0VBQWtFO0FBRWxFLGtGQUFrRjtBQUNsRixnR0FBZ0c7QUFDaEcsNkZBQTZGO0FBQzdGLGlGQUFpRjtBQUNqRixNQUFNLGdCQUFnQixHQUFHLDBEQUEwRCxDQUFDO0FBRXBGLE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0FBRXBILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsMEJBQTBCLEVBQUU7UUFDbkMsRUFBRSxDQUFDLG1DQUFtQyxFQUFFO1lBQ3RDLElBQUEsOEJBQXdCLEVBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFBLDhCQUF3QixFQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBQSw4QkFBd0IsRUFBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELElBQUEsOEJBQXdCLEVBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRTtZQUM3RCxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsOEJBQXdCLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNuRixDQUFDLEdBQUcsRUFBRSxDQUFD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QUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ25GLG9DQUFvQyxDQUNyQyxDQUFDO1lBQ0YsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLG9DQUE4QixFQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQkFBMEIsRUFBRTtZQUM3QixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsb0NBQThCLEVBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUM3RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQsXG4gIGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYsXG4gIGdldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoLFxuICBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbi8vIERlbGliZXJhdGUgZ3VhcmQ6IHJlLWRlcml2ZXMgdGhyb3VnaCBzZGstY29yZSdzIHB1YmxpYyBiYXJyZWwgKHdoaWNoIHJlLWV4cG9ydHMgZnJvbVxuLy8gQGJpdGdvL3Nkay1saWItc2FmZXMpIHRvIHByb3ZlIHRoZSByZS1leHBvcnQgYW5kIGJ5dGUtZm9yLWJ5dGUgb3V0cHV0IGhvbGQgZW5kLXRvLWVuZC5cbi8vIFRoZSBzZWNwMjU2azEgUk9PVF9YUFJWIHZlY3RvciBpcyBzZWNyZXQgYW5kIGxpdmVzIG9ubHkgaGVyZTsgdGhlIGxlYWYncyBvd25cbi8vIHRlc3QvdW5pdC9zYWZlRGVyaXZhdGlvbi50cyBwaW5zIGEgcHVibGljIEJJUDMyIHZlY3RvciBpbnN0ZWFkLlxuXG4vLyAzMi1ieXRlIHN5bnRoZXRpYyByb290IHNlZWQuIFRoZSBTdHJLZXkgc3BlbGxpbmcgd2FzIGdlbmVyYXRlZCB3aXRoIHN0ZWxsYXItc2RrXG4vLyAoS2V5cGFpci5mcm9tUmF3RWQyNTUxOVNlZWQpOyB0aGUgZGVyaXZhdGlvbiB2ZWN0b3JzIGJlbG93IHdlcmUgZ2VuZXJhdGVkIHdpdGggYW4gaW5kZXBlbmRlbnRcbi8vIFNMSVAtMDAxMCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuIGZyb20gdGhlIHNwZWMgYW5kIGNyb3NzLWNoZWNrZWQgYWdhaW5zdCBwdWJsaXNoZWQgdmVjdG9yc1xuLy8gKFNMSVAtMDAxMCB0ZXN0IHZlY3RvciAxIHNlZWQgMDAwMTAyLi4uMGYgZGVyaXZlcyBtLzAnIHRvIDY4ZTBmZTQ2Li4uZGFkZTdhMykuXG5jb25zdCBST09UX1NFRURfU1RSS0VZID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuY29uc3QgUk9PVF9YUFJWID1cbiAgJ3hwcnY5czIxWnJRSDE0M0szaGVreU5qN1RjaVI0WE5ZZTFrTWo2OFcyaXBqSkdOSEVUV1A3bzQyQWpEblNQZ0toZFo0eDhOQkF2YUw3MlJyWGp1WE5kbWtNcUxFUlp6YTczb1l1Z0d0YkxGWEc4Zyc7XG5cbmRlc2NyaWJlKCdzYWZlRGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ3BhcnNlU2FmZURlcml2YXRpb25JbmRleCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnYWNjZXB0cyBudW1iZXJzIGFuZCBkaWdpdCBzdHJpbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KDApLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHBhcnNlU2FmZURlcml2YXRpb25JbmRleCg3KS5zaG91bGQuZXF1YWwoNyk7XG4gICAgICBwYXJzZVNhZmVEZXJpdmF0aW9uSW5kZXgoJzQyJykuc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgIHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgweDdmZmZmZmZmKS5zaG91bGQuZXF1YWwoMHg3ZmZmZmZmZik7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBuZWdhdGl2ZXMsIG5vbi1pbnRlZ2VycywgYW5kIG91dC1vZi1yYW5nZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KC0xKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleC8pO1xuICAgICAgKCgpID0+IHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgxLjUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KDB4ODAwMDAwMDApKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBub24tbnVtZXJpYyBzdHJpbmdzJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IHBhcnNlU2FmZURlcml2YXRpb25JbmRleChcIjAnXCIpKS5zaG91bGQudGhyb3coL0ludmFsaWQgc2FmZSBkZXJpdmF0aW9uIGluZGV4Lyk7XG4gICAgICAoKCkgPT4gcGFyc2VTYWZlRGVyaXZhdGlvbkluZGV4KCdtLzAnKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleC8pO1xuICAgICAgKCgpID0+IHBhcnNlU2FmZURlcml2YXRpb25JbmRleCgnJykpLnNob3VsZC50aHJvdygvSW52YWxpZCBzYWZlIGRlcml2YXRpb24gaW5kZXgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFNhZmVIYXJkZW5lZERlcml2YXRpb25QYXRoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdmb3JtYXRzIG0vPGluZGV4PiB3aXRoIGhhcmRlbmVkIGFwb3N0cm9waGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBnZXRTYWZlSGFyZGVuZWREZXJpdmF0aW9uUGF0aCgwKS5zaG91bGQuZXF1YWwoXCJtLzAnXCIpO1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzcnKS5zaG91bGQuZXF1YWwoXCJtLzcnXCIpO1xuICAgICAgZ2V0U2FmZUhhcmRlbmVkRGVyaXZhdGlvblBhdGgoJzAwNycpLnNob3VsZC5lcXVhbChcIm0vNydcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZXJpdmVTYWZlQ2hpbGRIYXJkZW5lZEZyb21YcHJ2JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdkZXJpdmVzIG0vMCBmcm9tIHRoZSByb290IHhwcnYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYoUk9PVF9YUFJWLCAwKTtcbiAgICAgIGNoaWxkLmRlcml2YXRpb25QYXRoLnNob3VsZC5lcXVhbChcIm0vMCdcIik7XG4gICAgICBjaGlsZC5wdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHB1YjY5UGJSNkhCNlphVzNROUNXQXpOc21XWEM4VEJEcTFWRW1kMjVYa3dVZ3JVM1BWR0FiajZia3NxUG5HV2NGZEFvZFhXUnBXTVhKNUtHaW00NW41NWNaalhlVzdGRHc0QnFhaHR4VEVONHdCJ1xuICAgICAgKTtcbiAgICAgIGNoaWxkLnBydi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHJ2OXZRRjFha0hHQzJDcHY0alE5VE5XZFpuZTZjZ3BOSGRzWWhSSDlNS3ZNS1ZBYkE3ZDRRcjN4Wk1ZWHFBUzM1VjRkYW1DRFAyaFlvaENMVmlIemNHaFg0VHI3ZGpqQ0JydUFYNzNTc2pDaUMnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdkZXJpdmVzIG0vMCB0byB0aGUgcGlubmVkIFNMSVAtMDAxMCB2ZWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1NFRURfU1RSS0VZLCAwKTtcbiAgICAgIGNoaWxkLnNob3VsZC5lcWwoe1xuICAgICAgICBwcnY6ICdiMTI3ZWI1MDkyMDExYzA4NTM0NWM4Y2UwYmZlZGE2MDY0ZjllMTI0OWUyOWNjMjM4YzFkNjRiZjJlNTg3Y2U3JyxcbiAgICAgICAgcHViOiAnR0NUWlI0NkZQRkFNWU43MzRTUUI0TkNOQkk0NE00RFNOTTVSSlBDRExPTUFPRlBFVVZVWFBLN1InLFxuICAgICAgICBkZXJpdmF0aW9uUGF0aDogXCJtLzAnXCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZXJpdmVzIG0vNyB0byB0aGUgcGlubmVkIFNMSVAtMDAxMCB2ZWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1NFRURfU1RSS0VZLCAnNycpO1xuICAgICAgY2hpbGQuc2hvdWxkLmVxbCh7XG4gICAgICAgIHBydjogJ2Q1NDcwMWUyMjFjZjUxZTllMjA4YTdjNTllM2ZlM2U0Y2ZiYjZiOTFmZDNmMzVjZTA5MmE0NzFjMzUyMjgyMTcnLFxuICAgICAgICBwdWI6ICdHQzJZNUVVMlhBMjJTT1NDUlNaUk5ERVkzVUFBNE9KU0xaNU5RVUZVWkRCUVNMTVZDSVpDQkhJTicsXG4gICAgICAgIGRlcml2YXRpb25QYXRoOiBcIm0vNydcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtYWxmb3JtZWQgcm9vdCBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1NFRURfU1RSS0VZLnNsaWNlKDAsIDU1KSwgMCkpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgc2VjcmV0IHNlZWQvXG4gICAgICApO1xuICAgICAgKCgpID0+IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1hQUlYsIDApKS5zaG91bGQudGhyb3coL0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgc2VjcmV0IHNlZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGludmFsaWQgaW5kZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkKFJPT1RfU0VFRF9TVFJLRVksIC0xKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhZmUgZGVyaXZhdGlvbiBpbmRleC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZURlcml2YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vc2FmZS9zYWZlRGVyaXZhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUNoQix5Q0FBc0g7QUFFdEgsdUZBQXVGO0FBQ3ZGLHlGQUF5RjtBQUN6RiwrRUFBK0U7QUFDL0Usa0VBQWtFO0FBRWxFLGtGQUFrRjtBQUNsRixvRkFBb0Y7QUFDcEYsTUFBTSxnQkFBZ0IsR0FBRywwREFBMEQsQ0FBQztBQUVwRixNQUFNLFNBQVMsR0FDYixpSEFBaUgsQ0FBQztBQUVwSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7SUFDekIsUUFBUSxDQUFDLGlDQUFpQyxFQUFFO1FBQzFDLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFBLHFDQUErQixFQUFDLFNBQVMsRUFBRSxJQUFBLHdCQUFrQixFQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDcEIsaUhBQWlILENBQ2xILENBQUM7WUFDRixLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3BCLGlIQUFpSCxDQUNsSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRTtRQUN6QyxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsSUFBQSxvQ0FBOEIsRUFBQyxnQkFBZ0IsRUFBRSxJQUFBLHdCQUFrQixFQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ3pHLEdBQUcsRUFBRSxrRUFBa0U7Z0JBQ3ZFLEdBQUcsRUFBRSwwREFBMEQ7Z0JBQy9ELGNBQWMsRUFBRSxrQkFBa0I7YUFDbkMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUU7WUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBQSx3QkFBa0IsRUFBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLG9DQUE4QixFQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN0RixvQ0FBb0MsQ0FDckMsQ0FBQztZQUNGLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxvQ0FBOEIsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDN0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgYnVpbGRTYWZlQmlwNDRQYXRoLCBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQsIGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG4vLyBEZWxpYmVyYXRlIGd1YXJkOiByZS1kZXJpdmVzIHRocm91Z2ggc2RrLWNvcmUncyBwdWJsaWMgYmFycmVsICh3aGljaCByZS1leHBvcnRzIGZyb21cbi8vIEBiaXRnby9zZGstbGliLXNhZmVzKSB0byBwcm92ZSB0aGUgcmUtZXhwb3J0IGFuZCBieXRlLWZvci1ieXRlIG91dHB1dCBob2xkIGVuZC10by1lbmQuXG4vLyBUaGUgc2VjcDI1NmsxIFJPT1RfWFBSViB2ZWN0b3IgaXMgc2VjcmV0IGFuZCBsaXZlcyBvbmx5IGhlcmU7IHRoZSBsZWFmJ3Mgb3duXG4vLyB0ZXN0L3VuaXQvc2FmZURlcml2YXRpb24udHMgcGlucyBhIHB1YmxpYyBCSVAzMiB2ZWN0b3IgaW5zdGVhZC5cblxuLy8gMzItYnl0ZSBzeW50aGV0aWMgcm9vdCBzZWVkLiBUaGUgU3RyS2V5IHNwZWxsaW5nIHdhcyBnZW5lcmF0ZWQgd2l0aCBzdGVsbGFyLXNka1xuLy8gKEtleXBhaXIuZnJvbVJhd0VkMjU1MTlTZWVkKTsgdGhlIGxlYWYgcGlucyB0aGUgc2FtZSBzZWVkIGF0IHRoZSBzYW1lIEJJUDQ0IHBhdGguXG5jb25zdCBST09UX1NFRURfU1RSS0VZID0gJ1NBQUFDQVFEQVFDUU1CWUlCRUZBV0RBTkJZSFJBRUlTQ01LQktGUVhEQU1SVUdZNERVUEI2TktJJztcblxuY29uc3QgUk9PVF9YUFJWID1cbiAgJ3hwcnY5czIxWnJRSDE0M0szaGVreU5qN1RjaVI0WE5ZZTFrTWo2OFcyaXBqSkdOSEVUV1A3bzQyQWpEblNQZ0toZFo0eDhOQkF2YUw3MlJyWGp1WE5kbWtNcUxFUlp6YTczb1l1Z0d0YkxGWEc4Zyc7XG5cbmRlc2NyaWJlKCdzYWZlRGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2Rlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoXCJkZXJpdmVzIG0vNDQnLzAnLzEnLzAnIGZyb20gdGhlIHJvb3QgeHBydlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGRlcml2ZVNhZmVDaGlsZEhhcmRlbmVkRnJvbVhwcnYoUk9PVF9YUFJWLCBidWlsZFNhZmVCaXA0NFBhdGgoMCwgJ3NlY3AyNTZrMU11bHRpc2lnJywgMCkpO1xuICAgICAgY2hpbGQuZGVyaXZhdGlvblBhdGguc2hvdWxkLmVxdWFsKFwibS80NCcvMCcvMScvMCdcIik7XG4gICAgICBjaGlsZC5wdWIuc2hvdWxkLmVxdWFsKFxuICAgICAgICAneHB1YjZEcGFnU2lwZXI1ckduRUFLNGdHbVJKUGRnRFFDem1XWlNZNTlpSjYzTlV3NkJlY2ZkWDcxQVBjVTVXZnJxM3JDY2FGb2FoMWRoN290MmZwMW50NUFKTUp5c3hTb3VQQ1Q1eHVIdHB0QWF6J1xuICAgICAgKTtcbiAgICAgIGNoaWxkLnBydi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHJ2OXpxRUd3QnZwVVhaNEo5aEQzOUdRSE1mNWVOdW9ZM2ZDRGNVTUt0VVYyd3hEUEtVODZDclRONThjcFVWc2pKRnU0WHFWRFpTOFNGRlgxMWtaZm9SeFk3cGdhSEwyTkNxUHllMW9WUER1YWQnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVyaXZlU2FmZUNoaWxkRWQyNTUxOUhhcmRlbmVkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KFwiZGVyaXZlcyBtLzQ0Jy8xNDgnLzInLzAnIHRvIHRoZSBwaW5uZWQgU0xJUC0wMDEwIHZlY3RvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXJpdmVTYWZlQ2hpbGRFZDI1NTE5SGFyZGVuZWQoUk9PVF9TRUVEX1NUUktFWSwgYnVpbGRTYWZlQmlwNDRQYXRoKDE0OCwgJ2VkMjU1MTlNdWx0aXNpZycsIDApKS5zaG91bGQuZXFsKHtcbiAgICAgICAgcHJ2OiAnODU1ZThkOTkxYjQ4MDM3YjNlMDE2MWZkNTdmMTY0MzA0NDg3OGQ2YWZlMGRiMDI0MzcxOWI1MjAxZTJlNGY2OScsXG4gICAgICAgIHB1YjogJ0dERDNWVkZLTTY0VVJMRzZQTzJVRldRWEpINjdONVVET1Y1SFoyM001RkpKVDVHNExVTzdSSldHJyxcbiAgICAgICAgZGVyaXZhdGlvblBhdGg6IFwibS80NCcvMTQ4Jy8yJy8wJ1wiLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG1hbGZvcm1lZCByb290IHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXRoID0gYnVpbGRTYWZlQmlwNDRQYXRoKDE0OCwgJ2VkMjU1MTlNdWx0aXNpZycsIDApO1xuICAgICAgKCgpID0+IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1NFRURfU1RSS0VZLnNsaWNlKDAsIDU1KSwgcGF0aCkpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgc2VjcmV0IHNlZWQvXG4gICAgICApO1xuICAgICAgKCgpID0+IGRlcml2ZVNhZmVDaGlsZEVkMjU1MTlIYXJkZW5lZChST09UX1hQUlYsIHBhdGgpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZWQyNTUxOSBTdHJLZXkgc2VjcmV0IHNlZWQvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -41,7 +41,7 @@ describe('sendSignatureShareV2 request type dispatch', function () {
|
|
|
41
41
|
afterEach(function () {
|
|
42
42
|
sinon.restore();
|
|
43
43
|
});
|
|
44
|
-
async function captureRequestType(mpcAlgorithm, multisigTypeVersion) {
|
|
44
|
+
async function captureRequestType(mpcAlgorithm, multisigTypeVersion, signingType) {
|
|
45
45
|
let capturedBody;
|
|
46
46
|
const send = sinon.stub().callsFake((body) => {
|
|
47
47
|
capturedBody = body;
|
|
@@ -52,7 +52,7 @@ describe('sendSignatureShareV2 request type dispatch', function () {
|
|
|
52
52
|
post: sinon.stub().returns({ send }),
|
|
53
53
|
setRequestTracer: sinon.stub(),
|
|
54
54
|
};
|
|
55
|
-
await (0, common_1.sendSignatureShareV2)(mockBitGo, 'walletId', 'txRequestId', [], src_1.RequestType.tx, mpcAlgorithm, 'signerGpgPublicKey', undefined, multisigTypeVersion);
|
|
55
|
+
await (0, common_1.sendSignatureShareV2)(mockBitGo, 'walletId', 'txRequestId', [], src_1.RequestType.tx, mpcAlgorithm, 'signerGpgPublicKey', undefined, multisigTypeVersion, undefined, signingType);
|
|
56
56
|
if (!capturedBody) {
|
|
57
57
|
throw new Error('request body should have been captured');
|
|
58
58
|
}
|
|
@@ -64,8 +64,15 @@ describe('sendSignatureShareV2 request type dispatch', function () {
|
|
|
64
64
|
it('resolves eddsaMpcV2 for MPCv2 + eddsa', async function () {
|
|
65
65
|
assert.strictEqual(await captureRequestType('eddsa', 'MPCv2'), 'eddsaMpcV2');
|
|
66
66
|
});
|
|
67
|
-
it('resolves
|
|
68
|
-
assert.strictEqual(await captureRequestType('redpallas', 'MPCv2'), '
|
|
67
|
+
it('resolves redPallasMpcV2 for MPCv2 + redpallas (DSG rounds)', async function () {
|
|
68
|
+
assert.strictEqual(await captureRequestType('redpallas', 'MPCv2'), 'redPallasMpcV2');
|
|
69
|
+
});
|
|
70
|
+
it('resolves redPallasRerand for MPCv2 + redpallas + rerand signingType', async function () {
|
|
71
|
+
assert.strictEqual(await captureRequestType('redpallas', 'MPCv2', 'redPallasRerand'), 'redPallasRerand');
|
|
72
|
+
});
|
|
73
|
+
it('rejects rerand signingType for non-redpallas algorithms', async function () {
|
|
74
|
+
await assert.rejects(captureRequestType('eddsa', 'MPCv2', 'redPallasRerand'), /only supported for MPCv2 redpallas/);
|
|
75
|
+
await assert.rejects(captureRequestType('redpallas', undefined, 'redPallasRerand'), /only supported for MPCv2 redpallas/);
|
|
69
76
|
});
|
|
70
77
|
it('resolves eddsaMpcV1 for undefined multisigTypeVersion + eddsa', async function () {
|
|
71
78
|
assert.strictEqual(await captureRequestType('eddsa', undefined), 'eddsaMpcV1');
|
|
@@ -74,4 +81,4 @@ describe('sendSignatureShareV2 request type dispatch', function () {
|
|
|
74
81
|
assert.strictEqual(await captureRequestType('redpallas', undefined), '');
|
|
75
82
|
});
|
|
76
83
|
});
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3Rzcy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLDZEQUF3RTtBQUN4RSx5Q0FBa0Y7QUFFbEYsUUFBUSxDQUFDLDRDQUE0QyxFQUFFO0lBQ3JELFNBQVMsQ0FBQztRQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEtBQUssVUFBVSxrQkFBa0IsQ0FDL0IsWUFBMEIsRUFDMUIsbUJBQXdDLEVBQ3hDLFdBQStCO1FBRS9CLElBQUksWUFBMEMsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0MsWUFBWSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBZSxDQUFDLEVBQUUsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN0QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3BDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDUCxDQUFDO1FBRTFCLE1BQU0sSUFBQSw2QkFBb0IsRUFDeEIsU0FBUyxFQUNULFVBQVUsRUFDVixhQUFhLEVBQ2IsRUFBRSxFQUNGLGlCQUFXLENBQUMsRUFBRSxFQUNkLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsV0FBVyxDQUNaLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLO1FBQy9DLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUUsS0FBSztRQUMvQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7UUFDcEUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEtBQUs7UUFDN0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEtBQUs7UUFDakUsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3BILE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FDbEIsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxFQUM3RCxvQ0FBb0MsQ0FDckMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEtBQUs7UUFDdkUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxLQUFLO1FBQ3RGLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgc2VuZFNpZ25hdHVyZVNoYXJlVjIgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vdHNzL2NvbW1vbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UsIFJlcXVlc3RUeXBlLCBUeFJlcXVlc3QsIE1QQ0FsZ29yaXRobSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdzZW5kU2lnbmF0dXJlU2hhcmVWMiByZXF1ZXN0IHR5cGUgZGlzcGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBjYXB0dXJlUmVxdWVzdFR5cGUoXG4gICAgbXBjQWxnb3JpdGhtOiBNUENBbGdvcml0aG0sXG4gICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB8IHVuZGVmaW5lZCxcbiAgICBzaWduaW5nVHlwZT86ICdyZWRQYWxsYXNSZXJhbmQnXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IGNhcHR1cmVkQm9keTogeyB0eXBlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZW5kID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgoYm9keSkgPT4ge1xuICAgICAgY2FwdHVyZWRCb2R5ID0gYm9keTtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKHt9IGFzIFR4UmVxdWVzdCkgfTtcbiAgICB9KTtcbiAgICBjb25zdCBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCcvbW9jay91cmwnKSxcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgc2VuZCB9KSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuXG4gICAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlVjIoXG4gICAgICBtb2NrQml0R28sXG4gICAgICAnd2FsbGV0SWQnLFxuICAgICAgJ3R4UmVxdWVzdElkJyxcbiAgICAgIFtdLFxuICAgICAgUmVxdWVzdFR5cGUudHgsXG4gICAgICBtcGNBbGdvcml0aG0sXG4gICAgICAnc2lnbmVyR3BnUHVibGljS2V5JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIG11bHRpc2lnVHlwZVZlcnNpb24sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBzaWduaW5nVHlwZVxuICAgICk7XG5cbiAgICBpZiAoIWNhcHR1cmVkQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0IGJvZHkgc2hvdWxkIGhhdmUgYmVlbiBjYXB0dXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZWRCb2R5LnR5cGU7XG4gIH1cblxuICBpdCgncmVzb2x2ZXMgZWNkc2FNcGNWMiBmb3IgTVBDdjIgKyBlY2RzYScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgY2FwdHVyZVJlcXVlc3RUeXBlKCdlY2RzYScsICdNUEN2MicpLCAnZWNkc2FNcGNWMicpO1xuICB9KTtcblxuICBpdCgncmVzb2x2ZXMgZWRkc2FNcGNWMiBmb3IgTVBDdjIgKyBlZGRzYScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgY2FwdHVyZVJlcXVlc3RUeXBlKCdlZGRzYScsICdNUEN2MicpLCAnZWRkc2FNcGNWMicpO1xuICB9KTtcblxuICBpdCgncmVzb2x2ZXMgcmVkUGFsbGFzTXBjVjIgZm9yIE1QQ3YyICsgcmVkcGFsbGFzIChEU0cgcm91bmRzKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgY2FwdHVyZVJlcXVlc3RUeXBlKCdyZWRwYWxsYXMnLCAnTVBDdjInKSwgJ3JlZFBhbGxhc01wY1YyJyk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyByZWRQYWxsYXNSZXJhbmQgZm9yIE1QQ3YyICsgcmVkcGFsbGFzICsgcmVyYW5kIHNpZ25pbmdUeXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhd2FpdCBjYXB0dXJlUmVxdWVzdFR5cGUoJ3JlZHBhbGxhcycsICdNUEN2MicsICdyZWRQYWxsYXNSZXJhbmQnKSwgJ3JlZFBhbGxhc1JlcmFuZCcpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyByZXJhbmQgc2lnbmluZ1R5cGUgZm9yIG5vbi1yZWRwYWxsYXMgYWxnb3JpdGhtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhjYXB0dXJlUmVxdWVzdFR5cGUoJ2VkZHNhJywgJ01QQ3YyJywgJ3JlZFBhbGxhc1JlcmFuZCcpLCAvb25seSBzdXBwb3J0ZWQgZm9yIE1QQ3YyIHJlZHBhbGxhcy8pO1xuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgY2FwdHVyZVJlcXVlc3RUeXBlKCdyZWRwYWxsYXMnLCB1bmRlZmluZWQsICdyZWRQYWxsYXNSZXJhbmQnKSxcbiAgICAgIC9vbmx5IHN1cHBvcnRlZCBmb3IgTVBDdjIgcmVkcGFsbGFzL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyBlZGRzYU1wY1YxIGZvciB1bmRlZmluZWQgbXVsdGlzaWdUeXBlVmVyc2lvbiArIGVkZHNhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhd2FpdCBjYXB0dXJlUmVxdWVzdFR5cGUoJ2VkZHNhJywgdW5kZWZpbmVkKSwgJ2VkZHNhTXBjVjEnKTtcbiAgfSk7XG5cbiAgaXQoJ3Jlc29sdmVzIGFuIGVtcHR5IHR5cGUgZm9yIHJlZHBhbGxhcyB3aXRob3V0IE1QQ3YyIChubyBNUEN2MSB2YXJpYW50IGV4aXN0cyknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGF3YWl0IGNhcHR1cmVSZXF1ZXN0VHlwZSgncmVkcGFsbGFzJywgdW5kZWZpbmVkKSwgJycpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -368,8 +368,8 @@ describe('EdDSA safe-child MPS derivation', function () {
|
|
|
368
368
|
let bitgoPrivateKey;
|
|
369
369
|
let bitgoPublicKey;
|
|
370
370
|
const sessionId = 'derive-session';
|
|
371
|
-
const
|
|
372
|
-
const path =
|
|
371
|
+
const account = 7;
|
|
372
|
+
const path = (0, src_1.buildSafeBip44Path)(501, 'eddsaMpc', account);
|
|
373
373
|
const Request = t.intersection([
|
|
374
374
|
t.type({ enterprise: t.string, type: t.string, curveType: t.string, round: t.string, payload: t.unknown }),
|
|
375
375
|
t.partial({ safeId: t.string }),
|
|
@@ -416,7 +416,7 @@ describe('EdDSA safe-child MPS derivation', function () {
|
|
|
416
416
|
'userMsg1',
|
|
417
417
|
]);
|
|
418
418
|
assert_1.default.strictEqual(request.parentKeyId, 'bitgo-root-id');
|
|
419
|
-
assert_1.default.strictEqual(request.derivationIndex,
|
|
419
|
+
assert_1.default.strictEqual(request.derivationIndex, account);
|
|
420
420
|
userGpgPublicKey = request.userGpgPublicKey;
|
|
421
421
|
const userGpgKey = await pgp.readKey({ armoredKey: request.userGpgPublicKey });
|
|
422
422
|
const userPayload = await sdk_lib_mpc_1.MPSComms.verifyMpsMessage(request.userMsg1, userGpgKey);
|
|
@@ -459,7 +459,7 @@ describe('EdDSA safe-child MPS derivation', function () {
|
|
|
459
459
|
enterprise: 'enterprise-id',
|
|
460
460
|
safeId: 'safe-id',
|
|
461
461
|
parentKeyId: 'bitgo-root-id',
|
|
462
|
-
|
|
462
|
+
path,
|
|
463
463
|
userRootKeyId: 'user-root-id',
|
|
464
464
|
backupRootKeyId: 'backup-root-id',
|
|
465
465
|
userRootKeyShare: userSigningShare,
|
|
@@ -511,23 +511,25 @@ describe('EdDSA safe-child MPS derivation', function () {
|
|
|
511
511
|
assert_1.default.strictEqual(backupChild.encryptedPrv, undefined);
|
|
512
512
|
assert_1.default.strictEqual(bitgoChild.encryptedPrv, undefined);
|
|
513
513
|
});
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
514
|
+
for (const badPath of ["m/7'", 'm/44/501/4/7', "m/44'/501'/0'/7'"]) {
|
|
515
|
+
it(`rejects the non-BIP44 path ${JSON.stringify(badPath)} before contacting WP`, async function () {
|
|
516
|
+
const { bitgo, baseCoin, post, addedKeychains } = createKeychainFixture();
|
|
517
|
+
const utils = new eddsaVrfMPCv2_1.EddsaVrfMPCv2Utils(bitgo, baseCoin);
|
|
518
|
+
await assert_1.default.rejects(utils.createSafeChildKeychains({
|
|
519
|
+
passphrase: 'passphrase',
|
|
520
|
+
enterprise: 'enterprise-id',
|
|
521
|
+
safeId: 'safe-id',
|
|
522
|
+
parentKeyId: 'bitgo-root-id',
|
|
523
|
+
path: badPath,
|
|
524
|
+
userRootKeyId: 'user-root-id',
|
|
525
|
+
backupRootKeyId: 'backup-root-id',
|
|
526
|
+
userRootKeyShare: userSigningShare,
|
|
527
|
+
userRootVrfKeyShare: userVrfShare,
|
|
528
|
+
}), /Invalid safe BIP44 path/);
|
|
529
|
+
assert_1.default.strictEqual(post.called, false);
|
|
530
|
+
assert_1.default.deepStrictEqual(addedKeychains, []);
|
|
531
|
+
});
|
|
532
|
+
}
|
|
531
533
|
const faults = [
|
|
532
534
|
'r1-signature',
|
|
533
535
|
'r2-signature',
|
|
@@ -546,4 +548,4 @@ describe('EdDSA safe-child MPS derivation', function () {
|
|
|
546
548
|
});
|
|
547
549
|
}
|
|
548
550
|
});
|
|
549
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw2Q0FBK0I7QUFDL0IsNkNBQStCO0FBQy9CLG9EQUE4RztBQUM5RyxzREFPNkI7QUFDN0IsbUNBQWdDO0FBQ2hDLHlDQUEyQjtBQUUzQiwrQ0FBd0Y7QUFDeEYscUVBQTJFO0FBQzNFLDZGQUFrRztBQUNsRyw2RkFBK0Y7QUFDL0YsdUZBQTBGO0FBQzFGLGlGQUFvRjtBQUVwRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ2hDLFlBQVksRUFDWixDQUFDLEtBQUssRUFBdUIsRUFBRSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQzNELENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUNoRyxDQUFDLENBQUMsUUFBUSxDQUNYLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQixXQUFXLEVBQUUsZUFBZTtJQUM1QixHQUFHLEVBQUUsZUFBZTtDQUNyQixDQUFDLENBQUM7QUFjSCxTQUFTLGlCQUFpQixDQUFDLE9BQWU7SUFDeEMsT0FBTyxJQUFBLHdCQUFlLEVBQUMsV0FBVyxFQUFFLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFF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LGFBQWE7Z0JBQ2YsQ0FBQyxDQUFDLEtBQUssS0FBSyxnQkFBZ0I7b0JBQzVCLENBQUMsQ0FBQyxrQkFBa0I7b0JBQ3BCLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FDckMsQ0FBQztZQUNGLGdCQUFNLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgRWRkc2FNUFNEa2csIE1QU0NvbW1zLCBNUFNVdGlsLCBNUFNUeXBlcywgTXBzRGVyaXZlLCBNcHNWcmYsIE1wc1ZyZlV0aWxzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7XG4gIEVkZHNhTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LFxuICBFZGRzYU1QQ3YyRGVyaXZlUm91bmQyUmVxdWVzdCxcbiAgRWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2UsXG4gIEtleUN1cnZlRW51bSxcbiAgS2V5R2VuVHlwZUVudW0sXG4gIE1QQ3YyS2V5R2VuU3RhdGVFbnVtLFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuaW1wb3J0IHsgRWRkc2FNUEN2MlV0aWxzLCBCaXRHb0Jhc2UsIElCYXNlQ29pbiwgS2V5Y2hhaW4gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgZGVjb2RlV2l0aENvZGVjIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2NvZGVjcyc7XG5pbXBvcnQgeyBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2tleVNoYXJlRW52ZWxvcGUnO1xuaW1wb3J0IHsgRWRkc2FWcmZNUEN2MlV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS9lZGRzYVZyZk1QQ3YyJztcbmltcG9ydCB7IE1QQ3YyUGFydGllc0VudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2VjZHNhL3R5cGVzTVBDdjInO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL29wZW5ncGdVdGlscyc7XG5cbmNvbnN0IFVpbnQ4QXJyYXlDb2RlYyA9IG5ldyB0LlR5cGU8VWludDhBcnJheSwgVWludDhBcnJheSwgdW5rbm93bj4oXG4gICdVaW50OEFycmF5JyxcbiAgKHZhbHVlKTogdmFsdWUgaXMgVWludDhBcnJheSA9PiB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICh2YWx1ZSwgY29udGV4dCkgPT4gKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSA/IHQuc3VjY2Vzcyh2YWx1ZSkgOiB0LmZhaWx1cmUodmFsdWUsIGNvbnRleHQpKSxcbiAgdC5pZGVudGl0eVxuKTtcblxuY29uc3QgVnJmRW52ZWxvcGUgPSB0LnR5cGUoe1xuICB2ZXJzaW9uOiB0LmxpdGVyYWwoMSksXG4gIHBydktleVNoYXJlOiBVaW50OEFycmF5Q29kZWMsXG4gIHZyZjogVWludDhBcnJheUNvZGVjLFxufSk7XG5cbnR5cGUgQWRkZWRLZXljaGFpblBhcmFtcyA9IHtcbiAgc291cmNlPzogc3RyaW5nO1xuICBlbmNyeXB0ZWRQcnY/OiBzdHJpbmc7XG4gIHJlZHVjZWRFbmNyeXB0ZWRQcnY/OiBzdHJpbmc7XG4gIHNhZmVJZD86IHN0cmluZztcbiAgcGFyZW50Pzogc3RyaW5nO1xuICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoPzogc3RyaW5nO1xuICBjb21tb25LZXljaGFpbj86IHN0cmluZztcbiAgaXNNUEN2Mj86IGJvb2xlYW47XG4gIGtleVR5cGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBkZWNvZGVWcmZFbnZlbG9wZShlbmNvZGVkOiBCdWZmZXIpOiB0LlR5cGVPZjx0eXBlb2YgVnJmRW52ZWxvcGU+IHtcbiAgcmV0dXJuIGRlY29kZVdpdGhDb2RlYyhWcmZFbnZlbG9wZSwgZGVjb2RlKGVuY29kZWQpLCAnVlJGIGtleSBlbnZlbG9wZScpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVLZXljaGFpbkZpeHR1cmUoKSB7XG4gIGNvbnN0IGVuY3J5cHRlZElucHV0czogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgYWRkZWRLZXljaGFpbnM6IEFkZGVkS2V5Y2hhaW5QYXJhbXNbXSA9IFtdO1xuICBjb25zdCBwb3N0ID0gc2lub24uc3R1YigpO1xuICBjb25zdCBiaXRnbyA9IHtcbiAgICBnZXRFbnY6ICgpID0+ICdkZXYnLFxuICAgIHVybDogKHBhdGg6IHN0cmluZykgPT4gcGF0aCxcbiAgICBwb3N0LFxuICAgIGVuY3J5cHQ6IGFzeW5jIChwYXJhbXM6IHsgaW5wdXQ6IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgIGVuY3J5cHRlZElucHV0cy5wdXNoKHBhcmFtcy5pbnB1dCk7XG4gICAgICByZXR1cm4gYGVuY3J5cHRlZDoke3BhcmFtcy5pbnB1dH1gO1xuICAgIH0sXG4gIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gIGNvbnN0IGtleWNoYWlucyA9IHtcbiAgICBhZGQ6IGFzeW5jIChwYXJhbXM6IEFkZGVkS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiA9PiB7XG4gICAgICBhZGRlZEtleWNoYWlucy5wdXNoKHBhcmFtcyk7XG4gICAgICByZXR1cm4geyBpZDogYCR7cGFyYW1zLnNvdXJjZX0tY2hpbGRgLCB0eXBlOiAndHNzJywgZW5jcnlwdGVkUHJ2OiBwYXJhbXMuZW5jcnlwdGVkUHJ2IH07XG4gICAgfSxcbiAgfTtcbiAgY29uc3QgYmFzZUNvaW4gPSB7XG4gICAga2V5Y2hhaW5zOiAoKSA9PiBrZXljaGFpbnMsXG4gIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG4gIHJldHVybiB7IGJpdGdvLCBiYXNlQ29pbiwgcG9zdCwgZW5jcnlwdGVkSW5wdXRzLCBhZGRlZEtleWNoYWlucyB9O1xufVxuXG5kZXNjcmliZSgnRWREU0EgTVBDdjIgVlJGIHJvb3QgbWF0ZXJpYWwnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdlbmNvZGVzIHNpZ25pbmcgYW5kIFZSRiBzaGFyZXMgaW4gYm90aCBmdWxsIGFuZCByZWR1Y2VkIGVudmVsb3BlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwcml2YXRlTWF0ZXJpYWwgPSBCdWZmZXIuZnJvbSgnc2lnbmluZy1zaGFyZScpO1xuICAgIGNvbnN0IHJlZHVjZWRQcml2YXRlTWF0ZXJpYWwgPSBCdWZmZXIuZnJvbSgncmVkdWNlZC1zaWduaW5nLXNoYXJlJyk7XG4gICAgY29uc3QgdnJmS2V5U2hhcmUgPSBCdWZmZXIuZnJvbSgndnJmLXNoYXJlJyk7XG5cbiAgICBjb25zdCB7IGVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGUgfSA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIHByaXZhdGVNYXRlcmlhbCxcbiAgICAgIHJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICB2cmZLZXlTaGFyZVxuICAgICk7XG4gICAgY29uc3QgZGVjb2RlZEVudmVsb3BlID0gZGVjb2RlVnJmRW52ZWxvcGUoZW52ZWxvcGUpO1xuICAgIGNvbnN0IGRlY29kZWRSZWR1Y2VkRW52ZWxvcGUgPSBkZWNvZGVWcmZFbnZlbG9wZShyZWR1Y2VkRW52ZWxvcGUpO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShkZWNvZGVkRW52ZWxvcGUucHJ2S2V5U2hhcmUpLCBwcml2YXRlTWF0ZXJpYWwpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20oZGVjb2RlZEVudmVsb3BlLnZyZiksIHZyZktleVNoYXJlKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKGRlY29kZWRSZWR1Y2VkRW52ZWxvcGUucHJ2S2V5U2hhcmUpLCByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKGRlY29kZWRSZWR1Y2VkRW52ZWxvcGUudnJmKSwgdnJmS2V5U2hhcmUpO1xuICB9KTtcblxuICBpdCgna2VlcHMgb3JkaW5hcnkgTVBDdjIgcGFydGljaXBhbnQgbWF0ZXJpYWwgYXMgYmFyZSBiYXNlNjQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBiaXRnbywgYmFzZUNvaW4sIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMgfSA9IGNyZWF0ZUtleWNoYWluRml4dHVyZSgpO1xuICAgIGNvbnN0IHV0aWxzID0gbmV3IEVkZHNhTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4pO1xuICAgIGNvbnN0IHByaXZhdGVNYXRlcmlhbCA9IEJ1ZmZlci5mcm9tKCdzaWduaW5nLXNoYXJlJyk7XG4gICAgY29uc3QgcmVkdWNlZFByaXZhdGVNYXRlcmlhbCA9IEJ1ZmZlci5mcm9tKCdyZWR1Y2VkLXNpZ25pbmctc2hhcmUnKTtcblxuICAgIGF3YWl0IHV0aWxzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICAnY29tbW9uLWtleWNoYWluJyxcbiAgICAgIHByaXZhdGVNYXRlcmlhbCxcbiAgICAgIHJlZHVjZWRQcml2YXRlTWF0ZXJpYWwsXG4gICAgICAncGFzc3BocmFzZSdcbiAgICApO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChlbmNyeXB0ZWRJbnB1dHMsIFtcbiAgICAgIHByaXZhdGVNYXRlcmlhbC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICBdKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnNbMF0uZW5jcnlwdGVkUHJ2LCBgZW5jcnlwdGVkOiR7cHJpdmF0ZU1hdGVyaWFsLnRvU3RyaW5nKCdiYXNlNjQnKX1gKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnNbMF0uc2FmZUlkLCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhIHB1YmxpYy1vbmx5IGJhY2t1cCBvdXRzaWRlIGEgc2FmZSBjaGlsZCBkZXJpdmF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHsgYml0Z28sIGJhc2VDb2luLCBlbmNyeXB0ZWRJbnB1dHMsIGFkZGVkS2V5Y2hhaW5zIH0gPSBjcmVhdGVLZXljaGFpbkZpeHR1cmUoKTtcbiAgICBjb25zdCB1dGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMoYml0Z28sIGJhc2VDb2luKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgdXRpbHMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCwgJ2NvbW1vbi1rZXljaGFpbicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAncGFzc3BocmFzZScpLFxuICAgICAgL1ByaXZhdGUgbWF0ZXJpYWwgaXMgcmVxdWlyZWQgZm9yIGJhY2t1cCBrZXljaGFpbi9cbiAgICApO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZW5jcnlwdGVkSW5wdXRzLCBbXSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhZGRlZEtleWNoYWlucywgW10pO1xuICB9KTtcblxuICBpdCgnZW5jcnlwdHMgdGhlIFZSRiBlbnZlbG9wZSBhbmQgdGFncyB0aGUga2V5Y2hhaW4gd2l0aCBzYWZlSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZW5jcnlwdGVkSW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGFkZGVkS2V5Y2hhaW5zOiBBZGRlZEtleWNoYWluUGFyYW1zW10gPSBbXTtcbiAgICBjb25zdCBiaXRnbyA9IHtcbiAgICAgIGVuY3J5cHQ6IGFzeW5jIChwYXJhbXM6IHsgaW5wdXQ6IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgICAgZW5jcnlwdGVkSW5wdXRzLnB1c2gocGFyYW1zLmlucHV0KTtcbiAgICAgICAgcmV0dXJuIGBlbmNyeXB0ZWQ6JHtwYXJhbXMuaW5wdXR9YDtcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBjb25zdCBrZXljaGFpbnMgPSB7XG4gICAgICBhZGQ6IGFzeW5jIChwYXJhbXM6IEFkZGVkS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiA9PiB7XG4gICAgICAgIGFkZGVkS2V5Y2hhaW5zLnB1c2gocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHsgaWQ6ICd1c2VyLWtleScgfSBhcyB1bmtub3duIGFzIEtleWNoYWluO1xuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGJhc2VDb2luID0ge1xuICAgICAga2V5Y2hhaW5zOiAoKSA9PiBrZXljaGFpbnMsXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcbiAgICBjb25zdCB1dGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMoYml0Z28sIGJhc2VDb2luKTtcbiAgICBjb25zdCB7IGVudmVsb3BlLCByZWR1Y2VkRW52ZWxvcGUgfSA9IGJ1aWxkU2FmZU1wY0tleUVudmVsb3BlcyhcbiAgICAgIEJ1ZmZlci5mcm9tKCdzaWduaW5nLXNoYXJlJyksXG4gICAgICBCdWZmZXIuZnJvbSgncmVkdWNlZC1zaWduaW5nLXNoYXJlJyksXG4gICAgICBCdWZmZXIuZnJvbSgndnJmLXNoYXJlJylcbiAgICApO1xuXG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICAgICdjb21tb24ta2V5Y2hhaW4nLFxuICAgICAgZW52ZWxvcGUsXG4gICAgICByZWR1Y2VkRW52ZWxvcGUsXG4gICAgICAncGFzc3BocmFzZScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICAnc2FmZS1pZCdcbiAgICApO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChlbmNyeXB0ZWRJbnB1dHNbMF0sIGVudmVsb3BlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zWzBdLnNhZmVJZCwgJ3NhZmUtaWQnKTtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVnJmRW52ZWxvcGUoQnVmZmVyLmZyb20oZW5jcnlwdGVkSW5wdXRzWzBdLCAnYmFzZTY0JykpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20oZGVjb2RlZC52cmYpLCBCdWZmZXIuZnJvbSgndnJmLXNoYXJlJykpO1xuICB9KTtcblxuICBpdCgndGFncyB0aGUgQml0R28ga2V5Y2hhaW4gd2l0aCBzYWZlSWQgYW5kIGRvZXMgbm90IGVuY3J5cHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZW5jcnlwdGVkSW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGFkZGVkS2V5Y2hhaW5zOiBBZGRlZEtleWNoYWluUGFyYW1zW10gPSBbXTtcbiAgICBjb25zdCBiaXRnbyA9IHtcbiAgICAgIGVuY3J5cHQ6IGFzeW5jIChwYXJhbXM6IHsgaW5wdXQ6IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICAgICAgZW5jcnlwdGVkSW5wdXRzLnB1c2gocGFyYW1zLmlucHV0KTtcbiAgICAgICAgcmV0dXJuIGBlbmNyeXB0ZWQ6JHtwYXJhbXMuaW5wdXR9YDtcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcbiAgICBjb25zdCBrZXljaGFpbnMgPSB7XG4gICAgICBhZGQ6IGFzeW5jIChwYXJhbXM6IEFkZGVkS2V5Y2hhaW5QYXJhbXMpOiBQcm9taXNlPEtleWNoYWluPiA9PiB7XG4gICAgICAgIGFkZGVkS2V5Y2hhaW5zLnB1c2gocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHsgaWQ6ICdiaXRnby1rZXknIH0gYXMgdW5rbm93biBhcyBLZXljaGFpbjtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBiYXNlQ29pbiA9IHtcbiAgICAgIGtleWNoYWluczogKCkgPT4ga2V5Y2hhaW5zLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG4gICAgY29uc3QgdXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbik7XG5cbiAgICBhd2FpdCB1dGlscy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyxcbiAgICAgICdjb21tb24ta2V5Y2hhaW4nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgJ3NhZmUtaWQnXG4gICAgKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZW5jcnlwdGVkSW5wdXRzLCBbXSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zWzBdLnNvdXJjZSwgJ2JpdGdvJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zWzBdLnNhZmVJZCwgJ3NhZmUtaWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnNbMF0uZW5jcnlwdGVkUHJ2LCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2FmZSByb290IGtleWdlbiBhZ2FpbnN0IHRoZSBIU00gY29udHJhY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgS2V5R2VuUmVxdWVzdCA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgICAgIHQudHlwZSh7IGVudGVycHJpc2U6IHQuc3RyaW5nLCB0eXBlOiB0LnN0cmluZywgY3VydmVUeXBlOiB0LnN0cmluZywgcm91bmQ6IHQuc3RyaW5nIH0pLFxuICAgICAgdC5wYXJ0aWFsKHsgc2FmZUlkOiB0LnN0cmluZywgcGF5bG9hZDogdC5Vbmtub3duUmVjb3JkIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IFIxUGF5bG9hZCA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgICAgIHQudHlwZSh7XG4gICAgICAgIHVzZXJHcGdQdWJsaWNLZXk6IHQuc3RyaW5nLFxuICAgICAgICBiYWNrdXBHcGdQdWJsaWNLZXk6IHQuc3RyaW5nLFxuICAgICAgICB1c2VyTXNnMTogRWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2UsXG4gICAgICAgIGJhY2t1cE1zZzE6IEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLFxuICAgICAgfSksXG4gICAgICB0LnR5cGUoe1xuICAgICAgICB1c2VyVnJmTXNnMTogRWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2UsXG4gICAgICAgIGJhY2t1cFZyZk1zZzE6IEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLFxuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3QgUjJQYXlsb2FkID0gdC5pbnRlcnNlY3Rpb24oW1xuICAgICAgdC50eXBlKHsgc2Vzc2lvbklkOiB0LnN0cmluZywgdXNlck1zZzI6IEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLCBiYWNrdXBNc2cyOiBFZGRzYU1QQ3YyU2lnbmVkTWVzc2FnZSB9KSxcbiAgICAgIHQudHlwZSh7XG4gICAgICAgIHVzZXJWcmZNc2cyOiBFZGRzYU1QQ3YyU2lnbmVkTWVzc2FnZSxcbiAgICAgICAgYmFja3VwVnJmTXNnMjogRWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2UsXG4gICAgICB9KSxcbiAgICBdKTtcblxuICAgIGxldCBiaXRnb1ByaXZhdGVLZXk6IHBncC5Qcml2YXRlS2V5O1xuICAgIGxldCBiaXRnb1B1YmxpY0tleTogcGdwLktleTtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBiaXRnb0dwZyA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgICAgYml0Z29Qcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGcucHJpdmF0ZUtleSB9KTtcbiAgICAgIGJpdGdvUHVibGljS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZy5wdWJsaWNLZXkgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgc2lub24ucmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqIEJpdEdvJ3Mgc2lkZSBvZiB0aGUgY2VyZW1vbnk6IHNpZ25pbmcgREtHICsgVlJGIERLRywgdmVyaWZ5aW5nIGV2ZXJ5IGNsaWVudCBzaWduYXR1cmUgbGlrZSB0aGUgSFNNIGRvZXMuICovXG4gICAgYXN5bmMgZnVuY3Rpb24ga2V5Z2VuV2l0aEhzbVBlZXIoXG4gICAgICBmYXVsdD86ICdiaXRnby12cmYtbXNnMS1zaWduYXR1cmUnIHwgJ2JpdGdvLXZyZi1vcGVuaW5nLXNpZ25hdHVyZScgfCAnbWlzc2luZy1vcGVuaW5nJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBiaXRnbywgYmFzZUNvaW4sIHBvc3QsIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMgfSA9IGNyZWF0ZUtleWNoYWluRml4dHVyZSgpO1xuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgRWRkc2FWcmZNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbik7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzJykucmVzb2x2ZXMoe1xuICAgICAgICBtcGN2MlB1YmxpY0tleTogYml0Z29QdWJsaWNLZXksXG4gICAgICAgIGVkZHNhTXBjdjJQdWJsaWNLZXk6IGJpdGdvUHVibGljS2V5LFxuICAgICAgICByZWRwYWxsYXNNcGN2MlB1YmxpY0tleTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJpdGdvRGtnID0gbmV3IEVkZHNhTVBTRGtnLkRLRygzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPKTtcbiAgICAgIGNvbnN0IGJpdGdvVnJmID0gbmV3IE1wc1ZyZi5WcmZEa2coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgICBjb25zdCByZXF1ZXN0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICAgICAgbGV0IGJpdGdvTXNnMjogTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCB1c2VyR3BnS2V5OiBwZ3AuS2V5IHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGJhY2t1cEdwZ0tleTogcGdwLktleSB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCB1c2VyQ29tbWl0bWVudDogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBiYWNrdXBDb21taXRtZW50OiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBzaWduQXNCaXRnbyA9IChwYXlsb2FkOiBVaW50OEFycmF5KSA9PiBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShwYXlsb2FkLCBiaXRnb1ByaXZhdGVLZXkpO1xuICAgICAgY29uc3QgZW5jcnlwdFRvID0gYXN5bmMgKHJlY2lwaWVudDogcGdwLktleSwgcGxhaW50ZXh0OiBVaW50OEFycmF5KTogUHJvbWlzZTxFZGRzYU1QQ3YyU2lnbmVkTWVzc2FnZT4gPT4ge1xuICAgICAgICBjb25zdCB7IHNpZ25hdHVyZSB9ID0gYXdhaXQgc2lnbkFzQml0Z28ocGxhaW50ZXh0KTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHBncC5lbmNyeXB0KHtcbiAgICAgICAgICBtZXNzYWdlOiBhd2FpdCBwZ3AuY3JlYXRlTWVzc2FnZSh7IGJpbmFyeTogcGxhaW50ZXh0IH0pLFxuICAgICAgICAgIGVuY3J5cHRpb25LZXlzOiByZWNpcGllbnQsXG4gICAgICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgc2lnbmF0dXJlOlxuICAgICAgICAgICAgZmF1bHQgPT09ICdiaXRnby12cmYtb3BlbmluZy1zaWduYXR1cmUnID8gKGF3YWl0IHNpZ25Bc0JpdGdvKG5ldyBVaW50OEFycmF5KFs5XSkpKS5zaWduYXR1cmUgOiBzaWduYXR1cmUsXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBwb3N0LmNhbGxzRmFrZSgoKSA9PiAoe1xuICAgICAgICBzZW5kOiAocmF3Qm9keTogdW5rbm93bikgPT4gKHtcbiAgICAgICAgICByZXN1bHQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBkZWNvZGVXaXRoQ29kZWMoS2V5R2VuUmVxdWVzdCwgcmF3Qm9keSwgJ0VkRFNBIGtleWdlbiByZXF1ZXN0Jyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS50eXBlLCBLZXlHZW5UeXBlRW51bS5NUEN2Mik7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5jdXJ2ZVR5cGUsIEtleUN1cnZlRW51bS5FZERTQSk7XG4gICAgICAgICAgICAvLyBXUCBvbmx5IHJlYWRzIHNhZmVJZCBpbiByb3VuZCAxOyByb3VuZCAyIGlzIHJvdXRlZCBieSB0aGUgc3RvcmVkIHNlc3Npb24uXG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5zYWZlSWQsIGJvZHkucm91bmQgPT09IE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMSddID8gJ3NhZmUtaWQnIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJlcXVlc3RzLnB1c2goeyByb3VuZDogYm9keS5yb3VuZCwgLi4uYm9keS5wYXlsb2FkIH0pO1xuXG4gICAgICAgICAgICBpZiAoYm9keS5yb3VuZCA9PT0gTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIxJ10pIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRlY29kZVdpdGhDb2RlYyhSMVBheWxvYWQsIGJvZHkucGF5bG9hZCwgJ0VkRFNBIGtleWdlbiByb3VuZCAxJyk7XG4gICAgICAgICAgICAgIHVzZXJHcGdLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHBheWxvYWQudXNlckdwZ1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgYmFja3VwR3BnS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBwYXlsb2FkLmJhY2t1cEdwZ1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgY29uc3QgW3VzZXJQaywgYmFja3VwUGtdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIE1QU0NvbW1zLmV4dHJhY3RFZDI1NTE5UHVibGljS2V5KHVzZXJHcGdLZXkpLFxuICAgICAgICAgICAgICAgIE1QU0NvbW1zLmV4dHJhY3RFZDI1NTE5UHVibGljS2V5KGJhY2t1cEdwZ0tleSksXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICBjb25zdCBbLCBiaXRnb1NrXSA9IGF3YWl0IE1QU0NvbW1zLmV4dHJhY3RFZDI1NTE5S2V5UGFpcihiaXRnb1ByaXZhdGVLZXkpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHVzZXJNc2cxID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLnVzZXJNc2cxLCB1c2VyR3BnS2V5KTtcbiAgICAgICAgICAgICAgY29uc3QgYmFja3VwTXNnMSA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC5iYWNrdXBNc2cxLCBiYWNrdXBHcGdLZXkpO1xuICAgICAgICAgICAgICAvLyBUaGUgVlJGIG1lc3NhZ2VzIG11c3QgYmUgc2lnbmVkIGJ5IHRoZSBzYW1lIHBhcnR5IGtleSBhcyB1c2VyTXNnMS9iYWNrdXBNc2cxLlxuICAgICAgICAgICAgICB1c2VyQ29tbWl0bWVudCA9IG5ldyBVaW50OEFycmF5KGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC51c2VyVnJmTXNnMSwgdXNlckdwZ0tleSkpO1xuICAgICAgICAgICAgICBiYWNrdXBDb21taXRtZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLmJhY2t1cFZyZk1zZzEsIGJhY2t1cEdwZ0tleSkpO1xuICAgICAgICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBheWxvYWQudXNlclZyZk1zZzEsIGJhY2t1cEdwZ0tleSkpO1xuXG4gICAgICAgICAgICAgIGF3YWl0IGJpdGdvRGtnLmluaXREa2coYml0Z29TaywgW3VzZXJQaywgYmFja3VwUGtdKTtcbiAgICAgICAgICAgICAgY29uc3QgYml0Z29SYXdNc2cxID0gYml0Z29Ea2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gICAgICAgICAgICAgIFtiaXRnb01zZzJdID0gYml0Z29Ea2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbXG4gICAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHVzZXJNc2cxKSB9LFxuICAgICAgICAgICAgICAgIHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KGJhY2t1cE1zZzEpIH0sXG4gICAgICAgICAgICAgICAgYml0Z29SYXdNc2cxLFxuICAgICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgICBjb25zdCBbYml0Z29WcmZDb21taXRtZW50XSA9IChhd2FpdCBiaXRnb1ZyZi5pbml0RGtnKCkpLmJyb2FkY2FzdE1lc3NhZ2VzO1xuICAgICAgICAgICAgICBjb25zdCBzaWduZWRWcmZNc2cxID0gYXdhaXQgc2lnbkFzQml0Z28oYml0Z29WcmZDb21taXRtZW50LnBheWxvYWQpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlc3Npb25JZDogJ3Nlc3Npb24taWQnLFxuICAgICAgICAgICAgICAgIGJpdGdvTXNnMTogYXdhaXQgc2lnbkFzQml0Z28oYml0Z29SYXdNc2cxLnBheWxvYWQpLFxuICAgICAgICAgICAgICAgIGJpdGdvVnJmTXNnMTpcbiAgICAgICAgICAgICAgICAgIGZhdWx0ID09PSAnYml0Z28tdnJmLW1zZzEtc2lnbmF0dXJlJ1xuICAgICAgICAgICAgICAgICAgICA/IHsgLi4uc2lnbmVkVnJmTXNnMSwgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpIH1cbiAgICAgICAgICAgICAgICAgICAgOiBzaWduZWRWcmZNc2cxLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5yb3VuZCwgTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIyJ10pO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRlY29kZVdpdGhDb2RlYyhSMlBheWxvYWQsIGJvZHkucGF5bG9hZCwgJ0VkRFNBIGtleWdlbiByb3VuZCAyJyk7XG4gICAgICAgICAgICBhc3NlcnQub2sodXNlckdwZ0tleSAmJiBiYWNrdXBHcGdLZXkgJiYgdXNlckNvbW1pdG1lbnQgJiYgYmFja3VwQ29tbWl0bWVudCAmJiBiaXRnb01zZzIpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChPYmplY3Qua2V5cyhwYXlsb2FkKS5zb3J0KCksIFtcbiAgICAgICAgICAgICAgJ2JhY2t1cE1zZzInLFxuICAgICAgICAgICAgICAnYmFja3VwVnJmTXNnMicsXG4gICAgICAgICAgICAgICdzZXNzaW9uSWQnLFxuICAgICAgICAgICAgICAndXNlck1zZzInLFxuICAgICAgICAgICAgICAndXNlclZyZk1zZzInLFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJNc2cyID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLnVzZXJNc2cyLCB1c2VyR3BnS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGJhY2t1cE1zZzIgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBheWxvYWQuYmFja3VwTXNnMiwgYmFja3VwR3BnS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJPcGVuaW5nID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLnVzZXJWcmZNc2cyLCB1c2VyR3BnS2V5KSk7XG4gICAgICAgICAgICBjb25zdCBiYWNrdXBPcGVuaW5nID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLmJhY2t1cFZyZk1zZzIsIGJhY2t1cEdwZ0tleSkpO1xuXG4gICAgICAgICAgICBiaXRnb0RrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtcbiAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHVzZXJNc2cyKSB9LFxuICAgICAgICAgICAgICB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheShiYWNrdXBNc2cyKSB9LFxuICAgICAgICAgICAgICBiaXRnb01zZzIsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3Qgb3BlbmluZ3MgPSBhd2FpdCBiaXRnb1ZyZi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAgICB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUiwgcGF5bG9hZDogdXNlckNvbW1pdG1lbnQgfSxcbiAgICAgICAgICAgICAgICB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCBwYXlsb2FkOiBiYWNrdXBDb21taXRtZW50IH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdG9Vc2VyID0gb3BlbmluZ3MucDJwTWVzc2FnZXMuZmluZCgoeyB0byB9KSA9PiB0byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5VU0VSKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQmFja3VwID0gb3BlbmluZ3MucDJwTWVzc2FnZXMuZmluZCgoeyB0byB9KSA9PiB0byA9PT0gTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVApO1xuICAgICAgICAgICAgYXNzZXJ0Lm9rKHRvVXNlciAmJiB0b0JhY2t1cCk7XG4gICAgICAgICAgICBhd2FpdCBiaXRnb1ZyZi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgICAgICAgICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICAgICAgICAgIHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCB0bzogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTywgcGF5bG9hZDogdXNlck9wZW5pbmcgfSxcbiAgICAgICAgICAgICAgICB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCB0bzogTVBDdjJQYXJ0aWVzRW51bS5CSVRHTywgcGF5bG9hZDogYmFja3VwT3BlbmluZyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHNlc3Npb25JZDogcGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGNvbW1vblB1YmxpY0tleWNoYWluOiBiaXRnb0RrZy5nZXRDb21tb25LZXljaGFpbigpLFxuICAgICAgICAgICAgICBiaXRnb01zZzI6IGF3YWl0IHNpZ25Bc0JpdGdvKGJpdGdvTXNnMi5wYXlsb2FkKSxcbiAgICAgICAgICAgICAgLi4uKGZhdWx0ID09PSAnbWlzc2luZy1vcGVuaW5nJ1xuICAgICAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgICAgICA6IHsgYml0Z29WcmZNc2dUb1VzZXI6IGF3YWl0IGVuY3J5cHRUbyh1c2VyR3BnS2V5LCB0b1VzZXIucGF5bG9hZCkgfSksXG4gICAgICAgICAgICAgIGJpdGdvVnJmTXNnVG9CYWNrdXA6IGF3YWl0IGVuY3J5cHRUbyhiYWNrdXBHcGdLZXksIHRvQmFja3VwLnBheWxvYWQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pKTtcblxuICAgICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zKHtcbiAgICAgICAgcGFzc3BocmFzZTogJ3Bhc3NwaHJhc2UnLFxuICAgICAgICBlbnRlcnByaXNlOiAnZW50ZXJwcmlzZS1pZCcsXG4gICAgICAgIHNhZmVJZDogJ3NhZmUtaWQnLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyByZXF1ZXN0cywgZW5jcnlwdGVkSW5wdXRzLCBhZGRlZEtleWNoYWlucyB9O1xuICAgIH1cblxuICAgIGl0KCdzaWducyBWUkYgbWVzc2FnZXMgd2l0aCB0aGUgcGFydHkga2V5cyBhbmQgZGVjcnlwdHMgQml0R28gb3BlbmluZ3Mgd2l0aG91dCBoYW5kbGluZyB0aGUgSFNNIFZSRiBzdGF0ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgcmVxdWVzdHMsIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMgfSA9IGF3YWl0IGtleWdlbldpdGhIc21QZWVyKCk7XG5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgIHJlcXVlc3RzLm1hcCgoeyByb3VuZCB9KSA9PiByb3VuZCksXG4gICAgICAgIFtNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjEnXSwgTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIyJ11dXG4gICAgICApO1xuICAgICAgLy8gV1Aga2VlcHMgdGhlIEhTTSBWUkYgc3RhdGUgYmV0d2VlbiByb3VuZHMsIHNvIG5laXRoZXIgY2xpZW50IHJvdW5kIGNhcnJpZXMgaXQuXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCdiaXRnb0VuY3J5cHRlZFZyZkRrZ1N0YXRlJyBpbiByZXF1ZXN0LCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdGggY2xpZW50IHJvb3RzIGVuZCB1cCB3aXRoIGEgc2lnbmluZyBzaGFyZSBhbmQgYSBWUkYgc2hhcmUsIHRhZ2dlZCB3aXRoIHRoZSBzYWZlLlxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhZGRlZEtleWNoYWlucy5tYXAoKHsgc291cmNlIH0pID0+IHNvdXJjZSkuc29ydCgpLCBbJ2JhY2t1cCcsICdiaXRnbycsICd1c2VyJ10pO1xuICAgICAgZm9yIChjb25zdCBrZXljaGFpbiBvZiBhZGRlZEtleWNoYWlucykge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoa2V5Y2hhaW4uc2FmZUlkLCAnc2FmZS1pZCcpO1xuICAgICAgfVxuICAgICAgLy8gVXNlciBhbmQgYmFja3VwIGVhY2ggZW5jcnlwdCBhIGZ1bGwgYW5kIGEgcmVkdWNlZCBlbnZlbG9wZTsgZXZlcnkgb25lIGNhcnJpZXMgYSBWUkYgc2hhcmUsIGFuZFxuICAgICAgLy8gdGhlIHR3byBwYXJ0aWVzJyBzaGFyZXMgZGlmZmVyLiBPcmRlci1pbmRlcGVuZGVudDogdGhlIHJvb3RzIGFyZSByZWdpc3RlcmVkIGNvbmN1cnJlbnRseS5cbiAgICAgIGNvbnN0IHZyZlNoYXJlcyA9IG5ldyBTZXQoXG4gICAgICAgIGVuY3J5cHRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB2cmYsIHBydktleVNoYXJlIH0gPSBkZWNvZGVWcmZFbnZlbG9wZShCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpKTtcbiAgICAgICAgICBhc3NlcnQub2sodnJmLmxlbmd0aCA+IDApO1xuICAgICAgICAgIGFzc2VydC5vayhwcnZLZXlTaGFyZS5sZW5ndGggPiAwKTtcbiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20odnJmKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZElucHV0cy5sZW5ndGgsIDQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZyZlNoYXJlcy5zaXplLCAyKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgQml0R28gVlJGIHJvdW5kIDEgbWVzc2FnZSB3aG9zZSBzaWduYXR1cmUgZG9lcyBub3QgdmVyaWZ5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoa2V5Z2VuV2l0aEhzbVBlZXIoJ2JpdGdvLXZyZi1tc2cxLXNpZ25hdHVyZScpLCAvc2lnbmF0dXJlfHZlcmlmaWNhdGlvbnxzaWduZWQvaSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIEJpdEdvIFZSRiBvcGVuaW5nIHdob3NlIHNpZ25hdHVyZSBkb2VzIG5vdCB2ZXJpZnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhrZXlnZW5XaXRoSHNtUGVlcignYml0Z28tdnJmLW9wZW5pbmctc2lnbmF0dXJlJyksIC9zaWduYXR1cmV8dmVyaWZpY2F0aW9ufHNpZ25lZC9pKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWlscyB3aGVuIHRoZSBIU00gb21pdHMgYSBCaXRHbyBWUkYgb3BlbmluZyBpbiByb3VuZCAyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoa2V5Z2VuV2l0aEhzbVBlZXIoJ21pc3Npbmctb3BlbmluZycpLCAvVlJGIG1lc3NhZ2UgdG8gdXNlci8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRWREU0Egc2FmZS1jaGlsZCBNUFMgZGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHVzZXJTaWduaW5nU2hhcmU6IEJ1ZmZlcjtcbiAgbGV0IHVzZXJWcmZTaGFyZTogQnVmZmVyO1xuICBsZXQgYml0Z29TaWduaW5nU2hhcmU6IEJ1ZmZlcjtcbiAgbGV0IGJpdGdvVnJmU2hhcmU6IEJ1ZmZlcjtcbiAgbGV0IGJpdGdvUHJpdmF0ZUtleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb1B1YmxpY0tleTogcGdwLktleTtcblxuICBjb25zdCBzZXNzaW9uSWQgPSAnZGVyaXZlLXNlc3Npb24nO1xuICBjb25zdCBkZXJpdmF0aW9uSW5kZXggPSA3O1xuICBjb25zdCBwYXRoID0gXCJtLzcnXCI7XG4gIGNvbnN0IFJlcXVlc3QgPSB0LmludGVyc2VjdGlvbihbXG4gICAgdC50eXBlKHsgZW50ZXJwcmlzZTogdC5zdHJpbmcsIHR5cGU6IHQuc3RyaW5nLCBjdXJ2ZVR5cGU6IHQuc3RyaW5nLCByb3VuZDogdC5zdHJpbmcsIHBheWxvYWQ6IHQudW5rbm93biB9KSxcbiAgICB0LnBhcnRpYWwoeyBzYWZlSWQ6IHQuc3RyaW5nIH0pLFxuICBdKTtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNpZ25pbmcgPSBhd2FpdCBNUFNVdGlsLmdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXMoKTtcbiAgICBjb25zdCB2cmYgPSBhd2FpdCBNcHNWcmZVdGlscy5nZW5lcmF0ZVZyZkRLR0tleVNoYXJlcygpO1xuICAgIHVzZXJTaWduaW5nU2hhcmUgPSBzaWduaW5nW01QQ3YyUGFydGllc0VudW0uVVNFUl0uZ2V0S2V5U2hhcmUoKTtcbiAgICBiaXRnb1NpZ25pbmdTaGFyZSA9IHNpZ25pbmdbTVBDdjJQYXJ0aWVzRW51bS5CSVRHT10uZ2V0S2V5U2hhcmUoKTtcbiAgICB1c2VyVnJmU2hhcmUgPSB2cmZbTVBDdjJQYXJ0aWVzRW51bS5VU0VSXS5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvVnJmU2hhcmUgPSB2cmZbTVBDdjJQYXJ0aWVzRW51bS5CSVRHT10uZ2V0S2V5U2hhcmUoKTtcbiAgICBjb25zdCBiaXRnb0dwZyA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGJpdGdvUHJpdmF0ZUtleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnLnByaXZhdGVLZXkgfSk7XG4gICAgYml0Z29QdWJsaWNLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnLnB1YmxpY0tleSB9KTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGVyaXZlV2l0aFBlZXIoXG4gICAgZmF1bHQ/OiAncjEtc2lnbmF0dXJlJyB8ICdyMi1zaWduYXR1cmUnIHwgJ3Nlc3Npb24nIHwgJ2NvbW1vbktleWNoYWluJyxcbiAgICByZWNvcmRlZEtleWNoYWlucz86IEFkZGVkS2V5Y2hhaW5QYXJhbXNbXVxuICApIHtcbiAgICBjb25zdCB7IGJpdGdvLCBiYXNlQ29pbiwgcG9zdCwgZW5jcnlwdGVkSW5wdXRzLCBhZGRlZEtleWNoYWlucyB9ID0gY3JlYXRlS2V5Y2hhaW5GaXh0dXJlKCk7XG4gICAgY29uc3QgdXRpbHMgPSBuZXcgRWRkc2FWcmZNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbik7XG4gICAgc2lub24uc3R1Yih1dGlscywgJ2dldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncycpLnJlc29sdmVzKHtcbiAgICAgIG1wY3YyUHVibGljS2V5OiBiaXRnb1B1YmxpY0tleSxcbiAgICAgIGVkZHNhTXBjdjJQdWJsaWNLZXk6IGJpdGdvUHVibGljS2V5LFxuICAgICAgcmVkcGFsbGFzTXBjdjJQdWJsaWNLZXk6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBjb25zdCBiaXRnb1BlZXIgPSBuZXcgTXBzRGVyaXZlLkRlcml2ZSgzLCAyLCBNUEN2MlBhcnRpZXNFbnVtLkJJVEdPLCBiaXRnb1NpZ25pbmdTaGFyZSwgYml0Z29WcmZTaGFyZSwgcGF0aCk7XG4gICAgbGV0IGJpdGdvTXNnMjogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdXNlckdwZ1B1YmxpY0tleSA9ICcnO1xuICAgIGxldCByb3VuZHMgPSAwO1xuICAgIHBvc3QuY2FsbHNGYWtlKChfdXJsOiBzdHJpbmcpID0+ICh7XG4gICAgICBzZW5kOiAocmF3Qm9keTogdW5rbm93bikgPT4gKHtcbiAgICAgICAgcmVzdWx0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGRlY29kZVdpdGhDb2RlYyhSZXF1ZXN0LCByYXdCb2R5LCAnRWREU0EgZGVyaXZlIHJlcXVlc3QnKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoX3VybCwgJy9tcGMvZ2VuZXJhdGVrZXknKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5lbnRlcnByaXNlLCAnZW50ZXJwcmlzZS1pZCcpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LnR5cGUsIEtleUdlblR5cGVFbnVtLk1QQ3YyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5jdXJ2ZVR5cGUsIEtleUN1cnZlRW51bS5FZERTQSk7XG4gICAgICAgICAgaWYgKHJvdW5kcysrID09PSAwKSB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5yb3VuZCwgTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIxJ10pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkuc2FmZUlkLCAnc2FmZS1pZCcpO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGRlY29kZVdpdGhDb2RlYyhFZGRzYU1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCwgYm9keS5wYXlsb2FkLCAnRWREU0EgZGVyaXZlIHJvdW5kIDEnKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoT2JqZWN0LmtleXMocmVxdWVzdCkuc29ydCgpLCBbXG4gICAgICAgICAgICAgICdkZXJpdmF0aW9uSW5kZXgnLFxuICAgICAgICAgICAgICAncGFyZW50S2V5SWQnLFxuICAgICAgICAgICAgICAndXNlckdwZ1B1YmxpY0tleScsXG4gICAgICAgICAgICAgICd1c2VyTXNnMScsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXF1ZXN0LnBhcmVudEtleUlkLCAnYml0Z28tcm9vdC1pZCcpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcXVlc3QuZGVyaXZhdGlvbkluZGV4LCBkZXJpdmF0aW9uSW5kZXgpO1xuICAgICAgICAgICAgdXNlckdwZ1B1YmxpY0tleSA9IHJlcXVlc3QudXNlckdwZ1B1YmxpY0tleTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHJlcXVlc3QudXNlckdwZ1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQYXlsb2FkID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShyZXF1ZXN0LnVzZXJNc2cxLCB1c2VyR3BnS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGJpdGdvRmlyc3QgPSBhd2FpdCBiaXRnb1BlZXIuaW5pdERlcml2ZSgpO1xuICAgICAgICAgICAgY29uc3QgW291dGdvaW5nXSA9IGJpdGdvUGVlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtcbiAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHVzZXJQYXlsb2FkKSB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBhc3NlcnQub2sob3V0Z29pbmcpO1xuICAgICAgICAgICAgYml0Z29Nc2cyID0gb3V0Z29pbmcucGF5bG9hZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvRmlyc3QucGF5bG9hZCksIGJpdGdvUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGJpdGdvTXNnMTpcbiAgICAgICAgICAgICAgICBmYXVsdCA9PT0gJ3IxLXNpZ25hdHVyZScgPyB7IC4uLnNpZ25lZCwgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpIH0gOiBzaWduZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmRzLCAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5yb3VuZCwgTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIyJ10pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LnNhZmVJZCwgJ3NhZmUtaWQnKTtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gZGVjb2RlV2l0aENvZGVjKEVkZHNhTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0LCBib2R5LnBheWxvYWQsICdFZERTQSBkZXJpdmUgcm91bmQgMicpO1xuICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoT2JqZWN0LmtleXMocmVxdWVzdCkuc29ydCgpLCBbJ3Nlc3Npb25JZCcsICd1c2VyTXNnMiddKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVxdWVzdC5zZXNzaW9uSWQsIHNlc3Npb25JZCk7XG4gICAgICAgICAgY29uc3QgdXNlclBheWxvYWQgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKFxuICAgICAgICAgICAgcmVxdWVzdC51c2VyTXNnMixcbiAgICAgICAgICAgIGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ1B1YmxpY0tleSB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICAgIGJpdGdvUGVlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt7IGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUiwgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkodXNlclBheWxvYWQpIH1dKSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnQub2soYml0Z29Nc2cyKTtcbiAgICAgICAgICBjb25zdCBzaWduZWQgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiaXRnb01zZzIpLCBiaXRnb1ByaXZhdGVLZXkpO1xuICAgICAgICAgIGNvbnN0IGNvbW1vblB1YmxpY0tleWNoYWluID0gYml0Z29QZWVyLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZmF1bHQgPT09ICdzZXNzaW9uJyA/ICdkaWZmZXJlbnQtc2Vzc2lvbicgOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICBjb21tb25QdWJsaWNLZXljaGFpbjpcbiAgICAgICAgICAgICAgZmF1bHQgPT09ICdjb21tb25LZXljaGFpbidcbiAgICAgICAgICAgICAgICA/IGAke2NvbW1vblB1YmxpY0tleWNoYWluLnNsaWNlKDAsIC0xKX0ke2NvbW1vblB1YmxpY0tleWNoYWluLmVuZHNXaXRoKCcwJykgPyAnMScgOiAnMCd9YFxuICAgICAgICAgICAgICAgIDogY29tbW9uUHVibGljS2V5Y2hhaW4sXG4gICAgICAgICAgICBiaXRnb01zZzI6XG4gICAgICAgICAgICAgIGZhdWx0ID09PSAncjItc2lnbmF0dXJlJyA/IHsgLi4uc2lnbmVkLCBtZXNzYWdlOiBCdWZmZXIuZnJvbSgndGFtcGVyZWQnKS50b1N0cmluZygnYmFzZTY0JykgfSA6IHNpZ25lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmNyZWF0ZVNhZmVDaGlsZEtleWNoYWlucyh7XG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtaWQnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLWlkJyxcbiAgICAgICAgcGFyZW50S2V5SWQ6ICdiaXRnby1yb290LWlkJyxcbiAgICAgICAgZGVyaXZhdGlvbkluZGV4LFxuICAgICAgICB1c2VyUm9vdEtleUlkOiAndXNlci1yb290LWlkJyxcbiAgICAgICAgYmFja3VwUm9vdEtleUlkOiAnYmFja3VwLXJvb3QtaWQnLFxuICAgICAgICB1c2VyUm9vdEtleVNoYXJlOiB1c2VyU2lnbmluZ1NoYXJlLFxuICAgICAgICB1c2VyUm9vdFZyZktleVNoYXJlOiB1c2VyVnJmU2hhcmUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHJlc3VsdCwgZW5jcnlwdGVkSW5wdXRzLCBhZGRlZEtleWNoYWlucywgYml0Z29QZWVyLCByb3VuZHMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVjb3JkZWRLZXljaGFpbnM/LnB1c2goLi4uYWRkZWRLZXljaGFpbnMpO1xuICAgIH1cbiAgfVxuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgncmVnaXN0ZXJzIHRoZSBjaGlsZCBzaWduaW5nIHNoYXJlIGFuZCB0d28gcHVibGljLW9ubHkgcGxhY2Vob2xkZXJzIGFmdGVyIHRoZSBzaWduZWQgY2VyZW1vbnknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyByZXN1bHQsIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMsIGJpdGdvUGVlciwgcm91bmRzIH0gPSBhd2FpdCBkZXJpdmVXaXRoUGVlcigpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZHMsIDIpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnMubWFwKCh7IHNvdXJjZSB9KSA9PiBzb3VyY2UpLnNvcnQoKSwgWydiYWNrdXAnLCAnYml0Z28nLCAndXNlciddKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgW3Jlc3VsdC51c2VyS2V5Y2hhaW4uaWQsIHJlc3VsdC5iYWNrdXBLZXljaGFpbi5pZCwgcmVzdWx0LmJpdGdvS2V5Y2hhaW4uaWRdLFxuICAgICAgWyd1c2VyLWNoaWxkJywgJ2JhY2t1cC1jaGlsZCcsICdiaXRnby1jaGlsZCddXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGtleWNoYWluIG9mIGFkZGVkS2V5Y2hhaW5zKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoa2V5Y2hhaW4uc2FmZUlkLCAnc2FmZS1pZCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGtleWNoYWluLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGgsIHBhdGgpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGtleWNoYWluLmNvbW1vbktleWNoYWluLCBiaXRnb1BlZXIuZ2V0Q29tbW9uS2V5Y2hhaW4oKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoa2V5Y2hhaW4ua2V5VHlwZSwgJ3RzcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGtleWNoYWluLmlzTVBDdjIsIHRydWUpO1xuICAgIH1cbiAgICBjb25zdCB1c2VyQ2hpbGQgPSBhZGRlZEtleWNoYWlucy5maW5kKCh7IHNvdXJjZSB9KSA9PiBzb3VyY2UgPT09ICd1c2VyJyk7XG4gICAgY29uc3QgYmFja3VwQ2hpbGQgPSBhZGRlZEtleWNoYWlucy5maW5kKCh7IHNvdXJjZSB9KSA9PiBzb3VyY2UgPT09ICdiYWNrdXAnKTtcbiAgICBjb25zdCBiaXRnb0NoaWxkID0gYWRkZWRLZXljaGFpbnMuZmluZCgoeyBzb3VyY2UgfSkgPT4gc291cmNlID09PSAnYml0Z28nKTtcbiAgICBhc3NlcnQub2sodXNlckNoaWxkKTtcbiAgICBhc3NlcnQub2soYmFja3VwQ2hpbGQpO1xuICAgIGFzc2VydC5vayhiaXRnb0NoaWxkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXNlckNoaWxkLnBhcmVudCwgJ3VzZXItcm9vdC1pZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYWNrdXBDaGlsZC5wYXJlbnQsICdiYWNrdXAtcm9vdC1pZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiaXRnb0NoaWxkLnBhcmVudCwgJ2JpdGdvLXJvb3QtaWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jcnlwdGVkSW5wdXRzLmxlbmd0aCwgMik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHVzZXJDaGlsZC5lbmNyeXB0ZWRQcnYsIGBlbmNyeXB0ZWQ6JHtlbmNyeXB0ZWRJbnB1dHNbMF19YCk7XG4gICAgY29uc3Qgc2lnbmluZ1NoYXJlID0gQnVmZmVyLmZyb20ocmVzdWx0LnVzZXJLZXljaGFpbi5lbmNyeXB0ZWRQcnY/LnNsaWNlKCdlbmNyeXB0ZWQ6Jy5sZW5ndGgpID8/ICcnLCAnYmFzZTY0Jyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduaW5nU2hhcmUsIEJ1ZmZlci5mcm9tKGVuY3J5cHRlZElucHV0c1swXSwgJ2Jhc2U2NCcpKTtcbiAgICBhc3NlcnQubm90RGVlcFN0cmljdEVxdWFsKHNpZ25pbmdTaGFyZSwgdXNlclNpZ25pbmdTaGFyZSk7XG4gICAgYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbChzaWduaW5nU2hhcmUsIGJpdGdvUGVlci5nZXRLZXlTaGFyZSgpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXNlckNoaWxkLnJlZHVjZWRFbmNyeXB0ZWRQcnYsIHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVkdWNlZCA9IHJlc3VsdC51c2VyS2V5Y2hhaW4ucmVkdWNlZEVuY3J5cHRlZFBydjtcbiAgICBhc3NlcnQub2socmVkdWNlZCk7XG4gICAgY29uc3QgcmVkdWNlZFNoYXJlID0gTVBTVHlwZXMuZ2V0RGVjb2RlZFJlZHVjZWRLZXlTaGFyZShCdWZmZXIuZnJvbShyZWR1Y2VkLnNsaWNlKCdlbmNyeXB0ZWQ6Jy5sZW5ndGgpLCAnYmFzZTY0JykpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVkdWNlZFNoYXJlLmtleVNoYXJlKSwgc2lnbmluZ1NoYXJlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVkdWNlZFNoYXJlLnB1YikudG9TdHJpbmcoJ2hleCcpLCBiaXRnb1BlZXIuZ2V0Q29tbW9uS2V5Y2hhaW4oKS5zbGljZSgwLCA2NCkpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZGVjb2RlVnJmRW52ZWxvcGUoc2lnbmluZ1NoYXJlKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhY2t1cENoaWxkLmVuY3J5cHRlZFBydiwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYml0Z29DaGlsZC5lbmNyeXB0ZWRQcnYsIHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGluZGV4ZXMgb3V0c2lkZSB0aGUgaGFyZGVuZWQgU2FmZSByYW5nZSBiZWZvcmUgY29udGFjdGluZyBXUCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IGJpdGdvLCBiYXNlQ29pbiwgcG9zdCwgYWRkZWRLZXljaGFpbnMgfSA9IGNyZWF0ZUtleWNoYWluRml4dHVyZSgpO1xuICAgIGNvbnN0IHV0aWxzID0gbmV3IEVkZHNhVnJmTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICB1dGlscy5jcmVhdGVTYWZlQ2hpbGRLZXljaGFpbnMoe1xuICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgIGVudGVycHJpc2U6ICdlbnRlcnByaXNlLWlkJyxcbiAgICAgICAgc2FmZUlkOiAnc2FmZS1pZCcsXG4gICAgICAgIHBhcmVudEtleUlkOiAnYml0Z28tcm9vdC1pZCcsXG4gICAgICAgIGRlcml2YXRpb25JbmRleDogMHg4MDAwMDAwMCxcbiAgICAgICAgdXNlclJvb3RLZXlJZDogJ3VzZXItcm9vdC1pZCcsXG4gICAgICAgIGJhY2t1cFJvb3RLZXlJZDogJ2JhY2t1cC1yb290LWlkJyxcbiAgICAgICAgdXNlclJvb3RLZXlTaGFyZTogdXNlclNpZ25pbmdTaGFyZSxcbiAgICAgICAgdXNlclJvb3RWcmZLZXlTaGFyZTogdXNlclZyZlNoYXJlLFxuICAgICAgfSksXG4gICAgICAvZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aC9cbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwb3N0LmNhbGxlZCwgZmFsc2UpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnMsIFtdKTtcbiAgfSk7XG5cbiAgY29uc3QgZmF1bHRzOiBBcnJheTwncjEtc2lnbmF0dXJlJyB8ICdyMi1zaWduYXR1cmUnIHwgJ3Nlc3Npb24nIHwgJ2NvbW1vbktleWNoYWluJz4gPSBbXG4gICAgJ3IxLXNpZ25hdHVyZScsXG4gICAgJ3IyLXNpZ25hdHVyZScsXG4gICAgJ3Nlc3Npb24nLFxuICAgICdjb21tb25LZXljaGFpbicsXG4gIF07XG4gIGZvciAoY29uc3QgZmF1bHQgb2YgZmF1bHRzKSB7XG4gICAgaXQoYHJlamVjdHMgJHtmYXVsdH0gYmVmb3JlIHJlZ2lzdGVyaW5nIGFueSBjaGlsZGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY29yZGVkS2V5Y2hhaW5zOiBBZGRlZEtleWNoYWluUGFyYW1zW10gPSBbXTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICAoKSA9PiBkZXJpdmVXaXRoUGVlcihmYXVsdCwgcmVjb3JkZWRLZXljaGFpbnMpLFxuICAgICAgICBmYXVsdCA9PT0gJ3Nlc3Npb24nXG4gICAgICAgICAgPyAvc2Vzc2lvbiBpZC9pXG4gICAgICAgICAgOiBmYXVsdCA9PT0gJ2NvbW1vbktleWNoYWluJ1xuICAgICAgICAgID8gL2NvbW1vbiBrZXljaGFpbi9pXG4gICAgICAgICAgOiAvc2lnbmF0dXJlfHZlcmlmaWNhdGlvbnxzaWduZWQvaVxuICAgICAgKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjb3JkZWRLZXljaGFpbnMsIFtdKTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXX0=
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2FWcmZNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FWcmZNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qiw2Q0FBK0I7QUFDL0IsNkNBQStCO0FBQy9CLG9EQUE4RztBQUM5RyxzREFPNkI7QUFDN0IsbUNBQWdDO0FBQ2hDLHlDQUEyQjtBQUUzQiwrQ0FPK0I7QUFDL0IscUVBQTJFO0FBQzNFLDZGQUFrRztBQUNsRyw2RkFBK0Y7QUFDL0YsdUZBQTBGO0FBQzFGLGlGQUFvRjtBQUVwRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ2hDLFlBQVksRUFDWixDQUFDLEtBQUssRUFBdUIsRUFBRSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQzNELENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUNoRyxDQUFDLENBQUMsUUFBUSxDQUNYLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQixXQUFXLEVBQUUsZUFBZTtJQUM1QixHQUFHLEVBQUUsZUFBZTtDQUNyQixDQUFDLENBQUM7QUFjSCxTQUFTLGlCQUFpQixDQUFDLE9BQWU7SUFDeEMsT0FBTyxJQUFBLHdCQUFlLEVBQUMsV0FBVyxFQUFFLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFF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QUFLLCtCQUErQixFQUFFLEtBQUs7WUFDdkQsTUFBTSxpQkFBaUIsR0FBMEIsRUFBRSxDQUFDO1lBQ3BELE1BQU0sZ0JBQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsRUFDOUMsS0FBSyxLQUFLLFNBQVM7Z0JBQ2pCLENBQUMsQ0FBQyxhQUFhO2dCQUNmLENBQUMsQ0FBQyxLQUFLLEtBQUssZ0JBQWdCO29CQUM1QixDQUFDLENBQUMsa0JBQWtCO29CQUNwQixDQUFDLENBQUMsZ0NBQWdDLENBQ3JDLENBQUM7WUFDRixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IEVkZHNhTVBTRGtnLCBNUFNDb21tcywgTVBTVXRpbCwgTVBTVHlwZXMsIE1wc0Rlcml2ZSwgTXBzVnJmLCBNcHNWcmZVdGlscyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBFZGRzYU1QQ3YyRGVyaXZlUm91bmQxUmVxdWVzdCxcbiAgRWRkc2FNUEN2MkRlcml2ZVJvdW5kMlJlcXVlc3QsXG4gIEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLFxuICBLZXlDdXJ2ZUVudW0sXG4gIEtleUdlblR5cGVFbnVtLFxuICBNUEN2MktleUdlblN0YXRlRW51bSxcbn0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkU2FmZUJpcDQ0UGF0aCxcbiAgRGVyaXZlZEZyb21QYXJlbnRXaXRoSGFyZGVuZWRQYXRoLFxuICBFZGRzYU1QQ3YyVXRpbHMsXG4gIEJpdEdvQmFzZSxcbiAgSUJhc2VDb2luLFxuICBLZXljaGFpbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgYnVpbGRTYWZlTXBjS2V5RW52ZWxvcGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9rZXlTaGFyZUVudmVsb3BlJztcbmltcG9ydCB7IEVkZHNhVnJmTVBDdjJVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvZWRkc2FWcmZNUEN2Mic7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS90eXBlc01QQ3YyJztcbmltcG9ydCB7IGdlbmVyYXRlR1BHS2V5UGFpciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9vcGVuZ3BnVXRpbHMnO1xuXG5jb25zdCBVaW50OEFycmF5Q29kZWMgPSBuZXcgdC5UeXBlPFVpbnQ4QXJyYXksIFVpbnQ4QXJyYXksIHVua25vd24+KFxuICAnVWludDhBcnJheScsXG4gICh2YWx1ZSk6IHZhbHVlIGlzIFVpbnQ4QXJyYXkgPT4gdmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5LFxuICAodmFsdWUsIGNvbnRleHQpID0+ICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyB0LnN1Y2Nlc3ModmFsdWUpIDogdC5mYWlsdXJlKHZhbHVlLCBjb250ZXh0KSksXG4gIHQuaWRlbnRpdHlcbik7XG5cbmNvbnN0IFZyZkVudmVsb3BlID0gdC50eXBlKHtcbiAgdmVyc2lvbjogdC5saXRlcmFsKDEpLFxuICBwcnZLZXlTaGFyZTogVWludDhBcnJheUNvZGVjLFxuICB2cmY6IFVpbnQ4QXJyYXlDb2RlYyxcbn0pO1xuXG50eXBlIEFkZGVkS2V5Y2hhaW5QYXJhbXMgPSB7XG4gIHNvdXJjZT86IHN0cmluZztcbiAgZW5jcnlwdGVkUHJ2Pzogc3RyaW5nO1xuICByZWR1Y2VkRW5jcnlwdGVkUHJ2Pzogc3RyaW5nO1xuICBzYWZlSWQ/OiBzdHJpbmc7XG4gIHBhcmVudD86IHN0cmluZztcbiAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aD86IHN0cmluZztcbiAgY29tbW9uS2V5Y2hhaW4/OiBzdHJpbmc7XG4gIGlzTVBDdjI/OiBib29sZWFuO1xuICBrZXlUeXBlPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZGVjb2RlVnJmRW52ZWxvcGUoZW5jb2RlZDogQnVmZmVyKTogdC5UeXBlT2Y8dHlwZW9mIFZyZkVudmVsb3BlPiB7XG4gIHJldHVybiBkZWNvZGVXaXRoQ29kZWMoVnJmRW52ZWxvcGUsIGRlY29kZShlbmNvZGVkKSwgJ1ZSRiBrZXkgZW52ZWxvcGUnKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5Y2hhaW5GaXh0dXJlKCkge1xuICBjb25zdCBlbmNyeXB0ZWRJbnB1dHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGFkZGVkS2V5Y2hhaW5zOiBBZGRlZEtleWNoYWluUGFyYW1zW10gPSBbXTtcbiAgY29uc3QgcG9zdCA9IHNpbm9uLnN0dWIoKTtcbiAgY29uc3QgYml0Z28gPSB7XG4gICAgZ2V0RW52OiAoKSA9PiAnZGV2JyxcbiAgICB1cmw6IChwYXRoOiBzdHJpbmcpID0+IHBhdGgsXG4gICAgcG9zdCxcbiAgICBlbmNyeXB0OiBhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICBlbmNyeXB0ZWRJbnB1dHMucHVzaChwYXJhbXMuaW5wdXQpO1xuICAgICAgcmV0dXJuIGBlbmNyeXB0ZWQ6JHtwYXJhbXMuaW5wdXR9YDtcbiAgICB9LFxuICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICBjb25zdCBrZXljaGFpbnMgPSB7XG4gICAgYWRkOiBhc3luYyAocGFyYW1zOiBBZGRlZEtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4gPT4ge1xuICAgICAgYWRkZWRLZXljaGFpbnMucHVzaChwYXJhbXMpO1xuICAgICAgcmV0dXJuIHsgaWQ6IGAke3BhcmFtcy5zb3VyY2V9LWNoaWxkYCwgdHlwZTogJ3RzcycsIGVuY3J5cHRlZFBydjogcGFyYW1zLmVuY3J5cHRlZFBydiB9O1xuICAgIH0sXG4gIH07XG4gIGNvbnN0IGJhc2VDb2luID0ge1xuICAgIGtleWNoYWluczogKCkgPT4ga2V5Y2hhaW5zLFxuICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuICByZXR1cm4geyBiaXRnbywgYmFzZUNvaW4sIHBvc3QsIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMgfTtcbn1cblxuZGVzY3JpYmUoJ0VkRFNBIE1QQ3YyIFZSRiByb290IG1hdGVyaWFsJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZW5jb2RlcyBzaWduaW5nIGFuZCBWUkYgc2hhcmVzIGluIGJvdGggZnVsbCBhbmQgcmVkdWNlZCBlbnZlbG9wZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJpdmF0ZU1hdGVyaWFsID0gQnVmZmVyLmZyb20oJ3NpZ25pbmctc2hhcmUnKTtcbiAgICBjb25zdCByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsID0gQnVmZmVyLmZyb20oJ3JlZHVjZWQtc2lnbmluZy1zaGFyZScpO1xuICAgIGNvbnN0IHZyZktleVNoYXJlID0gQnVmZmVyLmZyb20oJ3ZyZi1zaGFyZScpO1xuXG4gICAgY29uc3QgeyBlbnZlbG9wZSwgcmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBwcml2YXRlTWF0ZXJpYWwsXG4gICAgICByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsLFxuICAgICAgdnJmS2V5U2hhcmVcbiAgICApO1xuICAgIGNvbnN0IGRlY29kZWRFbnZlbG9wZSA9IGRlY29kZVZyZkVudmVsb3BlKGVudmVsb3BlKTtcbiAgICBjb25zdCBkZWNvZGVkUmVkdWNlZEVudmVsb3BlID0gZGVjb2RlVnJmRW52ZWxvcGUocmVkdWNlZEVudmVsb3BlKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20oZGVjb2RlZEVudmVsb3BlLnBydktleVNoYXJlKSwgcHJpdmF0ZU1hdGVyaWFsKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKGRlY29kZWRFbnZlbG9wZS52cmYpLCB2cmZLZXlTaGFyZSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShkZWNvZGVkUmVkdWNlZEVudmVsb3BlLnBydktleVNoYXJlKSwgcmVkdWNlZFByaXZhdGVNYXRlcmlhbCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShkZWNvZGVkUmVkdWNlZEVudmVsb3BlLnZyZiksIHZyZktleVNoYXJlKTtcbiAgfSk7XG5cbiAgaXQoJ2tlZXBzIG9yZGluYXJ5IE1QQ3YyIHBhcnRpY2lwYW50IG1hdGVyaWFsIGFzIGJhcmUgYmFzZTY0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHsgYml0Z28sIGJhc2VDb2luLCBlbmNyeXB0ZWRJbnB1dHMsIGFkZGVkS2V5Y2hhaW5zIH0gPSBjcmVhdGVLZXljaGFpbkZpeHR1cmUoKTtcbiAgICBjb25zdCB1dGlscyA9IG5ldyBFZGRzYU1QQ3YyVXRpbHMoYml0Z28sIGJhc2VDb2luKTtcbiAgICBjb25zdCBwcml2YXRlTWF0ZXJpYWwgPSBCdWZmZXIuZnJvbSgnc2lnbmluZy1zaGFyZScpO1xuICAgIGNvbnN0IHJlZHVjZWRQcml2YXRlTWF0ZXJpYWwgPSBCdWZmZXIuZnJvbSgncmVkdWNlZC1zaWduaW5nLXNoYXJlJyk7XG5cbiAgICBhd2FpdCB1dGlscy5jcmVhdGVQYXJ0aWNpcGFudEtleWNoYWluKFxuICAgICAgTVBDdjJQYXJ0aWVzRW51bS5VU0VSLFxuICAgICAgJ2NvbW1vbi1rZXljaGFpbicsXG4gICAgICBwcml2YXRlTWF0ZXJpYWwsXG4gICAgICByZWR1Y2VkUHJpdmF0ZU1hdGVyaWFsLFxuICAgICAgJ3Bhc3NwaHJhc2UnXG4gICAgKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZW5jcnlwdGVkSW5wdXRzLCBbXG4gICAgICBwcml2YXRlTWF0ZXJpYWwudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgcmVkdWNlZFByaXZhdGVNYXRlcmlhbC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgXSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zWzBdLmVuY3J5cHRlZFBydiwgYGVuY3J5cHRlZDoke3ByaXZhdGVNYXRlcmlhbC50b1N0cmluZygnYmFzZTY0Jyl9YCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zWzBdLnNhZmVJZCwgdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBwdWJsaWMtb25seSBiYWNrdXAgb3V0c2lkZSBhIHNhZmUgY2hpbGQgZGVyaXZhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IGJpdGdvLCBiYXNlQ29pbiwgZW5jcnlwdGVkSW5wdXRzLCBhZGRlZEtleWNoYWlucyB9ID0gY3JlYXRlS2V5Y2hhaW5GaXh0dXJlKCk7XG4gICAgY29uc3QgdXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbik7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHV0aWxzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oTVBDdjJQYXJ0aWVzRW51bS5CQUNLVVAsICdjb21tb24ta2V5Y2hhaW4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3Bhc3NwaHJhc2UnKSxcbiAgICAgIC9Qcml2YXRlIG1hdGVyaWFsIGlzIHJlcXVpcmVkIGZvciBiYWNrdXAga2V5Y2hhaW4vXG4gICAgKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGVuY3J5cHRlZElucHV0cywgW10pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnMsIFtdKTtcbiAgfSk7XG5cbiAgaXQoJ2VuY3J5cHRzIHRoZSBWUkYgZW52ZWxvcGUgYW5kIHRhZ3MgdGhlIGtleWNoYWluIHdpdGggc2FmZUlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVuY3J5cHRlZElucHV0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBhZGRlZEtleWNoYWluczogQWRkZWRLZXljaGFpblBhcmFtc1tdID0gW107XG4gICAgY29uc3QgYml0Z28gPSB7XG4gICAgICBlbmNyeXB0OiBhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICAgIGVuY3J5cHRlZElucHV0cy5wdXNoKHBhcmFtcy5pbnB1dCk7XG4gICAgICAgIHJldHVybiBgZW5jcnlwdGVkOiR7cGFyYW1zLmlucHV0fWA7XG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0ge1xuICAgICAgYWRkOiBhc3luYyAocGFyYW1zOiBBZGRlZEtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4gPT4ge1xuICAgICAgICBhZGRlZEtleWNoYWlucy5wdXNoKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7IGlkOiAndXNlci1rZXknIH0gYXMgdW5rbm93biBhcyBLZXljaGFpbjtcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBiYXNlQ29pbiA9IHtcbiAgICAgIGtleWNoYWluczogKCkgPT4ga2V5Y2hhaW5zLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG4gICAgY29uc3QgdXRpbHMgPSBuZXcgRWRkc2FNUEN2MlV0aWxzKGJpdGdvLCBiYXNlQ29pbik7XG4gICAgY29uc3QgeyBlbnZlbG9wZSwgcmVkdWNlZEVudmVsb3BlIH0gPSBidWlsZFNhZmVNcGNLZXlFbnZlbG9wZXMoXG4gICAgICBCdWZmZXIuZnJvbSgnc2lnbmluZy1zaGFyZScpLFxuICAgICAgQnVmZmVyLmZyb20oJ3JlZHVjZWQtc2lnbmluZy1zaGFyZScpLFxuICAgICAgQnVmZmVyLmZyb20oJ3ZyZi1zaGFyZScpXG4gICAgKTtcblxuICAgIGF3YWl0IHV0aWxzLmNyZWF0ZVBhcnRpY2lwYW50S2V5Y2hhaW4oXG4gICAgICBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsXG4gICAgICAnY29tbW9uLWtleWNoYWluJyxcbiAgICAgIGVudmVsb3BlLFxuICAgICAgcmVkdWNlZEVudmVsb3BlLFxuICAgICAgJ3Bhc3NwaHJhc2UnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgJ3NhZmUtaWQnXG4gICAgKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZW5jcnlwdGVkSW5wdXRzWzBdLCBlbnZlbG9wZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZGRlZEtleWNoYWluc1swXS5zYWZlSWQsICdzYWZlLWlkJyk7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVZyZkVudmVsb3BlKEJ1ZmZlci5mcm9tKGVuY3J5cHRlZElucHV0c1swXSwgJ2Jhc2U2NCcpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKGRlY29kZWQudnJmKSwgQnVmZmVyLmZyb20oJ3ZyZi1zaGFyZScpKTtcbiAgfSk7XG5cbiAgaXQoJ3RhZ3MgdGhlIEJpdEdvIGtleWNoYWluIHdpdGggc2FmZUlkIGFuZCBkb2VzIG5vdCBlbmNyeXB0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVuY3J5cHRlZElucHV0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBhZGRlZEtleWNoYWluczogQWRkZWRLZXljaGFpblBhcmFtc1tdID0gW107XG4gICAgY29uc3QgYml0Z28gPSB7XG4gICAgICBlbmNyeXB0OiBhc3luYyAocGFyYW1zOiB7IGlucHV0OiBzdHJpbmcgfSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICAgIGVuY3J5cHRlZElucHV0cy5wdXNoKHBhcmFtcy5pbnB1dCk7XG4gICAgICAgIHJldHVybiBgZW5jcnlwdGVkOiR7cGFyYW1zLmlucHV0fWA7XG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBCaXRHb0Jhc2U7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0ge1xuICAgICAgYWRkOiBhc3luYyAocGFyYW1zOiBBZGRlZEtleWNoYWluUGFyYW1zKTogUHJvbWlzZTxLZXljaGFpbj4gPT4ge1xuICAgICAgICBhZGRlZEtleWNoYWlucy5wdXNoKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7IGlkOiAnYml0Z28ta2V5JyB9IGFzIHVua25vd24gYXMgS2V5Y2hhaW47XG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgYmFzZUNvaW4gPSB7XG4gICAgICBrZXljaGFpbnM6ICgpID0+IGtleWNoYWlucyxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuICAgIGNvbnN0IHV0aWxzID0gbmV3IEVkZHNhTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4pO1xuXG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlUGFydGljaXBhbnRLZXljaGFpbihcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgICAnY29tbW9uLWtleWNoYWluJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgICdzYWZlLWlkJ1xuICAgICk7XG5cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGVuY3J5cHRlZElucHV0cywgW10pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZGRlZEtleWNoYWluc1swXS5zb3VyY2UsICdiaXRnbycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZGRlZEtleWNoYWluc1swXS5zYWZlSWQsICdzYWZlLWlkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zWzBdLmVuY3J5cHRlZFBydiwgdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NhZmUgcm9vdCBrZXlnZW4gYWdhaW5zdCB0aGUgSFNNIGNvbnRyYWN0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IEtleUdlblJlcXVlc3QgPSB0LmludGVyc2VjdGlvbihbXG4gICAgICB0LnR5cGUoeyBlbnRlcnByaXNlOiB0LnN0cmluZywgdHlwZTogdC5zdHJpbmcsIGN1cnZlVHlwZTogdC5zdHJpbmcsIHJvdW5kOiB0LnN0cmluZyB9KSxcbiAgICAgIHQucGFydGlhbCh7IHNhZmVJZDogdC5zdHJpbmcsIHBheWxvYWQ6IHQuVW5rbm93blJlY29yZCB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBSMVBheWxvYWQgPSB0LmludGVyc2VjdGlvbihbXG4gICAgICB0LnR5cGUoe1xuICAgICAgICB1c2VyR3BnUHVibGljS2V5OiB0LnN0cmluZyxcbiAgICAgICAgYmFja3VwR3BnUHVibGljS2V5OiB0LnN0cmluZyxcbiAgICAgICAgdXNlck1zZzE6IEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLFxuICAgICAgICBiYWNrdXBNc2cxOiBFZGRzYU1QQ3YyU2lnbmVkTWVzc2FnZSxcbiAgICAgIH0pLFxuICAgICAgdC50eXBlKHtcbiAgICAgICAgdXNlclZyZk1zZzE6IEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLFxuICAgICAgICBiYWNrdXBWcmZNc2cxOiBFZGRzYU1QQ3YyU2lnbmVkTWVzc2FnZSxcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IFIyUGF5bG9hZCA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgICAgIHQudHlwZSh7IHNlc3Npb25JZDogdC5zdHJpbmcsIHVzZXJNc2cyOiBFZGRzYU1QQ3YyU2lnbmVkTWVzc2FnZSwgYmFja3VwTXNnMjogRWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2UgfSksXG4gICAgICB0LnR5cGUoe1xuICAgICAgICB1c2VyVnJmTXNnMjogRWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2UsXG4gICAgICAgIGJhY2t1cFZyZk1zZzI6IEVkZHNhTVBDdjJTaWduZWRNZXNzYWdlLFxuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBsZXQgYml0Z29Qcml2YXRlS2V5OiBwZ3AuUHJpdmF0ZUtleTtcbiAgICBsZXQgYml0Z29QdWJsaWNLZXk6IHBncC5LZXk7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYml0Z29HcGcgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICAgIGJpdGdvUHJpdmF0ZUtleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnLnByaXZhdGVLZXkgfSk7XG4gICAgICBiaXRnb1B1YmxpY0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGcucHVibGljS2V5IH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIC8qKiBCaXRHbydzIHNpZGUgb2YgdGhlIGNlcmVtb255OiBzaWduaW5nIERLRyArIFZSRiBES0csIHZlcmlmeWluZyBldmVyeSBjbGllbnQgc2lnbmF0dXJlIGxpa2UgdGhlIEhTTSBkb2VzLiAqL1xuICAgIGFzeW5jIGZ1bmN0aW9uIGtleWdlbldpdGhIc21QZWVyKFxuICAgICAgZmF1bHQ/OiAnYml0Z28tdnJmLW1zZzEtc2lnbmF0dXJlJyB8ICdiaXRnby12cmYtb3BlbmluZy1zaWduYXR1cmUnIHwgJ21pc3Npbmctb3BlbmluZydcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYml0Z28sIGJhc2VDb2luLCBwb3N0LCBlbmNyeXB0ZWRJbnB1dHMsIGFkZGVkS2V5Y2hhaW5zIH0gPSBjcmVhdGVLZXljaGFpbkZpeHR1cmUoKTtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEVkZHNhVnJmTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4pO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2dldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncycpLnJlc29sdmVzKHtcbiAgICAgICAgbXBjdjJQdWJsaWNLZXk6IGJpdGdvUHVibGljS2V5LFxuICAgICAgICBlZGRzYU1wY3YyUHVibGljS2V5OiBiaXRnb1B1YmxpY0tleSxcbiAgICAgICAgcmVkcGFsbGFzTXBjdjJQdWJsaWNLZXk6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBiaXRnb0RrZyA9IG5ldyBFZGRzYU1QU0RrZy5ES0coMywgMiwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgICBjb25zdCBiaXRnb1ZyZiA9IG5ldyBNcHNWcmYuVnJmRGtnKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgICAgY29uc3QgcmVxdWVzdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgICAgIGxldCBiaXRnb01zZzI6IE1QU1R5cGVzLkRlc2VyaWFsaXplZE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgdXNlckdwZ0tleTogcGdwLktleSB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBiYWNrdXBHcGdLZXk6IHBncC5LZXkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgdXNlckNvbW1pdG1lbnQ6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgYmFja3VwQ29tbWl0bWVudDogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgc2lnbkFzQml0Z28gPSAocGF5bG9hZDogVWludDhBcnJheSkgPT4gTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UocGF5bG9hZCwgYml0Z29Qcml2YXRlS2V5KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRUbyA9IGFzeW5jIChyZWNpcGllbnQ6IHBncC5LZXksIHBsYWludGV4dDogVWludDhBcnJheSk6IFByb21pc2U8RWRkc2FNUEN2MlNpZ25lZE1lc3NhZ2U+ID0+IHtcbiAgICAgICAgY29uc3QgeyBzaWduYXR1cmUgfSA9IGF3YWl0IHNpZ25Bc0JpdGdvKHBsYWludGV4dCk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBwZ3AuZW5jcnlwdCh7XG4gICAgICAgICAgbWVzc2FnZTogYXdhaXQgcGdwLmNyZWF0ZU1lc3NhZ2UoeyBiaW5hcnk6IHBsYWludGV4dCB9KSxcbiAgICAgICAgICBlbmNyeXB0aW9uS2V5czogcmVjaXBpZW50LFxuICAgICAgICAgIGZvcm1hdDogJ2FybW9yZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHNpZ25hdHVyZTpcbiAgICAgICAgICAgIGZhdWx0ID09PSAnYml0Z28tdnJmLW9wZW5pbmctc2lnbmF0dXJlJyA/IChhd2FpdCBzaWduQXNCaXRnbyhuZXcgVWludDhBcnJheShbOV0pKSkuc2lnbmF0dXJlIDogc2lnbmF0dXJlLFxuICAgICAgICB9O1xuICAgICAgfTtcblxuICAgICAgcG9zdC5jYWxsc0Zha2UoKCkgPT4gKHtcbiAgICAgICAgc2VuZDogKHJhd0JvZHk6IHVua25vd24pID0+ICh7XG4gICAgICAgICAgcmVzdWx0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gZGVjb2RlV2l0aENvZGVjKEtleUdlblJlcXVlc3QsIHJhd0JvZHksICdFZERTQSBrZXlnZW4gcmVxdWVzdCcpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkudHlwZSwgS2V5R2VuVHlwZUVudW0uTVBDdjIpO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkuY3VydmVUeXBlLCBLZXlDdXJ2ZUVudW0uRWREU0EpO1xuICAgICAgICAgICAgLy8gV1Agb25seSByZWFkcyBzYWZlSWQgaW4gcm91bmQgMTsgcm91bmQgMiBpcyByb3V0ZWQgYnkgdGhlIHN0b3JlZCBzZXNzaW9uLlxuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkuc2FmZUlkLCBib2R5LnJvdW5kID09PSBNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjItUjEnXSA/ICdzYWZlLWlkJyA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKHsgcm91bmQ6IGJvZHkucm91bmQsIC4uLmJvZHkucGF5bG9hZCB9KTtcblxuICAgICAgICAgICAgaWYgKGJvZHkucm91bmQgPT09IE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMSddKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVXaXRoQ29kZWMoUjFQYXlsb2FkLCBib2R5LnBheWxvYWQsICdFZERTQSBrZXlnZW4gcm91bmQgMScpO1xuICAgICAgICAgICAgICB1c2VyR3BnS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBwYXlsb2FkLnVzZXJHcGdQdWJsaWNLZXkgfSk7XG4gICAgICAgICAgICAgIGJhY2t1cEdwZ0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogcGF5bG9hZC5iYWNrdXBHcGdQdWJsaWNLZXkgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IFt1c2VyUGssIGJhY2t1cFBrXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICBNUFNDb21tcy5leHRyYWN0RWQyNTUxOVB1YmxpY0tleSh1c2VyR3BnS2V5KSxcbiAgICAgICAgICAgICAgICBNUFNDb21tcy5leHRyYWN0RWQyNTUxOVB1YmxpY0tleShiYWNrdXBHcGdLZXkpLFxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgY29uc3QgWywgYml0Z29Ta10gPSBhd2FpdCBNUFNDb21tcy5leHRyYWN0RWQyNTUxOUtleVBhaXIoYml0Z29Qcml2YXRlS2V5KTtcblxuICAgICAgICAgICAgICBjb25zdCB1c2VyTXNnMSA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC51c2VyTXNnMSwgdXNlckdwZ0tleSk7XG4gICAgICAgICAgICAgIGNvbnN0IGJhY2t1cE1zZzEgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBheWxvYWQuYmFja3VwTXNnMSwgYmFja3VwR3BnS2V5KTtcbiAgICAgICAgICAgICAgLy8gVGhlIFZSRiBtZXNzYWdlcyBtdXN0IGJlIHNpZ25lZCBieSB0aGUgc2FtZSBwYXJ0eSBrZXkgYXMgdXNlck1zZzEvYmFja3VwTXNnMS5cbiAgICAgICAgICAgICAgdXNlckNvbW1pdG1lbnQgPSBuZXcgVWludDhBcnJheShhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBheWxvYWQudXNlclZyZk1zZzEsIHVzZXJHcGdLZXkpKTtcbiAgICAgICAgICAgICAgYmFja3VwQ29tbWl0bWVudCA9IG5ldyBVaW50OEFycmF5KGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC5iYWNrdXBWcmZNc2cxLCBiYWNrdXBHcGdLZXkpKTtcbiAgICAgICAgICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLnVzZXJWcmZNc2cxLCBiYWNrdXBHcGdLZXkpKTtcblxuICAgICAgICAgICAgICBhd2FpdCBiaXRnb0RrZy5pbml0RGtnKGJpdGdvU2ssIFt1c2VyUGssIGJhY2t1cFBrXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGJpdGdvUmF3TXNnMSA9IGJpdGdvRGtnLmdldEZpcnN0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICBbYml0Z29Nc2cyXSA9IGJpdGdvRGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW1xuICAgICAgICAgICAgICAgIHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheSh1c2VyTXNnMSkgfSxcbiAgICAgICAgICAgICAgICB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheShiYWNrdXBNc2cxKSB9LFxuICAgICAgICAgICAgICAgIGJpdGdvUmF3TXNnMSxcbiAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgW2JpdGdvVnJmQ29tbWl0bWVudF0gPSAoYXdhaXQgYml0Z29WcmYuaW5pdERrZygpKS5icm9hZGNhc3RNZXNzYWdlcztcbiAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkVnJmTXNnMSA9IGF3YWl0IHNpZ25Bc0JpdGdvKGJpdGdvVnJmQ29tbWl0bWVudC5wYXlsb2FkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6ICdzZXNzaW9uLWlkJyxcbiAgICAgICAgICAgICAgICBiaXRnb01zZzE6IGF3YWl0IHNpZ25Bc0JpdGdvKGJpdGdvUmF3TXNnMS5wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICBiaXRnb1ZyZk1zZzE6XG4gICAgICAgICAgICAgICAgICBmYXVsdCA9PT0gJ2JpdGdvLXZyZi1tc2cxLXNpZ25hdHVyZSdcbiAgICAgICAgICAgICAgICAgICAgPyB7IC4uLnNpZ25lZFZyZk1zZzEsIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSB9XG4gICAgICAgICAgICAgICAgICAgIDogc2lnbmVkVnJmTXNnMSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkucm91bmQsIE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMiddKTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkZWNvZGVXaXRoQ29kZWMoUjJQYXlsb2FkLCBib2R5LnBheWxvYWQsICdFZERTQSBrZXlnZW4gcm91bmQgMicpO1xuICAgICAgICAgICAgYXNzZXJ0Lm9rKHVzZXJHcGdLZXkgJiYgYmFja3VwR3BnS2V5ICYmIHVzZXJDb21taXRtZW50ICYmIGJhY2t1cENvbW1pdG1lbnQgJiYgYml0Z29Nc2cyKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoT2JqZWN0LmtleXMocGF5bG9hZCkuc29ydCgpLCBbXG4gICAgICAgICAgICAgICdiYWNrdXBNc2cyJyxcbiAgICAgICAgICAgICAgJ2JhY2t1cFZyZk1zZzInLFxuICAgICAgICAgICAgICAnc2Vzc2lvbklkJyxcbiAgICAgICAgICAgICAgJ3VzZXJNc2cyJyxcbiAgICAgICAgICAgICAgJ3VzZXJWcmZNc2cyJyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCB1c2VyTXNnMiA9IGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC51c2VyTXNnMiwgdXNlckdwZ0tleSk7XG4gICAgICAgICAgICBjb25zdCBiYWNrdXBNc2cyID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXlsb2FkLmJhY2t1cE1zZzIsIGJhY2t1cEdwZ0tleSk7XG4gICAgICAgICAgICBjb25zdCB1c2VyT3BlbmluZyA9IG5ldyBVaW50OEFycmF5KGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC51c2VyVnJmTXNnMiwgdXNlckdwZ0tleSkpO1xuICAgICAgICAgICAgY29uc3QgYmFja3VwT3BlbmluZyA9IG5ldyBVaW50OEFycmF5KGF3YWl0IE1QU0NvbW1zLnZlcmlmeU1wc01lc3NhZ2UocGF5bG9hZC5iYWNrdXBWcmZNc2cyLCBiYWNrdXBHcGdLZXkpKTtcblxuICAgICAgICAgICAgYml0Z29Ea2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbXG4gICAgICAgICAgICAgIHsgZnJvbTogTVBDdjJQYXJ0aWVzRW51bS5VU0VSLCBwYXlsb2FkOiBuZXcgVWludDhBcnJheSh1c2VyTXNnMikgfSxcbiAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCwgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoYmFja3VwTXNnMikgfSxcbiAgICAgICAgICAgICAgYml0Z29Nc2cyLFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wZW5pbmdzID0gYXdhaXQgYml0Z29WcmYuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHBheWxvYWQ6IHVzZXJDb21taXRtZW50IH0sXG4gICAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCwgcGF5bG9hZDogYmFja3VwQ29tbWl0bWVudCB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRvVXNlciA9IG9wZW5pbmdzLnAycE1lc3NhZ2VzLmZpbmQoKHsgdG8gfSkgPT4gdG8gPT09IE1QQ3YyUGFydGllc0VudW0uVVNFUik7XG4gICAgICAgICAgICBjb25zdCB0b0JhY2t1cCA9IG9wZW5pbmdzLnAycE1lc3NhZ2VzLmZpbmQoKHsgdG8gfSkgPT4gdG8gPT09IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQKTtcbiAgICAgICAgICAgIGFzc2VydC5vayh0b1VzZXIgJiYgdG9CYWNrdXApO1xuICAgICAgICAgICAgYXdhaXQgYml0Z29WcmYuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICAgICAgICAgICAgcDJwTWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAgICB7IGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUiwgdG86IE1QQ3YyUGFydGllc0VudW0uQklUR08sIHBheWxvYWQ6IHVzZXJPcGVuaW5nIH0sXG4gICAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLkJBQ0tVUCwgdG86IE1QQ3YyUGFydGllc0VudW0uQklUR08sIHBheWxvYWQ6IGJhY2t1cE9wZW5pbmcgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHBheWxvYWQuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBjb21tb25QdWJsaWNLZXljaGFpbjogYml0Z29Ea2cuZ2V0Q29tbW9uS2V5Y2hhaW4oKSxcbiAgICAgICAgICAgICAgYml0Z29Nc2cyOiBhd2FpdCBzaWduQXNCaXRnbyhiaXRnb01zZzIucGF5bG9hZCksXG4gICAgICAgICAgICAgIC4uLihmYXVsdCA9PT0gJ21pc3Npbmctb3BlbmluZydcbiAgICAgICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICAgICAgOiB7IGJpdGdvVnJmTXNnVG9Vc2VyOiBhd2FpdCBlbmNyeXB0VG8odXNlckdwZ0tleSwgdG9Vc2VyLnBheWxvYWQpIH0pLFxuICAgICAgICAgICAgICBiaXRnb1ZyZk1zZ1RvQmFja3VwOiBhd2FpdCBlbmNyeXB0VG8oYmFja3VwR3BnS2V5LCB0b0JhY2t1cC5wYXlsb2FkKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSk7XG5cbiAgICAgIGF3YWl0IHV0aWxzLmNyZWF0ZUtleWNoYWlucyh7XG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtaWQnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLWlkJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgcmVxdWVzdHMsIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMgfTtcbiAgICB9XG5cbiAgICBpdCgnc2lnbnMgVlJGIG1lc3NhZ2VzIHdpdGggdGhlIHBhcnR5IGtleXMgYW5kIGRlY3J5cHRzIEJpdEdvIG9wZW5pbmdzIHdpdGhvdXQgaGFuZGxpbmcgdGhlIEhTTSBWUkYgc3RhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3RzLCBlbmNyeXB0ZWRJbnB1dHMsIGFkZGVkS2V5Y2hhaW5zIH0gPSBhd2FpdCBrZXlnZW5XaXRoSHNtUGVlcigpO1xuXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICByZXF1ZXN0cy5tYXAoKHsgcm91bmQgfSkgPT4gcm91bmQpLFxuICAgICAgICBbTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyLVIxJ10sIE1QQ3YyS2V5R2VuU3RhdGVFbnVtWydNUEN2Mi1SMiddXVxuICAgICAgKTtcbiAgICAgIC8vIFdQIGtlZXBzIHRoZSBIU00gVlJGIHN0YXRlIGJldHdlZW4gcm91bmRzLCBzbyBuZWl0aGVyIGNsaWVudCByb3VuZCBjYXJyaWVzIGl0LlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgnYml0Z29FbmNyeXB0ZWRWcmZEa2dTdGF0ZScgaW4gcmVxdWVzdCwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBCb3RoIGNsaWVudCByb290cyBlbmQgdXAgd2l0aCBhIHNpZ25pbmcgc2hhcmUgYW5kIGEgVlJGIHNoYXJlLCB0YWdnZWQgd2l0aCB0aGUgc2FmZS5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoYWRkZWRLZXljaGFpbnMubWFwKCh7IHNvdXJjZSB9KSA9PiBzb3VyY2UpLnNvcnQoKSwgWydiYWNrdXAnLCAnYml0Z28nLCAndXNlciddKTtcbiAgICAgIGZvciAoY29uc3Qga2V5Y2hhaW4gb2YgYWRkZWRLZXljaGFpbnMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGtleWNoYWluLnNhZmVJZCwgJ3NhZmUtaWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZXIgYW5kIGJhY2t1cCBlYWNoIGVuY3J5cHQgYSBmdWxsIGFuZCBhIHJlZHVjZWQgZW52ZWxvcGU7IGV2ZXJ5IG9uZSBjYXJyaWVzIGEgVlJGIHNoYXJlLCBhbmRcbiAgICAgIC8vIHRoZSB0d28gcGFydGllcycgc2hhcmVzIGRpZmZlci4gT3JkZXItaW5kZXBlbmRlbnQ6IHRoZSByb290cyBhcmUgcmVnaXN0ZXJlZCBjb25jdXJyZW50bHkuXG4gICAgICBjb25zdCB2cmZTaGFyZXMgPSBuZXcgU2V0KFxuICAgICAgICBlbmNyeXB0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdnJmLCBwcnZLZXlTaGFyZSB9ID0gZGVjb2RlVnJmRW52ZWxvcGUoQnVmZmVyLmZyb20oaW5wdXQsICdiYXNlNjQnKSk7XG4gICAgICAgICAgYXNzZXJ0Lm9rKHZyZi5sZW5ndGggPiAwKTtcbiAgICAgICAgICBhc3NlcnQub2socHJ2S2V5U2hhcmUubGVuZ3RoID4gMCk7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHZyZikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNyeXB0ZWRJbnB1dHMubGVuZ3RoLCA0KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2cmZTaGFyZXMuc2l6ZSwgMik7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIEJpdEdvIFZSRiByb3VuZCAxIG1lc3NhZ2Ugd2hvc2Ugc2lnbmF0dXJlIGRvZXMgbm90IHZlcmlmeScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGtleWdlbldpdGhIc21QZWVyKCdiaXRnby12cmYtbXNnMS1zaWduYXR1cmUnKSwgL3NpZ25hdHVyZXx2ZXJpZmljYXRpb258c2lnbmVkL2kpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBCaXRHbyBWUkYgb3BlbmluZyB3aG9zZSBzaWduYXR1cmUgZG9lcyBub3QgdmVyaWZ5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoa2V5Z2VuV2l0aEhzbVBlZXIoJ2JpdGdvLXZyZi1vcGVuaW5nLXNpZ25hdHVyZScpLCAvc2lnbmF0dXJlfHZlcmlmaWNhdGlvbnxzaWduZWQvaSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFpbHMgd2hlbiB0aGUgSFNNIG9taXRzIGEgQml0R28gVlJGIG9wZW5pbmcgaW4gcm91bmQgMicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKGtleWdlbldpdGhIc21QZWVyKCdtaXNzaW5nLW9wZW5pbmcnKSwgL1ZSRiBtZXNzYWdlIHRvIHVzZXIvKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0VkRFNBIHNhZmUtY2hpbGQgTVBTIGRlcml2YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1c2VyU2lnbmluZ1NoYXJlOiBCdWZmZXI7XG4gIGxldCB1c2VyVnJmU2hhcmU6IEJ1ZmZlcjtcbiAgbGV0IGJpdGdvU2lnbmluZ1NoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb1ZyZlNoYXJlOiBCdWZmZXI7XG4gIGxldCBiaXRnb1ByaXZhdGVLZXk6IHBncC5Qcml2YXRlS2V5O1xuICBsZXQgYml0Z29QdWJsaWNLZXk6IHBncC5LZXk7XG5cbiAgY29uc3Qgc2Vzc2lvbklkID0gJ2Rlcml2ZS1zZXNzaW9uJztcbiAgY29uc3QgYWNjb3VudCA9IDc7XG4gIGNvbnN0IHBhdGggPSBidWlsZFNhZmVCaXA0NFBhdGgoNTAxLCAnZWRkc2FNcGMnLCBhY2NvdW50KTtcbiAgY29uc3QgUmVxdWVzdCA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgICB0LnR5cGUoeyBlbnRlcnByaXNlOiB0LnN0cmluZywgdHlwZTogdC5zdHJpbmcsIGN1cnZlVHlwZTogdC5zdHJpbmcsIHJvdW5kOiB0LnN0cmluZywgcGF5bG9hZDogdC51bmtub3duIH0pLFxuICAgIHQucGFydGlhbCh7IHNhZmVJZDogdC5zdHJpbmcgfSksXG4gIF0pO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2lnbmluZyA9IGF3YWl0IE1QU1V0aWwuZ2VuZXJhdGVFZERzYURLR0tleVNoYXJlcygpO1xuICAgIGNvbnN0IHZyZiA9IGF3YWl0IE1wc1ZyZlV0aWxzLmdlbmVyYXRlVnJmREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlclNpZ25pbmdTaGFyZSA9IHNpZ25pbmdbTVBDdjJQYXJ0aWVzRW51bS5VU0VSXS5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvU2lnbmluZ1NoYXJlID0gc2lnbmluZ1tNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXS5nZXRLZXlTaGFyZSgpO1xuICAgIHVzZXJWcmZTaGFyZSA9IHZyZltNUEN2MlBhcnRpZXNFbnVtLlVTRVJdLmdldEtleVNoYXJlKCk7XG4gICAgYml0Z29WcmZTaGFyZSA9IHZyZltNUEN2MlBhcnRpZXNFbnVtLkJJVEdPXS5nZXRLZXlTaGFyZSgpO1xuICAgIGNvbnN0IGJpdGdvR3BnID0gYXdhaXQgZ2VuZXJhdGVHUEdLZXlQYWlyKCdlZDI1NTE5Jyk7XG4gICAgYml0Z29Qcml2YXRlS2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGcucHJpdmF0ZUtleSB9KTtcbiAgICBiaXRnb1B1YmxpY0tleSA9IGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGcucHVibGljS2V5IH0pO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBkZXJpdmVXaXRoUGVlcihcbiAgICBmYXVsdD86ICdyMS1zaWduYXR1cmUnIHwgJ3IyLXNpZ25hdHVyZScgfCAnc2Vzc2lvbicgfCAnY29tbW9uS2V5Y2hhaW4nLFxuICAgIHJlY29yZGVkS2V5Y2hhaW5zPzogQWRkZWRLZXljaGFpblBhcmFtc1tdXG4gICkge1xuICAgIGNvbnN0IHsgYml0Z28sIGJhc2VDb2luLCBwb3N0LCBlbmNyeXB0ZWRJbnB1dHMsIGFkZGVkS2V5Y2hhaW5zIH0gPSBjcmVhdGVLZXljaGFpbkZpeHR1cmUoKTtcbiAgICBjb25zdCB1dGlscyA9IG5ldyBFZGRzYVZyZk1QQ3YyVXRpbHMoYml0Z28sIGJhc2VDb2luKTtcbiAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzJykucmVzb2x2ZXMoe1xuICAgICAgbXBjdjJQdWJsaWNLZXk6IGJpdGdvUHVibGljS2V5LFxuICAgICAgZWRkc2FNcGN2MlB1YmxpY0tleTogYml0Z29QdWJsaWNLZXksXG4gICAgICByZWRwYWxsYXNNcGN2MlB1YmxpY0tleTogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIGNvbnN0IGJpdGdvUGVlciA9IG5ldyBNcHNEZXJpdmUuRGVyaXZlKDMsIDIsIE1QQ3YyUGFydGllc0VudW0uQklUR08sIGJpdGdvU2lnbmluZ1NoYXJlLCBiaXRnb1ZyZlNoYXJlLCBwYXRoKTtcbiAgICBsZXQgYml0Z29Nc2cyOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuICAgIGxldCB1c2VyR3BnUHVibGljS2V5ID0gJyc7XG4gICAgbGV0IHJvdW5kcyA9IDA7XG4gICAgcG9zdC5jYWxsc0Zha2UoKF91cmw6IHN0cmluZykgPT4gKHtcbiAgICAgIHNlbmQ6IChyYXdCb2R5OiB1bmtub3duKSA9PiAoe1xuICAgICAgICByZXN1bHQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gZGVjb2RlV2l0aENvZGVjKFJlcXVlc3QsIHJhd0JvZHksICdFZERTQSBkZXJpdmUgcmVxdWVzdCcpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChfdXJsLCAnL21wYy9nZW5lcmF0ZWtleScpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LmVudGVycHJpc2UsICdlbnRlcnByaXNlLWlkJyk7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHkudHlwZSwgS2V5R2VuVHlwZUVudW0uTVBDdjIpO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LmN1cnZlVHlwZSwgS2V5Q3VydmVFbnVtLkVkRFNBKTtcbiAgICAgICAgICBpZiAocm91bmRzKysgPT09IDApIHtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LnJvdW5kLCBNUEN2MktleUdlblN0YXRlRW51bVsnTVBDdjJEZXJpdmUtUjEnXSk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5zYWZlSWQsICdzYWZlLWlkJyk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gZGVjb2RlV2l0aENvZGVjKEVkZHNhTVBDdjJEZXJpdmVSb3VuZDFSZXF1ZXN0LCBib2R5LnBheWxvYWQsICdFZERTQSBkZXJpdmUgcm91bmQgMScpO1xuICAgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChPYmplY3Qua2V5cyhyZXF1ZXN0KS5zb3J0KCksIFtcbiAgICAgICAgICAgICAgJ2Rlcml2YXRpb25JbmRleCcsXG4gICAgICAgICAgICAgICdwYXJlbnRLZXlJZCcsXG4gICAgICAgICAgICAgICd1c2VyR3BnUHVibGljS2V5JyxcbiAgICAgICAgICAgICAgJ3VzZXJNc2cxJyxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcXVlc3QucGFyZW50S2V5SWQsICdiaXRnby1yb290LWlkJyk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVxdWVzdC5kZXJpdmF0aW9uSW5kZXgsIGFjY291bnQpO1xuICAgICAgICAgICAgdXNlckdwZ1B1YmxpY0tleSA9IHJlcXVlc3QudXNlckdwZ1B1YmxpY0tleTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBwZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IHJlcXVlc3QudXNlckdwZ1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQYXlsb2FkID0gYXdhaXQgTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShyZXF1ZXN0LnVzZXJNc2cxLCB1c2VyR3BnS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGJpdGdvRmlyc3QgPSBhd2FpdCBiaXRnb1BlZXIuaW5pdERlcml2ZSgpO1xuICAgICAgICAgICAgY29uc3QgW291dGdvaW5nXSA9IGJpdGdvUGVlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtcbiAgICAgICAgICAgICAgeyBmcm9tOiBNUEN2MlBhcnRpZXNFbnVtLlVTRVIsIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHVzZXJQYXlsb2FkKSB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBhc3NlcnQub2sob3V0Z29pbmcpO1xuICAgICAgICAgICAgYml0Z29Nc2cyID0gb3V0Z29pbmcucGF5bG9hZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IE1QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKEJ1ZmZlci5mcm9tKGJpdGdvRmlyc3QucGF5bG9hZCksIGJpdGdvUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGJpdGdvTXNnMTpcbiAgICAgICAgICAgICAgICBmYXVsdCA9PT0gJ3IxLXNpZ25hdHVyZScgPyB7IC4uLnNpZ25lZCwgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpIH0gOiBzaWduZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmRzLCAyKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keS5yb3VuZCwgTVBDdjJLZXlHZW5TdGF0ZUVudW1bJ01QQ3YyRGVyaXZlLVIyJ10pO1xuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChib2R5LnNhZmVJZCwgJ3NhZmUtaWQnKTtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gZGVjb2RlV2l0aENvZGVjKEVkZHNhTVBDdjJEZXJpdmVSb3VuZDJSZXF1ZXN0LCBib2R5LnBheWxvYWQsICdFZERTQSBkZXJpdmUgcm91bmQgMicpO1xuICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoT2JqZWN0LmtleXMocmVxdWVzdCkuc29ydCgpLCBbJ3Nlc3Npb25JZCcsICd1c2VyTXNnMiddKTtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVxdWVzdC5zZXNzaW9uSWQsIHNlc3Npb25JZCk7XG4gICAgICAgICAgY29uc3QgdXNlclBheWxvYWQgPSBhd2FpdCBNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKFxuICAgICAgICAgICAgcmVxdWVzdC51c2VyTXNnMixcbiAgICAgICAgICAgIGF3YWl0IHBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ1B1YmxpY0tleSB9KVxuICAgICAgICAgICk7XG4gICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgICAgIGJpdGdvUGVlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFt7IGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUiwgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkodXNlclBheWxvYWQpIH1dKSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhc3NlcnQub2soYml0Z29Nc2cyKTtcbiAgICAgICAgICBjb25zdCBzaWduZWQgPSBhd2FpdCBNUFNDb21tcy5kZXRhY2hTaWduTXBzTWVzc2FnZShCdWZmZXIuZnJvbShiaXRnb01zZzIpLCBiaXRnb1ByaXZhdGVLZXkpO1xuICAgICAgICAgIGNvbnN0IGNvbW1vblB1YmxpY0tleWNoYWluID0gYml0Z29QZWVyLmdldENvbW1vbktleWNoYWluKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZmF1bHQgPT09ICdzZXNzaW9uJyA/ICdkaWZmZXJlbnQtc2Vzc2lvbicgOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICBjb21tb25QdWJsaWNLZXljaGFpbjpcbiAgICAgICAgICAgICAgZmF1bHQgPT09ICdjb21tb25LZXljaGFpbidcbiAgICAgICAgICAgICAgICA/IGAke2NvbW1vblB1YmxpY0tleWNoYWluLnNsaWNlKDAsIC0xKX0ke2NvbW1vblB1YmxpY0tleWNoYWluLmVuZHNXaXRoKCcwJykgPyAnMScgOiAnMCd9YFxuICAgICAgICAgICAgICAgIDogY29tbW9uUHVibGljS2V5Y2hhaW4sXG4gICAgICAgICAgICBiaXRnb01zZzI6XG4gICAgICAgICAgICAgIGZhdWx0ID09PSAncjItc2lnbmF0dXJlJyA/IHsgLi4uc2lnbmVkLCBtZXNzYWdlOiBCdWZmZXIuZnJvbSgndGFtcGVyZWQnKS50b1N0cmluZygnYmFzZTY0JykgfSA6IHNpZ25lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmNyZWF0ZVNhZmVDaGlsZEtleWNoYWlucyh7XG4gICAgICAgIHBhc3NwaHJhc2U6ICdwYXNzcGhyYXNlJyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtaWQnLFxuICAgICAgICBzYWZlSWQ6ICdzYWZlLWlkJyxcbiAgICAgICAgcGFyZW50S2V5SWQ6ICdiaXRnby1yb290LWlkJyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgdXNlclJvb3RLZXlJZDogJ3VzZXItcm9vdC1pZCcsXG4gICAgICAgIGJhY2t1cFJvb3RLZXlJZDogJ2JhY2t1cC1yb290LWlkJyxcbiAgICAgICAgdXNlclJvb3RLZXlTaGFyZTogdXNlclNpZ25pbmdTaGFyZSxcbiAgICAgICAgdXNlclJvb3RWcmZLZXlTaGFyZTogdXNlclZyZlNoYXJlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyByZXN1bHQsIGVuY3J5cHRlZElucHV0cywgYWRkZWRLZXljaGFpbnMsIGJpdGdvUGVlciwgcm91bmRzIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlY29yZGVkS2V5Y2hhaW5zPy5wdXNoKC4uLmFkZGVkS2V5Y2hhaW5zKTtcbiAgICB9XG4gIH1cblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlZ2lzdGVycyB0aGUgY2hpbGQgc2lnbmluZyBzaGFyZSBhbmQgdHdvIHB1YmxpYy1vbmx5IHBsYWNlaG9sZGVycyBhZnRlciB0aGUgc2lnbmVkIGNlcmVtb255JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHsgcmVzdWx0LCBlbmNyeXB0ZWRJbnB1dHMsIGFkZGVkS2V5Y2hhaW5zLCBiaXRnb1BlZXIsIHJvdW5kcyB9ID0gYXdhaXQgZGVyaXZlV2l0aFBlZXIoKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmRzLCAyKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFkZGVkS2V5Y2hhaW5zLm1hcCgoeyBzb3VyY2UgfSkgPT4gc291cmNlKS5zb3J0KCksIFsnYmFja3VwJywgJ2JpdGdvJywgJ3VzZXInXSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgIFtyZXN1bHQudXNlcktleWNoYWluLmlkLCByZXN1bHQuYmFja3VwS2V5Y2hhaW4uaWQsIHJlc3VsdC5iaXRnb0tleWNoYWluLmlkXSxcbiAgICAgIFsndXNlci1jaGlsZCcsICdiYWNrdXAtY2hpbGQnLCAnYml0Z28tY2hpbGQnXVxuICAgICk7XG4gICAgZm9yIChjb25zdCBrZXljaGFpbiBvZiBhZGRlZEtleWNoYWlucykge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGtleWNoYWluLnNhZmVJZCwgJ3NhZmUtaWQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChrZXljaGFpbi5kZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoLCBwYXRoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChrZXljaGFpbi5jb21tb25LZXljaGFpbiwgYml0Z29QZWVyLmdldENvbW1vbktleWNoYWluKCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGtleWNoYWluLmtleVR5cGUsICd0c3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChrZXljaGFpbi5pc01QQ3YyLCB0cnVlKTtcbiAgICB9XG4gICAgY29uc3QgdXNlckNoaWxkID0gYWRkZWRLZXljaGFpbnMuZmluZCgoeyBzb3VyY2UgfSkgPT4gc291cmNlID09PSAndXNlcicpO1xuICAgIGNvbnN0IGJhY2t1cENoaWxkID0gYWRkZWRLZXljaGFpbnMuZmluZCgoeyBzb3VyY2UgfSkgPT4gc291cmNlID09PSAnYmFja3VwJyk7XG4gICAgY29uc3QgYml0Z29DaGlsZCA9IGFkZGVkS2V5Y2hhaW5zLmZpbmQoKHsgc291cmNlIH0pID0+IHNvdXJjZSA9PT0gJ2JpdGdvJyk7XG4gICAgYXNzZXJ0Lm9rKHVzZXJDaGlsZCk7XG4gICAgYXNzZXJ0Lm9rKGJhY2t1cENoaWxkKTtcbiAgICBhc3NlcnQub2soYml0Z29DaGlsZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHVzZXJDaGlsZC5wYXJlbnQsICd1c2VyLXJvb3QtaWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFja3VwQ2hpbGQucGFyZW50LCAnYmFja3VwLXJvb3QtaWQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYml0Z29DaGlsZC5wYXJlbnQsICdiaXRnby1yb290LWlkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY3J5cHRlZElucHV0cy5sZW5ndGgsIDIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1c2VyQ2hpbGQuZW5jcnlwdGVkUHJ2LCBgZW5jcnlwdGVkOiR7ZW5jcnlwdGVkSW5wdXRzWzBdfWApO1xuICAgIGNvbnN0IHNpZ25pbmdTaGFyZSA9IEJ1ZmZlci5mcm9tKHJlc3VsdC51c2VyS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2Py5zbGljZSgnZW5jcnlwdGVkOicubGVuZ3RoKSA/PyAnJywgJ2Jhc2U2NCcpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2lnbmluZ1NoYXJlLCBCdWZmZXIuZnJvbShlbmNyeXB0ZWRJbnB1dHNbMF0sICdiYXNlNjQnKSk7XG4gICAgYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbChzaWduaW5nU2hhcmUsIHVzZXJTaWduaW5nU2hhcmUpO1xuICAgIGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwoc2lnbmluZ1NoYXJlLCBiaXRnb1BlZXIuZ2V0S2V5U2hhcmUoKSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHVzZXJDaGlsZC5yZWR1Y2VkRW5jcnlwdGVkUHJ2LCB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJlZHVjZWQgPSByZXN1bHQudXNlcktleWNoYWluLnJlZHVjZWRFbmNyeXB0ZWRQcnY7XG4gICAgYXNzZXJ0Lm9rKHJlZHVjZWQpO1xuICAgIGNvbnN0IHJlZHVjZWRTaGFyZSA9IE1QU1R5cGVzLmdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmUoQnVmZmVyLmZyb20ocmVkdWNlZC5zbGljZSgnZW5jcnlwdGVkOicubGVuZ3RoKSwgJ2Jhc2U2NCcpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHJlZHVjZWRTaGFyZS5rZXlTaGFyZSksIHNpZ25pbmdTaGFyZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHJlZHVjZWRTaGFyZS5wdWIpLnRvU3RyaW5nKCdoZXgnKSwgYml0Z29QZWVyLmdldENvbW1vbktleWNoYWluKCkuc2xpY2UoMCwgNjQpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGRlY29kZVZyZkVudmVsb3BlKHNpZ25pbmdTaGFyZSkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYWNrdXBDaGlsZC5lbmNyeXB0ZWRQcnYsIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJpdGdvQ2hpbGQuZW5jcnlwdGVkUHJ2LCB1bmRlZmluZWQpO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IGJhZFBhdGggb2YgW1wibS83J1wiLCAnbS80NC81MDEvNC83JywgXCJtLzQ0Jy81MDEnLzAnLzcnXCJdKSB7XG4gICAgaXQoYHJlamVjdHMgdGhlIG5vbi1CSVA0NCBwYXRoICR7SlNPTi5zdHJpbmdpZnkoYmFkUGF0aCl9IGJlZm9yZSBjb250YWN0aW5nIFdQYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyBiaXRnbywgYmFzZUNvaW4sIHBvc3QsIGFkZGVkS2V5Y2hhaW5zIH0gPSBjcmVhdGVLZXljaGFpbkZpeHR1cmUoKTtcbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IEVkZHNhVnJmTVBDdjJVdGlscyhiaXRnbywgYmFzZUNvaW4pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgdXRpbHMuY3JlYXRlU2FmZUNoaWxkS2V5Y2hhaW5zKHtcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncGFzc3BocmFzZScsXG4gICAgICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtaWQnLFxuICAgICAgICAgIHNhZmVJZDogJ3NhZmUtaWQnLFxuICAgICAgICAgIHBhcmVudEtleUlkOiAnYml0Z28tcm9vdC1pZCcsXG4gICAgICAgICAgcGF0aDogYmFkUGF0aCBhcyBEZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgsXG4gICAgICAgICAgdXNlclJvb3RLZXlJZDogJ3VzZXItcm9vdC1pZCcsXG4gICAgICAgICAgYmFja3VwUm9vdEtleUlkOiAnYmFja3VwLXJvb3QtaWQnLFxuICAgICAgICAgIHVzZXJSb290S2V5U2hhcmU6IHVzZXJTaWduaW5nU2hhcmUsXG4gICAgICAgICAgdXNlclJvb3RWcmZLZXlTaGFyZTogdXNlclZyZlNoYXJlLFxuICAgICAgICB9KSxcbiAgICAgICAgL0ludmFsaWQgc2FmZSBCSVA0NCBwYXRoL1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwb3N0LmNhbGxlZCwgZmFsc2UpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhZGRlZEtleWNoYWlucywgW10pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgZmF1bHRzOiBBcnJheTwncjEtc2lnbmF0dXJlJyB8ICdyMi1zaWduYXR1cmUnIHwgJ3Nlc3Npb24nIHwgJ2NvbW1vbktleWNoYWluJz4gPSBbXG4gICAgJ3IxLXNpZ25hdHVyZScsXG4gICAgJ3IyLXNpZ25hdHVyZScsXG4gICAgJ3Nlc3Npb24nLFxuICAgICdjb21tb25LZXljaGFpbicsXG4gIF07XG4gIGZvciAoY29uc3QgZmF1bHQgb2YgZmF1bHRzKSB7XG4gICAgaXQoYHJlamVjdHMgJHtmYXVsdH0gYmVmb3JlIHJlZ2lzdGVyaW5nIGFueSBjaGlsZGAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY29yZGVkS2V5Y2hhaW5zOiBBZGRlZEtleWNoYWluUGFyYW1zW10gPSBbXTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICAoKSA9PiBkZXJpdmVXaXRoUGVlcihmYXVsdCwgcmVjb3JkZWRLZXljaGFpbnMpLFxuICAgICAgICBmYXVsdCA9PT0gJ3Nlc3Npb24nXG4gICAgICAgICAgPyAvc2Vzc2lvbiBpZC9pXG4gICAgICAgICAgOiBmYXVsdCA9PT0gJ2NvbW1vbktleWNoYWluJ1xuICAgICAgICAgID8gL2NvbW1vbiBrZXljaGFpbi9pXG4gICAgICAgICAgOiAvc2lnbmF0dXJlfHZlcmlmaWNhdGlvbnxzaWduZWQvaVxuICAgICAgKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjb3JkZWRLZXljaGFpbnMsIFtdKTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXX0=
|