@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.
- package/README.md +224 -33
- package/dist/src/kaspa.d.ts +86 -18
- package/dist/src/kaspa.d.ts.map +1 -1
- package/dist/src/kaspa.js +119 -31
- package/dist/src/lib/constants.d.ts +38 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +56 -5
- package/dist/src/lib/iface.d.ts +28 -17
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/keyPair.d.ts +6 -2
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +7 -4
- package/dist/src/lib/pskt.d.ts +257 -0
- package/dist/src/lib/pskt.d.ts.map +1 -0
- package/dist/src/lib/pskt.js +439 -0
- package/dist/src/lib/sighash.d.ts +34 -13
- package/dist/src/lib/sighash.d.ts.map +1 -1
- package/dist/src/lib/sighash.js +115 -56
- package/dist/src/lib/transaction.d.ts +94 -6
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +199 -21
- package/dist/src/lib/transactionBuilder.d.ts +22 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +53 -5
- package/dist/src/lib/transactionBuilderFactory.d.ts +8 -3
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +14 -4
- package/dist/src/lib/utils.d.ts +17 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +45 -11
- package/dist/src/register.js +2 -2
- package/dist/test/fixtures/kaspa.fixtures.d.ts +12 -0
- package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -1
- package/dist/test/fixtures/kaspa.fixtures.js +76 -11
- package/dist/test/unit/coin.test.js +129 -9
- package/dist/test/unit/keyPair.test.js +35 -1
- package/dist/test/unit/pskt.test.d.ts +15 -0
- package/dist/test/unit/pskt.test.d.ts.map +1 -0
- package/dist/test/unit/pskt.test.js +383 -0
- package/dist/test/unit/transaction.test.js +291 -11
- package/dist/test/unit/transactionBuilder.test.js +16 -3
- package/dist/test/unit/transactionFlow.test.js +67 -2
- package/dist/test/unit/utils.test.js +63 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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 =
|
|
67
|
-
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
|
|
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
|
|
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
|
|
196
|
+
await kaspa
|
|
197
|
+
.explainTransaction({})
|
|
198
|
+
.should.be.rejectedWith(/missing transaction hex/);
|
|
192
199
|
});
|
|
193
200
|
});
|
|
194
201
|
describe('signTransaction', function () {
|
|
195
|
-
it('
|
|
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(
|
|
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
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NvaW4udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxpREFBNEM7QUFFNUMscURBQTRDO0FBQzVDLG1DQUEwQztBQUMxQyxtREFBZ0Q7QUFDaEQseUVBQXNFO0FBQ3RFLDJEQUF3RDtBQUV4RCwrREFBb0U7QUFPcEUsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7SUFDbEQsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxRQUFnQjtJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHVDQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RCxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLDBCQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFnQixDQUFDO0lBQ2xELE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxRQUFRLENBQUMsZUFBZSxFQUFFO0lBQ3hCLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksTUFBYyxDQUFDO0lBRW5CLE1BQU0sQ0FBQztRQUNMLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1lBQ2IsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkQsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQzNCLENBQUM7UUFDMUIsS0FBSyxHQUFHLFdBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxHQUFHLFlBQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7UUFDMUIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1lBQ25DLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFO1lBQ3RDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1lBQy9DLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdDQUFnQyxFQUFFO1lBQ25DLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLEtBQUssQ0FBQyxVQUFVLENBQUMsb0VBQW9FLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFO1lBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRTtZQUN4QyxLQUFLLENBQUMsVUFBVSxDQUFDLGtFQUFrRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRTtZQUMvQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsRUFBRSxDQUFDLEdBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsR0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxHQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBYSxDQUFDLENBQUM7WUFDbkQsR0FBRyxDQUFDLEdBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFhLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFO1FBQzdCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyQyxLQUFLLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTtZQUNoQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtRQUMxQixFQUFFLENBQUMsMkVBQTJFLEVBQUUsS0FBSztZQUNuRixNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLHFCQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUscUJBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWlELENBQUMsQ0FBQztZQUNsSCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLO1lBQ3pDLE1BQU0sS0FBSztpQkFDUixlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBaUQsQ0FBQztpQkFDNUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLO1lBQ3BELE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxNQUFNLEtBQUs7aUJBQ1IsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLHFCQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBaUQsQ0FBQztpQkFDM0csTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLO1lBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksaUJBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDL0UsTUFBTSxLQUFLO2lCQUNSLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWlELENBQUM7aUJBQ3RGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMzQixFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSztZQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFrRCxDQUFDLENBQUM7WUFDaEcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBRWhELENBQUMsQ0FBd0IsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsS0FBSztZQUN2QyxNQUFNLEtBQUs7aUJBQ1IsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUE2RCxDQUFDO2lCQUN2RyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7WUFDNUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDNUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7WUFDNUMsTUFBTSxLQUFLO2lCQUNSLGtCQUFrQixDQUFDLEVBQW9ELENBQUM7aUJBQ3hFLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtRQUMxQixFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSztZQUN6RCxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDO2dCQUMxQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7Z0JBQ3JCLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUc7YUFDNEMsQ0FBQyxDQUFzQixDQUFDO1lBQ25GLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxNQUFNLEdBQUcseUJBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEtBQUs7WUFDcEYsa0ZBQWtGO1lBQ2xGLE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZHLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7WUFDMUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRWpDLDBFQUEwRTtZQUMxRSxnRkFBZ0Y7WUFDaEYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFlBQVk7WUFDMUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9CLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxVQUFVO2dCQUNWLE1BQU0sRUFBRSxxQkFBSSxDQUFDLEdBQUc7Z0JBQ2hCLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUNuRSxDQUFDLENBQUMsQ0FBQztZQUVKLDRFQUE0RTtZQUM1RSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVsRSxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDMUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO2dCQUNyQixVQUFVO2FBQytDLENBQUMsQ0FBc0IsQ0FBQztZQUVuRixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLHlCQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFMUQsaUZBQWlGO1lBQ2pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTVDLDhFQUE4RTtZQUM5RSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSztZQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLHVDQUFrQixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLHNCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLDBCQUFTLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFnQixDQUFDO1lBQzFELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QyxxREFBcUQ7WUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDO2dCQUN6QyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7Z0JBQ3JCLFVBQVUsRUFBRTtvQkFDVixFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLHFCQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2lCQUN6RzthQUN3RCxDQUFDLENBQUM7WUFFN0QsaUVBQWlFO1lBQ2pFLE1BQU0sVUFBVSxHQUFHLE1BQXVFLENBQUM7WUFDM0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7WUFDNUMsTUFBTSxLQUFLO2lCQUNSLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLHFCQUFJLENBQUMsR0FBRyxFQUE0RCxDQUFDO2lCQUM1RyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUM7Z0JBQzNDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtnQkFDckIsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7YUFDckMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUs7WUFDcEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztnQkFDM0MsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO2dCQUNyQixRQUFRLEVBQUUsRUFBRTthQUMrQixDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLHlDQUF5QztZQUN6QyxNQUFNLEtBQUs7aUJBQ1IsaUJBQWlCLENBQUM7Z0JBQ2pCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtnQkFDckIsUUFBUSxFQUFFO29CQUNSLFVBQVUsRUFBRTt3QkFDVixFQUFFLE9BQU8sRUFBRSwwQkFBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO3dCQUNwRCxFQUFFLE9BQU8sRUFBRSwwQkFBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO3FCQUNyRDtpQkFDRjthQUMwQyxDQUFDO2lCQUM3QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7WUFDNUMsTUFBTSxLQUFLO2lCQUNSLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUE4QyxDQUFDO2lCQUMvRixNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUs7WUFDNUMsTUFBTSxLQUFLO2lCQUNSLGlCQUFpQixDQUFDO2dCQUNqQixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNqQyxRQUFRLEVBQUUsRUFBRTthQUMrQixDQUFDO2lCQUM3QyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUU7UUFDN0MsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUs7WUFDaEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBRWhFLENBQUMsQ0FBd0IsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0NBQXNDLEVBQUU7UUFDL0MsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEtBQUs7WUFDbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUVwRSxDQUFDLENBQUM7WUFDTixTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyw4QkFBOEIsRUFBRTtRQUN2QyxFQUFFLENBQUMsbUVBQW1FLEVBQUUsS0FBSztZQUMzRSxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUU5RCxDQUFDLENBQUM7WUFDTixtRkFBbUY7WUFDbkYsTUFBTSxLQUFLLEdBQUcsTUFBdUUsQ0FBQztZQUN0RixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhLCBUa2FzcGEgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2FzcGFWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB7IEFERFJFU1NFUywgS0VZUywgVVRYT1MgfSBmcm9tICcuLi9maXh0dXJlcy9rYXNwYS5maXh0dXJlcyc7XG5cbnR5cGUgUGFyc2VkVHggPSB7XG4gIGlucHV0czogeyBhbW91bnQ6IHN0cmluZzsgY29pbjogc3RyaW5nIH1bXTtcbiAgb3V0cHV0czogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nOyBjb2luOiBzdHJpbmcgfVtdO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRTaWduZWRUeEhleChjb2luTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+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"}
|