@bitgo/sdk-core 37.6.0 → 37.7.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/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/defi/defiVault.d.ts +2 -1
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +13 -10
- package/dist/src/bitgo/keychain/iKeychains.d.ts +2 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +8 -3
- 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/ecdsa.d.ts +2 -2
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +19 -17
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +8 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +39 -47
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +15 -13
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +16 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +65 -16
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +5 -0
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
- 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/iWallets.d.ts +23 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +46 -3
- package/dist/src/bitgo/wallet/wallets.d.ts +10 -1
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +161 -12
- package/dist/test/unit/bitgo/defi/defiVault.js +3 -12
- 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/eddsa/eddsaMPCv2.js +60 -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/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +320 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +16 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -86,7 +86,7 @@ describe('Wallets - WebAuthn wallet creation', function () {
|
|
|
86
86
|
sinon.restore();
|
|
87
87
|
});
|
|
88
88
|
describe('generateWallet with webauthnInfo', function () {
|
|
89
|
-
it('should add
|
|
89
|
+
it('should add webauthnInfo (with enterpriseId) to keychain params when webauthnInfo is provided', async function () {
|
|
90
90
|
const webauthnInfo = {
|
|
91
91
|
otpDeviceId: 'device-123',
|
|
92
92
|
prfSalt: 'salt-abc',
|
|
@@ -95,15 +95,17 @@ describe('Wallets - WebAuthn wallet creation', function () {
|
|
|
95
95
|
await wallets.generateWallet({
|
|
96
96
|
label: 'Test Wallet',
|
|
97
97
|
passphrase: 'wallet-passphrase',
|
|
98
|
+
enterprise: 'enterprise-123',
|
|
98
99
|
webauthnInfo,
|
|
99
100
|
});
|
|
100
101
|
assert.strictEqual(mockKeychains.add.calledOnce, true);
|
|
101
102
|
const addParams = mockKeychains.add.firstCall.args[0];
|
|
102
|
-
addParams.should.have.property('webauthnDevices');
|
|
103
|
-
addParams.
|
|
104
|
-
addParams.
|
|
105
|
-
addParams.
|
|
106
|
-
addParams.
|
|
103
|
+
addParams.should.not.have.property('webauthnDevices');
|
|
104
|
+
addParams.should.have.property('webauthnInfo');
|
|
105
|
+
addParams.webauthnInfo.should.have.property('otpDeviceId', webauthnInfo.otpDeviceId);
|
|
106
|
+
addParams.webauthnInfo.should.have.property('prfSalt', webauthnInfo.prfSalt);
|
|
107
|
+
addParams.webauthnInfo.should.have.property('enterpriseId', 'enterprise-123');
|
|
108
|
+
addParams.webauthnInfo.should.have.property('encryptedPrv');
|
|
107
109
|
});
|
|
108
110
|
it('should encrypt user private key with the webauthn passphrase', async function () {
|
|
109
111
|
const webauthnPassphrase = 'prf-derived-passphrase';
|
|
@@ -118,7 +120,7 @@ describe('Wallets - WebAuthn wallet creation', function () {
|
|
|
118
120
|
});
|
|
119
121
|
const addParams = mockKeychains.add.firstCall.args[0];
|
|
120
122
|
const expectedEncryptedPrv = `encrypted:${webauthnPassphrase}:${userPrv}`;
|
|
121
|
-
addParams.
|
|
123
|
+
addParams.webauthnInfo.should.have.property('encryptedPrv', expectedEncryptedPrv);
|
|
122
124
|
});
|
|
123
125
|
it('should also encrypt user private key with wallet passphrase when webauthnInfo is provided', async function () {
|
|
124
126
|
const walletPassphrase = 'wallet-passphrase';
|
|
@@ -152,17 +154,18 @@ describe('Wallets - WebAuthn wallet creation', function () {
|
|
|
152
154
|
passwordsUsed.should.containEql(walletPassphrase);
|
|
153
155
|
passwordsUsed.should.containEql(webauthnPassphrase);
|
|
154
156
|
});
|
|
155
|
-
it('should not add
|
|
157
|
+
it('should not add webauthnInfo when webauthnInfo is not provided', async function () {
|
|
156
158
|
await wallets.generateWallet({
|
|
157
159
|
label: 'Test Wallet',
|
|
158
160
|
passphrase: 'wallet-passphrase',
|
|
159
161
|
});
|
|
160
162
|
assert.strictEqual(mockKeychains.add.calledOnce, true);
|
|
161
163
|
const addParams = mockKeychains.add.firstCall.args[0];
|
|
164
|
+
addParams.should.not.have.property('webauthnInfo');
|
|
162
165
|
addParams.should.not.have.property('webauthnDevices');
|
|
163
166
|
});
|
|
164
|
-
it('should not add
|
|
165
|
-
// When a user-provided public key is used, there is no private key to encrypt, so
|
|
167
|
+
it('should not add webauthnInfo when userKey is explicitly provided (no prv available)', async function () {
|
|
168
|
+
// When a user-provided public key is used, there is no private key to encrypt, so webauthnInfo is skipped
|
|
166
169
|
await wallets.generateWallet({
|
|
167
170
|
label: 'Test Wallet',
|
|
168
171
|
userKey: userPub,
|
|
@@ -173,10 +176,11 @@ describe('Wallets - WebAuthn wallet creation', function () {
|
|
|
173
176
|
passphrase: 'prf-derived-passphrase',
|
|
174
177
|
},
|
|
175
178
|
});
|
|
176
|
-
// add is called for both user keychain (pub-only) and backup keychain - neither should have
|
|
179
|
+
// add is called for both user keychain (pub-only) and backup keychain - neither should have webauthnInfo
|
|
177
180
|
const allAddCalls = mockKeychains.add.getCalls();
|
|
178
181
|
assert.ok(allAddCalls.length > 0, 'expected keychains().add to be called at least once');
|
|
179
182
|
for (const call of allAddCalls) {
|
|
183
|
+
call.args[0].should.not.have.property('webauthnInfo');
|
|
180
184
|
call.args[0].should.not.have.property('webauthnDevices');
|
|
181
185
|
}
|
|
182
186
|
});
|
|
@@ -197,4 +201,4 @@ describe('Wallets - WebAuthn wallet creation', function () {
|
|
|
197
201
|
});
|
|
198
202
|
});
|
|
199
203
|
});
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c1dlYmF1dGhuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC93YWxsZXRzV2ViYXV0aG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLGtCQUFnQjtBQUNoQixrRUFBK0Q7QUFFL0QsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO0lBQzdDLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFlBQWlCLENBQUM7SUFDdEIsSUFBSSxhQUFrQixDQUFDO0lBRXZCLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUNYLGlIQUFpSCxDQUFDO0lBQ3BILE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0lBQ3BILE1BQU0sUUFBUSxHQUNaLGlIQUFpSCxDQUFDO0lBRXBILFVBQVUsQ0FBQztRQUNULGFBQWEsR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUQsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzlGLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDNUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVB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QyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgV2FsbGV0cyB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvd2FsbGV0cyc7XG5cbmRlc2NyaWJlKCdXYWxsZXRzIC0gV2ViQXV0aG4gd2FsbGV0IGNyZWF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBsZXQgd2FsbGV0czogV2FsbGV0cztcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja0Jhc2VDb2luOiBhbnk7XG4gIGxldCBtb2NrS2V5Y2hhaW5zOiBhbnk7XG5cbiAgY29uc3QgdXNlclBydiA9ICd4cHJ2U29tZVVzZXJQcml2YXRlS2V5JztcbiAgY29uc3QgdXNlclB1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNGdFhnUzVzWUpBQnFxRzlZTG1DNFExUmRhcDlnU0U4TnF0d3liR2hlUFkyZ1oyOUVTRmpxSm9DdTFSdXBqZThZdEdxc2VmRDI2NVRNZzd1c1VERmRwNlcxRUdNY2V0OCc7XG4gIGNvbnN0IGJhY2t1cFB1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNHY3pqdU1vUm02ZFhhTERFaFcxdTM0Z0tlbmJlWXFBaXgyMW1kVUtKeXV5dTVGMXJ6WUdWeHlMNnRtZ0JVQUVQckV6OTJtQlhqQnlNUmlKZGJhOXdwbk4zN1JMTEFYYSc7XG4gIGNvbnN0IGJpdGdvUHViID1cbiAgICAneHB1YjY2MU15TXdBcVJiY0VZUzh3N1hMU1ZlRXNCWHk3OXpTekgxSjh2Q2R4QVpuaW5nV0xkTjN6Z3RVNkxCcEI4NWIzRDJ5YzhzZnZaVTUyMUFBd2RaYWZFejdtbnpCQnN6NHdLWTVmVHRUUUJtJztcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBtb2NrS2V5Y2hhaW5zID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IHB1YjogdXNlclB1YiwgcHJ2OiB1c2VyUHJ2IH0pLFxuICAgICAgYWRkOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogJ3VzZXIta2V5LWlkJywgcHViOiB1c2VyUHViLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtcHJ2JyB9KSxcbiAgICAgIGNyZWF0ZUJhY2t1cDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6ICdiYWNrdXAta2V5LWlkJywgcHViOiBiYWNrdXBQdWIgfSksXG4gICAgICBjcmVhdGVCaXRHbzogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6ICdiaXRnby1rZXktaWQnLCBwdWI6IGJpdGdvUHViIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrV2FsbGV0RGF0YSA9IHsgaWQ6ICd3YWxsZXQtaWQnLCBrZXlzOiBbJ3VzZXIta2V5LWlkJywgJ2JhY2t1cC1rZXktaWQnLCAnYml0Z28ta2V5LWlkJ10gfTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tXYWxsZXREYXRhKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICAgIGVuY3J5cHQ6IHNpbm9uXG4gICAgICAgIC5zdHViKClcbiAgICAgICAgLmNhbGxzRmFrZSgoeyBwYXNzd29yZCwgaW5wdXQgfTogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IGBlbmNyeXB0ZWQ6JHtwYXNzd29yZH06JHtpbnB1dH1gKSxcbiAgICAgIGVuY3J5cHRBc3luYzogc2lub25cbiAgICAgICAgLnN0dWIoKVxuICAgICAgICAuY2FsbHNGYWtlKFxuICAgICAgICAgIGFzeW5jICh7IHBhc3N3b3JkLCBpbnB1dCB9OiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gYGVuY3J5cHRlZDoke3Bhc3N3b3JkfToke2lucHV0fWBcbiAgICAgICAgKSxcbiAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICB9O1xuXG4gICAgbW9ja0Jhc2VDb2luID0ge1xuICAgICAgaXNFVk06IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIHN1cHBvcnRzVHNzOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdidGMnKSxcbiAgICAgIGdldERlZmF1bHRNdWx0aXNpZ1R5cGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdvbmNoYWluJyksXG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tLZXljaGFpbnMpLFxuICAgICAgdXJsOiBzaW5vbi5zdHViKCkucmV0dXJucygnL3Rlc3QvdXJsJyksXG4gICAgICBpc1ZhbGlkTW9mTlNldHVwOiBzaW5vbi5zdHViKCkucmV0dXJucyh0cnVlKSxcbiAgICAgIGdldENvbmZpZzogc2lub24uc3R1YigpLnJldHVybnMoeyBmZWF0dXJlczogW10gfSksXG4gICAgICBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQ6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtczogYW55KSA9PiBQcm9taXNlLnJlc29sdmUocGFyYW1zKSksXG4gICAgICBzaWduTWVzc2FnZTogc2lub24uc3R1YigpLnJlc29sdmVzKEJ1ZmZlci5mcm9tKCdhYWJiY2MnLCAnaGV4JykpLFxuICAgIH07XG5cbiAgICB3YWxsZXRzID0gbmV3IFdhbGxldHMobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4pO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dlbmVyYXRlV2FsbGV0IHdpdGggd2ViYXV0aG5JbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWRkIHdlYmF1dGhuRGV2aWNlcyB0byBrZXljaGFpbiBwYXJhbXMgd2hlbiB3ZWJhdXRobkluZm8gaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3ZWJhdXRobkluZm8gPSB7XG4gICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsXG4gICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgIHBhc3NwaHJhc2U6ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJyxcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgICBsYWJlbDogJ1Rlc3QgV2FsbGV0JyxcbiAgICAgICAgcGFzc3BocmFzZTogJ3dhbGxldC1wYXNzcGhyYXNlJyxcbiAgICAgICAgd2ViYXV0aG5JbmZvLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtb2NrS2V5Y2hhaW5zLmFkZC5jYWxsZWRPbmNlLCB0cnVlKTtcbiAgICAgIGNvbnN0IGFkZFBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYWRkUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkRldmljZXMnKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkRldmljZXMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgYWRkUGFyYW1zLndlYmF1dGhuRGV2aWNlc1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnb3RwRGV2aWNlSWQnLCB3ZWJhdXRobkluZm8ub3RwRGV2aWNlSWQpO1xuICAgICAgYWRkUGFyYW1zLndlYmF1dGhuRGV2aWNlc1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJmU2FsdCcsIHdlYmF1dGhuSW5mby5wcmZTYWx0KTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkRldmljZXNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNyeXB0IHVzZXIgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgd2ViYXV0aG4gcGFzc3BocmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdlYmF1dGhuUGFzc3BocmFzZSA9ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJztcblxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiAnd2FsbGV0LXBhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogd2ViYXV0aG5QYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRFbmNyeXB0ZWRQcnYgPSBgZW5jcnlwdGVkOiR7d2ViYXV0aG5QYXNzcGhyYXNlfToke3VzZXJQcnZ9YDtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkRldmljZXNbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicsIGV4cGVjdGVkRW5jcnlwdGVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxzbyBlbmNyeXB0IHVzZXIgcHJpdmF0ZSBrZXkgd2l0aCB3YWxsZXQgcGFzc3BocmFzZSB3aGVuIHdlYmF1dGhuSW5mbyBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnd2FsbGV0LXBhc3NwaHJhc2UnO1xuXG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsXG4gICAgICAgICAgcHJmU2FsdDogJ3NhbHQtYWJjJyxcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWRkUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBjb25zdCBleHBlY3RlZEVuY3J5cHRlZFBydiA9IGBlbmNyeXB0ZWQ6JHt3YWxsZXRQYXNzcGhyYXNlfToke3VzZXJQcnZ9YDtcbiAgICAgIGFkZFBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2JywgZXhwZWN0ZWRFbmNyeXB0ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2Ugc2VwYXJhdGUgZW5jcnlwdCBjYWxscyBmb3Igd2FsbGV0IHBhc3NwaHJhc2UgYW5kIHdlYmF1dGhuIHBhc3NwaHJhc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3dhbGxldC1wYXNzcGhyYXNlJztcbiAgICAgIGNvbnN0IHdlYmF1dGhuUGFzc3BocmFzZSA9ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJztcblxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogd2ViYXV0aG5QYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGVuY3J5cHRDYWxscyA9IG1vY2tCaXRHby5lbmNyeXB0QXN5bmMuZ2V0Q2FsbHMoKTtcbiAgICAgIGNvbnN0IHBhc3N3b3Jkc1VzZWQgPSBlbmNyeXB0Q2FsbHMubWFwKChjYWxsOiBzaW5vbi5TaW5vblNweUNhbGwpID0+IGNhbGwuYXJnc1swXS5wYXNzd29yZCk7XG4gICAgICBwYXNzd29yZHNVc2VkLnNob3VsZC5jb250YWluRXFsKHdhbGxldFBhc3NwaHJhc2UpO1xuICAgICAgcGFzc3dvcmRzVXNlZC5zaG91bGQuY29udGFpbkVxbCh3ZWJhdXRoblBhc3NwaHJhc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWRkIHdlYmF1dGhuRGV2aWNlcyB3aGVuIHdlYmF1dGhuSW5mbyBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6ICd3YWxsZXQtcGFzc3BocmFzZScsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1vY2tLZXljaGFpbnMuYWRkLmNhbGxlZE9uY2UsIHRydWUpO1xuICAgICAgY29uc3QgYWRkUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBhZGRQYXJhbXMuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkRldmljZXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFkZCB3ZWJhdXRobkRldmljZXMgd2hlbiB1c2VyS2V5IGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQgKG5vIHBydiBhdmFpbGFibGUpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2hlbiBhIHVzZXItcHJvdmlkZWQgcHVibGljIGtleSBpcyB1c2VkLCB0aGVyZSBpcyBubyBwcml2YXRlIGtleSB0byBlbmNyeXB0LCBzbyB3ZWJhdXRobkRldmljZXMgaXMgc2tpcHBlZFxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICB1c2VyS2V5OiB1c2VyUHViLFxuICAgICAgICBiYWNrdXBYcHViOiBiYWNrdXBQdWIsXG4gICAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsXG4gICAgICAgICAgcHJmU2FsdDogJ3NhbHQtYWJjJyxcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gYWRkIGlzIGNhbGxlZCBmb3IgYm90aCB1c2VyIGtleWNoYWluIChwdWItb25seSkgYW5kIGJhY2t1cCBrZXljaGFpbiAtIG5laXRoZXIgc2hvdWxkIGhhdmUgd2ViYXV0aG5EZXZpY2VzXG4gICAgICBjb25zdCBhbGxBZGRDYWxscyA9IG1vY2tLZXljaGFpbnMuYWRkLmdldENhbGxzKCk7XG4gICAgICBhc3NlcnQub2soYWxsQWRkQ2FsbHMubGVuZ3RoID4gMCwgJ2V4cGVjdGVkIGtleWNoYWlucygpLmFkZCB0byBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZScpO1xuICAgICAgZm9yIChjb25zdCBjYWxsIG9mIGFsbEFkZENhbGxzKSB7XG4gICAgICAgIGNhbGwuYXJnc1swXS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dlYmF1dGhuRGV2aWNlcycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gd2FsbGV0IHdpdGgga2V5Y2hhaW5zIHdoZW4gd2ViYXV0aG5JbmZvIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiAnd2FsbGV0LXBhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3ByZi1kZXJpdmVkLXBhc3NwaHJhc2UnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXljaGFpbicpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdiYWNrdXBLZXljaGFpbicpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdiaXRnb0tleWNoYWluJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c1dlYmF1dGhuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC93YWxsZXRzV2ViYXV0aG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLGtCQUFnQjtBQUNoQixrRUFBK0Q7QUFFL0QsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO0lBQzdDLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFlBQWlCLENBQUM7SUFDdEIsSUFBSSxhQUFrQixDQUFDO0lBRXZCLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUNYLGlIQUFpSCxDQUFDO0lBQ3BILE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0lBQ3BILE1BQU0sUUFBUSxHQUNaLGlIQUFpSCxDQUFDO0lBRXBILFVBQVUsQ0FBQztRQUNULGFBQWEsR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUQsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzlGLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDNUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVB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O1lBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBXYWxsZXRzIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC93YWxsZXRzJztcblxuZGVzY3JpYmUoJ1dhbGxldHMgLSBXZWJBdXRobiB3YWxsZXQgY3JlYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB3YWxsZXRzOiBXYWxsZXRzO1xuICBsZXQgbW9ja0JpdEdvOiBhbnk7XG4gIGxldCBtb2NrQmFzZUNvaW46IGFueTtcbiAgbGV0IG1vY2tLZXljaGFpbnM6IGFueTtcblxuICBjb25zdCB1c2VyUHJ2ID0gJ3hwcnZTb21lVXNlclByaXZhdGVLZXknO1xuICBjb25zdCB1c2VyUHViID1cbiAgICAneHB1YjY2MU15TXdBcVJiY0Z0WGdTNXNZSkFCcXFHOVlMbUM0UTFSZGFwOWdTRThOcXR3eWJHaGVQWTJnWjI5RVNGanFKb0N1MVJ1cGplOFl0R3FzZWZEMjY1VE1nN3VzVURGZHA2VzFFR01jZXQ4JztcbiAgY29uc3QgYmFja3VwUHViID1cbiAgICAneHB1YjY2MU15TXdBcVJiY0djemp1TW9SbTZkWGFMREVoVzF1MzRnS2VuYmVZcUFpeDIxbWRVS0p5dXl1NUYxcnpZR1Z4eUw2dG1nQlVBRVByRXo5Mm1CWGpCeU1SaUpkYmE5d3BuTjM3UkxMQVhhJztcbiAgY29uc3QgYml0Z29QdWIgPVxuICAgICd4cHViNjYxTXlNd0FxUmJjRVlTOHc3WExTVmVFc0JYeTc5elN6SDFKOHZDZHhBWm5pbmdXTGROM3pndFU2TEJwQjg1YjNEMnljOHNmdlpVNTIxQUF3ZFphZkV6N21uekJCc3o0d0tZNWZUdFRRQm0nO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIG1vY2tLZXljaGFpbnMgPSB7XG4gICAgICBjcmVhdGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcHViOiB1c2VyUHViLCBwcnY6IHVzZXJQcnYgfSksXG4gICAgICBhZGQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAndXNlci1rZXktaWQnLCBwdWI6IHVzZXJQdWIsIGVuY3J5cHRlZFBydjogJ2VuY3J5cHRlZC1wcnYnIH0pLFxuICAgICAgY3JlYXRlQmFja3VwOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogJ2JhY2t1cC1rZXktaWQnLCBwdWI6IGJhY2t1cFB1YiB9KSxcbiAgICAgIGNyZWF0ZUJpdEdvOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogJ2JpdGdvLWtleS1pZCcsIHB1YjogYml0Z29QdWIgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXREYXRhID0geyBpZDogJ3dhbGxldC1pZCcsIGtleXM6IFsndXNlci1rZXktaWQnLCAnYmFja3VwLWtleS1pZCcsICdiaXRnby1rZXktaWQnXSB9O1xuXG4gICAgbW9ja0JpdEdvID0ge1xuICAgICAgcG9zdDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja1dhbGxldERhdGEpLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICAgZW5jcnlwdDogc2lub25cbiAgICAgICAgLnN0dWIoKVxuICAgICAgICAuY2FsbHNGYWtlKCh7IHBhc3N3b3JkLCBpbnB1dCB9OiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmcgfSkgPT4gYGVuY3J5cHRlZDoke3Bhc3N3b3JkfToke2lucHV0fWApLFxuICAgICAgZW5jcnlwdEFzeW5jOiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoXG4gICAgICAgICAgYXN5bmMgKHsgcGFzc3dvcmQsIGlucHV0IH06IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBgZW5jcnlwdGVkOiR7cGFzc3dvcmR9OiR7aW5wdXR9YFxuICAgICAgICApLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBpc0VWTTogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldEZhbWlseTogc2lub24uc3R1YigpLnJldHVybnMoJ2J0YycpLFxuICAgICAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ29uY2hhaW4nKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCcvdGVzdC91cmwnKSxcbiAgICAgIGlzVmFsaWRNb2ZOU2V0dXA6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgZ2V0Q29uZmlnOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGZlYXR1cmVzOiBbXSB9KSxcbiAgICAgIHN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGFyYW1zOiBhbnkpID0+IFByb21pc2UucmVzb2x2ZShwYXJhbXMpKSxcbiAgICAgIHNpZ25NZXNzYWdlOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoQnVmZmVyLmZyb20oJ2FhYmJjYycsICdoZXgnKSksXG4gICAgfTtcblxuICAgIHdhbGxldHMgPSBuZXcgV2FsbGV0cyhtb2NrQml0R28sIG1vY2tCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVXYWxsZXQgd2l0aCB3ZWJhdXRobkluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhZGQgd2ViYXV0aG5JbmZvICh3aXRoIGVudGVycHJpc2VJZCkgdG8ga2V5Y2hhaW4gcGFyYW1zIHdoZW4gd2ViYXV0aG5JbmZvIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2ViYXV0aG5JbmZvID0ge1xuICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICBwcmZTYWx0OiAnc2FsdC1hYmMnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6ICd3YWxsZXQtcGFzc3BocmFzZScsXG4gICAgICAgIGVudGVycHJpc2U6ICdlbnRlcnByaXNlLTEyMycsXG4gICAgICAgIHdlYmF1dGhuSW5mbyxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobW9ja0tleWNoYWlucy5hZGQuY2FsbGVkT25jZSwgdHJ1ZSk7XG4gICAgICBjb25zdCBhZGRQYXJhbXMgPSBtb2NrS2V5Y2hhaW5zLmFkZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIGFkZFBhcmFtcy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dlYmF1dGhuRGV2aWNlcycpO1xuICAgICAgYWRkUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkluZm8nKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ290cERldmljZUlkJywgd2ViYXV0aG5JbmZvLm90cERldmljZUlkKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3ByZlNhbHQnLCB3ZWJhdXRobkluZm8ucHJmU2FsdCk7XG4gICAgICBhZGRQYXJhbXMud2ViYXV0aG5JbmZvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbnRlcnByaXNlSWQnLCAnZW50ZXJwcmlzZS0xMjMnKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNyeXB0IHVzZXIgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgd2ViYXV0aG4gcGFzc3BocmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdlYmF1dGhuUGFzc3BocmFzZSA9ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJztcblxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiAnd2FsbGV0LXBhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogd2ViYXV0aG5QYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRFbmNyeXB0ZWRQcnYgPSBgZW5jcnlwdGVkOiR7d2ViYXV0aG5QYXNzcGhyYXNlfToke3VzZXJQcnZ9YDtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicsIGV4cGVjdGVkRW5jcnlwdGVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxzbyBlbmNyeXB0IHVzZXIgcHJpdmF0ZSBrZXkgd2l0aCB3YWxsZXQgcGFzc3BocmFzZSB3aGVuIHdlYmF1dGhuSW5mbyBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnd2FsbGV0LXBhc3NwaHJhc2UnO1xuXG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsXG4gICAgICAgICAgcHJmU2FsdDogJ3NhbHQtYWJjJyxcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWRkUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBjb25zdCBleHBlY3RlZEVuY3J5cHRlZFBydiA9IGBlbmNyeXB0ZWQ6JHt3YWxsZXRQYXNzcGhyYXNlfToke3VzZXJQcnZ9YDtcbiAgICAgIGFkZFBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2JywgZXhwZWN0ZWRFbmNyeXB0ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2Ugc2VwYXJhdGUgZW5jcnlwdCBjYWxscyBmb3Igd2FsbGV0IHBhc3NwaHJhc2UgYW5kIHdlYmF1dGhuIHBhc3NwaHJhc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3dhbGxldC1wYXNzcGhyYXNlJztcbiAgICAgIGNvbnN0IHdlYmF1dGhuUGFzc3BocmFzZSA9ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJztcblxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogd2ViYXV0aG5QYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGVuY3J5cHRDYWxscyA9IG1vY2tCaXRHby5lbmNyeXB0QXN5bmMuZ2V0Q2FsbHMoKTtcbiAgICAgIGNvbnN0IHBhc3N3b3Jkc1VzZWQgPSBlbmNyeXB0Q2FsbHMubWFwKChjYWxsOiBzaW5vbi5TaW5vblNweUNhbGwpID0+IGNhbGwuYXJnc1swXS5wYXNzd29yZCk7XG4gICAgICBwYXNzd29yZHNVc2VkLnNob3VsZC5jb250YWluRXFsKHdhbGxldFBhc3NwaHJhc2UpO1xuICAgICAgcGFzc3dvcmRzVXNlZC5zaG91bGQuY29udGFpbkVxbCh3ZWJhdXRoblBhc3NwaHJhc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWRkIHdlYmF1dGhuSW5mbyB3aGVuIHdlYmF1dGhuSW5mbyBpcyBub3QgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6ICd3YWxsZXQtcGFzc3BocmFzZScsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1vY2tLZXljaGFpbnMuYWRkLmNhbGxlZE9uY2UsIHRydWUpO1xuICAgICAgY29uc3QgYWRkUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBhZGRQYXJhbXMuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkluZm8nKTtcbiAgICAgIGFkZFBhcmFtcy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dlYmF1dGhuRGV2aWNlcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWRkIHdlYmF1dGhuSW5mbyB3aGVuIHVzZXJLZXkgaXMgZXhwbGljaXRseSBwcm92aWRlZCAobm8gcHJ2IGF2YWlsYWJsZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBXaGVuIGEgdXNlci1wcm92aWRlZCBwdWJsaWMga2V5IGlzIHVzZWQsIHRoZXJlIGlzIG5vIHByaXZhdGUga2V5IHRvIGVuY3J5cHQsIHNvIHdlYmF1dGhuSW5mbyBpcyBza2lwcGVkXG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHVzZXJLZXk6IHVzZXJQdWIsXG4gICAgICAgIGJhY2t1cFhwdWI6IGJhY2t1cFB1YixcbiAgICAgICAgd2ViYXV0aG5JbmZvOiB7XG4gICAgICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMTIzJyxcbiAgICAgICAgICBwcmZTYWx0OiAnc2FsdC1hYmMnLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBhZGQgaXMgY2FsbGVkIGZvciBib3RoIHVzZXIga2V5Y2hhaW4gKHB1Yi1vbmx5KSBhbmQgYmFja3VwIGtleWNoYWluIC0gbmVpdGhlciBzaG91bGQgaGF2ZSB3ZWJhdXRobkluZm9cbiAgICAgIGNvbnN0IGFsbEFkZENhbGxzID0gbW9ja0tleWNoYWlucy5hZGQuZ2V0Q2FsbHMoKTtcbiAgICAgIGFzc2VydC5vayhhbGxBZGRDYWxscy5sZW5ndGggPiAwLCAnZXhwZWN0ZWQga2V5Y2hhaW5zKCkuYWRkIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlJyk7XG4gICAgICBmb3IgKGNvbnN0IGNhbGwgb2YgYWxsQWRkQ2FsbHMpIHtcbiAgICAgICAgY2FsbC5hcmdzWzBdLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2ViYXV0aG5JbmZvJyk7XG4gICAgICAgIGNhbGwuYXJnc1swXS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dlYmF1dGhuRGV2aWNlcycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gd2FsbGV0IHdpdGgga2V5Y2hhaW5zIHdoZW4gd2ViYXV0aG5JbmZvIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiAnd2FsbGV0LXBhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogJ3ByZi1kZXJpdmVkLXBhc3NwaHJhc2UnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnd2FsbGV0Jyk7XG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXljaGFpbicpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdiYWNrdXBLZXljaGFpbicpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdiaXRnb0tleWNoYWluJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|