@bitgo-beta/sdk-coin-flrp 1.0.0-alpha.46 → 1.0.0-alpha.48
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/lib/permissionlessValidatorTxBuilder.d.ts +0 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +1 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +5 -27
- package/dist/test/unit/lib/exportInPTxBuilder.js +1 -20
- package/dist/test/unit/lib/importInCTxBuilder.js +1 -18
- package/dist/test/unit/lib/importInPTxBuilder.js +1 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/dist/test/unit/lib/recoverModeTestSuit.d.ts +0 -18
- package/dist/test/unit/lib/recoverModeTestSuit.d.ts.map +0 -1
- package/dist/test/unit/lib/recoverModeTestSuit.js +0 -106
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-coin-flrp",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.48",
|
|
4
4
|
"description": "BitGo's SDK coin library for flrp coin",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@bitgo-beta/sdk-api": "1.6.1-alpha.
|
|
46
|
+
"@bitgo-beta/sdk-api": "1.6.1-alpha.434",
|
|
47
47
|
"@bitgo-beta/sdk-test": "^9.1.19"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@bitgo-beta/sdk-core": "2.4.1-alpha.
|
|
51
|
-
"@bitgo-beta/secp256k1": "1.0.1-alpha.
|
|
52
|
-
"@bitgo-beta/statics": "10.0.1-alpha.
|
|
50
|
+
"@bitgo-beta/sdk-core": "2.4.1-alpha.434",
|
|
51
|
+
"@bitgo-beta/secp256k1": "1.0.1-alpha.392",
|
|
52
|
+
"@bitgo-beta/statics": "10.0.1-alpha.434",
|
|
53
53
|
"@flarenetwork/flarejs": "4.1.1",
|
|
54
54
|
"bech32": "^2.0.0",
|
|
55
55
|
"bignumber.js": "9.0.0",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"ethereumjs-util": "^7.1.5",
|
|
59
59
|
"safe-buffer": "^5.2.1"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "68a47c7111cd4b9909d3ecfa2284d2d8deb3adf1",
|
|
62
62
|
"files": [
|
|
63
63
|
"dist"
|
|
64
64
|
]
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BaseTransactionBuilder, BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
2
|
-
export interface RecoverModeTestSuitArgs {
|
|
3
|
-
transactionType: string;
|
|
4
|
-
newTxFactory: () => BaseTransactionBuilderFactory;
|
|
5
|
-
newTxBuilder: () => BaseTransactionBuilder;
|
|
6
|
-
privateKey: {
|
|
7
|
-
prv1: string;
|
|
8
|
-
prv2: string;
|
|
9
|
-
prv3: string;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Test suite focusing on recovery mode signing.
|
|
14
|
-
* In recovery mode, the backup key (prv3) is used instead of user key (prv1) along with BitGo key (prv2).
|
|
15
|
-
* @param {RecoverModeTestSuitArgs} data with required info.
|
|
16
|
-
*/
|
|
17
|
-
export default function recoverModeTestSuit(data: RecoverModeTestSuitArgs): void;
|
|
18
|
-
//# sourceMappingURL=recoverModeTestSuit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recoverModeTestSuit.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/recoverModeTestSuit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,6BAA6B,CAAC;IAClD,YAAY,EAAE,MAAM,sBAAsB,CAAC;IAC3C,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CA+G/E"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = recoverModeTestSuit;
|
|
4
|
-
/**
|
|
5
|
-
* Test suite focusing on recovery mode signing.
|
|
6
|
-
* In recovery mode, the backup key (prv3) is used instead of user key (prv1) along with BitGo key (prv2).
|
|
7
|
-
* @param {RecoverModeTestSuitArgs} data with required info.
|
|
8
|
-
*/
|
|
9
|
-
function recoverModeTestSuit(data) {
|
|
10
|
-
describe(`should test recovery mode for ${data.transactionType}`, () => {
|
|
11
|
-
it('Should set recoverMode flag on builder', async () => {
|
|
12
|
-
const txBuilder = data.newTxBuilder();
|
|
13
|
-
// @ts-expect-error - accessing protected property for testing
|
|
14
|
-
txBuilder.recoverSigner.should.equal(false);
|
|
15
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
16
|
-
txBuilder.recoverMode(true);
|
|
17
|
-
// @ts-expect-error - accessing protected property for testing
|
|
18
|
-
txBuilder.recoverSigner.should.equal(true);
|
|
19
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
20
|
-
txBuilder.recoverMode(false);
|
|
21
|
-
// @ts-expect-error - accessing protected property for testing
|
|
22
|
-
txBuilder.recoverSigner.should.equal(false);
|
|
23
|
-
});
|
|
24
|
-
it('Should default recoverMode to true when called without argument', async () => {
|
|
25
|
-
const txBuilder = data.newTxBuilder();
|
|
26
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
27
|
-
txBuilder.recoverMode();
|
|
28
|
-
// @ts-expect-error - accessing protected property for testing
|
|
29
|
-
txBuilder.recoverSigner.should.equal(true);
|
|
30
|
-
});
|
|
31
|
-
it('Should build unsigned tx in recovery mode', async () => {
|
|
32
|
-
const txBuilder = data.newTxBuilder();
|
|
33
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
34
|
-
txBuilder.recoverMode(true);
|
|
35
|
-
const tx = await txBuilder.build();
|
|
36
|
-
tx.toBroadcastFormat().should.be.a.String();
|
|
37
|
-
});
|
|
38
|
-
it('Should half sign tx in recovery mode using backup key (prv3)', async () => {
|
|
39
|
-
const txBuilder = data.newTxBuilder();
|
|
40
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
41
|
-
txBuilder.recoverMode(true);
|
|
42
|
-
// In recovery mode, sign with backup key (prv3) instead of user key (prv1)
|
|
43
|
-
txBuilder.sign({ key: data.privateKey.prv3 });
|
|
44
|
-
const tx = await txBuilder.build();
|
|
45
|
-
const halfSignedHex = tx.toBroadcastFormat();
|
|
46
|
-
halfSignedHex.should.be.a.String();
|
|
47
|
-
halfSignedHex.length.should.be.greaterThan(0);
|
|
48
|
-
});
|
|
49
|
-
it('Should full sign tx in recovery mode using backup key (prv3) and bitgo key (prv2)', async () => {
|
|
50
|
-
const txBuilder = data.newTxBuilder();
|
|
51
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
52
|
-
txBuilder.recoverMode(true);
|
|
53
|
-
// In recovery mode: backup key (prv3) + bitgo key (prv2)
|
|
54
|
-
txBuilder.sign({ key: data.privateKey.prv3 });
|
|
55
|
-
txBuilder.sign({ key: data.privateKey.prv2 });
|
|
56
|
-
const tx = await txBuilder.build();
|
|
57
|
-
const fullSignedHex = tx.toBroadcastFormat();
|
|
58
|
-
fullSignedHex.should.be.a.String();
|
|
59
|
-
fullSignedHex.length.should.be.greaterThan(0);
|
|
60
|
-
});
|
|
61
|
-
it('Should produce different signed tx in recovery mode vs regular mode', async () => {
|
|
62
|
-
// Build and sign in regular mode (user key prv1 + bitgo key prv2)
|
|
63
|
-
const regularTxBuilder = data.newTxBuilder();
|
|
64
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
65
|
-
regularTxBuilder.recoverMode(false);
|
|
66
|
-
regularTxBuilder.sign({ key: data.privateKey.prv1 });
|
|
67
|
-
regularTxBuilder.sign({ key: data.privateKey.prv2 });
|
|
68
|
-
const regularTx = await regularTxBuilder.build();
|
|
69
|
-
const regularHex = regularTx.toBroadcastFormat();
|
|
70
|
-
// Build and sign in recovery mode (backup key prv3 + bitgo key prv2)
|
|
71
|
-
const recoveryTxBuilder = data.newTxBuilder();
|
|
72
|
-
// @ts-expect-error - method exists on flrp TransactionBuilder
|
|
73
|
-
recoveryTxBuilder.recoverMode(true);
|
|
74
|
-
recoveryTxBuilder.sign({ key: data.privateKey.prv3 });
|
|
75
|
-
recoveryTxBuilder.sign({ key: data.privateKey.prv2 });
|
|
76
|
-
const recoveryTx = await recoveryTxBuilder.build();
|
|
77
|
-
const recoveryHex = recoveryTx.toBroadcastFormat();
|
|
78
|
-
// Both should be valid hex strings
|
|
79
|
-
regularHex.should.be.a.String();
|
|
80
|
-
recoveryHex.should.be.a.String();
|
|
81
|
-
// The signed transactions should be different because different keys are used
|
|
82
|
-
regularHex.should.not.equal(recoveryHex);
|
|
83
|
-
// Signatures should also be different
|
|
84
|
-
const regularSignatures = regularTx.signature;
|
|
85
|
-
const recoverySignatures = recoveryTx.signature;
|
|
86
|
-
regularSignatures.should.not.eql(recoverySignatures);
|
|
87
|
-
});
|
|
88
|
-
it('Should set recoverMode via factory and pass to builder from raw tx', async () => {
|
|
89
|
-
// First build an unsigned transaction
|
|
90
|
-
const txBuilder = data.newTxBuilder();
|
|
91
|
-
const tx = await txBuilder.build();
|
|
92
|
-
const unsignedHex = tx.toBroadcastFormat();
|
|
93
|
-
// Parse from raw with recovery mode enabled on factory
|
|
94
|
-
const factory = data.newTxFactory();
|
|
95
|
-
// @ts-expect-error - accessing the method which may not be on base type
|
|
96
|
-
if (typeof factory.recoverMode === 'function') {
|
|
97
|
-
// @ts-expect-error - calling recoverMode on factory
|
|
98
|
-
factory.recoverMode(true);
|
|
99
|
-
const recoveredBuilder = factory.from(unsignedHex);
|
|
100
|
-
// Cast to any to access protected property for testing
|
|
101
|
-
recoveredBuilder.recoverSigner.should.equal(true);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Zlck1vZGVUZXN0U3VpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvcmVjb3Zlck1vZGVUZXN0U3VpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLHNDQStHQztBQXBIRDs7OztHQUlHO0FBQ0gsU0FBd0IsbUJBQW1CLENBQUMsSUFBNkI7SUFDdkUsUUFBUSxDQUFDLGlDQUFpQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3JFLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsOERBQThEO1lBQzlELFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1Qyw4REFBOEQ7WUFDOUQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1Qiw4REFBOEQ7WUFDOUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNDLDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsOERBQThEO1lBQzlELFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENB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QUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTNDLHVEQUF1RDtZQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsd0VBQXdFO1lBQ3hFLElBQUksT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM5QyxvREFBb0Q7Z0JBQ3BELE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkQsdURBQXVEO2dCQUN0RCxnQkFBd0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLCBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyTW9kZVRlc3RTdWl0QXJncyB7XG4gIHRyYW5zYWN0aW9uVHlwZTogc3RyaW5nO1xuICBuZXdUeEZhY3Rvcnk6ICgpID0+IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5O1xuICBuZXdUeEJ1aWxkZXI6ICgpID0+IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIHByaXZhdGVLZXk6IHsgcHJ2MTogc3RyaW5nOyBwcnYyOiBzdHJpbmc7IHBydjM6IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRlc3Qgc3VpdGUgZm9jdXNpbmcgb24gcmVjb3ZlcnkgbW9kZSBzaWduaW5nLlxuICogSW4gcmVjb3ZlcnkgbW9kZSwgdGhlIGJhY2t1cCBrZXkgKHBydjMpIGlzIHVzZWQgaW5zdGVhZCBvZiB1c2VyIGtleSAocHJ2MSkgYWxvbmcgd2l0aCBCaXRHbyBrZXkgKHBydjIpLlxuICogQHBhcmFtIHtSZWNvdmVyTW9kZVRlc3RTdWl0QXJnc30gZGF0YSB3aXRoIHJlcXVpcmVkIGluZm8uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY292ZXJNb2RlVGVzdFN1aXQoZGF0YTogUmVjb3Zlck1vZGVUZXN0U3VpdEFyZ3MpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYHNob3VsZCB0ZXN0IHJlY292ZXJ5IG1vZGUgZm9yICR7ZGF0YS50cmFuc2FjdGlvblR5cGV9YCwgKCkgPT4ge1xuICAgIGl0KCdTaG91bGQgc2V0IHJlY292ZXJNb2RlIGZsYWcgb24gYnVpbGRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYWNjZXNzaW5nIHByb3RlY3RlZCBwcm9wZXJ0eSBmb3IgdGVzdGluZ1xuICAgICAgdHhCdWlsZGVyLnJlY292ZXJTaWduZXIuc2hvdWxkLmVxdWFsKGZhbHNlKTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG1ldGhvZCBleGlzdHMgb24gZmxycCBUcmFuc2FjdGlvbkJ1aWxkZXJcbiAgICAgIHR4QnVpbGRlci5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIHByb3BlcnR5IGZvciB0ZXN0aW5nXG4gICAgICB0eEJ1aWxkZXIucmVjb3ZlclNpZ25lci5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICB0eEJ1aWxkZXIucmVjb3Zlck1vZGUoZmFsc2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2Vzc2luZyBwcm90ZWN0ZWQgcHJvcGVydHkgZm9yIHRlc3RpbmdcbiAgICAgIHR4QnVpbGRlci5yZWNvdmVyU2lnbmVyLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGRlZmF1bHQgcmVjb3Zlck1vZGUgdG8gdHJ1ZSB3aGVuIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICB0eEJ1aWxkZXIucmVjb3Zlck1vZGUoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIHByb3BlcnR5IGZvciB0ZXN0aW5nXG4gICAgICB0eEJ1aWxkZXIucmVjb3ZlclNpZ25lci5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHVuc2lnbmVkIHR4IGluIHJlY292ZXJ5IG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBkYXRhLm5ld1R4QnVpbGRlcigpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG1ldGhvZCBleGlzdHMgb24gZmxycCBUcmFuc2FjdGlvbkJ1aWxkZXJcbiAgICAgIHR4QnVpbGRlci5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYWxmIHNpZ24gdHggaW4gcmVjb3ZlcnkgbW9kZSB1c2luZyBiYWNrdXAga2V5IChwcnYzKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbWV0aG9kIGV4aXN0cyBvbiBmbHJwIFRyYW5zYWN0aW9uQnVpbGRlclxuICAgICAgdHhCdWlsZGVyLnJlY292ZXJNb2RlKHRydWUpO1xuXG4gICAgICAvLyBJbiByZWNvdmVyeSBtb2RlLCBzaWduIHdpdGggYmFja3VwIGtleSAocHJ2MykgaW5zdGVhZCBvZiB1c2VyIGtleSAocHJ2MSlcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkYXRhLnByaXZhdGVLZXkucHJ2MyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkSGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGhhbGZTaWduZWRIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBoYWxmU2lnbmVkSGV4Lmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiB0eCBpbiByZWNvdmVyeSBtb2RlIHVzaW5nIGJhY2t1cCBrZXkgKHBydjMpIGFuZCBiaXRnbyBrZXkgKHBydjIpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICB0eEJ1aWxkZXIucmVjb3Zlck1vZGUodHJ1ZSk7XG5cbiAgICAgIC8vIEluIHJlY292ZXJ5IG1vZGU6IGJhY2t1cCBrZXkgKHBydjMpICsgYml0Z28ga2V5IChwcnYyKVxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYzIH0pO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYyIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgZnVsbFNpZ25lZEhleC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGZ1bGxTaWduZWRIZXgubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgc2lnbmVkIHR4IGluIHJlY292ZXJ5IG1vZGUgdnMgcmVndWxhciBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgYW5kIHNpZ24gaW4gcmVndWxhciBtb2RlICh1c2VyIGtleSBwcnYxICsgYml0Z28ga2V5IHBydjIpXG4gICAgICBjb25zdCByZWd1bGFyVHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICByZWd1bGFyVHhCdWlsZGVyLnJlY292ZXJNb2RlKGZhbHNlKTtcbiAgICAgIHJlZ3VsYXJUeEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2YXRlS2V5LnBydjEgfSk7XG4gICAgICByZWd1bGFyVHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYyIH0pO1xuICAgICAgY29uc3QgcmVndWxhclR4ID0gYXdhaXQgcmVndWxhclR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmVndWxhckhleCA9IHJlZ3VsYXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBCdWlsZCBhbmQgc2lnbiBpbiByZWNvdmVyeSBtb2RlIChiYWNrdXAga2V5IHBydjMgKyBiaXRnbyBrZXkgcHJ2MilcbiAgICAgIGNvbnN0IHJlY292ZXJ5VHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICByZWNvdmVyeVR4QnVpbGRlci5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgIHJlY292ZXJ5VHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYzIH0pO1xuICAgICAgcmVjb3ZlcnlUeEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2YXRlS2V5LnBydjIgfSk7XG4gICAgICBjb25zdCByZWNvdmVyeVR4ID0gYXdhaXQgcmVjb3ZlcnlUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5SGV4ID0gcmVjb3ZlcnlUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBCb3RoIHNob3VsZCBiZSB2YWxpZCBoZXggc3RyaW5nc1xuICAgICAgcmVndWxhckhleC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHJlY292ZXJ5SGV4LnNob3VsZC5iZS5hLlN0cmluZygpO1xuXG4gICAgICAvLyBUaGUgc2lnbmVkIHRyYW5zYWN0aW9ucyBzaG91bGQgYmUgZGlmZmVyZW50IGJlY2F1c2UgZGlmZmVyZW50IGtleXMgYXJlIHVzZWRcbiAgICAgIHJlZ3VsYXJIZXguc2hvdWxkLm5vdC5lcXVhbChyZWNvdmVyeUhleCk7XG5cbiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGFsc28gYmUgZGlmZmVyZW50XG4gICAgICBjb25zdCByZWd1bGFyU2lnbmF0dXJlcyA9IHJlZ3VsYXJUeC5zaWduYXR1cmU7XG4gICAgICBjb25zdCByZWNvdmVyeVNpZ25hdHVyZXMgPSByZWNvdmVyeVR4LnNpZ25hdHVyZTtcbiAgICAgIHJlZ3VsYXJTaWduYXR1cmVzLnNob3VsZC5ub3QuZXFsKHJlY292ZXJ5U2lnbmF0dXJlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHNldCByZWNvdmVyTW9kZSB2aWEgZmFjdG9yeSBhbmQgcGFzcyB0byBidWlsZGVyIGZyb20gcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgYnVpbGQgYW4gdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBQYXJzZSBmcm9tIHJhdyB3aXRoIHJlY292ZXJ5IG1vZGUgZW5hYmxlZCBvbiBmYWN0b3J5XG4gICAgICBjb25zdCBmYWN0b3J5ID0gZGF0YS5uZXdUeEZhY3RvcnkoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgdGhlIG1ldGhvZCB3aGljaCBtYXkgbm90IGJlIG9uIGJhc2UgdHlwZVxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5LnJlY292ZXJNb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBjYWxsaW5nIHJlY292ZXJNb2RlIG9uIGZhY3RvcnlcbiAgICAgICAgZmFjdG9yeS5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgICAgY29uc3QgcmVjb3ZlcmVkQnVpbGRlciA9IGZhY3RvcnkuZnJvbSh1bnNpZ25lZEhleCk7XG4gICAgICAgIC8vIENhc3QgdG8gYW55IHRvIGFjY2VzcyBwcm90ZWN0ZWQgcHJvcGVydHkgZm9yIHRlc3RpbmdcbiAgICAgICAgKHJlY292ZXJlZEJ1aWxkZXIgYXMgYW55KS5yZWNvdmVyU2lnbmVyLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
|