@bitgo-beta/passkey-crypto 0.0.1-alpha.2 → 0.0.1-alpha.4
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/attachPasskeyToWallet.d.ts.map +1 -1
- package/dist/src/attachPasskeyToWallet.js +12 -16
- package/dist/src/base64url.d.ts +16 -0
- package/dist/src/base64url.d.ts.map +1 -0
- package/dist/src/base64url.js +27 -0
- package/dist/src/deriveEnterpriseSalt.d.ts +7 -1
- package/dist/src/deriveEnterpriseSalt.d.ts.map +1 -1
- package/dist/src/deriveEnterpriseSalt.js +11 -4
- package/dist/src/derivePasskeyPrfKey.d.ts.map +1 -1
- package/dist/src/derivePasskeyPrfKey.js +37 -14
- package/dist/src/prfHelpers.d.ts.map +1 -1
- package/dist/src/prfHelpers.js +19 -4
- package/dist/src/registerPasskey.d.ts.map +1 -1
- package/dist/src/registerPasskey.js +4 -7
- package/dist/test/unit/base64url.test.d.ts +2 -0
- package/dist/test/unit/base64url.test.d.ts.map +1 -0
- package/dist/test/unit/base64url.test.js +75 -0
- package/dist/test/unit/deriveEnterpriseSalt.test.js +8 -4
- package/dist/test/unit/derivePasskeyPrfKey.test.js +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -39,7 +39,10 @@ const src_1 = require("../../src");
|
|
|
39
39
|
const REAL_FIXTURE = {
|
|
40
40
|
basePrfSalt: 'ZqJ64M2dL65zn2-Jxd58SMN2ILc9QjbCFxUTGHd_LC8',
|
|
41
41
|
enterpriseId: '69c2aea1a3d7bc07f7f775c0ca86b0ec',
|
|
42
|
-
|
|
42
|
+
// base64url encoding of the HMAC-SHA256(baseSalt_decoded, enterpriseId) digest.
|
|
43
|
+
// Same encoding the server stores and the WebAuthn PRF extension consumes — keeping
|
|
44
|
+
// one encoding everywhere avoids the hex/base64url mismatch that broke browser PRF.
|
|
45
|
+
expectedDerivedSalt: 'oiasOqzkuyuEz_8043-3IXYghSu3LV4N_a1MLIRzmU8',
|
|
43
46
|
};
|
|
44
47
|
describe('deriveEnterpriseSalt', function () {
|
|
45
48
|
it('produces the correct derived salt for real fixture values', function () {
|
|
@@ -63,11 +66,12 @@ describe('deriveEnterpriseSalt', function () {
|
|
|
63
66
|
const saltB = (0, src_1.deriveEnterpriseSalt)('deadbeefcafebabe0102030405060708', REAL_FIXTURE.enterpriseId);
|
|
64
67
|
assert.notStrictEqual(saltA, saltB);
|
|
65
68
|
});
|
|
66
|
-
it('returns a non-empty
|
|
69
|
+
it('returns a non-empty unpadded base64url string', function () {
|
|
67
70
|
const result = (0, src_1.deriveEnterpriseSalt)(REAL_FIXTURE.basePrfSalt, REAL_FIXTURE.enterpriseId);
|
|
68
71
|
assert.strictEqual(typeof result, 'string');
|
|
69
72
|
assert.ok(result.length > 0);
|
|
70
|
-
|
|
73
|
+
// Base64url alphabet, no padding. SHA-256 = 32 bytes → 43 base64url chars.
|
|
74
|
+
assert.match(result, /^[A-Za-z0-9_-]{43}$/);
|
|
71
75
|
});
|
|
72
76
|
});
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlRW50ZXJwcmlzZVNhbHQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9kZXJpdmVFbnRlcnByaXNlU2FsdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBQ2pDLG1DQUFpRDtBQUVqRCwrRUFBK0U7QUFDL0UsTUFBTSxZQUFZLEdBQUc7SUFDbkIsV0FBVyxFQUFFLDZDQUE2QztJQUMxRCxZQUFZLEVBQUUsa0NBQWtDO0lBQ2hELGdGQUFnRjtJQUNoRixvRkFBb0Y7SUFDcEYsb0ZBQW9GO0lBQ3BGLG1CQUFtQixFQUFFLDZDQUE2QztDQUNuRSxDQUFDO0FBRUYsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLEVBQUUsQ0FBQywyREFBMkQsRUFBRTtRQUM5RCwrRUFBK0U7UUFDL0UsbUVBQW1FO1FBQ25FLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQ3pFLFlBQVksQ0FBQyxtQkFBbUIsQ0FDakMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RixNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFO1FBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUEsMEJBQW9CLEVBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDeEYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUU7UUFDL0UsTUFBTSxLQUFLLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RixNQUFNLEtBQUssR0FBRyxJQUFBLDBCQUFvQixFQUFDLGtDQUFrQyxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFvQixFQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdCLDJFQUEyRTtRQUMzRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlcml2ZUVudGVycHJpc2VTYWx0IH0gZnJvbSAnLi4vLi4vc3JjJztcblxuLy8gUmVhbCBmaXh0dXJlIHZhbHVlcyBjYXB0dXJlZCBmcm9tIGEgbGl2ZSBlbnZpcm9ubWVudCAoREIgKyBicm93c2VyIGRldnRvb2xzKVxuY29uc3QgUkVBTF9GSVhUVVJFID0ge1xuICBiYXNlUHJmU2FsdDogJ1pxSjY0TTJkTDY1em4yLUp4ZDU4U01OMklMYzlRamJDRnhVVEdIZF9MQzgnLFxuICBlbnRlcnByaXNlSWQ6ICc2OWMyYWVhMWEzZDdiYzA3ZjdmNzc1YzBjYTg2YjBlYycsXG4gIC8vIGJhc2U2NHVybCBlbmNvZGluZyBvZiB0aGUgSE1BQy1TSEEyNTYoYmFzZVNhbHRfZGVjb2RlZCwgZW50ZXJwcmlzZUlkKSBkaWdlc3QuXG4gIC8vIFNhbWUgZW5jb2RpbmcgdGhlIHNlcnZlciBzdG9yZXMgYW5kIHRoZSBXZWJBdXRobiBQUkYgZXh0ZW5zaW9uIGNvbnN1bWVzIOKAlCBrZWVwaW5nXG4gIC8vIG9uZSBlbmNvZGluZyBldmVyeXdoZXJlIGF2b2lkcyB0aGUgaGV4L2Jhc2U2NHVybCBtaXNtYXRjaCB0aGF0IGJyb2tlIGJyb3dzZXIgUFJGLlxuICBleHBlY3RlZERlcml2ZWRTYWx0OiAnb2lhc09xemt1eXVFel84MDQzLTNJWFlnaFN1M0xWNE5fYTFNTElSem1VOCcsXG59O1xuXG5kZXNjcmliZSgnZGVyaXZlRW50ZXJwcmlzZVNhbHQnLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdwcm9kdWNlcyB0aGUgY29ycmVjdCBkZXJpdmVkIHNhbHQgZm9yIHJlYWwgZml4dHVyZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVmVyaWZpZXMgU0RLIG91dHB1dCBtYXRjaGVzIHdoYXQgdGhlIHJldGFpbCBVSSBwcm9kdWNlcyBmb3IgdGhlIHNhbWUgaW5wdXRzLFxuICAgIC8vIGVuc3VyaW5nIGNsaWVudHMgY2FuIG1vdmUgYmV0d2VlbiBTREsgYW5kIHJldGFpbCBhcHAgc2VhbWxlc3NseS5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsIFJFQUxfRklYVFVSRS5lbnRlcnByaXNlSWQpLFxuICAgICAgUkVBTF9GSVhUVVJFLmV4cGVjdGVkRGVyaXZlZFNhbHRcbiAgICApO1xuICB9KTtcblxuICBpdCgnaXMgZGV0ZXJtaW5pc3RpYyDigJQgc2FtZSBpbnB1dHMgYWx3YXlzIHByb2R1Y2UgdGhlIHNhbWUgc2FsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmaXJzdCA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgY29uc3Qgc2Vjb25kID0gZGVyaXZlRW50ZXJwcmlzZVNhbHQoUkVBTF9GSVhUVVJFLmJhc2VQcmZTYWx0LCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBhc3NlcnQub2soZmlyc3QpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaXJzdCwgc2Vjb25kKTtcbiAgfSk7XG5cbiAgaXQoJ3Byb2R1Y2VzIGRpZmZlcmVudCBzYWx0cyBmb3IgZGlmZmVyZW50IGVudGVycHJpc2VJZHMgd2l0aCB0aGUgc2FtZSBwcmZTYWx0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhbHRBID0gZGVyaXZlRW50ZXJwcmlzZVNhbHQoUkVBTF9GSVhUVVJFLmJhc2VQcmZTYWx0LCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBjb25zdCBzYWx0QiA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgJ2RpZmZlcmVudC1lbnRlcnByaXNlLWlkJyk7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHNhbHRBLCBzYWx0Qik7XG4gIH0pO1xuXG4gIGl0KCdwcm9kdWNlcyBkaWZmZXJlbnQgc2FsdHMgZm9yIGRpZmZlcmVudCBwcmZTYWx0cyB3aXRoIHRoZSBzYW1lIGVudGVycHJpc2VJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzYWx0QSA9IGRlcml2ZUVudGVycHJpc2VTYWx0KFJFQUxfRklYVFVSRS5iYXNlUHJmU2FsdCwgUkVBTF9GSVhUVVJFLmVudGVycHJpc2VJZCk7XG4gICAgY29uc3Qgc2FsdEIgPSBkZXJpdmVFbnRlcnByaXNlU2FsdCgnZGVhZGJlZWZjYWZlYmFiZTAxMDIwMzA0MDUwNjA3MDgnLCBSRUFMX0ZJWFRVUkUuZW50ZXJwcmlzZUlkKTtcbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoc2FsdEEsIHNhbHRCKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgYSBub24tZW1wdHkgdW5wYWRkZWQgYmFzZTY0dXJsIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBkZXJpdmVFbnRlcnByaXNlU2FsdChSRUFMX0ZJWFRVUkUuYmFzZVByZlNhbHQsIFJFQUxfRklYVFVSRS5lbnRlcnByaXNlSWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LCAnc3RyaW5nJyk7XG4gICAgYXNzZXJ0Lm9rKHJlc3VsdC5sZW5ndGggPiAwKTtcbiAgICAvLyBCYXNlNjR1cmwgYWxwaGFiZXQsIG5vIHBhZGRpbmcuIFNIQS0yNTYgPSAzMiBieXRlcyDihpIgNDMgYmFzZTY0dXJsIGNoYXJzLlxuICAgIGFzc2VydC5tYXRjaChyZXN1bHQsIC9eW0EtWmEtejAtOV8tXXs0M30kLyk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -99,7 +99,7 @@ describe('derivePasskeyPrfKey', function () {
|
|
|
99
99
|
assert.strictEqual(getCallArgs.evalByCredential['cred-bbb'], 'salt-bbb');
|
|
100
100
|
// Verify bitgo was used to fetch the assertion challenge
|
|
101
101
|
assert.ok(mockBitGo.get.calledOnce);
|
|
102
|
-
assert.ok(mockBitGo.url.calledWith('/user/otp/webauthn/
|
|
102
|
+
assert.ok(mockBitGo.url.calledWith('/user/otp/webauthn/auth', 2));
|
|
103
103
|
});
|
|
104
104
|
it("should throw 'No passkey devices available' when no devices", async function () {
|
|
105
105
|
const wallet = makeWallet(undefined);
|
|
@@ -149,4 +149,4 @@ describe('derivePasskeyPrfKey', function () {
|
|
|
149
149
|
});
|
|
150
150
|
});
|
|
151
151
|
});
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Rlcml2ZVBhc3NrZXlQcmZLZXkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsdUVBQW9FO0FBRXBFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixNQUFNLFdBQVcsR0FBRztRQUNsQjtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7UUFDRDtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7S0FDRixDQUFDO0lBRUYsU0FBUyxVQUFVLENBQUMsT0FBdUM7UUFDekQsT0FBTztZQUNMLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixHQUFHLEVBQUUsU0FBUztnQkFDZCxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLGVBQWUsRUFBRSxPQUFPO2FBQ3pCLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsU0FBUyxDQUFDLFNBQVMsR0FBRyxzQkFBc0I7UUFDbkQsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFB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IGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgZGVyaXZlUGFzc2tleVByZktleSB9IGZyb20gJy4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5JztcblxuZGVzY3JpYmUoJ2Rlcml2ZVBhc3NrZXlQcmZLZXknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1vY2tEZXZpY2VzID0gW1xuICAgIHtcbiAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEnLFxuICAgICAgYXV0aGVudGljYXRvckluZm86IHsgY3JlZElEOiAnY3JlZC1hYWEnLCBmbXQ6ICdub25lJyBhcyBjb25zdCwgcHVibGljS2V5OiAncGstMScgfSxcbiAgICAgIHByZlNhbHQ6ICdzYWx0LWFhYScsXG4gICAgICBlbmNyeXB0ZWRQcnY6ICdlbmMtcHJ2LTEnLFxuICAgIH0sXG4gICAge1xuICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMicsXG4gICAgICBhdXRoZW50aWNhdG9ySW5mbzogeyBjcmVkSUQ6ICdjcmVkLWJiYicsIGZtdDogJ25vbmUnIGFzIGNvbnN0LCBwdWJsaWNLZXk6ICdway0yJyB9LFxuICAgICAgcHJmU2FsdDogJ3NhbHQtYmJiJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYy1wcnYtMicsXG4gICAgfSxcbiAgXTtcblxuICBmdW5jdGlvbiBtYWtlV2FsbGV0KGRldmljZXM6IHR5cGVvZiBtb2NrRGV2aWNlcyB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAna2V5Y2hhaW4taWQnLFxuICAgICAgICBwdWI6ICd4cHViMTIzJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogZGV2aWNlcyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlQml0R28oY2hhbGxlbmdlID0gJ2RHVnpkQzFqYUdGc2JHVnVaMlU9Jykge1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gYGh0dHBzOi8vYXBwLmJpdGdvLmNvbS9hcGkvdjIke3BhdGh9YCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBjaGFsbGVuZ2UgfSksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgaGV4IHN0cmluZyBvbiBoYXBweSBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHByZlJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsweGRlLCAweGFkLCAweGJlLCAweGVmXSkuYnVmZmVyO1xuXG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHByZlJlc3VsdCxcbiAgICAgICAgY3JlZGVudGlhbElkOiAnY3JlZC1hYWEnLFxuICAgICAgICBvdHBDb2RlOiAnb3RwLTEyMycsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldChtb2NrRGV2aWNlcyk7XG4gICAgY29uc3QgbW9ja0JpdEdvID0gbWFrZUJpdEdvKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVQYXNza2V5UHJmS2V5KHtcbiAgICAgIGJpdGdvOiBtb2NrQml0R28gYXMgYW55LFxuICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgYW55LFxuICAgICAgcHJvdmlkZXI6IG1vY2tQcm92aWRlcixcbiAgICB9KTtcblxuICAgIC8vIGRlcml2ZVBhc3N3b3JkIGNvbnZlcnRzIEFycmF5QnVmZmVyIHRvIGhleFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsICdkZWFkYmVlZicpO1xuICAgIGFzc2VydC5vayhtb2NrUHJvdmlkZXIuZ2V0LmNhbGxlZE9uY2UpO1xuICAgIC8vIFZlcmlmeSBldmFsQnlDcmVkZW50aWFsIHdhcyBwYXNzZWRcbiAgICBjb25zdCBnZXRDYWxsQXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldENhbGxBcmdzLmV2YWxCeUNyZWRlbnRpYWxbJ2NyZWQtYWFhJ10sICdzYWx0LWFhYScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRDYWxsQXJncy5ldmFsQnlDcmVkZW50aWFsWydjcmVkLWJiYiddLCAnc2FsdC1iYmInKTtcbiAgICAvLyBWZXJpZnkgYml0Z28gd2FzIHVzZWQgdG8gZmV0Y2ggdGhlIGFzc2VydGlvbiBjaGFsbGVuZ2VcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLmdldC5jYWxsZWRPbmNlKTtcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLnVybC5jYWxsZWRXaXRoKCcvdXNlci9vdHAvd2ViYXV0aG4vYXNzZXJ0aW9uJywgMikpO1xuICB9KTtcblxuICBpdChcInNob3VsZCB0aHJvdyAnTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZScgd2hlbiBubyBkZXZpY2VzXCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KHVuZGVmaW5lZCk7XG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0geyBjcmVhdGU6IHNpbm9uLnN0dWIoKSwgZ2V0OiBzaW5vbi5zdHViKCkgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gZGVyaXZlUGFzc2tleVByZktleSh7IGJpdGdvOiBtYWtlQml0R28oKSBhcyBhbnksIHdhbGxldDogd2FsbGV0IGFzIGFueSwgcHJvdmlkZXI6IG1vY2tQcm92aWRlciB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIubWVzc2FnZSwgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgdGhyb3cgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnIHdoZW4gZGV2aWNlcyBhcnJheSBpcyBlbXB0eVwiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldChbXSBhcyBhbnkpO1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHsgY3JlYXRlOiBzaW5vbi5zdHViKCksIGdldDogc2lub24uc3R1YigpIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbzogbWFrZUJpdEdvKCkgYXMgYW55LCB3YWxsZXQ6IHdhbGxldCBhcyBhbnksIHByb3ZpZGVyOiBtb2NrUHJvdmlkZXIgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHRocm93ICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlIHdpdGggYSB2YWxpZCBQUkYgc2FsdCcgd2hlbiBubyBkZXZpY2UgaGFzIHByZlNhbHRcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRldmljZXNXaXRob3V0U2FsdCA9IFtcbiAgICAgIHtcbiAgICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMScsXG4gICAgICAgIGF1dGhlbnRpY2F0b3JJbmZvOiB7IGNyZWRJRDogJ2NyZWQtYWFhJywgZm10OiAnbm9uZScgYXMgY29uc3QsIHB1YmxpY0tleTogJ3BrLTEnIH0sXG4gICAgICAgIHByZlNhbHQ6ICcnLCAvLyBlbXB0eSDigJQgYnVpbGRFdmFsQnlDcmVkZW50aWFsIHNraXBzIGZhbHN5IHByZlNhbHRcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jLXBydi0xJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoZGV2aWNlc1dpdGhvdXRTYWx0IGFzIGFueSk7XG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0geyBjcmVhdGU6IHNpbm9uLnN0dWIoKSwgZ2V0OiBzaW5vbi5zdHViKCkgfTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gZGVyaXZlUGFzc2tleVByZktleSh7IGJpdGdvOiBtYWtlQml0R28oKSBhcyBhbnksIHdhbGxldDogd2FsbGV0IGFzIGFueSwgcHJvdmlkZXI6IG1vY2tQcm92aWRlciB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIubWVzc2FnZSwgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUgd2l0aCBhIHZhbGlkIFBSRiBzYWx0Jyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHRocm93ICdDb3VsZCBub3QgaWRlbnRpZnkgd2hpY2ggcGFzc2tleSBkZXZpY2Ugd2FzIHVzZWQnIHdoZW4gY3JlZGVudGlhbElkIG5vdCBmb3VuZFwiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHByZlJlc3VsdDogbmV3IEFycmF5QnVmZmVyKDMyKSxcbiAgICAgICAgY3JlZGVudGlhbElkOiAndW5rbm93bi1jcmVkLWlkJyxcbiAgICAgICAgb3RwQ29kZTogJ290cC0xMjMnLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQobW9ja0RldmljZXMpO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiBkZXJpdmVQYXNza2V5UHJmS2V5KHsgYml0Z286IG1ha2VCaXRHbygpIGFzIGFueSwgd2FsbGV0OiB3YWxsZXQgYXMgYW55LCBwcm92aWRlcjogbW9ja1Byb3ZpZGVyIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5tZXNzYWdlLCAnQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlUGFzc2tleVByZktleS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2Rlcml2ZVBhc3NrZXlQcmZLZXkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsdUVBQW9FO0FBRXBFLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtJQUM5QixNQUFNLFdBQVcsR0FBRztRQUNsQjtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7UUFDRDtZQUNFLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLFdBQVc7U0FDMUI7S0FDRixDQUFDO0lBRUYsU0FBUyxVQUFVLENBQUMsT0FBdUM7UUFDekQsT0FBTztZQUNMLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixHQUFHLEVBQUUsU0FBUztnQkFDZCxZQUFZLEVBQUUsZUFBZTtnQkFDN0IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLGVBQWUsRUFBRSxPQUFPO2FBQ3pCLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsU0FBUyxDQUFDLFNBQVMsR0FBRyxzQkFBc0I7UUFDbkQsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFB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IGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgZGVyaXZlUGFzc2tleVByZktleSB9IGZyb20gJy4uLy4uL3NyYy9kZXJpdmVQYXNza2V5UHJmS2V5JztcblxuZGVzY3JpYmUoJ2Rlcml2ZVBhc3NrZXlQcmZLZXknLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG1vY2tEZXZpY2VzID0gW1xuICAgIHtcbiAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEnLFxuICAgICAgYXV0aGVudGljYXRvckluZm86IHsgY3JlZElEOiAnY3JlZC1hYWEnLCBmbXQ6ICdub25lJyBhcyBjb25zdCwgcHVibGljS2V5OiAncGstMScgfSxcbiAgICAgIHByZlNhbHQ6ICdzYWx0LWFhYScsXG4gICAgICBlbmNyeXB0ZWRQcnY6ICdlbmMtcHJ2LTEnLFxuICAgIH0sXG4gICAge1xuICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMicsXG4gICAgICBhdXRoZW50aWNhdG9ySW5mbzogeyBjcmVkSUQ6ICdjcmVkLWJiYicsIGZtdDogJ25vbmUnIGFzIGNvbnN0LCBwdWJsaWNLZXk6ICdway0yJyB9LFxuICAgICAgcHJmU2FsdDogJ3NhbHQtYmJiJyxcbiAgICAgIGVuY3J5cHRlZFBydjogJ2VuYy1wcnYtMicsXG4gICAgfSxcbiAgXTtcblxuICBmdW5jdGlvbiBtYWtlV2FsbGV0KGRldmljZXM6IHR5cGVvZiBtb2NrRGV2aWNlcyB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB7XG4gICAgICBnZXRFbmNyeXB0ZWRVc2VyS2V5Y2hhaW46IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIGlkOiAna2V5Y2hhaW4taWQnLFxuICAgICAgICBwdWI6ICd4cHViMTIzJyxcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicsXG4gICAgICAgIHR5cGU6ICdpbmRlcGVuZGVudCcsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogZGV2aWNlcyxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlQml0R28oY2hhbGxlbmdlID0gJ2RHVnpkQzFqYUdGc2JHVnVaMlU9Jykge1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhdGg6IHN0cmluZykgPT4gYGh0dHBzOi8vYXBwLmJpdGdvLmNvbS9hcGkvdjIke3BhdGh9YCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBjaGFsbGVuZ2UgfSksXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGEgaGV4IHN0cmluZyBvbiBoYXBweSBwYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHByZlJlc3VsdCA9IG5ldyBVaW50OEFycmF5KFsweGRlLCAweGFkLCAweGJlLCAweGVmXSkuYnVmZmVyO1xuXG4gICAgY29uc3QgbW9ja1Byb3ZpZGVyID0ge1xuICAgICAgY3JlYXRlOiBzaW5vbi5zdHViKCksXG4gICAgICBnZXQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7XG4gICAgICAgIHByZlJlc3VsdCxcbiAgICAgICAgY3JlZGVudGlhbElkOiAnY3JlZC1hYWEnLFxuICAgICAgICBvdHBDb2RlOiAnb3RwLTEyMycsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldChtb2NrRGV2aWNlcyk7XG4gICAgY29uc3QgbW9ja0JpdEdvID0gbWFrZUJpdEdvKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZXJpdmVQYXNza2V5UHJmS2V5KHtcbiAgICAgIGJpdGdvOiBtb2NrQml0R28gYXMgYW55LFxuICAgICAgd2FsbGV0OiB3YWxsZXQgYXMgYW55LFxuICAgICAgcHJvdmlkZXI6IG1vY2tQcm92aWRlcixcbiAgICB9KTtcblxuICAgIC8vIGRlcml2ZVBhc3N3b3JkIGNvbnZlcnRzIEFycmF5QnVmZmVyIHRvIGhleFxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsICdkZWFkYmVlZicpO1xuICAgIGFzc2VydC5vayhtb2NrUHJvdmlkZXIuZ2V0LmNhbGxlZE9uY2UpO1xuICAgIC8vIFZlcmlmeSBldmFsQnlDcmVkZW50aWFsIHdhcyBwYXNzZWRcbiAgICBjb25zdCBnZXRDYWxsQXJncyA9IG1vY2tQcm92aWRlci5nZXQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldENhbGxBcmdzLmV2YWxCeUNyZWRlbnRpYWxbJ2NyZWQtYWFhJ10sICdzYWx0LWFhYScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRDYWxsQXJncy5ldmFsQnlDcmVkZW50aWFsWydjcmVkLWJiYiddLCAnc2FsdC1iYmInKTtcbiAgICAvLyBWZXJpZnkgYml0Z28gd2FzIHVzZWQgdG8gZmV0Y2ggdGhlIGFzc2VydGlvbiBjaGFsbGVuZ2VcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLmdldC5jYWxsZWRPbmNlKTtcbiAgICBhc3NlcnQub2sobW9ja0JpdEdvLnVybC5jYWxsZWRXaXRoKCcvdXNlci9vdHAvd2ViYXV0aG4vYXV0aCcsIDIpKTtcbiAgfSk7XG5cbiAgaXQoXCJzaG91bGQgdGhyb3cgJ05vIHBhc3NrZXkgZGV2aWNlcyBhdmFpbGFibGUnIHdoZW4gbm8gZGV2aWNlc1wiLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCh1bmRlZmluZWQpO1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHsgY3JlYXRlOiBzaW5vbi5zdHViKCksIGdldDogc2lub24uc3R1YigpIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbzogbWFrZUJpdEdvKCkgYXMgYW55LCB3YWxsZXQ6IHdhbGxldCBhcyBhbnksIHByb3ZpZGVyOiBtb2NrUHJvdmlkZXIgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIHRocm93ICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlJyB3aGVuIGRldmljZXMgYXJyYXkgaXMgZW1wdHlcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdhbGxldCA9IG1ha2VXYWxsZXQoW10gYXMgYW55KTtcbiAgICBjb25zdCBtb2NrUHJvdmlkZXIgPSB7IGNyZWF0ZTogc2lub24uc3R1YigpLCBnZXQ6IHNpbm9uLnN0dWIoKSB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiBkZXJpdmVQYXNza2V5UHJmS2V5KHsgYml0Z286IG1ha2VCaXRHbygpIGFzIGFueSwgd2FsbGV0OiB3YWxsZXQgYXMgYW55LCBwcm92aWRlcjogbW9ja1Byb3ZpZGVyIH0pLFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5tZXNzYWdlLCAnTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZScpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuICBpdChcInNob3VsZCB0aHJvdyAnTm8gcGFzc2tleSBkZXZpY2VzIGF2YWlsYWJsZSB3aXRoIGEgdmFsaWQgUFJGIHNhbHQnIHdoZW4gbm8gZGV2aWNlIGhhcyBwcmZTYWx0XCIsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXZpY2VzV2l0aG91dFNhbHQgPSBbXG4gICAgICB7XG4gICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEnLFxuICAgICAgICBhdXRoZW50aWNhdG9ySW5mbzogeyBjcmVkSUQ6ICdjcmVkLWFhYScsIGZtdDogJ25vbmUnIGFzIGNvbnN0LCBwdWJsaWNLZXk6ICdway0xJyB9LFxuICAgICAgICBwcmZTYWx0OiAnJywgLy8gZW1wdHkg4oCUIGJ1aWxkRXZhbEJ5Q3JlZGVudGlhbCBza2lwcyBmYWxzeSBwcmZTYWx0XG4gICAgICAgIGVuY3J5cHRlZFBydjogJ2VuYy1wcnYtMScsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KGRldmljZXNXaXRob3V0U2FsdCBhcyBhbnkpO1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHsgY3JlYXRlOiBzaW5vbi5zdHViKCksIGdldDogc2lub24uc3R1YigpIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IGRlcml2ZVBhc3NrZXlQcmZLZXkoeyBiaXRnbzogbWFrZUJpdEdvKCkgYXMgYW55LCB3YWxsZXQ6IHdhbGxldCBhcyBhbnksIHByb3ZpZGVyOiBtb2NrUHJvdmlkZXIgfSksXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLm1lc3NhZ2UsICdObyBwYXNza2V5IGRldmljZXMgYXZhaWxhYmxlIHdpdGggYSB2YWxpZCBQUkYgc2FsdCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcblxuICBpdChcInNob3VsZCB0aHJvdyAnQ291bGQgbm90IGlkZW50aWZ5IHdoaWNoIHBhc3NrZXkgZGV2aWNlIHdhcyB1c2VkJyB3aGVuIGNyZWRlbnRpYWxJZCBub3QgZm91bmRcIiwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1vY2tQcm92aWRlciA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLFxuICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICBwcmZSZXN1bHQ6IG5ldyBBcnJheUJ1ZmZlcigzMiksXG4gICAgICAgIGNyZWRlbnRpYWxJZDogJ3Vua25vd24tY3JlZC1pZCcsXG4gICAgICAgIG90cENvZGU6ICdvdHAtMTIzJyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCB3YWxsZXQgPSBtYWtlV2FsbGV0KG1vY2tEZXZpY2VzKTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gZGVyaXZlUGFzc2tleVByZktleSh7IGJpdGdvOiBtYWtlQml0R28oKSBhcyBhbnksIHdhbGxldDogd2FsbGV0IGFzIGFueSwgcHJvdmlkZXI6IG1vY2tQcm92aWRlciB9KSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIubWVzc2FnZSwgJ0NvdWxkIG5vdCBpZGVudGlmeSB3aGljaCBwYXNza2V5IGRldmljZSB3YXMgdXNlZCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|