@bitgo/sdk-core 38.21.0 → 38.23.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.
Files changed (61) hide show
  1. package/dist/src/bitgo/errors.d.ts +2 -1
  2. package/dist/src/bitgo/errors.d.ts.map +1 -1
  3. package/dist/src/bitgo/errors.js +3 -2
  4. package/dist/src/bitgo/safe/index.d.ts +1 -0
  5. package/dist/src/bitgo/safe/index.d.ts.map +1 -1
  6. package/dist/src/bitgo/safe/index.js +2 -1
  7. package/dist/src/bitgo/safe/recovery.d.ts +92 -0
  8. package/dist/src/bitgo/safe/recovery.d.ts.map +1 -0
  9. package/dist/src/bitgo/safe/recovery.js +148 -0
  10. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +33 -4
  11. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -1
  12. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +71 -4
  13. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  14. package/dist/src/bitgo/utils/mpcUtils.js +2 -1
  15. package/dist/src/bitgo/utils/siws.d.ts +5 -2
  16. package/dist/src/bitgo/utils/siws.d.ts.map +1 -1
  17. package/dist/src/bitgo/utils/siws.js +8 -18
  18. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +7 -2
  19. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  20. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +13 -2
  21. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +8 -1
  22. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  23. package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
  24. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +7 -3
  25. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  26. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +9 -18
  27. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
  28. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +3 -2
  29. package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
  30. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  31. package/dist/src/bitgo/utils/tss/index.js +2 -1
  32. package/dist/src/bitgo/utils/tss/keyVerification.d.ts +45 -0
  33. package/dist/src/bitgo/utils/tss/keyVerification.d.ts.map +1 -0
  34. package/dist/src/bitgo/utils/tss/keyVerification.js +192 -0
  35. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +1 -14
  36. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -1
  37. package/dist/src/bitgo/utils/tss/recipientUtils.js +1 -62
  38. package/dist/src/bitgo/wallet/iWallet.d.ts +16 -2
  39. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  40. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  41. package/dist/src/bitgo/wallet/wallet.d.ts +21 -1
  42. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  43. package/dist/src/bitgo/wallet/wallet.js +52 -38
  44. package/dist/test/unit/bitgo/recovery/initiate.js +1 -30
  45. package/dist/test/unit/bitgo/safe/recovery.d.ts +2 -0
  46. package/dist/test/unit/bitgo/safe/recovery.d.ts.map +1 -0
  47. package/dist/test/unit/bitgo/safe/recovery.js +313 -0
  48. package/dist/test/unit/bitgo/safe/rootCoin.d.ts +2 -0
  49. package/dist/test/unit/bitgo/safe/rootCoin.d.ts.map +1 -0
  50. package/dist/test/unit/bitgo/safe/rootCoin.js +13 -0
  51. package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.js +69 -1
  52. package/dist/test/unit/bitgo/utils/siws.js +57 -7
  53. package/dist/test/unit/bitgo/utils/tss/keyVerification.d.ts +2 -0
  54. package/dist/test/unit/bitgo/utils/tss/keyVerification.d.ts.map +1 -0
  55. package/dist/test/unit/bitgo/utils/tss/keyVerification.js +229 -0
  56. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +1 -21
  57. package/dist/test/unit/bitgo/wallet/walletVerifyKey.d.ts +2 -0
  58. package/dist/test/unit/bitgo/wallet/walletVerifyKey.d.ts.map +1 -0
  59. package/dist/test/unit/bitgo/wallet/walletVerifyKey.js +160 -0
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +6 -6
@@ -169,6 +169,74 @@ describe('RedPallas MPS DSG helper functions', function () {
169
169
  };
170
170
  await assert.rejects((0, redpallasMPCv2_1.verifyPeerMessageRoundThree)(round3Output, bitgoGpgPubKey));
171
171
  });
172
+ // ── Rerand (must run before every DSG, same 2 parties) ──────────────────────
173
+ it('getRerandShareRoundOne should build a valid rerand round-1 share for the user', async function () {
174
+ const share = await (0, redpallasMPCv2_1.getRerandShareRoundOne)(userPayload(1), userGpgPrivKey);
175
+ assert.strictEqual(share.from, src_1.SignatureShareType.USER);
176
+ assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
177
+ const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2RerandShareRound1Input, JSON.parse(share.share), 'RedpallasMPCv2RerandShareRound1Input');
178
+ assert.strictEqual(parsed.type, 'round1Input');
179
+ assert.ok(parsed.data.msg1.message, 'msg1.message should be set');
180
+ assert.ok(parsed.data.msg1.signature, 'msg1.signature should be set');
181
+ });
182
+ it('getRerandShareRoundOne should build a valid rerand round-1 share for the backup', async function () {
183
+ const share = await (0, redpallasMPCv2_1.getRerandShareRoundOne)(backupPayload(1), backupGpgPrivKey, typesMPCv2_1.MPCv2PartiesEnum.BACKUP);
184
+ assert.strictEqual(share.from, src_1.SignatureShareType.BACKUP);
185
+ assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
186
+ });
187
+ it('verifyPeerRerandMessageRoundOne should verify a valid BitGo rerand round-1 message', async function () {
188
+ const bitgoSignedMsg1 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(1).payload), bitgoGpgPrivKey);
189
+ const round1Output = {
190
+ type: 'round1Output',
191
+ data: { msg1: bitgoSignedMsg1 },
192
+ };
193
+ const result = await (0, redpallasMPCv2_1.verifyPeerRerandMessageRoundOne)(round1Output, bitgoGpgPubKey);
194
+ assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
195
+ assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(1).payload));
196
+ });
197
+ it('verifyPeerRerandMessageRoundOne should throw on a tampered rerand round-1 message', async function () {
198
+ const round1Output = {
199
+ type: 'round1Output',
200
+ data: {
201
+ msg1: {
202
+ message: Buffer.from('tampered').toString('base64'),
203
+ signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
204
+ },
205
+ },
206
+ };
207
+ await assert.rejects((0, redpallasMPCv2_1.verifyPeerRerandMessageRoundOne)(round1Output, bitgoGpgPubKey));
208
+ });
209
+ it('getRerandShareRoundTwo should build a valid rerand round-2 share for the user', async function () {
210
+ const share = await (0, redpallasMPCv2_1.getRerandShareRoundTwo)(userPayload(2), userGpgPrivKey);
211
+ assert.strictEqual(share.from, src_1.SignatureShareType.USER);
212
+ assert.strictEqual(share.to, src_1.SignatureShareType.BITGO);
213
+ const parsed = (0, codecs_1.decodeWithCodec)(public_types_1.RedpallasMPCv2RerandShareRound2Input, JSON.parse(share.share), 'RedpallasMPCv2RerandShareRound2Input');
214
+ assert.strictEqual(parsed.type, 'round2Input');
215
+ assert.ok(parsed.data.msg2.message, 'msg2.message should be set');
216
+ assert.ok(parsed.data.msg2.signature, 'msg2.signature should be set');
217
+ });
218
+ it('verifyPeerRerandMessageRoundTwo should verify a valid BitGo rerand round-2 message', async function () {
219
+ const bitgoSignedMsg2 = await sdk_lib_mpc_1.RedPallasMPSComms.detachSignMpsMessage(Buffer.from(bitgoPayload(2).payload), bitgoGpgPrivKey);
220
+ const round2Output = {
221
+ type: 'round2Output',
222
+ data: { msg2: bitgoSignedMsg2 },
223
+ };
224
+ const result = await (0, redpallasMPCv2_1.verifyPeerRerandMessageRoundTwo)(round2Output, bitgoGpgPubKey);
225
+ assert.strictEqual(result.from, typesMPCv2_1.MPCv2PartiesEnum.BITGO);
226
+ assert.deepStrictEqual(Buffer.from(result.payload), Buffer.from(bitgoPayload(2).payload));
227
+ });
228
+ it('verifyPeerRerandMessageRoundTwo should throw on a tampered rerand round-2 message', async function () {
229
+ const round2Output = {
230
+ type: 'round2Output',
231
+ data: {
232
+ msg2: {
233
+ message: Buffer.from('tampered').toString('base64'),
234
+ signature: '-----BEGIN PGP SIGNATURE-----\n\nINVALID\n-----END PGP SIGNATURE-----\n',
235
+ },
236
+ },
237
+ };
238
+ await assert.rejects((0, redpallasMPCv2_1.verifyPeerRerandMessageRoundTwo)(round2Output, bitgoGpgPubKey));
239
+ });
172
240
  // ── Envelope round-trip via the independent RedPallas MPS comms layer ───────
173
241
  it('a share built by getSignatureShareRoundOne verifies against RedPallasMPSComms directly', async function () {
174
242
  const share = await (0, redpallasMPCv2_1.getSignatureShareRoundOne)(userPayload(1), userGpgPrivKey);
@@ -178,4 +246,4 @@ describe('RedPallas MPS DSG helper functions', function () {
178
246
  assert.deepStrictEqual(rawBytes, Buffer.from(userPayload(1).payload));
179
247
  });
180
248
  });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcGFsbGFzTVBDdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHNzL3JlZHBhbGxhcy9yZWRwYWxsYXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isb0RBQTBFO0FBQzFFLHNEQU82QjtBQUM3Qiw0Q0FBOEU7QUFDOUUsMEZBTytEO0FBQy9ELGtFQUF3RTtBQUN4RSw4RUFBaUY7QUFDakYsb0ZBQXVGO0FBRXZGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxJQUFJLGNBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFBZ0MsQ0FBQztJQUNyQyxJQUFJLGVBQStCLENBQUM7SUFDcEMsSUFBSSxjQUF1QixDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtRQUMzQixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUM7S0FDcEUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNO1FBQzdCLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0tBQ3RFLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSztRQUM1QixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFB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QUFDO1FBRUYsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUEsNENBQTJCLEVBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFFSCwrRUFBK0U7SUFFL0UsRUFBRSxDQUFDLHdGQUF3RixFQUFFLEtBQUs7UUFDaEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDBDQUF5QixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHdCQUFlLEVBQzVCLHNEQUF1QyxFQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDdkIseUNBQXlDLENBQzFDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSwrQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUzRixNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHBncCBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IFJlZFBhbGxhc01QU0NvbW1zLCBSZWRQYWxsYXNNUFNUeXBlcyB9IGZyb20gJ0BiaXRnby9zZGstbGliLW1wYyc7XG5pbXBvcnQge1xuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzT3V0cHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvcmVkcGFsbGFzL3JlZHBhbGxhc01QQ3YyJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS90eXBlc01QQ3YyJztcblxuZGVzY3JpYmUoJ1JlZFBhbGxhcyBNUFMgRFNHIGhlbHBlciBmdW5jdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1c2VyR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiYWNrdXBHcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcbiAgbGV0IGJpdGdvR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1B1YktleTogcGdwLktleTtcblxuICBjb25zdCB1c2VyUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShgdXNlci1yb3VuZC0ke3JvdW5kfS1wYXlsb2FkYCkpLFxuICB9KTtcbiAgY29uc3QgYmFja3VwUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGBiYWNrdXAtcm91bmQtJHtyb3VuZH0tcGF5bG9hZGApKSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oYGJpdGdvLXJvdW5kLSR7cm91bmR9LXBheWxvYWRgKSksXG4gIH0pO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgR1BHIGtleSBwYWlycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcblxuICAgIHVzZXJHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiYWNrdXBHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgdXNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKHVzZXJQYXlsb2FkKDEpLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0xIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgxKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTEgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMToge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVHdvIHNob3VsZCBidWlsZCBhIHZhbGlkIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0yIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cyOiBiaXRnb1NpZ25lZE1zZzIgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgyKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMjoge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMyBzaGFyZSBmb3IgdGhlIGJhY2t1cCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDMpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDMpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDNPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQzT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMzogYml0Z29TaWduZWRNc2czIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZShyb3VuZDNPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgzKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUgc2hvdWxkIHRocm93IG9uIGEgdGFtcGVyZWQgcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kM091dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDNPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2czOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUocm91bmQzT3V0cHV0LCBiaXRnb0dwZ1B1YktleSkpO1xuICB9KTtcblxuICAvLyDilIDilIAgRW52ZWxvcGUgcm91bmQtdHJpcCB2aWEgdGhlIGluZGVwZW5kZW50IFJlZFBhbGxhcyBNUFMgY29tbXMgbGF5ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2Egc2hhcmUgYnVpbHQgYnkgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSB2ZXJpZmllcyBhZ2FpbnN0IFJlZFBhbGxhc01QU0NvbW1zIGRpcmVjdGx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlID0gYXdhaXQgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSh1c2VyUGF5bG9hZCgxKSwgdXNlckdwZ1ByaXZLZXkpO1xuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuXG4gICAgY29uc3QgdXNlckdwZ1B1YktleSA9IHVzZXJHcGdQcml2S2V5LnRvUHVibGljKCk7XG4gICAgY29uc3QgcmF3Qnl0ZXMgPSBhd2FpdCBSZWRQYWxsYXNNUFNDb21tcy52ZXJpZnlNcHNNZXNzYWdlKHBhcnNlZC5kYXRhLm1zZzEsIHVzZXJHcGdQdWJLZXkpO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyYXdCeXRlcywgQnVmZmVyLmZyb20odXNlclBheWxvYWQoMSkucGF5bG9hZCkpO1xuICB9KTtcbn0pO1xuIl19
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkcGFsbGFzTVBDdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdHNzL3JlZHBhbGxhcy9yZWRwYWxsYXNNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isb0RBQTBFO0FBQzFFLHNEQVc2QjtBQUM3Qiw0Q0FBOEU7QUFDOUUsMEZBVytEO0FBQy9ELGtFQUF3RTtBQUN4RSw4RUFBaUY7QUFDakYsb0ZBQXVGO0FBRXZGLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxJQUFJLGNBQThCLENBQUM7SUFDbkMsSUFBSSxnQkFBZ0MsQ0FBQztJQUNyQyxJQUFJLGVBQStCLENBQUM7SUFDcEMsSUFBSSxjQUF1QixDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsSUFBSTtRQUMzQixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUM7S0FDcEUsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQXlDLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksRUFBRSw2QkFBZ0IsQ0FBQyxNQUFNO1FBQzdCLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDO0tBQ3RFLENBQUMsQ0FBQztJQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUF5QyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEVBQUUsNkJBQWdCLENBQUMsS0FBSztRQUM1QixPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsTUFB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QUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUN2Qix5Q0FBeUMsQ0FDMUMsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLCtCQUFpQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTNGLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgcGdwIGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgUmVkUGFsbGFzTVBTQ29tbXMsIFJlZFBhbGxhc01QU1R5cGVzIH0gZnJvbSAnQGJpdGdvL3Nkay1saWItbXBjJztcbmltcG9ydCB7XG4gIFJlZHBhbGxhc01QQ3YyUmVyYW5kU2hhcmVSb3VuZDFJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMU91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMklucHV0LFxuICBSZWRwYWxsYXNNUEN2MlJlcmFuZFNoYXJlUm91bmQyT3V0cHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxuICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzT3V0cHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgZ2V0UmVyYW5kU2hhcmVSb3VuZE9uZSxcbiAgZ2V0UmVyYW5kU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFR3byxcbiAgZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZFRocmVlLFxuICB2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvLFxuICB2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby90c3MvcmVkcGFsbGFzL3JlZHBhbGxhc01QQ3YyJztcbmltcG9ydCB7IGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby91dGlscy9jb2RlY3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVHUEdLZXlQYWlyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL29wZW5ncGdVdGlscyc7XG5pbXBvcnQgeyBNUEN2MlBhcnRpZXNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9lY2RzYS90eXBlc01QQ3YyJztcblxuZGVzY3JpYmUoJ1JlZFBhbGxhcyBNUFMgRFNHIGhlbHBlciBmdW5jdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1c2VyR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiYWNrdXBHcGdQcml2S2V5OiBwZ3AuUHJpdmF0ZUtleTtcbiAgbGV0IGJpdGdvR3BnUHJpdktleTogcGdwLlByaXZhdGVLZXk7XG4gIGxldCBiaXRnb0dwZ1B1YktleTogcGdwLktleTtcblxuICBjb25zdCB1c2VyUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uVVNFUixcbiAgICBwYXlsb2FkOiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShgdXNlci1yb3VuZC0ke3JvdW5kfS1wYXlsb2FkYCkpLFxuICB9KTtcbiAgY29uc3QgYmFja3VwUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQkFDS1VQLFxuICAgIHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGBiYWNrdXAtcm91bmQtJHtyb3VuZH0tcGF5bG9hZGApKSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvUGF5bG9hZCA9IChyb3VuZDogbnVtYmVyKTogUmVkUGFsbGFzTVBTVHlwZXMuRGVzZXJpYWxpemVkTWVzc2FnZSA9PiAoe1xuICAgIGZyb206IE1QQ3YyUGFydGllc0VudW0uQklUR08sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oYGJpdGdvLXJvdW5kLSR7cm91bmR9LXBheWxvYWRgKSksXG4gIH0pO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUgR1BHIGtleSBwYWlycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB1c2VyR3BnS2V5UGFpciA9IGF3YWl0IGdlbmVyYXRlR1BHS2V5UGFpcignZWQyNTUxOScpO1xuICAgIGNvbnN0IGJhY2t1cEdwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcbiAgICBjb25zdCBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBnZW5lcmF0ZUdQR0tleVBhaXIoJ2VkMjU1MTknKTtcblxuICAgIHVzZXJHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleVBhaXIucHJpdmF0ZUtleSB9KTtcbiAgICBiYWNrdXBHcGdQcml2S2V5ID0gYXdhaXQgcGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogYmFja3VwR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHJpdktleSA9IGF3YWl0IHBncC5yZWFkUHJpdmF0ZUtleSh7IGFybW9yZWRLZXk6IGJpdGdvR3BnS2V5UGFpci5wcml2YXRlS2V5IH0pO1xuICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgcGdwLnJlYWRLZXkoeyBhcm1vcmVkS2V5OiBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5IH0pO1xuICB9KTtcblxuICAvLyDilIDilIAgUm91bmQgMSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgdXNlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kT25lKHVzZXJQYXlsb2FkKDEpLCB1c2VyR3BnUHJpdktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUuZnJvbSwgU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS50bywgU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGRlY29kZVdpdGhDb2RlYyhcbiAgICAgIFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgICAgIEpTT04ucGFyc2Uoc2hhcmUuc2hhcmUpLFxuICAgICAgJ1JlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCdcbiAgICApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQudHlwZSwgJ3JvdW5kMUlucHV0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEubWVzc2FnZSwgJ21zZzEubWVzc2FnZSBzaG91bGQgYmUgc2V0Jyk7XG4gICAgYXNzZXJ0Lm9rKHBhcnNlZC5kYXRhLm1zZzEuc2lnbmF0dXJlLCAnbXNnMS5zaWduYXR1cmUgc2hvdWxkIGJlIHNldCcpO1xuICB9KTtcblxuICBpdCgnZ2V0U2lnbmF0dXJlU2hhcmVSb3VuZE9uZSBzaG91bGQgYnVpbGQgYSB2YWxpZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0xIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cxID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cxOiBiaXRnb1NpZ25lZE1zZzEgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgxKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kT25lIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTEgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMToge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZE9uZShyb3VuZDFPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVHdvIHNob3VsZCBidWlsZCBhIHZhbGlkIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByb3VuZC0yIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYml0Z29TaWduZWRNc2cyID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMuZGV0YWNoU2lnbk1wc01lc3NhZ2UoXG4gICAgICBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCksXG4gICAgICBiaXRnb0dwZ1ByaXZLZXlcbiAgICApO1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YTogeyBtc2cyOiBiaXRnb1NpZ25lZE1zZzIgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgyKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB0aHJvdyBvbiBhIHRhbXBlcmVkIHJvdW5kLTIgbWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbXNnMjoge1xuICAgICAgICAgIG1lc3NhZ2U6IEJ1ZmZlci5mcm9tKCd0YW1wZXJlZCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICBzaWduYXR1cmU6ICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLVxcblxcbklOVkFMSURcXG4tLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS1cXG4nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModmVyaWZ5UGVlck1lc3NhZ2VSb3VuZFR3byhyb3VuZDJPdXRwdXQsIGJpdGdvR3BnUHViS2V5KSk7XG4gIH0pO1xuXG4gIC8vIOKUgOKUgCBSb3VuZCAzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcm91bmQtMyBzaGFyZSBmb3IgdGhlIGJhY2t1cCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQgPSBhd2FpdCBnZXRTaWduYXR1cmVTaGFyZVJvdW5kVGhyZWUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDMpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQnXG4gICAgKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnR5cGUsICdyb3VuZDNJbnB1dCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLm1lc3NhZ2UsICdtc2czLm1lc3NhZ2Ugc2hvdWxkIGJlIHNldCcpO1xuICAgIGFzc2VydC5vayhwYXJzZWQuZGF0YS5tc2czLnNpZ25hdHVyZSwgJ21zZzMuc2lnbmF0dXJlIHNob3VsZCBiZSBzZXQnKTtcbiAgfSk7XG5cbiAgaXQoJ3ZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZSBzaG91bGQgdmVyaWZ5IGEgdmFsaWQgQml0R28gcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMyA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDMpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDNPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQzT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMzogYml0Z29TaWduZWRNc2czIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJNZXNzYWdlUm91bmRUaHJlZShyb3VuZDNPdXRwdXQsIGJpdGdvR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZnJvbSwgTVBDdjJQYXJ0aWVzRW51bS5CSVRHTyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChCdWZmZXIuZnJvbShyZXN1bHQucGF5bG9hZCksIEJ1ZmZlci5mcm9tKGJpdGdvUGF5bG9hZCgzKS5wYXlsb2FkKSk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUgc2hvdWxkIHRocm93IG9uIGEgdGFtcGVyZWQgcm91bmQtMyBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kM091dHB1dDogUmVkcGFsbGFzTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM091dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDNPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2czOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyTWVzc2FnZVJvdW5kVGhyZWUocm91bmQzT3V0cHV0LCBiaXRnb0dwZ1B1YktleSkpO1xuICB9KTtcblxuICAvLyDilIDilIAgUmVyYW5kIChtdXN0IHJ1biBiZWZvcmUgZXZlcnkgRFNHLCBzYW1lIDIgcGFydGllcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaXQoJ2dldFJlcmFuZFNoYXJlUm91bmRPbmUgc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcmVyYW5kIHJvdW5kLTEgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFJlcmFuZFNoYXJlUm91bmRPbmUodXNlclBheWxvYWQoMSksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMUlucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMUlucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQxSW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMS5tZXNzYWdlLCAnbXNnMS5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMS5zaWduYXR1cmUsICdtc2cxLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCdnZXRSZXJhbmRTaGFyZVJvdW5kT25lIHNob3VsZCBidWlsZCBhIHZhbGlkIHJlcmFuZCByb3VuZC0xIHNoYXJlIGZvciB0aGUgYmFja3VwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFJlcmFuZFNoYXJlUm91bmRPbmUoXG4gICAgICBiYWNrdXBQYXlsb2FkKDEpLFxuICAgICAgYmFja3VwR3BnUHJpdktleSxcbiAgICAgIE1QQ3YyUGFydGllc0VudW0uQkFDS1VQXG4gICAgKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuQkFDS1VQKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2hhcmUudG8sIFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kT25lIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByZXJhbmQgcm91bmQtMSBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMSA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDEpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDFPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyUmVyYW5kU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMTogYml0Z29TaWduZWRNc2cxIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJSZXJhbmRNZXNzYWdlUm91bmRPbmUocm91bmQxT3V0cHV0LCBiaXRnb0dwZ1B1YktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmZyb20sIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVzdWx0LnBheWxvYWQpLCBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMSkucGF5bG9hZCkpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlclJlcmFuZE1lc3NhZ2VSb3VuZE9uZSBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCByZXJhbmQgcm91bmQtMSBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kMU91dHB1dDogUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDFPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2cxOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kT25lKHJvdW5kMU91dHB1dCwgYml0Z29HcGdQdWJLZXkpKTtcbiAgfSk7XG5cbiAgaXQoJ2dldFJlcmFuZFNoYXJlUm91bmRUd28gc2hvdWxkIGJ1aWxkIGEgdmFsaWQgcmVyYW5kIHJvdW5kLTIgc2hhcmUgZm9yIHRoZSB1c2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IGF3YWl0IGdldFJlcmFuZFNoYXJlUm91bmRUd28odXNlclBheWxvYWQoMiksIHVzZXJHcGdQcml2S2V5KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaGFyZS5mcm9tLCBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUik7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNoYXJlLnRvLCBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08pO1xuXG4gICAgY29uc3QgcGFyc2VkID0gZGVjb2RlV2l0aENvZGVjKFxuICAgICAgUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMklucHV0LFxuICAgICAgSlNPTi5wYXJzZShzaGFyZS5zaGFyZSksXG4gICAgICAnUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMklucHV0J1xuICAgICk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC50eXBlLCAncm91bmQySW5wdXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5tZXNzYWdlLCAnbXNnMi5tZXNzYWdlIHNob3VsZCBiZSBzZXQnKTtcbiAgICBhc3NlcnQub2socGFyc2VkLmRhdGEubXNnMi5zaWduYXR1cmUsICdtc2cyLnNpZ25hdHVyZSBzaG91bGQgYmUgc2V0Jyk7XG4gIH0pO1xuXG4gIGl0KCd2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kVHdvIHNob3VsZCB2ZXJpZnkgYSB2YWxpZCBCaXRHbyByZXJhbmQgcm91bmQtMiBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJpdGdvU2lnbmVkTXNnMiA9IGF3YWl0IFJlZFBhbGxhc01QU0NvbW1zLmRldGFjaFNpZ25NcHNNZXNzYWdlKFxuICAgICAgQnVmZmVyLmZyb20oYml0Z29QYXlsb2FkKDIpLnBheWxvYWQpLFxuICAgICAgYml0Z29HcGdQcml2S2V5XG4gICAgKTtcbiAgICBjb25zdCByb3VuZDJPdXRwdXQ6IFJlZHBhbGxhc01QQ3YyUmVyYW5kU2hhcmVSb3VuZDJPdXRwdXQgPSB7XG4gICAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICAgIGRhdGE6IHsgbXNnMjogYml0Z29TaWduZWRNc2cyIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeVBlZXJSZXJhbmRNZXNzYWdlUm91bmRUd28ocm91bmQyT3V0cHV0LCBiaXRnb0dwZ1B1YktleSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmZyb20sIE1QQ3YyUGFydGllc0VudW0uQklUR08pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVzdWx0LnBheWxvYWQpLCBCdWZmZXIuZnJvbShiaXRnb1BheWxvYWQoMikucGF5bG9hZCkpO1xuICB9KTtcblxuICBpdCgndmVyaWZ5UGVlclJlcmFuZE1lc3NhZ2VSb3VuZFR3byBzaG91bGQgdGhyb3cgb24gYSB0YW1wZXJlZCByZXJhbmQgcm91bmQtMiBtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJvdW5kMk91dHB1dDogUmVkcGFsbGFzTVBDdjJSZXJhbmRTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtc2cyOiB7XG4gICAgICAgICAgbWVzc2FnZTogQnVmZmVyLmZyb20oJ3RhbXBlcmVkJykudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHNpZ25hdHVyZTogJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXFxuXFxuSU5WQUxJRFxcbi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLVxcbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh2ZXJpZnlQZWVyUmVyYW5kTWVzc2FnZVJvdW5kVHdvKHJvdW5kMk91dHB1dCwgYml0Z29HcGdQdWJLZXkpKTtcbiAgfSk7XG5cbiAgLy8g4pSA4pSAIEVudmVsb3BlIHJvdW5kLXRyaXAgdmlhIHRoZSBpbmRlcGVuZGVudCBSZWRQYWxsYXMgTVBTIGNvbW1zIGxheWVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGl0KCdhIHNoYXJlIGJ1aWx0IGJ5IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUgdmVyaWZpZXMgYWdhaW5zdCBSZWRQYWxsYXNNUFNDb21tcyBkaXJlY3RseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzaGFyZSA9IGF3YWl0IGdldFNpZ25hdHVyZVNoYXJlUm91bmRPbmUodXNlclBheWxvYWQoMSksIHVzZXJHcGdQcml2S2V5KTtcbiAgICBjb25zdCBwYXJzZWQgPSBkZWNvZGVXaXRoQ29kZWMoXG4gICAgICBSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gICAgICBKU09OLnBhcnNlKHNoYXJlLnNoYXJlKSxcbiAgICAgICdSZWRwYWxsYXNNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQnXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJHcGdQdWJLZXkgPSB1c2VyR3BnUHJpdktleS50b1B1YmxpYygpO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gYXdhaXQgUmVkUGFsbGFzTVBTQ29tbXMudmVyaWZ5TXBzTWVzc2FnZShwYXJzZWQuZGF0YS5tc2cxLCB1c2VyR3BnUHViS2V5KTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmF3Qnl0ZXMsIEJ1ZmZlci5mcm9tKHVzZXJQYXlsb2FkKDEpLnBheWxvYWQpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -4,6 +4,7 @@ require("should");
4
4
  const src_1 = require("../../../../src");
5
5
  describe('SIWS message validation', () => {
6
6
  const SIWS_ADDRESS = '8knfAmJm9BmaX9mZWjAdHBcYPYp3LmuykRQnGwkWQCyj';
7
+ const siwsHeader = (domain) => `${domain} wants you to sign in with your Solana account:`;
7
8
  const buildSiws = (overrides = {}) => {
8
9
  const domain = overrides.domain ?? 'hastra.io';
9
10
  const lines = [
@@ -78,6 +79,30 @@ describe('SIWS message validation', () => {
78
79
  trailingNewlines: true,
79
80
  }))).should.not.throw();
80
81
  });
82
+ it('accepts the minimal template (header and address only)', () => {
83
+ (() => (0, src_1.validateSiwsMessage)([siwsHeader('example.com'), SIWS_ADDRESS].join('\n'))).should.not.throw();
84
+ (() => (0, src_1.validateSiwsMessage)([siwsHeader('example.com'), SIWS_ADDRESS].join('\n') + '\n')).should.not.throw();
85
+ });
86
+ it('accepts a statement with no fields', () => {
87
+ (() => (0, src_1.validateSiwsMessage)([siwsHeader('example.com'), SIWS_ADDRESS, '', 'I am the wallet owner.'].join('\n'))).should.not.throw();
88
+ });
89
+ it('accepts a statement with a lone Nonce field (partner shape)', () => {
90
+ (() => (0, src_1.validateSiwsMessage)([
91
+ siwsHeader('app.decibel.trade'),
92
+ SIWS_ADDRESS,
93
+ '',
94
+ 'Please confirm you explicitly initiated this request from app.decibel.trade.',
95
+ '',
96
+ 'Nonce: 0x50ead22afd6ffd976',
97
+ ].join('\n'))).should.not.throw();
98
+ });
99
+ it('accepts any subset of advanced fields in canonical order', () => {
100
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Version:'] }))).should.not.throw();
101
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Chain ID:'] }))).should.not.throw();
102
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Nonce:'] }))).should.not.throw();
103
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['Issued At:'] }))).should.not.throw();
104
+ (() => (0, src_1.validateSiwsMessage)(buildSiws({ omit: ['URI:', 'Version:', 'Chain ID:', 'Issued At:'] }))).should.not.throw();
105
+ });
81
106
  });
82
107
  describe('rejections', () => {
83
108
  const rejects = (message) => (() => (0, src_1.validateSiwsMessage)(message)).should.throw(/not a valid SIWS message/);
@@ -95,12 +120,6 @@ describe('SIWS message validation', () => {
95
120
  SIWS_ADDRESS +
96
121
  '\n\nVersion: 1\nChain ID: mainnet\nNonce: 31a6bab5\nIssued At: 2026-09-21T10:00:00Z');
97
122
  });
98
- it('rejects a missing Version, Chain ID, Nonce or Issued At', () => {
99
- rejects(buildSiws({ omit: ['Version:'] }));
100
- rejects(buildSiws({ omit: ['Chain ID:'] }));
101
- rejects(buildSiws({ omit: ['Nonce:'] }));
102
- rejects(buildSiws({ omit: ['Issued At:'] }));
103
- });
104
123
  it('rejects invalid field values', () => {
105
124
  rejects(buildSiws({ version: '2' }));
106
125
  rejects(buildSiws({ chainId: 'polygon' }));
@@ -126,6 +145,37 @@ describe('SIWS message validation', () => {
126
145
  it('rejects a stray line after the fields section', () => {
127
146
  rejects(buildSiws({ extraLines: ['stray line'] }));
128
147
  });
148
+ it('rejects an unknown field label after the fields section starts', () => {
149
+ rejects(buildSiws({ extraLines: ['Unknown Field: value'] }));
150
+ rejects(buildSiws({ extraLines: ['Version2: 1'] }));
151
+ rejects([
152
+ 'hastra.io wants you to sign in with your Solana account:',
153
+ SIWS_ADDRESS,
154
+ '',
155
+ 'Version: 1',
156
+ 'Unknown: x',
157
+ 'Chain ID: mainnet',
158
+ ].join('\n'));
159
+ });
160
+ it('rejects an unknown field label after the blank line that opens the fields section', () => {
161
+ rejects([
162
+ 'hastra.io wants you to sign in with your Solana account:',
163
+ SIWS_ADDRESS,
164
+ '',
165
+ 'I am the wallet owner.',
166
+ '',
167
+ 'Unknown: x',
168
+ ].join('\n'));
169
+ });
170
+ it('rejects a field label that appears twice', () => {
171
+ rejects([
172
+ 'hastra.io wants you to sign in with your Solana account:',
173
+ SIWS_ADDRESS,
174
+ '',
175
+ 'Nonce: 31a6bab5',
176
+ 'Nonce: 31a6bab5',
177
+ ].join('\n'));
178
+ });
129
179
  it('rejects an invalid address line', () => {
130
180
  rejects(buildSiws({ address: 'short' }));
131
181
  rejects(buildSiws({ address: '0OIl-invalid-base58-characters-000000000000000000' }));
@@ -153,4 +203,4 @@ describe('SIWS message validation', () => {
153
203
  });
154
204
  });
155
205
  });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l3cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy9zaXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWdCO0FBQ2hCLHlDQUFzRDtBQUV0RCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLDhDQUE4QyxDQUFDO0lBRXBFLE1BQU0sU0FBUyxHQUFHLENBQUMsWUFBcUMsRUFBRSxFQUFVLEVBQUU7UUFDcEUsTUFBTSxNQUFNLEdBQUksU0FBUyxDQUFDLE1BQWlCLElBQUksV0FBVyxDQUFDO1FBQzNELE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxNQUFNLGlEQUFpRDtZQUN6RCxTQUFTLENBQUMsT0FBa0IsSUFBSSxZQUFZO1lBQzdDLEVBQUU7U0FDSCxDQUFDO1FBQ0YsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHO1lBQ2IsZ0JBQWdCLE1BQU0sRUFBRTtZQUN4QixZQUFZLFNBQVMsQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFO1lBQ3RDLGFBQWEsU0FBUyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7WUFDN0MsVUFBVSxTQUFTLENBQUMsS0FBSyxJQUFJLFVBQVUsRUFBRTtZQUN6QyxjQUFjLFNBQVMsQ0FBQyxRQUFRLElBQUksc0JBQXNCLEVBQUU7U0FDN0QsQ0FBQztRQUNGLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFD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QWtDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLE9BQU8sR0FBRztnQkFDZCwwREFBMEQ7Z0JBQzFELFlBQVk7Z0JBQ1osRUFBRTtnQkFDRixZQUFZO2dCQUNaLEVBQUU7Z0JBQ0YsbUJBQW1CO2dCQUNuQixpQkFBaUI7Z0JBQ2pCLGlDQUFpQzthQUNsQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxFQUFFLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxFQUFFO1lBQ3pFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN4Riw0QkFBNEIsQ0FDN0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IHZhbGlkYXRlU2l3c01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnU0lXUyBtZXNzYWdlIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IFNJV1NfQUREUkVTUyA9ICc4a25mQW1KbTlCbWFYOW1aV2pBZEhCY1lQWXAzTG11eWtSUW5Hd2tXUUN5aic7XG5cbiAgY29uc3QgYnVpbGRTaXdzID0gKG92ZXJyaWRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgZG9tYWluID0gKG92ZXJyaWRlcy5kb21haW4gYXMgc3RyaW5nKSA/PyAnaGFzdHJhLmlvJztcbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGAke2RvbWFpbn0gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OmAsXG4gICAgICAob3ZlcnJpZGVzLmFkZHJlc3MgYXMgc3RyaW5nKSA/PyBTSVdTX0FERFJFU1MsXG4gICAgICAnJyxcbiAgICBdO1xuICAgIGlmIChvdmVycmlkZXMuc3RhdGVtZW50ICE9PSB1bmRlZmluZWQgJiYgb3ZlcnJpZGVzLnN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgbGluZXMucHVzaChvdmVycmlkZXMuc3RhdGVtZW50IGFzIHN0cmluZywgJycpO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICBgVVJJOiBodHRwczovLyR7ZG9tYWlufWAsXG4gICAgICBgVmVyc2lvbjogJHtvdmVycmlkZXMudmVyc2lvbiA/PyAnMSd9YCxcbiAgICAgIGBDaGFpbiBJRDogJHtvdmVycmlkZXMuY2hhaW5JZCA/PyAnbWFpbm5ldCd9YCxcbiAgICAgIGBOb25jZTogJHtvdmVycmlkZXMubm9uY2UgPz8gJzMxYTZiYWI1J31gLFxuICAgICAgYElzc3VlZCBBdDogJHtvdmVycmlkZXMuaXNzdWVkQXQgPz8gJzIwMjYtMDktMjFUMTA6MDA6MDBaJ31gLFxuICAgIF07XG4gICAgaWYgKG92ZXJyaWRlcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgZmllbGRzLnB1c2goYEV4cGlyYXRpb24gVGltZTogJHtvdmVycmlkZXMuZXhwaXJhdGlvblRpbWV9YCk7XG4gICAgfVxuICAgIGlmIChvdmVycmlkZXMubm90QmVmb3JlKSB7XG4gICAgICBmaWVsZHMucHVzaChgTm90IEJlZm9yZTogJHtvdmVycmlkZXMubm90QmVmb3JlfWApO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVzLnJlcXVlc3RJZCkge1xuICAgICAgZmllbGRzLnB1c2goYFJlcXVlc3QgSUQ6ICR7b3ZlcnJpZGVzLnJlcXVlc3RJZH1gKTtcbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlcy5yZXNvdXJjZXMpIHtcbiAgICAgIGZpZWxkcy5wdXNoKCdSZXNvdXJjZXM6JywgLi4uKG92ZXJyaWRlcy5yZXNvdXJjZXMgYXMgc3RyaW5nW10pLm1hcCgocikgPT4gYC0gJHtyfWApKTtcbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlcy5vbWl0KSB7XG4gICAgICBjb25zdCBvbWl0ID0gb3ZlcnJpZGVzLm9taXQgYXMgc3RyaW5nW107XG4gICAgICBmb3IgKGNvbnN0IG8gb2Ygb21pdCkge1xuICAgICAgICBjb25zdCBpID0gZmllbGRzLmZpbmRJbmRleCgoZikgPT4gZi5zdGFydHNXaXRoKG8pKTtcbiAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgIGZpZWxkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGluZXMucHVzaCguLi5maWVsZHMsIC4uLigob3ZlcnJpZGVzLmV4dHJhTGluZXMgYXMgc3RyaW5nW10pID8/IFtdKSk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpICsgKG92ZXJyaWRlcy50cmFpbGluZ05ld2xpbmVzID8gJ1xcbicgOiAnJyk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkIG1lc3NhZ2VzJywgKCkgPT4ge1xuICAgIGl0KCdhY2NlcHRzIGEgU0lXUyBtZXNzYWdlIHdpdGggc3RhdGVtZW50IGFuZCByZXNvdXJjZXMnLCAoKSA9PiB7XG4gICAgICAoKCkgPT5cbiAgICAgICAgdmFsaWRhdGVTaXdzTWVzc2FnZShcbiAgICAgICAgICBidWlsZFNpd3MoeyBzdGF0ZW1lbnQ6IGBZb3UgYXJlIHByb3ZpbmcgeW91IG93biAke1NJV1NfQUREUkVTU30uYCwgcmVzb3VyY2VzOiBbJ2h0dHBzOi8vcHJpdnkuaW8nXSB9KVxuICAgICAgICApKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0cyBhIFNJV1MgbWVzc2FnZSB3aXRob3V0IHN0YXRlbWVudCcsICgpID0+IHtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKGJ1aWxkU2l3cyh7IGRvbWFpbjogJ2V4YW1wbGUuY29tJyB9KSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgU0lXUyBtZXNzYWdlIHdpdGggYWxsIG9wdGlvbmFsIGZpZWxkcycsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIGJ1aWxkU2l3cyh7XG4gICAgICAgICAgICBkb21haW46ICdleGFtcGxlLmNvbScsXG4gICAgICAgICAgICBzdGF0ZW1lbnQ6ICdJIGFtIHRoZSB3YWxsZXQgb3duZXIuJyxcbiAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lOiAnMjAyNi0wOS0yOFQxMDowMDowMFonLFxuICAgICAgICAgICAgbm90QmVmb3JlOiAnMjAyNi0wOS0yMVQwOTowMDowMFonLFxuICAgICAgICAgICAgcmVxdWVzdElkOiAnMzFhNmJhYjUtMScsXG4gICAgICAgICAgICByZXNvdXJjZXM6IFsnaHR0cHM6Ly9hLmV4YW1wbGUuY29tJywgJ2h0dHBzOi8vYi5leGFtcGxlLmNvbSddLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgbXVsdGlieXRlIHV0Zi04IHN0YXRlbWVudCwgc29sYW5hOiBjaGFpbiBpZCBhbmQgZnJhY3Rpb25hbCBzZWNvbmRzJywgKCkgPT4ge1xuICAgICAgKCgpID0+XG4gICAgICAgIHZhbGlkYXRlU2l3c01lc3NhZ2UoXG4gICAgICAgICAgYnVpbGRTaXdzKHtcbiAgICAgICAgICAgIGRvbWFpbjogJ2V4YW1wbGUuY29tJyxcbiAgICAgICAgICAgIHN0YXRlbWVudDogJ+OBk+OCk+OBq+OBoeOBr+OAgdCi0LXRgdGC0L7QstC+0LUg0YHQvtC+0LHRidC10L3QuNC1JyxcbiAgICAgICAgICAgIGNoYWluSWQ6ICdzb2xhbmE6bWFpbm5ldCcsXG4gICAgICAgICAgICBpc3N1ZWRBdDogJzIwMjYtMDktMjFUMTA6MDA6MDAuNTAwWicsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgdHJhaWxpbmcgbmV3bGluZXMgYW5kIGEgKzA1OjMwIG9mZnNldCcsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIGJ1aWxkU2l3cyh7XG4gICAgICAgICAgICBkb21haW46ICdleGFtcGxlLmNvbScsXG4gICAgICAgICAgICBjaGFpbklkOiAndGVzdG5ldCcsXG4gICAgICAgICAgICBpc3N1ZWRBdDogJzIwMjYtMDktMjFUMTA6MDA6MDArMDU6MzAnLFxuICAgICAgICAgICAgdHJhaWxpbmdOZXdsaW5lczogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWplY3Rpb25zJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlamVjdHMgPSAobWVzc2FnZTogc3RyaW5nKSA9PiAoKCkgPT4gdmFsaWRhdGVTaXdzTWVzc2FnZShtZXNzYWdlKSkuc2hvdWxkLnRocm93KC9ub3QgYSB2YWxpZCBTSVdTIG1lc3NhZ2UvKTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGVtcHR5IG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHBsYWluIHRleHQnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKCdIZWxsbyBmcm9tIGRhcHAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIEpTT04nLCAoKSA9PiB7XG4gICAgICByZWplY3RzKCd7XCJhY3Rpb25cIjpcImxvZ2luXCJ9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHdyb25nIHNrZWxldG9uJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhcbiAgICAgICAgJ2V4YW1wbGUuY29tIGxvZ2luOlxcbicgK1xuICAgICAgICAgIFNJV1NfQUREUkVTUyArXG4gICAgICAgICAgJ1xcblxcblZlcnNpb246IDFcXG5DaGFpbiBJRDogbWFpbm5ldFxcbk5vbmNlOiAzMWE2YmFiNVxcbklzc3VlZCBBdDogMjAyNi0wOS0yMVQxMDowMDowMFonXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBtaXNzaW5nIFZlcnNpb24sIENoYWluIElELCBOb25jZSBvciBJc3N1ZWQgQXQnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IG9taXQ6IFsnVmVyc2lvbjonXSB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IG9taXQ6IFsnQ2hhaW4gSUQ6J10gfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBvbWl0OiBbJ05vbmNlOiddIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgb21pdDogWydJc3N1ZWQgQXQ6J10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgaW52YWxpZCBmaWVsZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IHZlcnNpb246ICcyJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGNoYWluSWQ6ICdwb2x5Z29uJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IG5vbmNlOiAnYWJjJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IG5vbmNlOiAnMzFhNiBiYWI1IScgfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBpc3N1ZWRBdDogJzIwMjYtMDktMjEgMTA6MDA6MDBaJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDo2MVonIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgaXNzdWVkQXQ6ICcyMDI2LTA5LTIxVDI0OjAwOjAwWicgfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBpc3N1ZWRBdDogJzIwMjYtMDktMjFUMTA6MDA6MDArMjQ6MDAnIH0pKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIG91dC1vZi1vcmRlciBmaWVsZHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gW1xuICAgICAgICAnaGFzdHJhLmlvIHdhbnRzIHlvdSB0byBzaWduIGluIHdpdGggeW91ciBTb2xhbmEgYWNjb3VudDonLFxuICAgICAgICBTSVdTX0FERFJFU1MsXG4gICAgICAgICcnLFxuICAgICAgICAnTm9uY2U6IDMxYTZiYWI1JyxcbiAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAnQ2hhaW4gSUQ6IG1haW5uZXQnLFxuICAgICAgICAnSXNzdWVkIEF0OiAyMDI2LTA5LTIxVDEwOjAwOjAwWicsXG4gICAgICBdLmpvaW4oJ1xcbicpO1xuICAgICAgcmVqZWN0cyhtZXNzYWdlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgc3RyYXkgbGluZSBhZnRlciB0aGUgZmllbGRzIHNlY3Rpb24nLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGV4dHJhTGluZXM6IFsnc3RyYXkgbGluZSddIH0pKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIGludmFsaWQgYWRkcmVzcyBsaW5lJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBhZGRyZXNzOiAnc2hvcnQnIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgYWRkcmVzczogJzBPSWwtaW52YWxpZC1iYXNlNTgtY2hhcmFjdGVycy0wMDAwMDAwMDAwMDAwMDAwMDAnIH0pKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgdmFsdWVkIFJlc291cmNlcyBsaW5lJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyByZXNvdXJjZXM6IFtdIH0pLnJlcGxhY2UoJ1Jlc291cmNlczonLCAnUmVzb3VyY2VzOiBodHRwczovL3guZXhhbXBsZS5jb20nKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIGJsYW5rIGxpbmUgaW5zaWRlIHRoZSBmaWVsZHMgc2VjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgIFNJV1NfQUREUkVTUyxcbiAgICAgICAgJycsXG4gICAgICAgICdWZXJzaW9uOiAxJyxcbiAgICAgICAgJycsXG4gICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICAnSXNzdWVkIEF0OiAyMDI2LTA5LTIxVDEwOjAwOjAwWicsXG4gICAgICBdLmpvaW4oJ1xcbicpO1xuICAgICAgcmVqZWN0cyhtZXNzYWdlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3V0Zi04IHN0cmljdG5lc3MnLCAoKSA9PiB7XG4gICAgaXQoJ3JlamVjdHMgbG9uZSBzdXJyb2dhdGVzIHRoYXQgQnVmZmVyLmZyb20gd291bGQgbWFuZ2xlIHRvIFUrRkZGRCcsICgpID0+IHtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKGJ1aWxkU2l3cyh7IHN0YXRlbWVudDogJ2JhZCBcXHVEODAwIHN0YXRlbWVudCcgfSkpKS5zaG91bGQudGhyb3coXG4gICAgICAgIC9tZXNzYWdlIGlzIG5vdCB2YWxpZCBVVEYtOC9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l3cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy9zaXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWdCO0FBQ2hCLHlDQUFzRDtBQUV0RCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLDhDQUE4QyxDQUFDO0lBQ3BFLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFVLEVBQUUsQ0FBQyxHQUFHLE1BQU0saURBQWlELENBQUM7SUFFMUcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxZQUFxQyxFQUFFLEVBQVUsRUFBRTtRQUNwRSxNQUFNLE1BQU0sR0FBSSxTQUFTLENBQUMsTUFBaUIsSUFBSSxXQUFXLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLE1BQU0saURBQWlEO1lBQ3pELFNBQVMsQ0FBQyxPQUFrQixJQUFJLFlBQVk7WUFDN0MsRUFBRTtTQUNILENBQUM7UUFDRixJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUc7WUFDYixnQkFBZ0IsTUFBTSxFQUFFO1lBQ3hCLFlBQVksU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUU7WUFDdEMsYUFBYSxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtZQUM3QyxVQUFVLFNBQVMsQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFO1lBQ3pDLGNBQWMsU0FBUyxDQUFDLFFBQVEsSUFBSSxzQkFBc0IsRUFBRTtTQUM3RCxDQUFDO1FBQ0YsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0IsTUFB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IjpbImltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IHZhbGlkYXRlU2l3c01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnU0lXUyBtZXNzYWdlIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IFNJV1NfQUREUkVTUyA9ICc4a25mQW1KbTlCbWFYOW1aV2pBZEhCY1lQWXAzTG11eWtSUW5Hd2tXUUN5aic7XG4gIGNvbnN0IHNpd3NIZWFkZXIgPSAoZG9tYWluOiBzdHJpbmcpOiBzdHJpbmcgPT4gYCR7ZG9tYWlufSB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6YDtcblxuICBjb25zdCBidWlsZFNpd3MgPSAob3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBkb21haW4gPSAob3ZlcnJpZGVzLmRvbWFpbiBhcyBzdHJpbmcpID8/ICdoYXN0cmEuaW8nO1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYCR7ZG9tYWlufSB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6YCxcbiAgICAgIChvdmVycmlkZXMuYWRkcmVzcyBhcyBzdHJpbmcpID8/IFNJV1NfQUREUkVTUyxcbiAgICAgICcnLFxuICAgIF07XG4gICAgaWYgKG92ZXJyaWRlcy5zdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvdmVycmlkZXMuc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKG92ZXJyaWRlcy5zdGF0ZW1lbnQgYXMgc3RyaW5nLCAnJyk7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgIGBVUkk6IGh0dHBzOi8vJHtkb21haW59YCxcbiAgICAgIGBWZXJzaW9uOiAke292ZXJyaWRlcy52ZXJzaW9uID8/ICcxJ31gLFxuICAgICAgYENoYWluIElEOiAke292ZXJyaWRlcy5jaGFpbklkID8/ICdtYWlubmV0J31gLFxuICAgICAgYE5vbmNlOiAke292ZXJyaWRlcy5ub25jZSA/PyAnMzFhNmJhYjUnfWAsXG4gICAgICBgSXNzdWVkIEF0OiAke292ZXJyaWRlcy5pc3N1ZWRBdCA/PyAnMjAyNi0wOS0yMVQxMDowMDowMFonfWAsXG4gICAgXTtcbiAgICBpZiAob3ZlcnJpZGVzLmV4cGlyYXRpb25UaW1lKSB7XG4gICAgICBmaWVsZHMucHVzaChgRXhwaXJhdGlvbiBUaW1lOiAke292ZXJyaWRlcy5leHBpcmF0aW9uVGltZX1gKTtcbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlcy5ub3RCZWZvcmUpIHtcbiAgICAgIGZpZWxkcy5wdXNoKGBOb3QgQmVmb3JlOiAke292ZXJyaWRlcy5ub3RCZWZvcmV9YCk7XG4gICAgfVxuICAgIGlmIChvdmVycmlkZXMucmVxdWVzdElkKSB7XG4gICAgICBmaWVsZHMucHVzaChgUmVxdWVzdCBJRDogJHtvdmVycmlkZXMucmVxdWVzdElkfWApO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVzLnJlc291cmNlcykge1xuICAgICAgZmllbGRzLnB1c2goJ1Jlc291cmNlczonLCAuLi4ob3ZlcnJpZGVzLnJlc291cmNlcyBhcyBzdHJpbmdbXSkubWFwKChyKSA9PiBgLSAke3J9YCkpO1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGVzLm9taXQpIHtcbiAgICAgIGNvbnN0IG9taXQgPSBvdmVycmlkZXMub21pdCBhcyBzdHJpbmdbXTtcbiAgICAgIGZvciAoY29uc3QgbyBvZiBvbWl0KSB7XG4gICAgICAgIGNvbnN0IGkgPSBmaWVsZHMuZmluZEluZGV4KChmKSA9PiBmLnN0YXJ0c1dpdGgobykpO1xuICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgZmllbGRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsaW5lcy5wdXNoKC4uLmZpZWxkcywgLi4uKChvdmVycmlkZXMuZXh0cmFMaW5lcyBhcyBzdHJpbmdbXSkgPz8gW10pKTtcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJykgKyAob3ZlcnJpZGVzLnRyYWlsaW5nTmV3bGluZXMgPyAnXFxuJyA6ICcnKTtcbiAgfTtcblxuICBkZXNjcmliZSgndmFsaWQgbWVzc2FnZXMnLCAoKSA9PiB7XG4gICAgaXQoJ2FjY2VwdHMgYSBTSVdTIG1lc3NhZ2Ugd2l0aCBzdGF0ZW1lbnQgYW5kIHJlc291cmNlcycsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIGJ1aWxkU2l3cyh7IHN0YXRlbWVudDogYFlvdSBhcmUgcHJvdmluZyB5b3Ugb3duICR7U0lXU19BRERSRVNTfS5gLCByZXNvdXJjZXM6IFsnaHR0cHM6Ly9wcml2eS5pbyddIH0pXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgU0lXUyBtZXNzYWdlIHdpdGhvdXQgc3RhdGVtZW50JywgKCkgPT4ge1xuICAgICAgKCgpID0+IHZhbGlkYXRlU2l3c01lc3NhZ2UoYnVpbGRTaXdzKHsgZG9tYWluOiAnZXhhbXBsZS5jb20nIH0pKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgYSBTSVdTIG1lc3NhZ2Ugd2l0aCBhbGwgb3B0aW9uYWwgZmllbGRzJywgKCkgPT4ge1xuICAgICAgKCgpID0+XG4gICAgICAgIHZhbGlkYXRlU2l3c01lc3NhZ2UoXG4gICAgICAgICAgYnVpbGRTaXdzKHtcbiAgICAgICAgICAgIGRvbWFpbjogJ2V4YW1wbGUuY29tJyxcbiAgICAgICAgICAgIHN0YXRlbWVudDogJ0kgYW0gdGhlIHdhbGxldCBvd25lci4nLFxuICAgICAgICAgICAgZXhwaXJhdGlvblRpbWU6ICcyMDI2LTA5LTI4VDEwOjAwOjAwWicsXG4gICAgICAgICAgICBub3RCZWZvcmU6ICcyMDI2LTA5LTIxVDA5OjAwOjAwWicsXG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICczMWE2YmFiNS0xJyxcbiAgICAgICAgICAgIHJlc291cmNlczogWydodHRwczovL2EuZXhhbXBsZS5jb20nLCAnaHR0cHM6Ly9iLmV4YW1wbGUuY29tJ10sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgYSBtdWx0aWJ5dGUgdXRmLTggc3RhdGVtZW50LCBzb2xhbmE6IGNoYWluIGlkIGFuZCBmcmFjdGlvbmFsIHNlY29uZHMnLCAoKSA9PiB7XG4gICAgICAoKCkgPT5cbiAgICAgICAgdmFsaWRhdGVTaXdzTWVzc2FnZShcbiAgICAgICAgICBidWlsZFNpd3Moe1xuICAgICAgICAgICAgZG9tYWluOiAnZXhhbXBsZS5jb20nLFxuICAgICAgICAgICAgc3RhdGVtZW50OiAn44GT44KT44Gr44Gh44Gv44CB0KLQtdGB0YLQvtCy0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUnLFxuICAgICAgICAgICAgY2hhaW5JZDogJ3NvbGFuYTptYWlubmV0JyxcbiAgICAgICAgICAgIGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDowMC41MDBaJyxcbiAgICAgICAgICB9KVxuICAgICAgICApKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0cyB0cmFpbGluZyBuZXdsaW5lcyBhbmQgYSArMDU6MzAgb2Zmc2V0JywgKCkgPT4ge1xuICAgICAgKCgpID0+XG4gICAgICAgIHZhbGlkYXRlU2l3c01lc3NhZ2UoXG4gICAgICAgICAgYnVpbGRTaXdzKHtcbiAgICAgICAgICAgIGRvbWFpbjogJ2V4YW1wbGUuY29tJyxcbiAgICAgICAgICAgIGNoYWluSWQ6ICd0ZXN0bmV0JyxcbiAgICAgICAgICAgIGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDowMCswNTozMCcsXG4gICAgICAgICAgICB0cmFpbGluZ05ld2xpbmVzOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIHRoZSBtaW5pbWFsIHRlbXBsYXRlIChoZWFkZXIgYW5kIGFkZHJlc3Mgb25seSknLCAoKSA9PiB7XG4gICAgICAoKCkgPT4gdmFsaWRhdGVTaXdzTWVzc2FnZShbc2l3c0hlYWRlcignZXhhbXBsZS5jb20nKSwgU0lXU19BRERSRVNTXS5qb2luKCdcXG4nKSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKFtzaXdzSGVhZGVyKCdleGFtcGxlLmNvbScpLCBTSVdTX0FERFJFU1NdLmpvaW4oJ1xcbicpICsgJ1xcbicpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0cyBhIHN0YXRlbWVudCB3aXRoIG5vIGZpZWxkcycsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIFtzaXdzSGVhZGVyKCdleGFtcGxlLmNvbScpLCBTSVdTX0FERFJFU1MsICcnLCAnSSBhbSB0aGUgd2FsbGV0IG93bmVyLiddLmpvaW4oJ1xcbicpXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgc3RhdGVtZW50IHdpdGggYSBsb25lIE5vbmNlIGZpZWxkIChwYXJ0bmVyIHNoYXBlKScsICgpID0+IHtcbiAgICAgICgoKSA9PlxuICAgICAgICB2YWxpZGF0ZVNpd3NNZXNzYWdlKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHNpd3NIZWFkZXIoJ2FwcC5kZWNpYmVsLnRyYWRlJyksXG4gICAgICAgICAgICBTSVdTX0FERFJFU1MsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICdQbGVhc2UgY29uZmlybSB5b3UgZXhwbGljaXRseSBpbml0aWF0ZWQgdGhpcyByZXF1ZXN0IGZyb20gYXBwLmRlY2liZWwudHJhZGUuJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgJ05vbmNlOiAweDUwZWFkMjJhZmQ2ZmZkOTc2JyxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICAgICkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGFueSBzdWJzZXQgb2YgYWR2YW5jZWQgZmllbGRzIGluIGNhbm9uaWNhbCBvcmRlcicsICgpID0+IHtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKGJ1aWxkU2l3cyh7IG9taXQ6IFsnVmVyc2lvbjonXSB9KSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKGJ1aWxkU2l3cyh7IG9taXQ6IFsnQ2hhaW4gSUQ6J10gfSkpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICAoKCkgPT4gdmFsaWRhdGVTaXdzTWVzc2FnZShidWlsZFNpd3MoeyBvbWl0OiBbJ05vbmNlOiddIH0pKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgKCgpID0+IHZhbGlkYXRlU2l3c01lc3NhZ2UoYnVpbGRTaXdzKHsgb21pdDogWydJc3N1ZWQgQXQ6J10gfSkpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICAoKCkgPT5cbiAgICAgICAgdmFsaWRhdGVTaXdzTWVzc2FnZShidWlsZFNpd3MoeyBvbWl0OiBbJ1VSSTonLCAnVmVyc2lvbjonLCAnQ2hhaW4gSUQ6JywgJ0lzc3VlZCBBdDonXSB9KSkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlamVjdGlvbnMnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVqZWN0cyA9IChtZXNzYWdlOiBzdHJpbmcpID0+ICgoKSA9PiB2YWxpZGF0ZVNpd3NNZXNzYWdlKG1lc3NhZ2UpKS5zaG91bGQudGhyb3coL25vdCBhIHZhbGlkIFNJV1MgbWVzc2FnZS8pO1xuXG4gICAgaXQoJ3JlamVjdHMgYW4gZW1wdHkgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIHJlamVjdHMoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgcGxhaW4gdGV4dCcsICgpID0+IHtcbiAgICAgIHJlamVjdHMoJ0hlbGxvIGZyb20gZGFwcCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgSlNPTicsICgpID0+IHtcbiAgICAgIHJlamVjdHMoJ3tcImFjdGlvblwiOlwibG9naW5cIn0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgd3Jvbmcgc2tlbGV0b24nLCAoKSA9PiB7XG4gICAgICByZWplY3RzKFxuICAgICAgICAnZXhhbXBsZS5jb20gbG9naW46XFxuJyArXG4gICAgICAgICAgU0lXU19BRERSRVNTICtcbiAgICAgICAgICAnXFxuXFxuVmVyc2lvbjogMVxcbkNoYWluIElEOiBtYWlubmV0XFxuTm9uY2U6IDMxYTZiYWI1XFxuSXNzdWVkIEF0OiAyMDI2LTA5LTIxVDEwOjAwOjAwWidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBpbnZhbGlkIGZpZWxkIHZhbHVlcycsICgpID0+IHtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgdmVyc2lvbjogJzInIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgY2hhaW5JZDogJ3BvbHlnb24nIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgbm9uY2U6ICdhYmMnIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgbm9uY2U6ICczMWE2IGJhYjUhJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGlzc3VlZEF0OiAnMjAyNi0wOS0yMSAxMDowMDowMFonIH0pKTtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgaXNzdWVkQXQ6ICcyMDI2LTA5LTIxVDEwOjAwOjYxWicgfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBpc3N1ZWRBdDogJzIwMjYtMDktMjFUMjQ6MDA6MDBaJyB9KSk7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGlzc3VlZEF0OiAnMjAyNi0wOS0yMVQxMDowMDowMCsyNDowMCcgfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgb3V0LW9mLW9yZGVyIGZpZWxkcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbXG4gICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgIFNJV1NfQUREUkVTUyxcbiAgICAgICAgJycsXG4gICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICAnVmVyc2lvbjogMScsXG4gICAgICAgICdDaGFpbiBJRDogbWFpbm5ldCcsXG4gICAgICAgICdJc3N1ZWQgQXQ6IDIwMjYtMDktMjFUMTA6MDA6MDBaJyxcbiAgICAgIF0uam9pbignXFxuJyk7XG4gICAgICByZWplY3RzKG1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzdHJheSBsaW5lIGFmdGVyIHRoZSBmaWVsZHMgc2VjdGlvbicsICgpID0+IHtcbiAgICAgIHJlamVjdHMoYnVpbGRTaXdzKHsgZXh0cmFMaW5lczogWydzdHJheSBsaW5lJ10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYW4gdW5rbm93biBmaWVsZCBsYWJlbCBhZnRlciB0aGUgZmllbGRzIHNlY3Rpb24gc3RhcnRzJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBleHRyYUxpbmVzOiBbJ1Vua25vd24gRmllbGQ6IHZhbHVlJ10gfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBleHRyYUxpbmVzOiBbJ1ZlcnNpb24yOiAxJ10gfSkpO1xuICAgICAgcmVqZWN0cyhcbiAgICAgICAgW1xuICAgICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgICAgU0lXU19BRERSRVNTLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdWZXJzaW9uOiAxJyxcbiAgICAgICAgICAnVW5rbm93bjogeCcsXG4gICAgICAgICAgJ0NoYWluIElEOiBtYWlubmV0JyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGFuIHVua25vd24gZmllbGQgbGFiZWwgYWZ0ZXIgdGhlIGJsYW5rIGxpbmUgdGhhdCBvcGVucyB0aGUgZmllbGRzIHNlY3Rpb24nLCAoKSA9PiB7XG4gICAgICByZWplY3RzKFxuICAgICAgICBbXG4gICAgICAgICAgJ2hhc3RyYS5pbyB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6JyxcbiAgICAgICAgICBTSVdTX0FERFJFU1MsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ0kgYW0gdGhlIHdhbGxldCBvd25lci4nLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdVbmtub3duOiB4JyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgZmllbGQgbGFiZWwgdGhhdCBhcHBlYXJzIHR3aWNlJywgKCkgPT4ge1xuICAgICAgcmVqZWN0cyhcbiAgICAgICAgW1xuICAgICAgICAgICdoYXN0cmEuaW8gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OicsXG4gICAgICAgICAgU0lXU19BRERSRVNTLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICAgICdOb25jZTogMzFhNmJhYjUnLFxuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYW4gaW52YWxpZCBhZGRyZXNzIGxpbmUnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IGFkZHJlc3M6ICdzaG9ydCcgfSkpO1xuICAgICAgcmVqZWN0cyhidWlsZFNpd3MoeyBhZGRyZXNzOiAnME9JbC1pbnZhbGlkLWJhc2U1OC1jaGFyYWN0ZXJzLTAwMDAwMDAwMDAwMDAwMDAwMCcgfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSB2YWx1ZWQgUmVzb3VyY2VzIGxpbmUnLCAoKSA9PiB7XG4gICAgICByZWplY3RzKGJ1aWxkU2l3cyh7IHJlc291cmNlczogW10gfSkucmVwbGFjZSgnUmVzb3VyY2VzOicsICdSZXNvdXJjZXM6IGh0dHBzOi8veC5leGFtcGxlLmNvbScpKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgYmxhbmsgbGluZSBpbnNpZGUgdGhlIGZpZWxkcyBzZWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IFtcbiAgICAgICAgJ2hhc3RyYS5pbyB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgU29sYW5hIGFjY291bnQ6JyxcbiAgICAgICAgU0lXU19BRERSRVNTLFxuICAgICAgICAnJyxcbiAgICAgICAgJ1ZlcnNpb246IDEnLFxuICAgICAgICAnJyxcbiAgICAgICAgJ0NoYWluIElEOiBtYWlubmV0JyxcbiAgICAgICAgJ05vbmNlOiAzMWE2YmFiNScsXG4gICAgICAgICdJc3N1ZWQgQXQ6IDIwMjYtMDktMjFUMTA6MDA6MDBaJyxcbiAgICAgIF0uam9pbignXFxuJyk7XG4gICAgICByZWplY3RzKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXRmLTggc3RyaWN0bmVzcycsICgpID0+IHtcbiAgICBpdCgncmVqZWN0cyBsb25lIHN1cnJvZ2F0ZXMgdGhhdCBCdWZmZXIuZnJvbSB3b3VsZCBtYW5nbGUgdG8gVStGRkZEJywgKCkgPT4ge1xuICAgICAgKCgpID0+IHZhbGlkYXRlU2l3c01lc3NhZ2UoYnVpbGRTaXdzKHsgc3RhdGVtZW50OiAnYmFkIFxcdUQ4MDAgc3RhdGVtZW50JyB9KSkpLnNob3VsZC50aHJvdyhcbiAgICAgICAgL21lc3NhZ2UgaXMgbm90IHZhbGlkIFVURi04L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import 'should';
2
+ //# sourceMappingURL=keyVerification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyVerification.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bitgo/utils/tss/keyVerification.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}