@bitgo-beta/sdk-coin-kaspa 0.0.1-beta.21 → 0.0.1-beta.211

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 (49) hide show
  1. package/README.md +224 -33
  2. package/dist/src/kaspa.d.ts +86 -18
  3. package/dist/src/kaspa.d.ts.map +1 -1
  4. package/dist/src/kaspa.js +119 -31
  5. package/dist/src/lib/constants.d.ts +38 -0
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +56 -5
  8. package/dist/src/lib/iface.d.ts +28 -17
  9. package/dist/src/lib/iface.d.ts.map +1 -1
  10. package/dist/src/lib/iface.js +1 -1
  11. package/dist/src/lib/index.d.ts +2 -0
  12. package/dist/src/lib/index.d.ts.map +1 -1
  13. package/dist/src/lib/index.js +4 -2
  14. package/dist/src/lib/keyPair.d.ts +6 -2
  15. package/dist/src/lib/keyPair.d.ts.map +1 -1
  16. package/dist/src/lib/keyPair.js +7 -4
  17. package/dist/src/lib/pskt.d.ts +257 -0
  18. package/dist/src/lib/pskt.d.ts.map +1 -0
  19. package/dist/src/lib/pskt.js +439 -0
  20. package/dist/src/lib/sighash.d.ts +34 -13
  21. package/dist/src/lib/sighash.d.ts.map +1 -1
  22. package/dist/src/lib/sighash.js +115 -56
  23. package/dist/src/lib/transaction.d.ts +94 -6
  24. package/dist/src/lib/transaction.d.ts.map +1 -1
  25. package/dist/src/lib/transaction.js +199 -21
  26. package/dist/src/lib/transactionBuilder.d.ts +22 -0
  27. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  28. package/dist/src/lib/transactionBuilder.js +53 -5
  29. package/dist/src/lib/transactionBuilderFactory.d.ts +8 -3
  30. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  31. package/dist/src/lib/transactionBuilderFactory.js +14 -4
  32. package/dist/src/lib/utils.d.ts +17 -3
  33. package/dist/src/lib/utils.d.ts.map +1 -1
  34. package/dist/src/lib/utils.js +45 -11
  35. package/dist/src/register.js +2 -2
  36. package/dist/test/fixtures/kaspa.fixtures.d.ts +12 -0
  37. package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -1
  38. package/dist/test/fixtures/kaspa.fixtures.js +76 -11
  39. package/dist/test/unit/coin.test.js +129 -9
  40. package/dist/test/unit/keyPair.test.js +35 -1
  41. package/dist/test/unit/pskt.test.d.ts +15 -0
  42. package/dist/test/unit/pskt.test.d.ts.map +1 -0
  43. package/dist/test/unit/pskt.test.js +383 -0
  44. package/dist/test/unit/transaction.test.js +291 -11
  45. package/dist/test/unit/transactionBuilder.test.js +16 -3
  46. package/dist/test/unit/transactionFlow.test.js +67 -2
  47. package/dist/test/unit/utils.test.js +63 -4
  48. package/dist/tsconfig.tsbuildinfo +1 -1
  49. package/package.json +6 -5
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const should = __importStar(require("should"));
37
37
  const statics_1 = require("@bitgo-beta/statics");
38
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
38
39
  const src_1 = require("../../src");
39
40
  const keyPair_1 = require("../../src/lib/keyPair");
40
41
  const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
@@ -63,8 +64,8 @@ describe('Kaspa (KASPA)', function () {
63
64
  post: () => ({ result: () => Promise.resolve({}) }),
64
65
  get: () => ({ result: () => Promise.resolve({}) }),
65
66
  };
66
- kaspa = new src_1.Kaspa(mockBitgo, statics_1.coins.get('kaspa'));
67
- tkaspa = new src_1.Kaspa(mockBitgo, statics_1.coins.get('tkaspa'));
67
+ kaspa = src_1.Kaspa.createInstance(mockBitgo);
68
+ tkaspa = src_1.Tkaspa.createInstance(mockBitgo);
68
69
  });
69
70
  describe('Coin Properties', function () {
70
71
  it('should have the correct chain name', function () {
@@ -157,7 +158,9 @@ describe('Kaspa (KASPA)', function () {
157
158
  const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
158
159
  const address = kp.getAddress('mainnet');
159
160
  const keychains = [{ pub: other.pub }, { pub: other.pub }, { pub: other.pub }];
160
- await kaspa.isWalletAddress({ address, keychains }).should.be.rejectedWith(/address validation failure/);
161
+ await kaspa
162
+ .isWalletAddress({ address, keychains })
163
+ .should.be.rejectedWith(/address validation failure/);
161
164
  });
162
165
  });
163
166
  describe('parseTransaction', function () {
@@ -177,7 +180,9 @@ describe('Kaspa (KASPA)', function () {
177
180
  parsed.outputs[0].coin.should.equal('kaspa');
178
181
  });
179
182
  it('should throw on invalid txHex', async function () {
180
- await kaspa.parseTransaction({ txHex: 'notvalidhex!!' }).should.be.rejectedWith(/Invalid transaction/);
183
+ await kaspa
184
+ .parseTransaction({ txHex: 'notvalidhex!!' })
185
+ .should.be.rejectedWith(/Invalid transaction/);
181
186
  });
182
187
  });
183
188
  describe('explainTransaction', function () {
@@ -188,11 +193,13 @@ describe('Kaspa (KASPA)', function () {
188
193
  explained.outputs[0].amount.should.equal('99998000');
189
194
  });
190
195
  it('should throw when txHex is missing', async function () {
191
- await kaspa.explainTransaction({}).should.be.rejectedWith(/missing transaction hex/);
196
+ await kaspa
197
+ .explainTransaction({})
198
+ .should.be.rejectedWith(/missing transaction hex/);
192
199
  });
193
200
  });
194
201
  describe('signTransaction', function () {
195
- it('should sign a prebuilt transaction', async function () {
202
+ it('Path A — prv: signs all inputs with private key', async function () {
196
203
  const txHex = await buildUnsignedTxHex('kaspa');
197
204
  const result = (await kaspa.signTransaction({
198
205
  txPrebuild: { txHex },
@@ -200,10 +207,64 @@ describe('Kaspa (KASPA)', function () {
200
207
  }));
201
208
  result.txHex.should.be.a.String();
202
209
  const signed = transaction_1.Transaction.fromHex('kaspa', result.txHex);
203
- signed.signature[0].should.have.length(130);
210
+ signed.signature[0].should.have.length(132);
211
+ });
212
+ it('Path B — signatures[]: applies per-input TSS signatures for multi-input tx', async function () {
213
+ // Build a 2-input unsigned transaction (simulating what the platform would build)
214
+ const builder = new transactionBuilder_1.TransactionBuilder(statics_1.coins.get('kaspa'));
215
+ builder.addInput(kaspa_fixtures_1.UTXOS.simple).addInput(kaspa_fixtures_1.UTXOS.second).to(kaspa_fixtures_1.ADDRESSES.recipient, '299996000').fee('4000');
216
+ const unsignedTx = (await builder.build());
217
+ const txHex = unsignedTx.toHex();
218
+ // Simulate what the platform does: read per-input sighashes and sign each
219
+ // independently (normally via N DKLS sessions; here using the raw key directly)
220
+ const prv = Buffer.from(kaspa_fixtures_1.KEYS.prv, 'hex');
221
+ const pub = Buffer.from(kaspa_fixtures_1.KEYS.pub, 'hex');
222
+ const payloads = unsignedTx.signablePayloads; // Buffer[2]
223
+ payloads.should.have.length(2);
224
+ const signatures = payloads.map((hash, inputIndex) => ({
225
+ inputIndex,
226
+ pubKey: kaspa_fixtures_1.KEYS.pub,
227
+ signature: Buffer.from(secp256k1_1.ecc.signSchnorr(hash, prv)).toString('hex'),
228
+ }));
229
+ // Both signatures were produced over different messages — they are distinct
230
+ signatures[0].signature.should.not.equal(signatures[1].signature);
231
+ const result = (await kaspa.signTransaction({
232
+ txPrebuild: { txHex },
233
+ signatures,
234
+ }));
235
+ result.txHex.should.be.a.String();
236
+ const signed = transaction_1.Transaction.fromHex('kaspa', result.txHex);
237
+ // Both inputs must carry a valid 65-byte signature (64 Schnorr + 1 sighash type)
238
+ signed.signature.should.have.length(2);
239
+ signed.signature[0].should.have.length(132);
240
+ signed.signature[1].should.have.length(132);
241
+ // Each signature must verify against its own input's sighash, not the other's
242
+ signed.verifySignature(pub, 0).should.be.true();
243
+ signed.verifySignature(pub, 1).should.be.true();
244
+ });
245
+ it('Path B — halfSigned returned when only some inputs are signed', async function () {
246
+ const builder = new transactionBuilder_1.TransactionBuilder(statics_1.coins.get('kaspa'));
247
+ builder.addInput(kaspa_fixtures_1.UTXOS.simple).addInput(kaspa_fixtures_1.UTXOS.second).to(kaspa_fixtures_1.ADDRESSES.recipient, '299996000').fee('4000');
248
+ const unsignedTx = (await builder.build());
249
+ const txHex = unsignedTx.toHex();
250
+ const prv = Buffer.from(kaspa_fixtures_1.KEYS.prv, 'hex');
251
+ const hash0 = unsignedTx.signablePayloads[0];
252
+ // Only sign input 0 — simulates a partial TSS result
253
+ const result = await kaspa.signTransaction({
254
+ txPrebuild: { txHex },
255
+ signatures: [
256
+ { inputIndex: 0, pubKey: kaspa_fixtures_1.KEYS.pub, signature: Buffer.from(secp256k1_1.ecc.signSchnorr(hash0, prv)).toString('hex') },
257
+ ],
258
+ });
259
+ // Should come back as halfSigned since input 1 is still unsigned
260
+ const halfResult = result;
261
+ should.exist(halfResult.halfSigned);
262
+ should.not.exist(halfResult.txHex);
204
263
  });
205
264
  it('should throw when txHex is missing', async function () {
206
- await kaspa.signTransaction({ txPrebuild: {}, prv: kaspa_fixtures_1.KEYS.prv }).should.be.rejectedWith(/missing txHex/);
265
+ await kaspa
266
+ .signTransaction({ txPrebuild: {}, prv: kaspa_fixtures_1.KEYS.prv })
267
+ .should.be.rejectedWith(/missing txHex/);
207
268
  });
208
269
  });
209
270
  describe('verifyTransaction', function () {
@@ -215,11 +276,70 @@ describe('Kaspa (KASPA)', function () {
215
276
  });
216
277
  result.should.be.true();
217
278
  });
279
+ it('should pass when recipients is absent (no recipient check)', async function () {
280
+ const txHex = await buildSignedTxHex('kaspa');
281
+ const result = await kaspa.verifyTransaction({
282
+ txPrebuild: { txHex },
283
+ txParams: {},
284
+ });
285
+ result.should.be.true();
286
+ });
287
+ it('should throw when expected recipient count exceeds actual outputs', async function () {
288
+ const txHex = await buildSignedTxHex('kaspa');
289
+ // tx has 1 output, we claim 2 recipients
290
+ await kaspa
291
+ .verifyTransaction({
292
+ txPrebuild: { txHex },
293
+ txParams: {
294
+ recipients: [
295
+ { address: kaspa_fixtures_1.ADDRESSES.recipient, amount: '50000000' },
296
+ { address: kaspa_fixtures_1.ADDRESSES.recipient, amount: '49998000' },
297
+ ],
298
+ },
299
+ })
300
+ .should.be.rejectedWith(/Expected at least 2 outputs/);
301
+ });
218
302
  it('should throw when txHex is missing', async function () {
219
303
  await kaspa
220
304
  .verifyTransaction({ txPrebuild: {}, txParams: {} })
221
305
  .should.be.rejectedWith(/missing required tx prebuild property txHex/);
222
306
  });
307
+ it('should throw when txHex is invalid', async function () {
308
+ await kaspa
309
+ .verifyTransaction({
310
+ txPrebuild: { txHex: 'deadbeef' },
311
+ txParams: {},
312
+ })
313
+ .should.be.rejectedWith(/Invalid transaction/);
314
+ });
315
+ });
316
+ describe('parseTransaction — halfSigned path', function () {
317
+ it('should parse a transaction passed via halfSigned.txHex', async function () {
318
+ const txHex = await buildUnsignedTxHex('kaspa');
319
+ const parsed = (await kaspa.parseTransaction({ halfSigned: { txHex } }));
320
+ parsed.inputs.should.have.length(1);
321
+ parsed.inputs[0].coin.should.equal('kaspa');
322
+ parsed.outputs.should.have.length(1);
323
+ parsed.outputs[0].amount.should.equal('99998000');
324
+ });
325
+ });
326
+ describe('explainTransaction — halfSigned path', function () {
327
+ it('should explain a transaction passed via halfSigned.txHex', async function () {
328
+ const txHex = await buildUnsignedTxHex('kaspa');
329
+ const explained = await kaspa.explainTransaction({ halfSigned: { txHex } });
330
+ explained.outputs.should.have.length(1);
331
+ explained.outputs[0].amount.should.equal('99998000');
332
+ });
333
+ });
334
+ describe('signTransaction — edge cases', function () {
335
+ it('should return halfSigned when neither prv nor signatures provided', async function () {
336
+ const txHex = await buildUnsignedTxHex('kaspa');
337
+ const result = await kaspa.signTransaction({ txPrebuild: { txHex } });
338
+ // no signing happened — all signature scripts are empty, so halfSigned is returned
339
+ const typed = result;
340
+ should.exist(typed.halfSigned);
341
+ should.not.exist(typed.txHex);
342
+ });
223
343
  });
224
344
  });
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NvaW4udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxpREFBNEM7QUFDNUMsbUNBQWtDO0FBQ2xDLG1EQUFnRDtBQUNoRCx5RUFBc0U7QUFDdEUsMkRBQXdEO0FBQ3hELCtEQUFvRTtBQUVwRSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsUUFBZ0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxzQkFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQywwQkFBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztJQUNsRCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0s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TCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEthc3BhIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEFERFJFU1NFUywgS0VZUywgVVRYT1MgfSBmcm9tICcuLi9maXh0dXJlcy9rYXNwYS5maXh0dXJlcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2lnbmVkVHhIZXgoY29pbk5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldChjb2luTmFtZSkpO1xuICBidWlsZGVyLmFkZElucHV0KFVUWE9TLnNpbXBsZSkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzk5OTk4MDAwJykuZmVlKCcyMDAwJyk7XG4gIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIHR4LnNpZ24oQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKSk7XG4gIHJldHVybiB0eC50b0hleCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFVuc2lnbmVkVHhIZXgoY29pbk5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldChjb2luTmFtZSkpO1xuICBidWlsZGVyLmFkZElucHV0KFVUWE9TLnNpbXBsZSkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzk5OTk4MDAwJykuZmVlKCcyMDAwJyk7XG4gIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIHJldHVybiB0eC50b0hleCgpO1xufVxuXG5kZXNjcmliZSgnS2FzcGEgKEtBU1BBKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGthc3BhOiBLYXNwYTtcbiAgbGV0IHRrYXNwYTogS2FzcGE7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrQml0Z28gPSB7XG4gICAgICB1cmw6ICgpID0+ICcnLFxuICAgICAgbWljcm9zZXJ2aWNlc1VybDogKCkgPT4gJycsXG4gICAgICBwb3N0OiAoKSA9PiAoeyByZXN1bHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkgfSksXG4gICAgICBnZXQ6ICgpID0+ICh7IHJlc3VsdDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHt9KSB9KSxcbiAgICB9IGFzIGFueTtcbiAgICBrYXNwYSA9IG5ldyBLYXNwYShtb2NrQml0Z28sIGNvaW5zLmdldCgna2FzcGEnKSk7XG4gICAgdGthc3BhID0gbmV3IEthc3BhKG1vY2tCaXRnbywgY29pbnMuZ2V0KCd0a2FzcGEnKSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb2luIFByb3BlcnRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGNoYWluIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICAgIHRrYXNwYS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGthc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgZmFtaWx5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdLYXNwYScpO1xuICAgICAgdGthc3BhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEthc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgYmFzZSBmYWN0b3IgKDEwXjgpJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxMDAwMDAwMDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IFRTUyAoRUNEU0EgTVBDKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGthc3BhLmdldE1QQ0FsZ29yaXRobSgpLnNob3VsZC5lcXVhbCgnZWNkc2EnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleSBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSB2YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFB1YignMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4Jykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRQdWIoJ25vdC1hLWtleScpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFBydignYTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMicpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5IHBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IGthc3BhLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICAgIGtwLnB1YiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTtcbiAgICAgIGtwLnBydiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpciBmcm9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmFsbG9jKDMyLCAxKTtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29uc2lzdGVudCBrZXlzIGZyb20gc2FtZSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgNDIpO1xuICAgICAgY29uc3Qga3AxID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgY29uc3Qga3AyID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga3AxLnB1YiEuc2hvdWxkLmVxdWFsKGtwMi5wdWIhKTtcbiAgICAgIGtwMS5wcnYhLnNob3VsZC5lcXVhbChrcDIucHJ2ISk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBrYXNwYS5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoJ25vdC1hbi1hZGRyZXNzJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBlbXB0eSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoJycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXYWxsZXRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhZGRyZXNzIG1hdGNoZXMgZGVyaXZlZCBhZGRyZXNzIGZyb20ga2V5Y2hhaW5zWzBdJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgcHViOiBLRVlTLnB1YiB9LCB7IHB1YjogS0VZUy5wdWIgfSwgeyBwdWI6IEtFWVMucHViIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEuaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gYXMgYW55KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBpbnZhbGlkIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogJ25vdC1hbi1hZGRyZXNzJywga2V5Y2hhaW5zOiBbXSB9IGFzIGFueSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWlucyBjb3VudCBpcyBub3QgMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnM6IFt7IHB1YjogS0VZUy5wdWIgfV0gfSBhcyBhbnkpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGtleWNoYWlucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGRlcml2ZWQgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG90aGVyID0gbmV3IEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBwdWI6IG90aGVyLnB1YiB9LCB7IHB1Yjogb3RoZXIucHViIH0sIHsgcHViOiBvdGhlci5wdWIgfV07XG4gICAgICBhd2FpdCBrYXNwYS5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnMgfSBhcyBhbnkpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2FkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCB3aGVuIG5vIHR4SGV4IGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQga2FzcGEucGFyc2VUcmFuc2FjdGlvbih7fSk7XG4gICAgICBwYXJzZWQuc2hvdWxkLmRlZXBFcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBpbnB1dHMgYW5kIG91dHB1dHMgZm9yIGEgdmFsaWQgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IChhd2FpdCBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXggfSkpIGFzIHtcbiAgICAgICAgaW5wdXRzOiB7IGFtb3VudDogc3RyaW5nOyBjb2luOiBzdHJpbmcgfVtdO1xuICAgICAgICBvdXRwdXRzOiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBzdHJpbmc7IGNvaW46IHN0cmluZyB9W107XG4gICAgICB9O1xuICAgICAgcGFyc2VkLmlucHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBwYXJzZWQuaW5wdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoVVRYT1Muc2ltcGxlLmFtb3VudCk7XG4gICAgICBwYXJzZWQuaW5wdXRzWzBdLmNvaW4uc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgICAgcGFyc2VkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKEFERFJFU1NFUy5yZWNpcGllbnQpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uY29pbi5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGludmFsaWQgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6ICdub3R2YWxpZGhleCEhJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdmFsaWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGEuZXhwbGFpblRyYW5zYWN0aW9uKHt9IGFzIGFueSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSBwcmVidWlsdCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgcHJ2OiBLRVlTLnBydixcbiAgICAgIH0gYXMgYW55KSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG4gICAgICByZXN1bHQudHhIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBzaWduZWQgPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCdrYXNwYScsIHJlc3VsdC50eEhleCk7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzBdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYS5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgcHJ2OiBLRVlTLnBydiB9IGFzIGFueSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRTaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBBRERSRVNTRVMucmVjaXBpZW50LCBhbW91bnQ6ICc5OTk5ODAwMCcgfV0gfSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgdHhQYXJhbXM6IHt9IH0gYXMgYW55KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NvaW4udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxpREFBNEM7QUFFNUMscURBQTRDO0FBQzVDLG1DQUEwQztBQUMxQyxtREFBZ0Q7QUFDaEQseUVBQXNFO0FBQ3RFLDJEQUF3RDtBQUV4RCwrREFBb0U7QUFPcEUsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7SUFDbEQsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxRQUFnQjtJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHVDQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLDBCQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdB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QUMsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtRQUN2QyxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUU5RCxDQUFDLENBQUM7WUFDTixtRkFBbUY7WUFDbkYsTUFBTSxLQUFLLEdBQUcsTUFBdUUsQ0FBQztZQUN0RixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhLCBUa2FzcGEgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2FzcGFWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB7IEFERFJFU1NFUywgS0VZUywgVVRYT1MgfSBmcm9tICcuLi9maXh0dXJlcy9rYXNwYS5maXh0dXJlcyc7XG5cbnR5cGUgUGFyc2VkVHggPSB7XG4gIGlucHV0czogeyBhbW91bnQ6IHN0cmluZzsgY29pbjogc3RyaW5nIH1bXTtcbiAgb3V0cHV0czogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nOyBjb2luOiBzdHJpbmcgfVtdO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRTaWduZWRUeEhleChjb2luTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gIGJ1aWxkZXIuYWRkSW5wdXQoVVRYT1Muc2ltcGxlKS50byhBRERSRVNTRVMucmVjaXBpZW50LCAnOTk5OTgwMDAnKS5mZWUoJzIwMDAnKTtcbiAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgdHguc2lnbihCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpKTtcbiAgcmV0dXJuIHR4LnRvSGV4KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkVW5zaWduZWRUeEhleChjb2luTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG4gIGJ1aWxkZXIuYWRkSW5wdXQoVVRYT1Muc2ltcGxlKS50byhBRERSRVNTRVMucmVjaXBpZW50LCAnOTk5OTgwMDAnKS5mZWUoJzIwMDAnKTtcbiAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgcmV0dXJuIHR4LnRvSGV4KCk7XG59XG5cbmRlc2NyaWJlKCdLYXNwYSAoS0FTUEEpJywgZnVuY3Rpb24gKCkge1xuICBsZXQga2FzcGE6IEthc3BhO1xuICBsZXQgdGthc3BhOiBUa2FzcGE7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrQml0Z28gPSB7XG4gICAgICB1cmw6ICgpID0+ICcnLFxuICAgICAgbWljcm9zZXJ2aWNlc1VybDogKCkgPT4gJycsXG4gICAgICBwb3N0OiAoKSA9PiAoeyByZXN1bHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkgfSksXG4gICAgICBnZXQ6ICgpID0+ICh7IHJlc3VsdDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHt9KSB9KSxcbiAgICB9IGFzIHVua25vd24gYXMgQml0R29CYXNlO1xuICAgIGthc3BhID0gS2FzcGEuY3JlYXRlSW5zdGFuY2UobW9ja0JpdGdvKTtcbiAgICB0a2FzcGEgPSBUa2FzcGEuY3JlYXRlSW5zdGFuY2UobW9ja0JpdGdvKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NvaW4gUHJvcGVydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgY2hhaW4gbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgICAgdGthc3BhLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0a2FzcGEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBmYW1pbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgZnVsbCBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0thc3BhJyk7XG4gICAgICB0a2FzcGEuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgS2FzcGEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBiYXNlIGZhY3RvciAoMTBeOCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDEwMDAwMDAwMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgVFNTIChFQ0RTQSBNUEMpJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuc3VwcG9ydHNUc3MoKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAga2FzcGEuZ2V0TVBDQWxnb3JpdGhtKCkuc2hvdWxkLmVxdWFsKCdlY2RzYScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5IFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHZhbGlkIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5pc1ZhbGlkUHViKCcwMjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFB1Yignbm90LWEta2V5Jykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgdmFsaWQgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5pc1ZhbGlkUHJ2KCdhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyYzNkNGU1ZjZhMWIyJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleSBHZW5lcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHViKTtcbiAgICAgIHNob3VsZC5leGlzdChrcC5wcnYpO1xuICAgICAgKGtwLnB1YiBhcyBzdHJpbmcpLnNob3VsZC5oYXZlLmxlbmd0aCg2Nik7XG4gICAgICAoa3AucHJ2IGFzIHN0cmluZykuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpciBmcm9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmFsbG9jKDMyLCAxKTtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29uc2lzdGVudCBrZXlzIGZyb20gc2FtZSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgNDIpO1xuICAgICAgY29uc3Qga3AxID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgY29uc3Qga3AyID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgKGtwMS5wdWIgYXMgc3RyaW5nKS5zaG91bGQuZXF1YWwoa3AyLnB1YiBhcyBzdHJpbmcpO1xuICAgICAgKGtwMS5wcnYgYXMgc3RyaW5nKS5zaG91bGQuZXF1YWwoa3AyLnBydiBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBtYWlubmV0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRBZGRyZXNzKCdub3QtYW4tYWRkcmVzcycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgZW1wdHkgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzV2FsbGV0QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYWRkcmVzcyBtYXRjaGVzIGRlcml2ZWQgYWRkcmVzcyBmcm9tIGtleWNoYWluc1swXScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGNvbnN0IGtleWNoYWlucyA9IFt7IHB1YjogS0VZUy5wdWIgfSwgeyBwdWI6IEtFWVMucHViIH0sIHsgcHViOiBLRVlTLnB1YiB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3MsIGtleWNoYWlucyB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLmlzV2FsbGV0QWRkcmVzcz5bMF0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGludmFsaWQgYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzOiAnbm90LWFuLWFkZHJlc3MnLCBrZXljaGFpbnM6IFtdIH0gYXMgUGFyYW1ldGVyczx0eXBlb2Yga2FzcGEuaXNXYWxsZXRBZGRyZXNzPlswXSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWlucyBjb3VudCBpcyBub3QgMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnM6IFt7IHB1YjogS0VZUy5wdWIgfV0gfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5pc1dhbGxldEFkZHJlc3M+WzBdKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvSW52YWxpZCBrZXljaGFpbnMvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiBkZXJpdmVkIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvdGhlciA9IG5ldyBLZXlQYWlyKCkuZ2V0S2V5cygpO1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgcHViOiBvdGhlci5wdWIgfSwgeyBwdWI6IG90aGVyLnB1YiB9LCB7IHB1Yjogb3RoZXIucHViIH1dO1xuICAgICAgYXdhaXQga2FzcGFcbiAgICAgICAgLmlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3MsIGtleWNoYWlucyB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLmlzV2FsbGV0QWRkcmVzcz5bMF0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9hZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyc2VUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBvYmplY3Qgd2hlbiBubyB0eEhleCBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGthc3BhLnBhcnNlVHJhbnNhY3Rpb24oe30gYXMgUGFyYW1ldGVyczx0eXBlb2Yga2FzcGEucGFyc2VUcmFuc2FjdGlvbj5bMF0pO1xuICAgICAgcGFyc2VkLnNob3VsZC5kZWVwRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5wdXRzIGFuZCBvdXRwdXRzIGZvciBhIHZhbGlkIHR4SGV4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFVuc2lnbmVkVHhIZXgoJ2thc3BhJyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSAoYXdhaXQga2FzcGEucGFyc2VUcmFuc2FjdGlvbih7IHR4SGV4IH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICB0eXBlb2Yga2FzcGEucGFyc2VUcmFuc2FjdGlvblxuICAgICAgPlswXSkpIGFzIHVua25vd24gYXMgUGFyc2VkVHg7XG4gICAgICBwYXJzZWQuaW5wdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhcnNlZC5pbnB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbChVVFhPUy5zaW1wbGUuYW1vdW50KTtcbiAgICAgIHBhcnNlZC5pbnB1dHNbMF0uY29pbi5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgICBwYXJzZWQub3V0cHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBwYXJzZWQub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCc5OTk5ODAwMCcpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoQUREUkVTU0VTLnJlY2lwaWVudCk7XG4gICAgICBwYXJzZWQub3V0cHV0c1swXS5jb2luLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gaW52YWxpZCB0eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6ICdub3R2YWxpZGhleCEhJyB9IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2Yga2FzcGEucGFyc2VUcmFuc2FjdGlvbj5bMF0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdmFsaWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGFcbiAgICAgICAgLmV4cGxhaW5UcmFuc2FjdGlvbih7fSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5leHBsYWluVHJhbnNhY3Rpb24+WzBdKVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnUGF0aCBBIOKAlCBwcnY6IHNpZ25zIGFsbCBpbnB1dHMgd2l0aCBwcml2YXRlIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgcHJ2OiBLRVlTLnBydixcbiAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5zaWduVHJhbnNhY3Rpb24+WzBdKSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG4gICAgICByZXN1bHQudHhIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBzaWduZWQgPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCdrYXNwYScsIHJlc3VsdC50eEhleCk7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzBdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1BhdGggQiDigJQgc2lnbmF0dXJlc1tdOiBhcHBsaWVzIHBlci1pbnB1dCBUU1Mgc2lnbmF0dXJlcyBmb3IgbXVsdGktaW5wdXQgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBCdWlsZCBhIDItaW5wdXQgdW5zaWduZWQgdHJhbnNhY3Rpb24gKHNpbXVsYXRpbmcgd2hhdCB0aGUgcGxhdGZvcm0gd291bGQgYnVpbGQpXG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQoJ2thc3BhJykpO1xuICAgICAgYnVpbGRlci5hZGRJbnB1dChVVFhPUy5zaW1wbGUpLmFkZElucHV0KFVUWE9TLnNlY29uZCkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzI5OTk5NjAwMCcpLmZlZSgnNDAwMCcpO1xuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgdHhIZXggPSB1bnNpZ25lZFR4LnRvSGV4KCk7XG5cbiAgICAgIC8vIFNpbXVsYXRlIHdoYXQgdGhlIHBsYXRmb3JtIGRvZXM6IHJlYWQgcGVyLWlucHV0IHNpZ2hhc2hlcyBhbmQgc2lnbiBlYWNoXG4gICAgICAvLyBpbmRlcGVuZGVudGx5IChub3JtYWxseSB2aWEgTiBES0xTIHNlc3Npb25zOyBoZXJlIHVzaW5nIHRoZSByYXcga2V5IGRpcmVjdGx5KVxuICAgICAgY29uc3QgcHJ2ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIGNvbnN0IHB1YiA9IEJ1ZmZlci5mcm9tKEtFWVMucHViLCAnaGV4Jyk7XG4gICAgICBjb25zdCBwYXlsb2FkcyA9IHVuc2lnbmVkVHguc2lnbmFibGVQYXlsb2FkczsgLy8gQnVmZmVyWzJdXG4gICAgICBwYXlsb2Fkcy5zaG91bGQuaGF2ZS5sZW5ndGgoMik7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBwYXlsb2Fkcy5tYXAoKGhhc2gsIGlucHV0SW5kZXgpID0+ICh7XG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIHB1YktleTogS0VZUy5wdWIsXG4gICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oZWNjLnNpZ25TY2hub3JyKGhhc2gsIHBydikpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gQm90aCBzaWduYXR1cmVzIHdlcmUgcHJvZHVjZWQgb3ZlciBkaWZmZXJlbnQgbWVzc2FnZXMg4oCUIHRoZXkgYXJlIGRpc3RpbmN0XG4gICAgICBzaWduYXR1cmVzWzBdLnNpZ25hdHVyZS5zaG91bGQubm90LmVxdWFsKHNpZ25hdHVyZXNbMV0uc2lnbmF0dXJlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgc2lnbmF0dXJlcyxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBrYXNwYS5zaWduVHJhbnNhY3Rpb24+WzBdKSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG5cbiAgICAgIHJlc3VsdC50eEhleC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IFRyYW5zYWN0aW9uLmZyb21IZXgoJ2thc3BhJywgcmVzdWx0LnR4SGV4KTtcblxuICAgICAgLy8gQm90aCBpbnB1dHMgbXVzdCBjYXJyeSBhIHZhbGlkIDY1LWJ5dGUgc2lnbmF0dXJlICg2NCBTY2hub3JyICsgMSBzaWdoYXNoIHR5cGUpXG4gICAgICBzaWduZWQuc2lnbmF0dXJlLnNob3VsZC5oYXZlLmxlbmd0aCgyKTtcbiAgICAgIHNpZ25lZC5zaWduYXR1cmVbMF0uc2hvdWxkLmhhdmUubGVuZ3RoKDEzMik7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzFdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzIpO1xuXG4gICAgICAvLyBFYWNoIHNpZ25hdHVyZSBtdXN0IHZlcmlmeSBhZ2FpbnN0IGl0cyBvd24gaW5wdXQncyBzaWdoYXNoLCBub3QgdGhlIG90aGVyJ3NcbiAgICAgIHNpZ25lZC52ZXJpZnlTaWduYXR1cmUocHViLCAwKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2lnbmVkLnZlcmlmeVNpZ25hdHVyZShwdWIsIDEpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnUGF0aCBCIOKAlCBoYWxmU2lnbmVkIHJldHVybmVkIHdoZW4gb25seSBzb21lIGlucHV0cyBhcmUgc2lnbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCdrYXNwYScpKTtcbiAgICAgIGJ1aWxkZXIuYWRkSW5wdXQoVVRYT1Muc2ltcGxlKS5hZGRJbnB1dChVVFhPUy5zZWNvbmQpLnRvKEFERFJFU1NFUy5yZWNpcGllbnQsICcyOTk5OTYwMDAnKS5mZWUoJzQwMDAnKTtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdW5zaWduZWRUeC50b0hleCgpO1xuXG4gICAgICBjb25zdCBwcnYgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgY29uc3QgaGFzaDAgPSB1bnNpZ25lZFR4LnNpZ25hYmxlUGF5bG9hZHNbMF07XG5cbiAgICAgIC8vIE9ubHkgc2lnbiBpbnB1dCAwIOKAlCBzaW11bGF0ZXMgYSBwYXJ0aWFsIFRTUyByZXN1bHRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgc2lnbmF0dXJlczogW1xuICAgICAgICAgIHsgaW5wdXRJbmRleDogMCwgcHViS2V5OiBLRVlTLnB1Yiwgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShlY2Muc2lnblNjaG5vcnIoaGFzaDAsIHBydikpLnRvU3RyaW5nKCdoZXgnKSB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLnNpZ25UcmFuc2FjdGlvbj5bMF0pO1xuXG4gICAgICAvLyBTaG91bGQgY29tZSBiYWNrIGFzIGhhbGZTaWduZWQgc2luY2UgaW5wdXQgMSBpcyBzdGlsbCB1bnNpZ25lZFxuICAgICAgY29uc3QgaGFsZlJlc3VsdCA9IHJlc3VsdCBhcyB1bmtub3duIGFzIHsgaGFsZlNpZ25lZD86IHsgdHhIZXg6IHN0cmluZyB9OyB0eEhleD86IHN0cmluZyB9O1xuICAgICAgc2hvdWxkLmV4aXN0KGhhbGZSZXN1bHQuaGFsZlNpZ25lZCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGhhbGZSZXN1bHQudHhIZXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDoge30sIHBydjogS0VZUy5wcnYgfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIGthc3BhLnNpZ25UcmFuc2FjdGlvbj5bMF0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9taXNzaW5nIHR4SGV4Lyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhIHZhbGlkIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4IH0sXG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IEFERFJFU1NFUy5yZWNpcGllbnQsIGFtb3VudDogJzk5OTk4MDAwJyB9XSB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIEthc3BhVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHdoZW4gcmVjaXBpZW50cyBpcyBhYnNlbnQgKG5vIHJlY2lwaWVudCBjaGVjayknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkU2lnbmVkVHhIZXgoJ2thc3BhJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBrYXNwYS52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIEthc3BhVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGV4cGVjdGVkIHJlY2lwaWVudCBjb3VudCBleGNlZWRzIGFjdHVhbCBvdXRwdXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhIZXggPSBhd2FpdCBidWlsZFNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgLy8gdHggaGFzIDEgb3V0cHV0LCB3ZSBjbGFpbSAyIHJlY2lwaWVudHNcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICAgIHsgYWRkcmVzczogQUREUkVTU0VTLnJlY2lwaWVudCwgYW1vdW50OiAnNTAwMDAwMDAnIH0sXG4gICAgICAgICAgICAgIHsgYWRkcmVzczogQUREUkVTU0VTLnJlY2lwaWVudCwgYW1vdW50OiAnNDk5OTgwMDAnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBLYXNwYVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0V4cGVjdGVkIGF0IGxlYXN0IDIgb3V0cHV0cy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgdHhQYXJhbXM6IHt9IH0gYXMgdW5rbm93biBhcyBLYXNwYVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBpbnZhbGlkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGFcbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7IHR4SGV4OiAnZGVhZGJlZWYnIH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICB9IGFzIHVua25vd24gYXMgS2FzcGFWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uIOKAlCBoYWxmU2lnbmVkIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHRyYW5zYWN0aW9uIHBhc3NlZCB2aWEgaGFsZlNpZ25lZC50eEhleCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcGFyc2VkID0gKGF3YWl0IGthc3BhLnBhcnNlVHJhbnNhY3Rpb24oeyBoYWxmU2lnbmVkOiB7IHR4SGV4IH0gfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgIHR5cGVvZiBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uXG4gICAgICA+WzBdKSkgYXMgdW5rbm93biBhcyBQYXJzZWRUeDtcbiAgICAgIHBhcnNlZC5pbnB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFyc2VkLmlucHV0c1swXS5jb2luLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzLnNob3VsZC5oYXZlLmxlbmd0aCgxKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzk5OTk4MDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24g4oCUIGhhbGZTaWduZWQgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2FjdGlvbiBwYXNzZWQgdmlhIGhhbGZTaWduZWQudHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IGhhbGZTaWduZWQ6IHsgdHhIZXggfSB9IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgdHlwZW9mIGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvblxuICAgICAgPlswXSk7XG4gICAgICBleHBsYWluZWQub3V0cHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBleHBsYWluZWQub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCc5OTk5ODAwMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnblRyYW5zYWN0aW9uIOKAlCBlZGdlIGNhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGhhbGZTaWduZWQgd2hlbiBuZWl0aGVyIHBydiBub3Igc2lnbmF0dXJlcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEuc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyB0eEhleCB9IH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICB0eXBlb2Yga2FzcGEuc2lnblRyYW5zYWN0aW9uXG4gICAgICA+WzBdKTtcbiAgICAgIC8vIG5vIHNpZ25pbmcgaGFwcGVuZWQg4oCUIGFsbCBzaWduYXR1cmUgc2NyaXB0cyBhcmUgZW1wdHksIHNvIGhhbGZTaWduZWQgaXMgcmV0dXJuZWRcbiAgICAgIGNvbnN0IHR5cGVkID0gcmVzdWx0IGFzIHVua25vd24gYXMgeyBoYWxmU2lnbmVkPzogeyB0eEhleDogc3RyaW5nIH07IHR4SGV4Pzogc3RyaW5nIH07XG4gICAgICBzaG91bGQuZXhpc3QodHlwZWQuaGFsZlNpZ25lZCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KHR5cGVkLnR4SGV4KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const should = __importStar(require("should"));
37
37
  const keyPair_1 = require("../../src/lib/keyPair");
38
+ const constants_1 = require("../../src/lib/constants");
38
39
  const kaspa_fixtures_1 = require("../fixtures/kaspa.fixtures");
39
40
  describe('Kaspa KeyPair', function () {
40
41
  describe('Key Generation', function () {
@@ -86,5 +87,38 @@ describe('Kaspa KeyPair', function () {
86
87
  kp1.getAddress('mainnet').should.not.equal(kp2.getAddress('mainnet'));
87
88
  });
88
89
  });
90
+ describe('ECDSA Address Derivation (v1)', function () {
91
+ it('should derive a mainnet ECDSA address', function () {
92
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
93
+ const address = kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA);
94
+ address.should.startWith('kaspa');
95
+ address.should.containEql(':');
96
+ });
97
+ it('should derive a testnet ECDSA address', function () {
98
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
99
+ const address = kp.getAddress('testnet', constants_1.KaspaAddressType.ECDSA);
100
+ address.should.startWith('kaspatest');
101
+ address.should.containEql(':');
102
+ });
103
+ it('Schnorr and ECDSA addresses for the same key should differ', function () {
104
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
105
+ const schnorrAddr = kp.getAddress('mainnet');
106
+ const ecdsaAddr = kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA);
107
+ schnorrAddr.should.not.equal(ecdsaAddr);
108
+ });
109
+ it('Schnorr address matches fixture ADDRESSES.valid', function () {
110
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
111
+ kp.getAddress('mainnet').should.equal(kaspa_fixtures_1.ADDRESSES.valid);
112
+ });
113
+ it('ECDSA address matches fixture ADDRESSES.validEcdsa', function () {
114
+ const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
115
+ kp.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA).should.equal(kaspa_fixtures_1.ADDRESSES.validEcdsa);
116
+ });
117
+ it('should be consistent across two KeyPair instances for ECDSA', function () {
118
+ const kp1 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
119
+ const kp2 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
120
+ kp1.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA).should.equal(kp2.getAddress('mainnet', constants_1.KaspaAddressType.ECDSA));
121
+ });
122
+ });
89
123
  });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2tleVBhaXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsK0RBQWtEO0FBRWxELFFBQVEsQ0FBQyxlQUFlLEVBQUU7SUFDeEIsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztZQUNuRSxJQUFJLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FB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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4uL2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzJztcblxuZGVzY3JpYmUoJ0thc3BhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgcmFuZG9tIGtleSBwYWlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTsgLy8gY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleVxuICAgICAga2V5cy5wcnYhLnNob3VsZC5oYXZlLmxlbmd0aCg2NCk7IC8vIDMyLWJ5dGUgcHJpdmF0ZSBrZXkgaW4gaGV4XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGtleSBwYWlyIGZyb20gYSBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5lcXVhbChLRVlTLnB1Yik7XG4gICAgICBrZXlzLnBydiEuc2hvdWxkLmVxdWFsKEtFWVMucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEga2V5IHBhaXIgZnJvbSBhIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHViOiBLRVlTLnB1YiB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrcC5nZXRLZXlzKCk7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuZXF1YWwoS0VZUy5wdWIpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IG5ldyBLZXlQYWlyKHsgcHJ2OiAnaW52YWxpZC1wcnYnIH0pKS5zaG91bGQudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgRGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLnN0YXJ0V2l0aCgna2FzcGEnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGEgdGVzdG5ldCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygndGVzdG5ldCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuc3RhcnRXaXRoKCdrYXNwYXRlc3QnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGNvbnNpc3RlbnQgYWRkcmVzc2VzIGZvciB0aGUgc2FtZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBrcDEuZ2V0QWRkcmVzcygnbWFpbm5ldCcpLnNob3VsZC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIGRpZmZlcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGtwMS5nZXRBZGRyZXNzKCdtYWlubmV0Jykuc2hvdWxkLm5vdC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2tleVBhaXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsdURBQTJEO0FBQzNELCtEQUE2RDtBQUU3RCxRQUFRLENBQUMsZUFBZSxFQUFFO0lBQ3hCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsbUNBQW1DLEVBQUU7WUFDdEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxpQkFBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7WUFDbkUsSUFBSSxDQUFDLEdBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZ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Q0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBLYXNwYUFkZHJlc3NUeXBlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgS0VZUywgQUREUkVTU0VTIH0gZnJvbSAnLi4vZml4dHVyZXMva2FzcGEuZml4dHVyZXMnO1xuXG5kZXNjcmliZSgnS2FzcGEgS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0tleSBHZW5lcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSByYW5kb20ga2V5IHBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBrZXlzID0ga3AuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtleXMucHViKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnBydik7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuaGF2ZS5sZW5ndGgoNjYpOyAvLyBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5XG4gICAgICBrZXlzLnBydiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTsgLy8gMzItYnl0ZSBwcml2YXRlIGtleSBpbiBoZXhcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEga2V5IHBhaXIgZnJvbSBhIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga3AuZ2V0S2V5cygpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmVxdWFsKEtFWVMucHViKTtcbiAgICAgIGtleXMucHJ2IS5zaG91bGQuZXF1YWwoS0VZUy5wcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBrZXkgcGFpciBmcm9tIGEgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwdWI6IEtFWVMucHViIH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5lcXVhbChLRVlTLnB1Yik7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGtleXMucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAoKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6ICdpbnZhbGlkLXBydicgfSkpLnNob3VsZC50aHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQWRkcmVzcyBEZXJpdmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZGVyaXZlIGEgbWFpbm5ldCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuc3RhcnRXaXRoKCdrYXNwYScpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuY29udGFpbkVxbCgnOicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgYSB0ZXN0bmV0IGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCd0ZXN0bmV0Jyk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5zdGFydFdpdGgoJ2thc3BhdGVzdCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuY29udGFpbkVxbCgnOicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgY29uc2lzdGVudCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwMSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGtwMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGtwMS5nZXRBZGRyZXNzKCdtYWlubmV0Jykuc2hvdWxkLmVxdWFsKGtwMi5nZXRBZGRyZXNzKCdtYWlubmV0JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgZGlmZmVyZW50IGFkZHJlc3NlcyBmb3IgZGlmZmVyZW50IGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAga3AxLmdldEFkZHJlc3MoJ21haW5uZXQnKS5zaG91bGQubm90LmVxdWFsKGtwMi5nZXRBZGRyZXNzKCdtYWlubmV0JykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRUNEU0EgQWRkcmVzcyBEZXJpdmF0aW9uICh2MSknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgYSBtYWlubmV0IEVDRFNBIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0JywgS2FzcGFBZGRyZXNzVHlwZS5FQ0RTQSk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5zdGFydFdpdGgoJ2thc3BhJyk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5jb250YWluRXFsKCc6Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBhIHRlc3RuZXQgRUNEU0EgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ3Rlc3RuZXQnLCBLYXNwYUFkZHJlc3NUeXBlLkVDRFNBKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLnN0YXJ0V2l0aCgna2FzcGF0ZXN0Jyk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5jb250YWluRXFsKCc6Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2Nobm9yciBhbmQgRUNEU0EgYWRkcmVzc2VzIGZvciB0aGUgc2FtZSBrZXkgc2hvdWxkIGRpZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qgc2Nobm9yckFkZHIgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBjb25zdCBlY2RzYUFkZHIgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0JywgS2FzcGFBZGRyZXNzVHlwZS5FQ0RTQSk7XG4gICAgICBzY2hub3JyQWRkci5zaG91bGQubm90LmVxdWFsKGVjZHNhQWRkcik7XG4gICAgfSk7XG5cbiAgICBpdCgnU2Nobm9yciBhZGRyZXNzIG1hdGNoZXMgZml4dHVyZSBBRERSRVNTRVMudmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKS5zaG91bGQuZXF1YWwoQUREUkVTU0VTLnZhbGlkKTtcbiAgICB9KTtcblxuICAgIGl0KCdFQ0RTQSBhZGRyZXNzIG1hdGNoZXMgZml4dHVyZSBBRERSRVNTRVMudmFsaWRFY2RzYScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpLnNob3VsZC5lcXVhbChBRERSRVNTRVMudmFsaWRFY2RzYSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHR3byBLZXlQYWlyIGluc3RhbmNlcyBmb3IgRUNEU0EnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBrcDEuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpLnNob3VsZC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcsIEthc3BhQWRkcmVzc1R5cGUuRUNEU0EpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * PSKT (Partially Signed Kaspa Transaction) — Unit Tests
3
+ *
4
+ * Covers:
5
+ * - Full role flow: CREATOR → UPDATER → SIGNER → FINALIZER → EXTRACTOR
6
+ * - HSM / external signing path via addSignature()
7
+ * - Multi-party COMBINER role
8
+ * - serialize() / deserialize() round-trip
9
+ * - Extractor output matches Transaction.toBroadcastFormat()
10
+ * - Transaction.toPskt() and Transaction.fromPskt() bridge methods
11
+ * - TransactionBuilder.toPskt() unsigned PSKT construction
12
+ * - Role guard errors
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=pskt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pskt.test.d.ts","sourceRoot":"","sources":["../../../test/unit/pskt.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}