@bitgo-beta/sdk-core 8.2.1-beta.1821 → 8.2.1-beta.1822
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/baseCoin/baseCoin.d.ts +14 -1
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +16 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +57 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts +25 -0
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/addressVerification.js +31 -13
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +7 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +23 -32
- package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +2 -1
- package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
- package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +6 -3
- package/dist/test/unit/bitgo/utils/tss/addressVerification.js +45 -1
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +4 -1
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -43,6 +43,7 @@ function getAddressVerificationModule() {
|
|
|
43
43
|
const getExtractCommonKeychain = () => getAddressVerificationModule().extractCommonKeychain;
|
|
44
44
|
const getVerifyEddsaTssWalletAddress = () => getAddressVerificationModule().verifyEddsaTssWalletAddress;
|
|
45
45
|
const getVerifyMPCWalletAddress = () => getAddressVerificationModule().verifyMPCWalletAddress;
|
|
46
|
+
const getDeriveMPCWalletAddress = () => getAddressVerificationModule().deriveMPCWalletAddress;
|
|
46
47
|
// RFC 8032 test vector: known valid Ed25519 public key + arbitrary chaincode = 128 hex chars.
|
|
47
48
|
const TEST_PK = 'd75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a';
|
|
48
49
|
const TEST_CHAINCODE = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
|
|
@@ -200,4 +201,47 @@ describe('verifyMPCWalletAddress - ECDSA (secp256k1)', function () {
|
|
|
200
201
|
result.should.be.false();
|
|
201
202
|
});
|
|
202
203
|
});
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc1ZlcmlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvYWRkcmVzc1ZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxrQkFBZ0I7QUFDaEIseURBQWlGO0FBQ2pGLDREQUEyRDtBQUUzRCxTQUFTLDRCQUE0QjtJQUNuQyxPQUFPLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLHdCQUF3QixHQUFHLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixFQUFFLENBQUMscUJBQXFCLENBQUM7QUFDNUYsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0FBQ3hHLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztBQUU5Riw4RkFBOEY7QUFDOUYsTUFBTSxPQUFPLEdBQUcsa0VBQWtFLENBQUM7QUFDbkYsTUFBTSxjQUFjLEdBQUcsa0VBQWtFLENBQUM7QUFDMUYsTUFBTSxhQUFhLEdBQUcsT0FBTyxHQUFHLGNBQWMsQ0FBQztBQUUvQyxnR0FBZ0c7QUFDaEcsTUFBTSxRQUFRLEdBQUcsb0VBQW9FLENBQUM7QUFDdEYsTUFBTSxjQUFjLEdBQUcsUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUVqRCxRQUFRLENBQUMsd0RBQXdELEVBQUU7SUFDakUsTUFBTSxjQUFjLEdBQ2xCLGtJQUFrSSxDQUFDO0lBRXJJLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtRQUNoQyxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO1lBQ3pELE1BQU0sU0FBUyxH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RSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpGLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQXNCLENBQ3pDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUN4RixtQkFBbUIsRUFDbkIsdUJBQXVCLENBQ3hCLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBkZXJpdmVVbmhhcmRlbmVkTXBzLCBnZXREZXJpdmF0aW9uUGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEVjZHNhIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQtbGliL21wYyc7XG5cbmZ1bmN0aW9uIGdldEFkZHJlc3NWZXJpZmljYXRpb25Nb2R1bGUoKSB7XG4gIHJldHVybiByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2FkZHJlc3NWZXJpZmljYXRpb24nKTtcbn1cblxuY29uc3QgZ2V0RXh0cmFjdENvbW1vbktleWNoYWluID0gKCkgPT4gZ2V0QWRkcmVzc1ZlcmlmaWNhdGlvbk1vZHVsZSgpLmV4dHJhY3RDb21tb25LZXljaGFpbjtcbmNvbnN0IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9ICgpID0+IGdldEFkZHJlc3NWZXJpZmljYXRpb25Nb2R1bGUoKS52ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3M7XG5jb25zdCBnZXRWZXJpZnlNUENXYWxsZXRBZGRyZXNzID0gKCkgPT4gZ2V0QWRkcmVzc1ZlcmlmaWNhdGlvbk1vZHVsZSgpLnZlcmlmeU1QQ1dhbGxldEFkZHJlc3M7XG5cbi8vIFJGQyA4MDMyIHRlc3QgdmVjdG9yOiBrbm93biB2YWxpZCBFZDI1NTE5IHB1YmxpYyBrZXkgKyBhcmJpdHJhcnkgY2hhaW5jb2RlID0gMTI4IGhleCBjaGFycy5cbmNvbnN0IFRFU1RfUEsgPSAnZDc1YTk4MDE4MmIxMGFiN2Q1NGJmZWQzYzk2NDA3M2EwZWUxNzJmM2RhYTYyMzI1YWYwMjFhNjhmNzA3NTExYSc7XG5jb25zdCBURVNUX0NIQUlOQ09ERSA9ICdkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmJztcbmNvbnN0IFRFU1RfS0VZQ0hBSU4gPSBURVNUX1BLICsgVEVTVF9DSEFJTkNPREU7XG5cbi8vIHNlY3AyNTZrMSBnZW5lcmF0b3IgcG9pbnQgRyAoY29tcHJlc3NlZCwgMzMgYnl0ZXMgPSA2NiBoZXgpICsgc2FtZSBjaGFpbmNvZGUgPSAxMzAgaGV4IGNoYXJzLlxuY29uc3QgRUNEU0FfUEsgPSAnMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JztcbmNvbnN0IEVDRFNBX0tFWUNIQUlOID0gRUNEU0FfUEsgKyBURVNUX0NIQUlOQ09ERTtcblxuZGVzY3JpYmUoJ1RTUyBBZGRyZXNzIFZlcmlmaWNhdGlvbiAtIERlcml2YXRpb24gUGF0aCB3aXRoIFByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPVxuICAgICc4ZWEzMmVjYWNmYzgzZWZmYmQyZTI3OTBlZTQ0ZmE3YzU5YjRkODZjMjlhMTJmMDlmYjYxM2Q4MTk1ZjkzZjRlMjE4NzVjYWQzYjk4YWRhZGE0MGMwNDBjNTRjMzU2OTQ2N2RmNDFhMDIwODgxYTYxODQwOTYzNzg3MDE4NjJiZCc7XG5cbiAgZGVzY3JpYmUoJ2V4dHJhY3RDb21tb25LZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGV4dHJhY3QgY29tbW9uS2V5Y2hhaW4gZnJvbSBrZXljaGFpbnMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHRyYWN0Q29tbW9uS2V5Y2hhaW4gPSBnZXRFeHRyYWN0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFt7IGNvbW1vbktleWNoYWluIH0sIHsgY29tbW9uS2V5Y2hhaW4gfSwgeyBjb21tb25LZXljaGFpbiB9XTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdENvbW1vbktleWNoYWluKGtleWNoYWlucyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGNvbW1vbktleWNoYWluKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYga2V5Y2hhaW5zIGFyZSBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGV4dHJhY3RDb21tb25LZXljaGFpbihbXSksIC9taXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucy8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBleHRyYWN0Q29tbW9uS2V5Y2hhaW4odW5kZWZpbmVkIGFzIGFueSksIC9taXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBjb21tb25LZXljaGFpbiBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBpZDogJzEnIH1dO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBleHRyYWN0Q29tbW9uS2V5Y2hhaW4oa2V5Y2hhaW5zIGFzIGFueSksIC9taXNzaW5nIHJlcXVpcmVkIHBhcmFtIGNvbW1vbktleWNoYWluLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGtleWNoYWlucyBoYXZlIG1pc21hdGNoZWQgY29tbW9uS2V5Y2hhaW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBjb21tb25LZXljaGFpbiB9LCB7IGNvbW1vbktleWNoYWluOiAnZGlmZmVyZW50LWtleWNoYWluJyB9XTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZXh0cmFjdENvbW1vbktleWNoYWluKGtleWNoYWlucyksIC9hbGwga2V5Y2hhaW5zIG11c3QgaGF2ZSB0aGUgc2FtZSBjb21tb25LZXljaGFpbi8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVyaXZhdGlvbiBQYXRoIEZvcm1hdCBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBjb3JyZWN0IGRlcml2YXRpb24gcGF0aCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0U2VlZHMgPSBbJ3NlZWQxJywgJ3NlZWQtMicsICcxMjM0NScsICd0ZXN0X3NlZWRfMTIzJ107XG5cbiAgICAgIHRlc3RTZWVkcy5mb3JFYWNoKChzZWVkKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXREZXJpdmF0aW9uUGF0aChzZWVkKTtcblxuICAgICAgICAvLyBFeHBlY3RlZCBmb3JtYXQ6IFwibS85OTk5OTkve3BhcnQxfS97cGFydDJ9XCJcbiAgICAgICAgcGF0aC5zaG91bGQubWF0Y2goL15tXFwvOTk5OTk5XFwvXFxkK1xcL1xcZCskLyk7XG5cbiAgICAgICAgcGF0aC5zaG91bGQuc3RhcnRXaXRoKCdtLycpO1xuXG4gICAgICAgIC8vIFNob3VsZCBoYXZlIGV4YWN0bHkgMyBwYXJ0c1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgcGFydHMubGVuZ3RoLnNob3VsZC5lcXVhbCg0KTtcbiAgICAgICAgcGFydHNbMF0uc2hvdWxkLmVxdWFsKCdtJyk7XG4gICAgICAgIHBhcnRzWzFdLnNob3VsZC5lcXVhbCgnOTk5OTk5Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3ZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgIHsgY29tbW9uS2V5Y2hhaW46IFRFU1RfS0VZQ0hBSU4gfSxcbiAgICB7IGNvbW1vbktleWNoYWluOiBURVNUX0tFWUNIQUlOIH0sXG4gICAgeyBjb21tb25LZXljaGFpbjogVEVTVF9LRVlDSEFJTiB9LFxuICBdO1xuICBjb25zdCBpc1ZhbGlkQWRkcmVzcyA9IChhZGRyOiBzdHJpbmcpID0+IGFkZHIubGVuZ3RoID09PSA2NDtcbiAgY29uc3QgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkgPSAocGs6IHN0cmluZykgPT4gcGs7XG5cbiAgZGVzY3JpYmUoJ01QQ3YyIHdhbGxldHMgKFNpbGVuY2UgTGFicyAvIE1QUyBmb3JtdWxhKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgndmVyaWZpZXMgYSBjb3JyZWN0IGFkZHJlc3MgZGVyaXZlZCB3aXRoIGRlcml2ZVVuaGFyZGVuZWRNcHMgYXQgaW5kZXggMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCAnbS8wJykuc2xpY2UoMCwgNjQpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHsgYWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLCBrZXljaGFpbnMsIGluZGV4OiAwLCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInIH0sXG4gICAgICAgIGlzVmFsaWRBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmaWVzIGEgY29ycmVjdCBhZGRyZXNzIGRlcml2ZWQgd2l0aCBkZXJpdmVVbmhhcmRlbmVkTXBzIGF0IGluZGV4IDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IGRlcml2ZVVuaGFyZGVuZWRNcHMoVEVTVF9LRVlDSEFJTiwgJ20vMScpLnNsaWNlKDAsIDY0KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKFxuICAgICAgICB7IGFkZHJlc3M6IGV4cGVjdGVkQWRkcmVzcywga2V5Y2hhaW5zLCBpbmRleDogMSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB9LFxuICAgICAgICBpc1ZhbGlkQWRkcmVzcyxcbiAgICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGFkZHJlc3MgZGVyaXZlZCBhdCBhIGRpZmZlcmVudCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3QgYWRkcmVzc0Zyb21JbmRleDAgPSBkZXJpdmVVbmhhcmRlbmVkTXBzKFRFU1RfS0VZQ0hBSU4sICdtLzAnKS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgeyBhZGRyZXNzOiBhZGRyZXNzRnJvbUluZGV4MCwga2V5Y2hhaW5zLCBpbmRleDogMSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB9LFxuICAgICAgICBpc1ZhbGlkQWRkcmVzcyxcbiAgICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHJhbmRvbSBhZGRyZXNzIHRoYXQgd2FzIG5vdCBkZXJpdmVkIGZyb20gdGhlIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzID0gZ2V0VmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKCk7XG4gICAgICBjb25zdCByYW5kb21BZGRyZXNzID0gJ2FiJy5yZXBlYXQoMzIpOyAvLyA2NCBoZXggY2hhcnMsIHdyb25nIGFkZHJlc3NcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKFxuICAgICAgICB7IGFkZHJlc3M6IHJhbmRvbUFkZHJlc3MsIGtleWNoYWlucywgaW5kZXg6IDAsIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicgfSxcbiAgICAgICAgaXNWYWxpZEFkZHJlc3MsXG4gICAgICAgIGdldEFkZHJlc3NGcm9tUHVibGljS2V5XG4gICAgICApO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmaWVzIGEgY29ycmVjdCBNUEN2MiBhZGRyZXNzIGZvciBTTUMgd2FsbGV0IHVzaW5nIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IHNlZWQgPSAnc21jLXNlZWQtMTIzJztcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldERlcml2YXRpb25QYXRoKHNlZWQpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCBgJHtwcmVmaXh9LzBgKS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyhcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGV4cGVjdGVkQWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBzZWVkLFxuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkQWRkcmVzcyxcbiAgICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIE1QQ3YyIGFkZHJlc3MgZGVyaXZlZCBhdCB0aGUgd3JvbmcgaW5kZXggd2hlbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkIGlzIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3Qgc2VlZCA9ICdzbWMtc2VlZC0xMjMnO1xuICAgICAgY29uc3QgcHJlZml4ID0gZ2V0RGVyaXZhdGlvblBhdGgoc2VlZCk7XG4gICAgICBjb25zdCBhZGRyZXNzQXRJbmRleDEgPSBkZXJpdmVVbmhhcmRlbmVkTXBzKFRFU1RfS0VZQ0hBSU4sIGAke3ByZWZpeH0vMWApLnNsaWNlKDAsIDY0KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKFxuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc0F0SW5kZXgxLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6IHNlZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGlzVmFsaWRBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vbi1NUEN2MiB3YWxsZXRzIChNUEN2MSBmb3JtdWxhKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncmVqZWN0cyBhbiBNUEN2Mi1kZXJpdmVkIGFkZHJlc3Mgd2hlbiBtdWx0aXNpZ1R5cGVWZXJzaW9uIGlzIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIC8vIE1QQ3YyIChTaWxlbmNlIExhYnMpIGFuZCBNUEN2MSBmb3JtdWxhcyBwcm9kdWNlIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGtleWNoYWluLlxuICAgICAgLy8gV2l0aG91dCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLCB0aGUgTVBDdjEgZm9ybXVsYSBpcyB1c2VkLCBzbyB0aGUgTVBDdjItZGVyaXZlZFxuICAgICAgLy8gYWRkcmVzcyBzaG91bGQgbm90IG1hdGNoLlxuICAgICAgY29uc3QgbXBjdjJBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCAnbS8wJykuc2xpY2UoMCwgNjQpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHsgYWRkcmVzczogbXBjdjJBZGRyZXNzLCBrZXljaGFpbnMsIGluZGV4OiAwIH0sXG4gICAgICAgIGlzVmFsaWRBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgndmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyAtIEVDRFNBIChzZWNwMjU2azEpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBlY2RzYUtleWNoYWlucyA9IFtcbiAgICB7IGNvbW1vbktleWNoYWluOiBFQ0RTQV9LRVlDSEFJTiB9LFxuICAgIHsgY29tbW9uS2V5Y2hhaW46IEVDRFNBX0tFWUNIQUlOIH0sXG4gICAgeyBjb21tb25LZXljaGFpbjogRUNEU0FfS0VZQ0hBSU4gfSxcbiAgXTtcbiAgLy8gc2VjcDI1NmsxIGNvbXByZXNzZWQgcHVibGljIGtleSBpcyAzMyBieXRlcyA9IDY2IGhleCBjaGFyc1xuICBjb25zdCBpc1ZhbGlkRWNkc2FBZGRyZXNzID0gKGFkZHI6IHN0cmluZykgPT4gYWRkci5sZW5ndGggPT09IDY2O1xuICBjb25zdCBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleSA9IChwazogc3RyaW5nKSA9PiBwaztcblxuICBpdCgnaWdub3JlcyBtdWx0aXNpZ1R5cGVWZXJzaW9uIE1QQ3YyIGFuZCB1c2VzIEVjZHNhIGRlcml2YXRpb24gZm9yIHNlY3AyNTZrMSB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlNUENXYWxsZXRBZGRyZXNzKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gbmV3IEVjZHNhKCkuZGVyaXZlVW5oYXJkZW5lZChFQ0RTQV9LRVlDSEFJTiwgJ20vMCcpLnNsaWNlKDAsIDY2KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGV4cGVjdGVkQWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zOiBlY2RzYUtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicsXG4gICAgICAgIGtleUN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICAgIH0sXG4gICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICApO1xuICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgndmVyaWZpZXMgYSBjb3JyZWN0IHNlY3AyNTZrMSBhZGRyZXNzIGF0IGluZGV4IDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSBuZXcgRWNkc2EoKS5kZXJpdmVVbmhhcmRlbmVkKEVDRFNBX0tFWUNIQUlOLCAnbS8xJykuc2xpY2UoMCwgNjYpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgYWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLCBrZXljaGFpbnM6IGVjZHNhS2V5Y2hhaW5zLCBpbmRleDogMSwga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICApO1xuICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhbiBhZGRyZXNzIGRlcml2ZWQgYXQgYSBkaWZmZXJlbnQgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICBjb25zdCBhZGRyZXNzQXRJbmRleDAgPSBuZXcgRWNkc2EoKS5kZXJpdmVVbmhhcmRlbmVkKEVDRFNBX0tFWUNIQUlOLCAnbS8wJykuc2xpY2UoMCwgNjYpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgYWRkcmVzczogYWRkcmVzc0F0SW5kZXgwLCBrZXljaGFpbnM6IGVjZHNhS2V5Y2hhaW5zLCBpbmRleDogMSwga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICApO1xuICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
204
|
+
describe('deriveMPCWalletAddress', function () {
|
|
205
|
+
const getAddressFromPublicKey = (pk) => pk;
|
|
206
|
+
describe('ed25519 (MPCv2)', function () {
|
|
207
|
+
const keychains = [{ commonKeychain: TEST_KEYCHAIN }, { commonKeychain: TEST_KEYCHAIN }];
|
|
208
|
+
it('derives the address and path for the simple m/{index} path', async function () {
|
|
209
|
+
const deriveMPCWalletAddress = getDeriveMPCWalletAddress();
|
|
210
|
+
const expectedAddress = (0, sdk_lib_mpc_1.deriveUnhardenedMps)(TEST_KEYCHAIN, 'm/3').slice(0, 64);
|
|
211
|
+
const result = await deriveMPCWalletAddress({ keychains, index: 3, multisigTypeVersion: 'MPCv2', keyCurve: 'ed25519' }, getAddressFromPublicKey);
|
|
212
|
+
result.address.should.equal(expectedAddress);
|
|
213
|
+
result.derivationPath.should.equal('m/3');
|
|
214
|
+
});
|
|
215
|
+
it('uses the SMC prefix path when derivedFromParentWithSeed is set', async function () {
|
|
216
|
+
const deriveMPCWalletAddress = getDeriveMPCWalletAddress();
|
|
217
|
+
const seed = 'smc-seed-123';
|
|
218
|
+
const prefix = (0, sdk_lib_mpc_1.getDerivationPath)(seed);
|
|
219
|
+
const expectedAddress = (0, sdk_lib_mpc_1.deriveUnhardenedMps)(TEST_KEYCHAIN, `${prefix}/0`).slice(0, 64);
|
|
220
|
+
const result = await deriveMPCWalletAddress({ keychains, index: 0, multisigTypeVersion: 'MPCv2', derivedFromParentWithSeed: seed, keyCurve: 'ed25519' }, getAddressFromPublicKey);
|
|
221
|
+
result.address.should.equal(expectedAddress);
|
|
222
|
+
result.derivationPath.should.equal(`${prefix}/0`);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('secp256k1', function () {
|
|
226
|
+
const ecdsaKeychains = [{ commonKeychain: ECDSA_KEYCHAIN }, { commonKeychain: ECDSA_KEYCHAIN }];
|
|
227
|
+
it('derives the secp256k1 address (33-byte pubkey)', async function () {
|
|
228
|
+
const deriveMPCWalletAddress = getDeriveMPCWalletAddress();
|
|
229
|
+
const expectedAddress = new mpc_1.Ecdsa().deriveUnhardened(ECDSA_KEYCHAIN, 'm/2').slice(0, 66);
|
|
230
|
+
const result = await deriveMPCWalletAddress({ keychains: ecdsaKeychains, index: 2, keyCurve: 'secp256k1' }, getAddressFromPublicKey);
|
|
231
|
+
result.address.should.equal(expectedAddress);
|
|
232
|
+
result.derivationPath.should.equal('m/2');
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('round-trip with verifyMPCWalletAddress', function () {
|
|
236
|
+
it('an address produced by deriveMPCWalletAddress verifies as true', async function () {
|
|
237
|
+
const deriveMPCWalletAddress = getDeriveMPCWalletAddress();
|
|
238
|
+
const verifyMPCWalletAddress = getVerifyMPCWalletAddress();
|
|
239
|
+
const ecdsaKeychains = [{ commonKeychain: ECDSA_KEYCHAIN }, { commonKeychain: ECDSA_KEYCHAIN }];
|
|
240
|
+
const isValidEcdsaAddress = (addr) => addr.length === 66;
|
|
241
|
+
const { address } = await deriveMPCWalletAddress({ keychains: ecdsaKeychains, index: 7, keyCurve: 'secp256k1' }, getAddressFromPublicKey);
|
|
242
|
+
const verified = await verifyMPCWalletAddress({ address, keychains: ecdsaKeychains, index: 7, keyCurve: 'secp256k1' }, isValidEcdsaAddress, getAddressFromPublicKey);
|
|
243
|
+
verified.should.be.true();
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc1ZlcmlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvYWRkcmVzc1ZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxrQkFBZ0I7QUFDaEIseURBQWlGO0FBQ2pGLDREQUEyRDtBQUUzRCxTQUFTLDRCQUE0QjtJQUNuQyxPQUFPLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLHdCQUF3QixHQUFHLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixFQUFFLENBQUMscUJBQXFCLENBQUM7QUFDNUYsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0FBQ3hHLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztBQUM5RixNQUFNLHlCQUF5QixHQUFHLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixFQUFFLENBQUMsc0JBQXNCLENBQUM7QUFFOUYsOEZBQThGO0FBQzlGLE1BQU0sT0FBTyxHQUFHLGtFQUFrRSxDQUFDO0FBQ25GLE1BQU0sY0FBYyxHQUFHLGtFQUFrRSxDQUFDO0FBQzFGLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxjQUFjLENBQUM7QUFFL0MsZ0dBQWdHO0FBQ2hHLE1BQU0sUUFBUSxHQUFHLG9FQUFvRSxDQUFDO0FBQ3RGLE1BQU0sY0FBYyxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUM7QUFFakQsUUFBUSxDQUFDLHdEQUF3RCxFQUFFO0lBQ2pFLE1BQU0sY0FBYyxHQUNsQixrSUFBa0ksQ0FBQztJQUVySSxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLG9E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TSxRQUFRLEdBQUcsTUFBTSxzQkFBc0IsQ0FDM0MsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFDdkUsbUJBQW1CLEVBQ25CLHVCQUF1QixDQUN4QixDQUFDO1lBRUYsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBkZXJpdmVVbmhhcmRlbmVkTXBzLCBnZXREZXJpdmF0aW9uUGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEVjZHNhIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2FjY291bnQtbGliL21wYyc7XG5cbmZ1bmN0aW9uIGdldEFkZHJlc3NWZXJpZmljYXRpb25Nb2R1bGUoKSB7XG4gIHJldHVybiByZXF1aXJlKCcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2FkZHJlc3NWZXJpZmljYXRpb24nKTtcbn1cblxuY29uc3QgZ2V0RXh0cmFjdENvbW1vbktleWNoYWluID0gKCkgPT4gZ2V0QWRkcmVzc1ZlcmlmaWNhdGlvbk1vZHVsZSgpLmV4dHJhY3RDb21tb25LZXljaGFpbjtcbmNvbnN0IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9ICgpID0+IGdldEFkZHJlc3NWZXJpZmljYXRpb25Nb2R1bGUoKS52ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3M7XG5jb25zdCBnZXRWZXJpZnlNUENXYWxsZXRBZGRyZXNzID0gKCkgPT4gZ2V0QWRkcmVzc1ZlcmlmaWNhdGlvbk1vZHVsZSgpLnZlcmlmeU1QQ1dhbGxldEFkZHJlc3M7XG5jb25zdCBnZXREZXJpdmVNUENXYWxsZXRBZGRyZXNzID0gKCkgPT4gZ2V0QWRkcmVzc1ZlcmlmaWNhdGlvbk1vZHVsZSgpLmRlcml2ZU1QQ1dhbGxldEFkZHJlc3M7XG5cbi8vIFJGQyA4MDMyIHRlc3QgdmVjdG9yOiBrbm93biB2YWxpZCBFZDI1NTE5IHB1YmxpYyBrZXkgKyBhcmJpdHJhcnkgY2hhaW5jb2RlID0gMTI4IGhleCBjaGFycy5cbmNvbnN0IFRFU1RfUEsgPSAnZDc1YTk4MDE4MmIxMGFiN2Q1NGJmZWQzYzk2NDA3M2EwZWUxNzJmM2RhYTYyMzI1YWYwMjFhNjhmNzA3NTExYSc7XG5jb25zdCBURVNUX0NIQUlOQ09ERSA9ICdkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmJztcbmNvbnN0IFRFU1RfS0VZQ0hBSU4gPSBURVNUX1BLICsgVEVTVF9DSEFJTkNPREU7XG5cbi8vIHNlY3AyNTZrMSBnZW5lcmF0b3IgcG9pbnQgRyAoY29tcHJlc3NlZCwgMzMgYnl0ZXMgPSA2NiBoZXgpICsgc2FtZSBjaGFpbmNvZGUgPSAxMzAgaGV4IGNoYXJzLlxuY29uc3QgRUNEU0FfUEsgPSAnMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JztcbmNvbnN0IEVDRFNBX0tFWUNIQUlOID0gRUNEU0FfUEsgKyBURVNUX0NIQUlOQ09ERTtcblxuZGVzY3JpYmUoJ1RTUyBBZGRyZXNzIFZlcmlmaWNhdGlvbiAtIERlcml2YXRpb24gUGF0aCB3aXRoIFByZWZpeCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPVxuICAgICc4ZWEzMmVjYWNmYzgzZWZmYmQyZTI3OTBlZTQ0ZmE3YzU5YjRkODZjMjlhMTJmMDlmYjYxM2Q4MTk1ZjkzZjRlMjE4NzVjYWQzYjk4YWRhZGE0MGMwNDBjNTRjMzU2OTQ2N2RmNDFhMDIwODgxYTYxODQwOTYzNzg3MDE4NjJiZCc7XG5cbiAgZGVzY3JpYmUoJ2V4dHJhY3RDb21tb25LZXljaGFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGV4dHJhY3QgY29tbW9uS2V5Y2hhaW4gZnJvbSBrZXljaGFpbnMgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHRyYWN0Q29tbW9uS2V5Y2hhaW4gPSBnZXRFeHRyYWN0Q29tbW9uS2V5Y2hhaW4oKTtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFt7IGNvbW1vbktleWNoYWluIH0sIHsgY29tbW9uS2V5Y2hhaW4gfSwgeyBjb21tb25LZXljaGFpbiB9XTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdENvbW1vbktleWNoYWluKGtleWNoYWlucyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKGNvbW1vbktleWNoYWluKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYga2V5Y2hhaW5zIGFyZSBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGV4dHJhY3RDb21tb25LZXljaGFpbihbXSksIC9taXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucy8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBleHRyYWN0Q29tbW9uS2V5Y2hhaW4odW5kZWZpbmVkIGFzIGFueSksIC9taXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBpZiBjb21tb25LZXljaGFpbiBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBpZDogJzEnIH1dO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBleHRyYWN0Q29tbW9uS2V5Y2hhaW4oa2V5Y2hhaW5zIGFzIGFueSksIC9taXNzaW5nIHJlcXVpcmVkIHBhcmFtIGNvbW1vbktleWNoYWluLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIGtleWNoYWlucyBoYXZlIG1pc21hdGNoZWQgY29tbW9uS2V5Y2hhaW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXh0cmFjdENvbW1vbktleWNoYWluID0gZ2V0RXh0cmFjdENvbW1vbktleWNoYWluKCk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBjb21tb25LZXljaGFpbiB9LCB7IGNvbW1vbktleWNoYWluOiAnZGlmZmVyZW50LWtleWNoYWluJyB9XTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZXh0cmFjdENvbW1vbktleWNoYWluKGtleWNoYWlucyksIC9hbGwga2V5Y2hhaW5zIG11c3QgaGF2ZSB0aGUgc2FtZSBjb21tb25LZXljaGFpbi8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVyaXZhdGlvbiBQYXRoIEZvcm1hdCBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBjb3JyZWN0IGRlcml2YXRpb24gcGF0aCBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0U2VlZHMgPSBbJ3NlZWQxJywgJ3NlZWQtMicsICcxMjM0NScsICd0ZXN0X3NlZWRfMTIzJ107XG5cbiAgICAgIHRlc3RTZWVkcy5mb3JFYWNoKChzZWVkKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXREZXJpdmF0aW9uUGF0aChzZWVkKTtcblxuICAgICAgICAvLyBFeHBlY3RlZCBmb3JtYXQ6IFwibS85OTk5OTkve3BhcnQxfS97cGFydDJ9XCJcbiAgICAgICAgcGF0aC5zaG91bGQubWF0Y2goL15tXFwvOTk5OTk5XFwvXFxkK1xcL1xcZCskLyk7XG5cbiAgICAgICAgcGF0aC5zaG91bGQuc3RhcnRXaXRoKCdtLycpO1xuXG4gICAgICAgIC8vIFNob3VsZCBoYXZlIGV4YWN0bHkgMyBwYXJ0c1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgcGFydHMubGVuZ3RoLnNob3VsZC5lcXVhbCg0KTtcbiAgICAgICAgcGFydHNbMF0uc2hvdWxkLmVxdWFsKCdtJyk7XG4gICAgICAgIHBhcnRzWzFdLnNob3VsZC5lcXVhbCgnOTk5OTk5Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3ZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qga2V5Y2hhaW5zID0gW1xuICAgIHsgY29tbW9uS2V5Y2hhaW46IFRFU1RfS0VZQ0hBSU4gfSxcbiAgICB7IGNvbW1vbktleWNoYWluOiBURVNUX0tFWUNIQUlOIH0sXG4gICAgeyBjb21tb25LZXljaGFpbjogVEVTVF9LRVlDSEFJTiB9LFxuICBdO1xuICBjb25zdCBpc1ZhbGlkQWRkcmVzcyA9IChhZGRyOiBzdHJpbmcpID0+IGFkZHIubGVuZ3RoID09PSA2NDtcbiAgY29uc3QgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkgPSAocGs6IHN0cmluZykgPT4gcGs7XG5cbiAgZGVzY3JpYmUoJ01QQ3YyIHdhbGxldHMgKFNpbGVuY2UgTGFicyAvIE1QUyBmb3JtdWxhKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgndmVyaWZpZXMgYSBjb3JyZWN0IGFkZHJlc3MgZGVyaXZlZCB3aXRoIGRlcml2ZVVuaGFyZGVuZWRNcHMgYXQgaW5kZXggMCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCAnbS8wJykuc2xpY2UoMCwgNjQpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHsgYWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLCBrZXljaGFpbnMsIGluZGV4OiAwLCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInIH0sXG4gICAgICAgIGlzVmFsaWRBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmaWVzIGEgY29ycmVjdCBhZGRyZXNzIGRlcml2ZWQgd2l0aCBkZXJpdmVVbmhhcmRlbmVkTXBzIGF0IGluZGV4IDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IGRlcml2ZVVuaGFyZGVuZWRNcHMoVEVTVF9LRVlDSEFJTiwgJ20vMScpLnNsaWNlKDAsIDY0KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKFxuICAgICAgICB7IGFkZHJlc3M6IGV4cGVjdGVkQWRkcmVzcywga2V5Y2hhaW5zLCBpbmRleDogMSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB9LFxuICAgICAgICBpc1ZhbGlkQWRkcmVzcyxcbiAgICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGFkZHJlc3MgZGVyaXZlZCBhdCBhIGRpZmZlcmVudCBpbmRleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3QgYWRkcmVzc0Zyb21JbmRleDAgPSBkZXJpdmVVbmhhcmRlbmVkTXBzKFRFU1RfS0VZQ0hBSU4sICdtLzAnKS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgeyBhZGRyZXNzOiBhZGRyZXNzRnJvbUluZGV4MCwga2V5Y2hhaW5zLCBpbmRleDogMSwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB9LFxuICAgICAgICBpc1ZhbGlkQWRkcmVzcyxcbiAgICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHJhbmRvbSBhZGRyZXNzIHRoYXQgd2FzIG5vdCBkZXJpdmVkIGZyb20gdGhlIGtleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzID0gZ2V0VmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKCk7XG4gICAgICBjb25zdCByYW5kb21BZGRyZXNzID0gJ2FiJy5yZXBlYXQoMzIpOyAvLyA2NCBoZXggY2hhcnMsIHdyb25nIGFkZHJlc3NcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKFxuICAgICAgICB7IGFkZHJlc3M6IHJhbmRvbUFkZHJlc3MsIGtleWNoYWlucywgaW5kZXg6IDAsIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicgfSxcbiAgICAgICAgaXNWYWxpZEFkZHJlc3MsXG4gICAgICAgIGdldEFkZHJlc3NGcm9tUHVibGljS2V5XG4gICAgICApO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZlcmlmaWVzIGEgY29ycmVjdCBNUEN2MiBhZGRyZXNzIGZvciBTTUMgd2FsbGV0IHVzaW5nIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IHNlZWQgPSAnc21jLXNlZWQtMTIzJztcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldERlcml2YXRpb25QYXRoKHNlZWQpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCBgJHtwcmVmaXh9LzBgKS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyhcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGV4cGVjdGVkQWRkcmVzcyxcbiAgICAgICAgICBrZXljaGFpbnMsXG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyxcbiAgICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBzZWVkLFxuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkQWRkcmVzcyxcbiAgICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIE1QQ3YyIGFkZHJlc3MgZGVyaXZlZCBhdCB0aGUgd3JvbmcgaW5kZXggd2hlbiBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkIGlzIHNldCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeUVkZHNhVHNzV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3Qgc2VlZCA9ICdzbWMtc2VlZC0xMjMnO1xuICAgICAgY29uc3QgcHJlZml4ID0gZ2V0RGVyaXZhdGlvblBhdGgoc2VlZCk7XG4gICAgICBjb25zdCBhZGRyZXNzQXRJbmRleDEgPSBkZXJpdmVVbmhhcmRlbmVkTXBzKFRFU1RfS0VZQ0hBSU4sIGAke3ByZWZpeH0vMWApLnNsaWNlKDAsIDY0KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5RWRkc2FUc3NXYWxsZXRBZGRyZXNzKFxuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc0F0SW5kZXgxLFxuICAgICAgICAgIGtleWNoYWlucyxcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLFxuICAgICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6IHNlZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGlzVmFsaWRBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vbi1NUEN2MiB3YWxsZXRzIChNUEN2MSBmb3JtdWxhKScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncmVqZWN0cyBhbiBNUEN2Mi1kZXJpdmVkIGFkZHJlc3Mgd2hlbiBtdWx0aXNpZ1R5cGVWZXJzaW9uIGlzIG5vdCBzZXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIC8vIE1QQ3YyIChTaWxlbmNlIExhYnMpIGFuZCBNUEN2MSBmb3JtdWxhcyBwcm9kdWNlIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGtleWNoYWluLlxuICAgICAgLy8gV2l0aG91dCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLCB0aGUgTVBDdjEgZm9ybXVsYSBpcyB1c2VkLCBzbyB0aGUgTVBDdjItZGVyaXZlZFxuICAgICAgLy8gYWRkcmVzcyBzaG91bGQgbm90IG1hdGNoLlxuICAgICAgY29uc3QgbXBjdjJBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCAnbS8wJykuc2xpY2UoMCwgNjQpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlFZGRzYVRzc1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHsgYWRkcmVzczogbXBjdjJBZGRyZXNzLCBrZXljaGFpbnMsIGluZGV4OiAwIH0sXG4gICAgICAgIGlzVmFsaWRBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgndmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyAtIEVDRFNBIChzZWNwMjU2azEpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBlY2RzYUtleWNoYWlucyA9IFtcbiAgICB7IGNvbW1vbktleWNoYWluOiBFQ0RTQV9LRVlDSEFJTiB9LFxuICAgIHsgY29tbW9uS2V5Y2hhaW46IEVDRFNBX0tFWUNIQUlOIH0sXG4gICAgeyBjb21tb25LZXljaGFpbjogRUNEU0FfS0VZQ0hBSU4gfSxcbiAgXTtcbiAgLy8gc2VjcDI1NmsxIGNvbXByZXNzZWQgcHVibGljIGtleSBpcyAzMyBieXRlcyA9IDY2IGhleCBjaGFyc1xuICBjb25zdCBpc1ZhbGlkRWNkc2FBZGRyZXNzID0gKGFkZHI6IHN0cmluZykgPT4gYWRkci5sZW5ndGggPT09IDY2O1xuICBjb25zdCBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleSA9IChwazogc3RyaW5nKSA9PiBwaztcblxuICBpdCgnaWdub3JlcyBtdWx0aXNpZ1R5cGVWZXJzaW9uIE1QQ3YyIGFuZCB1c2VzIEVjZHNhIGRlcml2YXRpb24gZm9yIHNlY3AyNTZrMSB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlNUENXYWxsZXRBZGRyZXNzKCk7XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gbmV3IEVjZHNhKCkuZGVyaXZlVW5oYXJkZW5lZChFQ0RTQV9LRVlDSEFJTiwgJ20vMCcpLnNsaWNlKDAsIDY2KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGV4cGVjdGVkQWRkcmVzcyxcbiAgICAgICAga2V5Y2hhaW5zOiBlY2RzYUtleWNoYWlucyxcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicsXG4gICAgICAgIGtleUN1cnZlOiAnc2VjcDI1NmsxJyxcbiAgICAgIH0sXG4gICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICApO1xuICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgndmVyaWZpZXMgYSBjb3JyZWN0IHNlY3AyNTZrMSBhZGRyZXNzIGF0IGluZGV4IDEnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSBuZXcgRWNkc2EoKS5kZXJpdmVVbmhhcmRlbmVkKEVDRFNBX0tFWUNIQUlOLCAnbS8xJykuc2xpY2UoMCwgNjYpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgYWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLCBrZXljaGFpbnM6IGVjZHNhS2V5Y2hhaW5zLCBpbmRleDogMSwga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICApO1xuICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBhbiBhZGRyZXNzIGRlcml2ZWQgYXQgYSBkaWZmZXJlbnQgaW5kZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyA9IGdldFZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICBjb25zdCBhZGRyZXNzQXRJbmRleDAgPSBuZXcgRWNkc2EoKS5kZXJpdmVVbmhhcmRlbmVkKEVDRFNBX0tFWUNIQUlOLCAnbS8wJykuc2xpY2UoMCwgNjYpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgYWRkcmVzczogYWRkcmVzc0F0SW5kZXgwLCBrZXljaGFpbnM6IGVjZHNhS2V5Y2hhaW5zLCBpbmRleDogMSwga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXlcbiAgICApO1xuICAgIHJlc3VsdC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2Rlcml2ZU1QQ1dhbGxldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGdldEFkZHJlc3NGcm9tUHVibGljS2V5ID0gKHBrOiBzdHJpbmcpID0+IHBrO1xuXG4gIGRlc2NyaWJlKCdlZDI1NTE5IChNUEN2MiknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgY29tbW9uS2V5Y2hhaW46IFRFU1RfS0VZQ0hBSU4gfSwgeyBjb21tb25LZXljaGFpbjogVEVTVF9LRVlDSEFJTiB9XTtcblxuICAgIGl0KCdkZXJpdmVzIHRoZSBhZGRyZXNzIGFuZCBwYXRoIGZvciB0aGUgc2ltcGxlIG0ve2luZGV4fSBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyA9IGdldERlcml2ZU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IGRlcml2ZVVuaGFyZGVuZWRNcHMoVEVTVF9LRVlDSEFJTiwgJ20vMycpLnNsaWNlKDAsIDY0KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgeyBrZXljaGFpbnMsIGluZGV4OiAzLCBtdWx0aXNpZ1R5cGVWZXJzaW9uOiAnTVBDdjInLCBrZXlDdXJ2ZTogJ2VkMjU1MTknIH0sXG4gICAgICAgIGdldEFkZHJlc3NGcm9tUHVibGljS2V5XG4gICAgICApO1xuXG4gICAgICByZXN1bHQuYWRkcmVzcy5zaG91bGQuZXF1YWwoZXhwZWN0ZWRBZGRyZXNzKTtcbiAgICAgIHJlc3VsdC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgdGhlIFNNQyBwcmVmaXggcGF0aCB3aGVuIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQgaXMgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyA9IGdldERlcml2ZU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IHNlZWQgPSAnc21jLXNlZWQtMTIzJztcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldERlcml2YXRpb25QYXRoKHNlZWQpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZGVyaXZlVW5oYXJkZW5lZE1wcyhURVNUX0tFWUNIQUlOLCBgJHtwcmVmaXh9LzBgKS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlcml2ZU1QQ1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHsga2V5Y2hhaW5zLCBpbmRleDogMCwgbXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJywgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogc2VlZCwga2V5Q3VydmU6ICdlZDI1NTE5JyB9LFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LmFkZHJlc3Muc2hvdWxkLmVxdWFsKGV4cGVjdGVkQWRkcmVzcyk7XG4gICAgICByZXN1bHQuZGVyaXZhdGlvblBhdGguc2hvdWxkLmVxdWFsKGAke3ByZWZpeH0vMGApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2VjcDI1NmsxJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVjZHNhS2V5Y2hhaW5zID0gW3sgY29tbW9uS2V5Y2hhaW46IEVDRFNBX0tFWUNIQUlOIH0sIHsgY29tbW9uS2V5Y2hhaW46IEVDRFNBX0tFWUNIQUlOIH1dO1xuXG4gICAgaXQoJ2Rlcml2ZXMgdGhlIHNlY3AyNTZrMSBhZGRyZXNzICgzMy1ieXRlIHB1YmtleSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkZXJpdmVNUENXYWxsZXRBZGRyZXNzID0gZ2V0RGVyaXZlTVBDV2FsbGV0QWRkcmVzcygpO1xuICAgICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gbmV3IEVjZHNhKCkuZGVyaXZlVW5oYXJkZW5lZChFQ0RTQV9LRVlDSEFJTiwgJ20vMicpLnNsaWNlKDAsIDY2KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgeyBrZXljaGFpbnM6IGVjZHNhS2V5Y2hhaW5zLCBpbmRleDogMiwga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICAgIGdldEFkZHJlc3NGcm9tUHVibGljS2V5XG4gICAgICApO1xuXG4gICAgICByZXN1bHQuYWRkcmVzcy5zaG91bGQuZXF1YWwoZXhwZWN0ZWRBZGRyZXNzKTtcbiAgICAgIHJlc3VsdC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncm91bmQtdHJpcCB3aXRoIHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2FuIGFkZHJlc3MgcHJvZHVjZWQgYnkgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyB2ZXJpZmllcyBhcyB0cnVlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyA9IGdldERlcml2ZU1QQ1dhbGxldEFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MgPSBnZXRWZXJpZnlNUENXYWxsZXRBZGRyZXNzKCk7XG4gICAgICBjb25zdCBlY2RzYUtleWNoYWlucyA9IFt7IGNvbW1vbktleWNoYWluOiBFQ0RTQV9LRVlDSEFJTiB9LCB7IGNvbW1vbktleWNoYWluOiBFQ0RTQV9LRVlDSEFJTiB9XTtcbiAgICAgIGNvbnN0IGlzVmFsaWRFY2RzYUFkZHJlc3MgPSAoYWRkcjogc3RyaW5nKSA9PiBhZGRyLmxlbmd0aCA9PT0gNjY7XG5cbiAgICAgIGNvbnN0IHsgYWRkcmVzcyB9ID0gYXdhaXQgZGVyaXZlTVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgeyBrZXljaGFpbnM6IGVjZHNhS2V5Y2hhaW5zLCBpbmRleDogNywga2V5Q3VydmU6ICdzZWNwMjU2azEnIH0sXG4gICAgICAgIGdldEFkZHJlc3NGcm9tUHVibGljS2V5XG4gICAgICApO1xuXG4gICAgICBjb25zdCB2ZXJpZmllZCA9IGF3YWl0IHZlcmlmeU1QQ1dhbGxldEFkZHJlc3MoXG4gICAgICAgIHsgYWRkcmVzcywga2V5Y2hhaW5zOiBlY2RzYUtleWNoYWlucywgaW5kZXg6IDcsIGtleUN1cnZlOiAnc2VjcDI1NmsxJyB9LFxuICAgICAgICBpc1ZhbGlkRWNkc2FBZGRyZXNzLFxuICAgICAgICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleVxuICAgICAgKTtcblxuICAgICAgdmVyaWZpZWQuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|