@bitgo/sdk-coin-stx 4.1.4 → 4.2.1

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.
@@ -246,5 +246,173 @@ describe('Stacks: PoX-5 Builder', function () {
246
246
  outputs: [{ ...validLockup.outputs[0], leafHashes: Array(15).fill('00'.repeat(32)) }],
247
247
  }), /more than 14 merkle siblings/);
248
248
  });
249
+ describe('PoX-5 Builder on tstxsignet', function () {
250
+ // Stacks Foundation staking-testnet: chain ID 1280 (0x00000500) with the 0x80 testnet tx version
251
+ const signetFactory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get('tstxsignet'));
252
+ const TSTXSIGNET_TX_PREFIX = '8000000500';
253
+ const POX5_BOOT_ADDRESS = 'ST000000000000000000002AMW42H';
254
+ function configure(builder) {
255
+ builder.fee({ fee: '180' });
256
+ builder.nonce(0);
257
+ builder.fromPubKey(testData.TX_SENDER.pub);
258
+ builder.numberSignatures(1);
259
+ return builder;
260
+ }
261
+ function payloadOf(tx) {
262
+ return tx.toJson().payload;
263
+ }
264
+ function uintArg(cv, expected) {
265
+ cv.type.should.equal(transactions_1.ClarityType.UInt);
266
+ String(cv.value).should.equal(expected);
267
+ }
268
+ it('builds a stake transaction carrying the tstxsignet chain ID', async () => {
269
+ const builder = configure(signetFactory.getPox5Builder());
270
+ builder.stake({
271
+ signerManager,
272
+ amountUstx: '100000000',
273
+ numCycles: 1,
274
+ startBurnHt: 66849,
275
+ });
276
+ const tx = await builder.build();
277
+ tx.toBroadcastFormat().slice(0, 10).should.equal(TSTXSIGNET_TX_PREFIX);
278
+ const payload = payloadOf(tx);
279
+ payload.contractAddress.should.equal(POX5_BOOT_ADDRESS);
280
+ payload.contractName.should.equal('pox-5');
281
+ payload.functionName.should.equal('stake');
282
+ payload.functionArgs.length.should.equal(5);
283
+ payload.functionArgs[0].type.should.equal(transactions_1.ClarityType.PrincipalContract);
284
+ (0, transactions_1.cvToString)(payload.functionArgs[0]).should.equal(signerManager);
285
+ uintArg(payload.functionArgs[1], '100000000');
286
+ uintArg(payload.functionArgs[2], '1');
287
+ uintArg(payload.functionArgs[3], '66849');
288
+ payload.functionArgs[4].type.should.equal(transactions_1.ClarityType.OptionalNone);
289
+ });
290
+ it('builds a stake-update transaction carrying the tstxsignet chain ID', async () => {
291
+ const builder = configure(signetFactory.getPox5Builder());
292
+ builder.stakeUpdate({
293
+ signerManager,
294
+ oldSignerManager,
295
+ cyclesToExtend: 1,
296
+ amountIncrease: '50000',
297
+ });
298
+ const tx = await builder.build();
299
+ tx.toBroadcastFormat().slice(0, 10).should.equal(TSTXSIGNET_TX_PREFIX);
300
+ const payload = payloadOf(tx);
301
+ payload.functionName.should.equal('stake-update');
302
+ payload.functionArgs.length.should.equal(5);
303
+ (0, transactions_1.cvToString)(payload.functionArgs[0]).should.equal(signerManager);
304
+ (0, transactions_1.cvToString)(payload.functionArgs[1]).should.equal(oldSignerManager);
305
+ uintArg(payload.functionArgs[2], '1');
306
+ uintArg(payload.functionArgs[3], '50000');
307
+ payload.functionArgs[4].type.should.equal(transactions_1.ClarityType.OptionalNone);
308
+ });
309
+ it('builds an unstake transaction carrying the tstxsignet chain ID', async () => {
310
+ const builder = configure(signetFactory.getPox5Builder());
311
+ builder.unstake(oldSignerManager);
312
+ const tx = await builder.build();
313
+ tx.toBroadcastFormat().slice(0, 10).should.equal(TSTXSIGNET_TX_PREFIX);
314
+ const payload = payloadOf(tx);
315
+ payload.functionName.should.equal('unstake');
316
+ payload.functionArgs.length.should.equal(1);
317
+ (0, transactions_1.cvToString)(payload.functionArgs[0]).should.equal(oldSignerManager);
318
+ });
319
+ it('builds register-for-bond transactions (L1 lockup and sBTC) carrying the tstxsignet chain ID', async () => {
320
+ const btcBuilder = configure(signetFactory.getPox5Builder());
321
+ btcBuilder.registerForBond({
322
+ bondIndex: 210,
323
+ signerManager,
324
+ amountUstx: '1005000',
325
+ lockup: { kind: 'btc', unlockBytes: '00', outputs: [validLockupOutput()] },
326
+ });
327
+ const btcTx = await btcBuilder.build();
328
+ btcTx.toBroadcastFormat().slice(0, 10).should.equal(TSTXSIGNET_TX_PREFIX);
329
+ const btcPayload = payloadOf(btcTx);
330
+ btcPayload.functionName.should.equal('register-for-bond');
331
+ btcPayload.functionArgs[3].type.should.equal(transactions_1.ClarityType.ResponseOk);
332
+ const sbtcBuilder = configure(signetFactory.getPox5Builder());
333
+ sbtcBuilder.registerForBond({
334
+ bondIndex: 210,
335
+ signerManager,
336
+ amountUstx: '1005000',
337
+ lockup: { kind: 'sbtc', sbtcSats: 10000 },
338
+ });
339
+ const sbtcTx = await sbtcBuilder.build();
340
+ sbtcTx.toBroadcastFormat().slice(0, 10).should.equal(TSTXSIGNET_TX_PREFIX);
341
+ const sbtcPayload = payloadOf(sbtcTx);
342
+ sbtcPayload.functionArgs[3].type.should.equal(transactions_1.ClarityType.ResponseErr);
343
+ });
344
+ it('rebuilds every staking flow byte-identically from raw hex', async () => {
345
+ const stakeBuilder = configure(signetFactory.getPox5Builder());
346
+ stakeBuilder.stake({
347
+ signerManager,
348
+ amountUstx: '100000000',
349
+ numCycles: 1,
350
+ startBurnHt: 66849,
351
+ });
352
+ const stakeTx = await stakeBuilder.build();
353
+ const stakeRebuilt = signetFactory.from(stakeTx.toBroadcastFormat());
354
+ stakeRebuilt.fromPubKey(testData.TX_SENDER.pub);
355
+ (await stakeRebuilt.build()).toBroadcastFormat().should.equal(stakeTx.toBroadcastFormat());
356
+ const unstakeBuilder = configure(signetFactory.getPox5Builder());
357
+ unstakeBuilder.unstake(oldSignerManager);
358
+ const unstakeTx = await unstakeBuilder.build();
359
+ const unstakeRebuilt = signetFactory.from(unstakeTx.toBroadcastFormat());
360
+ unstakeRebuilt.fromPubKey(testData.TX_SENDER.pub);
361
+ (await unstakeRebuilt.build()).toBroadcastFormat().should.equal(unstakeTx.toBroadcastFormat());
362
+ const registerBuilder = configure(signetFactory.getPox5Builder());
363
+ registerBuilder.registerForBond({
364
+ bondIndex: 210,
365
+ signerManager,
366
+ amountUstx: '1005000',
367
+ lockup: { kind: 'sbtc', sbtcSats: 10000 },
368
+ });
369
+ const registerTx = await registerBuilder.build();
370
+ const registerRebuilt = signetFactory.from(registerTx.toBroadcastFormat());
371
+ registerRebuilt.fromPubKey(testData.TX_SENDER.pub);
372
+ (await registerRebuilt.build()).toBroadcastFormat().should.equal(registerTx.toBroadcastFormat());
373
+ });
374
+ it('routes parsed stake transactions to the PoX-5 builder on tstxsignet', async () => {
375
+ const builder = configure(signetFactory.getPox5Builder());
376
+ builder.stake({
377
+ signerManager,
378
+ amountUstx: '100000000',
379
+ numCycles: 1,
380
+ startBurnHt: 66849,
381
+ });
382
+ const tx = await builder.build();
383
+ const payload = tx.stxTransaction.payload;
384
+ builder.should.be.an.instanceOf(src_1.StxLib.Pox5Builder);
385
+ should_1.default.equal(src_1.StxLib.Pox5Builder.isValidContractCall(statics_1.coins.get('tstxsignet'), payload), true);
386
+ should_1.default.equal(src_1.StxLib.Pox5Builder.isValidContractCall(statics_1.coins.get('tstxsignet'), {
387
+ ...payload,
388
+ contractAddress: (0, transactions_1.createAddress)(testData.ACCOUNT_1.address),
389
+ }), false);
390
+ const routed = signetFactory.from(tx.toBroadcastFormat());
391
+ routed.should.be.an.instanceOf(src_1.StxLib.Pox5Builder);
392
+ });
393
+ it('exposes fee, nonce and sender on the built stake transaction', async () => {
394
+ const builder = configure(signetFactory.getPox5Builder());
395
+ builder.stake({
396
+ signerManager,
397
+ amountUstx: '100000000',
398
+ numCycles: 1,
399
+ startBurnHt: 66849,
400
+ });
401
+ const txJson = (await builder.build()).toJson();
402
+ txJson.fee.should.equal('180');
403
+ txJson.nonce.should.equal(0);
404
+ txJson.id.should.match(/^[0-9a-f]{64}$/);
405
+ txJson.from.should.equal(testData.TX_SENDER.address);
406
+ });
407
+ it('rejects a signer-manager principal without the address.contract-name shape', () => {
408
+ const builder = configure(signetFactory.getPox5Builder());
409
+ assert_1.default.throws(() => builder.stake({
410
+ signerManager: 'no-dot',
411
+ amountUstx: '100000000',
412
+ numCycles: 1,
413
+ startBurnHt: 66849,
414
+ }), /address.contract-name format/);
415
+ });
416
+ });
249
417
  });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQUF5RjtBQUN6Riw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBRTVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFFekMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyx5REFBeUQsQ0FBQztJQUNoRixNQUFNLGdCQUFnQixHQUFHLDZEQUE2RCxDQUFDO0lBRXZGLFNBQVMsU0FBUyxDQUFDLE9BQTJCO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBQ3hCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLEVBQUUsRUFBRSxJQUFJO1lBQ1IsV0FBVyxFQUFFLENBQUM7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZ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RSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ3RGLDhDQUE4QyxDQUMvQyxDQUFDO1FBQ0YsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDbEcsMEJBQTBCLENBQzNCLENBQUM7UUFDRixnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxRQUFRLENBQUM7WUFDUCxHQUFHLFdBQVc7WUFDZCxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN0RixDQUFDLEVBQ0osOEJBQThCLENBQy9CLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQ2xhcml0eVR5cGUsIGNyZWF0ZUFkZHJlc3MsIGN2VG9TdHJpbmcsIGN2VG9WYWx1ZSB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogUG9YLTUgQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHgnKSk7XG4gIGNvbnN0IHNpZ25lck1hbmFnZXIgPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMC5zaWduZXItbWFuYWdlcic7XG4gIGNvbnN0IG9sZFNpZ25lck1hbmFnZXIgPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMC5vbGQtc2lnbmVyLW1hbmFnZXInO1xuXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZShidWlsZGVyOiBTdHhMaWIuUG94NUJ1aWxkZXIpOiBTdHhMaWIuUG94NUJ1aWxkZXIge1xuICAgIGJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZExvY2t1cE91dHB1dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiA5MjMxLFxuICAgICAgdHg6ICcwMCcsXG4gICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLFxuICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICB0eENvdW50OiAxLFxuICAgICAgdHhJbmRleDogMCxcbiAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICB1bmxvY2tCdXJuSGVpZ2h0OiA5NDkwLFxuICAgIH07XG4gIH1cblxuICBpdCgnYnVpbGRzIGFuZCBwYXJzZXMgcmVnaXN0ZXItZm9yLWJvbmQgd2l0aCBhbiBMMSBsb2NrdXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgIGxvY2t1cDoge1xuICAgICAgICBraW5kOiAnYnRjJyxcbiAgICAgICAgdW5sb2NrQnl0ZXM6ICcwMCcsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWlnaHQ6IDkyMzEsXG4gICAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICAgIG91dHB1dEluZGV4OiAwLFxuICAgICAgICAgICAgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksXG4gICAgICAgICAgICBsZWFmSGFzaGVzOiBbJzAwJy5yZXBlYXQoMzIpXSxcbiAgICAgICAgICAgIHR4Q291bnQ6IDEsXG4gICAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgICAgYW1vdW50OiAxMDAwMCxcbiAgICAgICAgICAgIHVubG9ja0J1cm5IZWlnaHQ6IDk0OTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbk5hbWUsICdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGgsIDUpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXS50eXBlLCBDbGFyaXR5VHlwZS5VSW50KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLCBDbGFyaXR5VHlwZS5SZXNwb25zZU9rKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbNF0udHlwZSwgQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lKTtcblxuICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHRCdWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgY29uc3QgcmVidWlsdCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHQudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZXMgdGhlIFBvWC01IGNvbnRyYWN0IGFkZHJlc3MgZHVyaW5nIGZhY3Rvcnkgcm91dGluZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdidGMnLCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH0sXG4gICAgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9ICh0eCBhcyBTdHhMaWIuVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHgnKSwgcGF5bG9hZCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eCcpLCB7XG4gICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogY3JlYXRlQWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksXG4gICAgICB9KSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyBzQlRDIHJlZ2lzdHJhdGlvbiB1c2luZyByZXNwb25zZSBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdzYnRjJywgc2J0Y1NhdHM6IDEwMDAwIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICBzaG91bGQuZXF1YWwoY3ZUb1ZhbHVlKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnZhbHVlKS50b1N0cmluZygpLCAnMTAwMDAnKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyB2YWxpZGF0b3IgdXBkYXRlLCBlYXJseSBleGl0LCBhbmQgcmV3YXJkIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnVwZGF0ZUJvbmRSZWdpc3RyYXRpb24oe1xuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICAoKGF3YWl0IHVwZGF0ZS5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIHsgZnVuY3Rpb25OYW1lOiBzdHJpbmcgfSkuZnVuY3Rpb25OYW1lLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbidcbiAgICApO1xuXG4gICAgY29uc3QgZWFybHlFeGl0ID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuYW5ub3VuY2VMMUVhcmx5RXhpdCh7XG4gICAgICBzdGFrZXI6IHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzLFxuICAgICAgb2xkU2lnbmVyTWFuYWdlcixcbiAgICB9KTtcbiAgICBjb25zdCBlYXJseUV4aXRQYXlsb2FkID0gKGF3YWl0IGVhcmx5RXhpdC5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbk5hbWUsICdhbm5vdW5jZS1sMS1lYXJseS1leGl0Jyk7XG4gICAgc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLCB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG5cbiAgICBjb25zdCBjbGFpbXMgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5jbGFpbVJld2FyZHMoe1xuICAgICAgYm9uZEluZGljZXM6IFsyMTAsIDIyNl0sXG4gICAgICByZXdhcmRDeWNsZTogMzkxLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYWltUGF5bG9hZCA9IChhd2FpdCBjbGFpbXMuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbk5hbWUsICdjbGFpbS1yZXdhcmRzJyk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gIH0pO1xuXG4gIGl0KCdhY2NlcHRzIGV2ZXJ5IHN1cHBvcnRlZCBQb1gtNSBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXG4gICAgICAnc3Rha2UnLFxuICAgICAgJ3N0YWtlLXVwZGF0ZScsXG4gICAgICAndW5zdGFrZScsXG4gICAgICAncmVnaXN0ZXItZm9yLWJvbmQnLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbicsXG4gICAgICAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcsXG4gICAgICAnY2xhaW0tcmV3YXJkcycsXG4gICAgICAnY2xhaW0tc3Rha2VyLXJld2FyZHMtZm9yLXNpZ25lcicsXG4gICAgICAnY2FsY3VsYXRlLXJld2FyZHMnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBvZiBmdW5jdGlvbk5hbWVzKSB7XG4gICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdwYXJzZXMgcmVzcG9uc2UsIGxpc3QsIGFuZCBleHBsaWNpdCBwcmluY2lwYWwgSlNPTiB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjYWxjdWxhdGUtcmV3YXJkcycpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgdmFsOiB7XG4gICAgICAgICAgdHlwZTogJ29rJyxcbiAgICAgICAgICB2YWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgIHZhbDogW3sgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyMTAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiAnY29udHJhY3QtcHJpbmNpcGFsJywgdmFsOiBvbGRTaWduZXJNYW5hZ2VyIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBhcmdzID0gKChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55KS5mdW5jdGlvbkFyZ3M7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udmFsdWUudHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZhbGlkIFNQViBwcm9vZiBieXRlIGxlbmd0aHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9ja3VwID0ge1xuICAgICAga2luZDogJ2J0YycgYXMgY29uc3QsXG4gICAgICB1bmxvY2tCeXRlczogJzAwJyxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICBoZWFkZXI6ICcwMCcsXG4gICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgdHhDb3VudDogMSxcbiAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cCxcbiAgICAgICAgfSksXG4gICAgICAvaGVhZGVyIG11c3QgYmUgZXhhY3RseSA4MCBieXRlcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgICAgbG9ja3VwOiB7XG4gICAgICAgICAgICAuLi5sb2NrdXAsXG4gICAgICAgICAgICBvdXRwdXRzOiBbeyAuLi5sb2NrdXAub3V0cHV0c1swXSwgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksIGxlYWZIYXNoZXM6IFsnMDAnXSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIC9sZWFmSGFzaCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGxvY2t1cCBmaWVsZHMgYW5kIGNvbnRyYWN0IHByaW5jaXBhbHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdmFsaWRMb2NrdXAgPSB7IGtpbmQ6ICdidGMnIGFzIGNvbnN0LCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobG9ja3VwOiB0eXBlb2YgdmFsaWRMb2NrdXAsIG1hbmFnZXIgPSBzaWduZXJNYW5hZ2VyKSA9PlxuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXI6IG1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwLFxuICAgICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlZ2lzdGVyKHZhbGlkTG9ja3VwLCAnbm8tZG90JyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ2EuYi5jJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUvKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICcwJyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCB0eDogJ3p6JyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoKSA9PiB2YWxpZExvY2t1cE91dHB1dCgpKSB9KSxcbiAgICAgIC9iZXR3ZWVuIDEgYW5kIDEwIG91dHB1dHMvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVnaXN0ZXIoe1xuICAgICAgICAgIC4uLnZhbGlkTG9ja3VwLFxuICAgICAgICAgIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIGxlYWZIYXNoZXM6IEFycmF5KDE1KS5maWxsKCcwMCcucmVwZWF0KDMyKSkgfV0sXG4gICAgICAgIH0pLFxuICAgICAgL21vcmUgdGhhbiAxNCBtZXJrbGUgc2libGluZ3MvXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQUE4RztBQUM5Ryw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBRzVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFFekMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyx5REFBeUQsQ0FBQztJQUNoRixNQUFNLGdCQUFnQixHQUFHLDZEQUE2RCxDQUFDO0lBRXZGLFNBQVMsU0FBUyxDQUFDLE9BQTJCO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBQ3hCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLEVBQUUsRUFBRSxJQUFJO1lBQ1IsV0FBVyxFQUFFLENBQUM7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZ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QztZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxHQUFHLEVBQUU7WUFDcEYsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzFELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUNILE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ1osYUFBYSxFQUFFLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixTQUFTLEVBQUUsQ0FBQztnQkFDWixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBDbGFyaXR5VHlwZSwgQ29udHJhY3RDYWxsUGF5bG9hZCwgY3JlYXRlQWRkcmVzcywgY3ZUb1N0cmluZywgY3ZUb1ZhbHVlIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ1N0YWNrczogUG9YLTUgQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHgnKSk7XG4gIGNvbnN0IHNpZ25lck1hbmFnZXIgPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMC5zaWduZXItbWFuYWdlcic7XG4gIGNvbnN0IG9sZFNpZ25lck1hbmFnZXIgPSAnU1RERTdZOEhWM1JYOFZCTTJUWlZXSlRTN1pBMVhCMFNTQzNORVZIMC5vbGQtc2lnbmVyLW1hbmFnZXInO1xuXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZShidWlsZGVyOiBTdHhMaWIuUG94NUJ1aWxkZXIpOiBTdHhMaWIuUG94NUJ1aWxkZXIge1xuICAgIGJ1aWxkZXIuZmVlKHsgZmVlOiAnMTgwJyB9KTtcbiAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMSk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZExvY2t1cE91dHB1dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiA5MjMxLFxuICAgICAgdHg6ICcwMCcsXG4gICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLFxuICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICB0eENvdW50OiAxLFxuICAgICAgdHhJbmRleDogMCxcbiAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICB1bmxvY2tCdXJuSGVpZ2h0OiA5NDkwLFxuICAgIH07XG4gIH1cblxuICBpdCgnYnVpbGRzIGFuZCBwYXJzZXMgcmVnaXN0ZXItZm9yLWJvbmQgd2l0aCBhbiBMMSBsb2NrdXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgIGxvY2t1cDoge1xuICAgICAgICBraW5kOiAnYnRjJyxcbiAgICAgICAgdW5sb2NrQnl0ZXM6ICcwMCcsXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWlnaHQ6IDkyMzEsXG4gICAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICAgIG91dHB1dEluZGV4OiAwLFxuICAgICAgICAgICAgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksXG4gICAgICAgICAgICBsZWFmSGFzaGVzOiBbJzAwJy5yZXBlYXQoMzIpXSxcbiAgICAgICAgICAgIHR4Q291bnQ6IDEsXG4gICAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgICAgYW1vdW50OiAxMDAwMCxcbiAgICAgICAgICAgIHVubG9ja0J1cm5IZWlnaHQ6IDk0OTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB0eC50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbk5hbWUsICdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGgsIDUpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXS50eXBlLCBDbGFyaXR5VHlwZS5VSW50KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLCBDbGFyaXR5VHlwZS5SZXNwb25zZU9rKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbNF0udHlwZSwgQ2xhcml0eVR5cGUuT3B0aW9uYWxTb21lKTtcblxuICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHRCdWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgY29uc3QgcmVidWlsdCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHQudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZXMgdGhlIFBvWC01IGNvbnRyYWN0IGFkZHJlc3MgZHVyaW5nIGZhY3Rvcnkgcm91dGluZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdidGMnLCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH0sXG4gICAgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9ICh0eCBhcyBTdHhMaWIuVHJhbnNhY3Rpb24pLnN0eFRyYW5zYWN0aW9uLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHgnKSwgcGF5bG9hZCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eCcpLCB7XG4gICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogY3JlYXRlQWRkcmVzcyh0ZXN0RGF0YS5BQ0NPVU5UXzEuYWRkcmVzcyksXG4gICAgICB9KSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyBzQlRDIHJlZ2lzdHJhdGlvbiB1c2luZyByZXNwb25zZSBlcnJvcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgYnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdzYnRjJywgc2J0Y1NhdHM6IDEwMDAwIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICBzaG91bGQuZXF1YWwoY3ZUb1ZhbHVlKHBheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnZhbHVlKS50b1N0cmluZygpLCAnMTAwMDAnKTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyB2YWxpZGF0b3IgdXBkYXRlLCBlYXJseSBleGl0LCBhbmQgcmV3YXJkIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZSA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnVwZGF0ZUJvbmRSZWdpc3RyYXRpb24oe1xuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICBzaWduZXJDYWxsZGF0YTogJzAwJyxcbiAgICB9KTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICAoKGF3YWl0IHVwZGF0ZS5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIHsgZnVuY3Rpb25OYW1lOiBzdHJpbmcgfSkuZnVuY3Rpb25OYW1lLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbidcbiAgICApO1xuXG4gICAgY29uc3QgZWFybHlFeGl0ID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuYW5ub3VuY2VMMUVhcmx5RXhpdCh7XG4gICAgICBzdGFrZXI6IHRlc3REYXRhLlRYX1NFTkRFUi5hZGRyZXNzLFxuICAgICAgb2xkU2lnbmVyTWFuYWdlcixcbiAgICB9KTtcbiAgICBjb25zdCBlYXJseUV4aXRQYXlsb2FkID0gKGF3YWl0IGVhcmx5RXhpdC5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbk5hbWUsICdhbm5vdW5jZS1sMS1lYXJseS1leGl0Jyk7XG4gICAgc2hvdWxkLmVxdWFsKGN2VG9TdHJpbmcoZWFybHlFeGl0UGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLCB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG5cbiAgICBjb25zdCBjbGFpbXMgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5jbGFpbVJld2FyZHMoe1xuICAgICAgYm9uZEluZGljZXM6IFsyMTAsIDIyNl0sXG4gICAgICByZXdhcmRDeWNsZTogMzkxLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsYWltUGF5bG9hZCA9IChhd2FpdCBjbGFpbXMuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbk5hbWUsICdjbGFpbS1yZXdhcmRzJyk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGNsYWltUGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gIH0pO1xuXG4gIGl0KCdhY2NlcHRzIGV2ZXJ5IHN1cHBvcnRlZCBQb1gtNSBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXG4gICAgICAnc3Rha2UnLFxuICAgICAgJ3N0YWtlLXVwZGF0ZScsXG4gICAgICAndW5zdGFrZScsXG4gICAgICAncmVnaXN0ZXItZm9yLWJvbmQnLFxuICAgICAgJ3VwZGF0ZS1ib25kLXJlZ2lzdHJhdGlvbicsXG4gICAgICAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcsXG4gICAgICAnY2xhaW0tcmV3YXJkcycsXG4gICAgICAnY2xhaW0tc3Rha2VyLXJld2FyZHMtZm9yLXNpZ25lcicsXG4gICAgICAnY2FsY3VsYXRlLXJld2FyZHMnLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uTmFtZSBvZiBmdW5jdGlvbk5hbWVzKSB7XG4gICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdwYXJzZXMgcmVzcG9uc2UsIGxpc3QsIGFuZCBleHBsaWNpdCBwcmluY2lwYWwgSlNPTiB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCdjYWxjdWxhdGUtcmV3YXJkcycpO1xuICAgIGJ1aWxkZXIuZnVuY3Rpb25BcmdzKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgdmFsOiB7XG4gICAgICAgICAgdHlwZTogJ29rJyxcbiAgICAgICAgICB2YWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgIHZhbDogW3sgdHlwZTogJ3VpbnQxMjgnLCB2YWw6ICcyMTAnIH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgeyB0eXBlOiAnY29udHJhY3QtcHJpbmNpcGFsJywgdmFsOiBvbGRTaWduZXJNYW5hZ2VyIH0sXG4gICAgXSk7XG5cbiAgICBjb25zdCBhcmdzID0gKChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55KS5mdW5jdGlvbkFyZ3M7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMF0udmFsdWUudHlwZSwgQ2xhcml0eVR5cGUuTGlzdCk7XG4gICAgc2hvdWxkLmVxdWFsKGFyZ3NbMV0udHlwZSwgQ2xhcml0eVR5cGUuUHJpbmNpcGFsQ29udHJhY3QpO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZhbGlkIFNQViBwcm9vZiBieXRlIGxlbmd0aHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbG9ja3VwID0ge1xuICAgICAga2luZDogJ2J0YycgYXMgY29uc3QsXG4gICAgICB1bmxvY2tCeXRlczogJzAwJyxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgICAgICB0eDogJzAwJyxcbiAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICBoZWFkZXI6ICcwMCcsXG4gICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgdHhDb3VudDogMSxcbiAgICAgICAgICB0eEluZGV4OiAwLFxuICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cCxcbiAgICAgICAgfSksXG4gICAgICAvaGVhZGVyIG11c3QgYmUgZXhhY3RseSA4MCBieXRlcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgICAgbG9ja3VwOiB7XG4gICAgICAgICAgICAuLi5sb2NrdXAsXG4gICAgICAgICAgICBvdXRwdXRzOiBbeyAuLi5sb2NrdXAub3V0cHV0c1swXSwgaGVhZGVyOiAnMDAnLnJlcGVhdCg4MCksIGxlYWZIYXNoZXM6IFsnMDAnXSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIC9sZWFmSGFzaCBtdXN0IGJlIGV4YWN0bHkgMzIgYnl0ZXMvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgbWFsZm9ybWVkIGxvY2t1cCBmaWVsZHMgYW5kIGNvbnRyYWN0IHByaW5jaXBhbHMnLCAoKSA9PiB7XG4gICAgY29uc3QgdmFsaWRMb2NrdXAgPSB7IGtpbmQ6ICdidGMnIGFzIGNvbnN0LCB1bmxvY2tCeXRlczogJzAwJywgb3V0cHV0czogW3ZhbGlkTG9ja3VwT3V0cHV0KCldIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobG9ja3VwOiB0eXBlb2YgdmFsaWRMb2NrdXAsIG1hbmFnZXIgPSBzaWduZXJNYW5hZ2VyKSA9PlxuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXI6IG1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwLFxuICAgICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlZ2lzdGVyKHZhbGlkTG9ja3VwLCAnbm8tZG90JyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ2EuYi5jJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0Lyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuJyksIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUvKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICcwJyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCB0eDogJ3p6JyB9XSB9KSxcbiAgICAgIC90eCBtdXN0IGJlIGFuIGV2ZW4tbGVuZ3RoIGhleGFkZWNpbWFsIHN0cmluZy9cbiAgICApO1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiByZWdpc3Rlcih7IC4uLnZhbGlkTG9ja3VwLCBvdXRwdXRzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoKSA9PiB2YWxpZExvY2t1cE91dHB1dCgpKSB9KSxcbiAgICAgIC9iZXR3ZWVuIDEgYW5kIDEwIG91dHB1dHMvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgcmVnaXN0ZXIoe1xuICAgICAgICAgIC4uLnZhbGlkTG9ja3VwLFxuICAgICAgICAgIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIGxlYWZIYXNoZXM6IEFycmF5KDE1KS5maWxsKCcwMCcucmVwZWF0KDMyKSkgfV0sXG4gICAgICAgIH0pLFxuICAgICAgL21vcmUgdGhhbiAxNCBtZXJrbGUgc2libGluZ3MvXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BvWC01IEJ1aWxkZXIgb24gdHN0eHNpZ25ldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdGFja3MgRm91bmRhdGlvbiBzdGFraW5nLXRlc3RuZXQ6IGNoYWluIElEIDEyODAgKDB4MDAwMDA1MDApIHdpdGggdGhlIDB4ODAgdGVzdG5ldCB0eCB2ZXJzaW9uXG4gICAgY29uc3Qgc2lnbmV0RmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RzdHhzaWduZXQnKSk7XG4gICAgY29uc3QgVFNUWFNJR05FVF9UWF9QUkVGSVggPSAnODAwMDAwMDUwMCc7XG4gICAgY29uc3QgUE9YNV9CT09UX0FERFJFU1MgPSAnU1QwMDAwMDAwMDAwMDAwMDAwMDAwMDJBTVc0MkgnO1xuXG4gICAgZnVuY3Rpb24gY29uZmlndXJlKGJ1aWxkZXI6IFN0eExpYi5Qb3g1QnVpbGRlcik6IFN0eExpYi5Qb3g1QnVpbGRlciB7XG4gICAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgICBidWlsZGVyLm5vbmNlKDApO1xuICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF5bG9hZE9mKHR4OiBCYXNlVHJhbnNhY3Rpb24pOiBTdHhMaWIuU3RhY2tzQ29udHJhY3RQYXlsb2FkIHtcbiAgICAgIHJldHVybiB0eC50b0pzb24oKS5wYXlsb2FkIGFzIFN0eExpYi5TdGFja3NDb250cmFjdFBheWxvYWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdWludEFyZyhjdjogeyB0eXBlOiBudW1iZXI7IHZhbHVlPzogdW5rbm93biB9LCBleHBlY3RlZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICBjdi50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5VSW50KTtcbiAgICAgIFN0cmluZyhjdi52YWx1ZSkuc2hvdWxkLmVxdWFsKGV4cGVjdGVkKTtcbiAgICB9XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UgdHJhbnNhY3Rpb24gY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBheWxvYWRPZih0eCk7XG4gICAgICBwYXlsb2FkLmNvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoUE9YNV9CT09UX0FERFJFU1MpO1xuICAgICAgcGF5bG9hZC5jb250cmFjdE5hbWUuc2hvdWxkLmVxdWFsKCdwb3gtNScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnNob3VsZC5lcXVhbChzaWduZXJNYW5hZ2VyKTtcbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMV0sICcxMDAwMDAwMDAnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1syXSwgJzEnKTtcblxuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzY2ODQ5Jyk7XG5cbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLk9wdGlvbmFsTm9uZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRzIGEgc3Rha2UtdXBkYXRlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZVVwZGF0ZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgICAgIGN5Y2xlc1RvRXh0ZW5kOiAxLFxuICAgICAgICBhbW91bnRJbmNyZWFzZTogJzUwMDAwJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdzdGFrZS11cGRhdGUnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS5zaG91bGQuZXF1YWwoc2lnbmVyTWFuYWdlcik7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdKS5zaG91bGQuZXF1YWwob2xkU2lnbmVyTWFuYWdlcik7XG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzJdLCAnMScpO1xuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXSwgJzUwMDAwJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5PcHRpb25hbE5vbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBhbiB1bnN0YWtlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci51bnN0YWtlKG9sZFNpZ25lck1hbmFnZXIpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCd1bnN0YWtlJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkuc2hvdWxkLmVxdWFsKG9sZFNpZ25lck1hbmFnZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyByZWdpc3Rlci1mb3ItYm9uZCB0cmFuc2FjdGlvbnMgKEwxIGxvY2t1cCBhbmQgc0JUQykgY2FycnlpbmcgdGhlIHRzdHhzaWduZXQgY2hhaW4gSUQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidGNCdWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cDogeyBraW5kOiAnYnRjJywgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidGNUeCA9IGF3YWl0IGJ0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGJ0Y1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IGJ0Y1BheWxvYWQgPSBwYXlsb2FkT2YoYnRjVHgpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbk5hbWUuc2hvdWxkLmVxdWFsKCdyZWdpc3Rlci1mb3ItYm9uZCcpO1xuICAgICAgYnRjUGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG5cbiAgICAgIGNvbnN0IHNidGNCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBzYnRjQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2J0Y1R4ID0gYXdhaXQgc2J0Y0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNidGNUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBzYnRjUGF5bG9hZCA9IHBheWxvYWRPZihzYnRjVHgpO1xuICAgICAgc2J0Y1BheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlJlc3BvbnNlRXJyKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWJ1aWxkcyBldmVyeSBzdGFraW5nIGZsb3cgYnl0ZS1pZGVudGljYWxseSBmcm9tIHJhdyBoZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzdGFrZUJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHN0YWtlQnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3Rha2VUeCA9IGF3YWl0IHN0YWtlQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBzdGFrZVJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20oc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHN0YWtlUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHN0YWtlUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChzdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCB1bnN0YWtlQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgdW5zdGFrZUJ1aWxkZXIudW5zdGFrZShvbGRTaWduZXJNYW5hZ2VyKTtcbiAgICAgIGNvbnN0IHVuc3Rha2VUeCA9IGF3YWl0IHVuc3Rha2VCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHVuc3Rha2VSZWJ1aWx0ID0gc2lnbmV0RmFjdG9yeS5mcm9tKHVuc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHVuc3Rha2VSZWJ1aWx0LmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgICAoYXdhaXQgdW5zdGFrZVJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodW5zdGFrZVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCByZWdpc3RlckJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHJlZ2lzdGVyQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ3NidGMnLCBzYnRjU2F0czogMTAwMDAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVnaXN0ZXJUeCA9IGF3YWl0IHJlZ2lzdGVyQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCByZWdpc3RlclJlYnVpbHQgPSBzaWduZXRGYWN0b3J5LmZyb20ocmVnaXN0ZXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJlZ2lzdGVyUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHJlZ2lzdGVyUmVidWlsdC5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyZWdpc3RlclR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdXRlcyBwYXJzZWQgc3Rha2UgdHJhbnNhY3Rpb25zIHRvIHRoZSBQb1gtNSBidWlsZGVyIG9uIHRzdHhzaWduZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIHVua25vd24gYXMgQ29udHJhY3RDYWxsUGF5bG9hZDtcblxuICAgICAgYnVpbGRlci5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCBwYXlsb2FkKSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIFN0eExpYi5Qb3g1QnVpbGRlci5pc1ZhbGlkQ29udHJhY3RDYWxsKGNvaW5zLmdldCgndHN0eHNpZ25ldCcpLCB7XG4gICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IGNyZWF0ZUFkZHJlc3ModGVzdERhdGEuQUNDT1VOVF8xLmFkZHJlc3MpLFxuICAgICAgICB9KSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJvdXRlZCA9IHNpZ25ldEZhY3RvcnkuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIHJvdXRlZC5zaG91bGQuYmUuYW4uaW5zdGFuY2VPZihTdHhMaWIuUG94NUJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2V4cG9zZXMgZmVlLCBub25jZSBhbmQgc2VuZGVyIG9uIHRoZSBidWlsdCBzdGFrZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHhKc29uID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZmVlLnNob3VsZC5lcXVhbCgnMTgwJyk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgdHhKc29uLmlkLnNob3VsZC5tYXRjaCgvXlswLTlhLWZdezY0fSQvKTtcbiAgICAgIHR4SnNvbi5mcm9tLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNpZ25lci1tYW5hZ2VyIHByaW5jaXBhbCB3aXRob3V0IHRoZSBhZGRyZXNzLmNvbnRyYWN0LW5hbWUgc2hhcGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICAgICAgc2lnbmVyTWFuYWdlcjogJ25vLWRvdCcsXG4gICAgICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgL2FkZHJlc3MuY29udHJhY3QtbmFtZSBmb3JtYXQvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tstxsignet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tstxsignet.d.ts","sourceRoot":"","sources":["../../../test/unit/tstxsignet.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const sdk_api_1 = require("@bitgo/sdk-api");
8
+ const sdk_core_1 = require("@bitgo/sdk-core");
9
+ const sdk_test_1 = require("@bitgo/sdk-test");
10
+ const transactions_1 = require("@stacks/transactions");
11
+ const should_1 = __importDefault(require("should"));
12
+ const src_1 = require("../../src");
13
+ describe('tstxsignet', function () {
14
+ let bitgo;
15
+ let basecoin;
16
+ before(function () {
17
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
18
+ bitgo.initializeTestVars();
19
+ bitgo.safeRegister('tstxsignet', src_1.Tstxsignet.createInstance);
20
+ basecoin = bitgo.coin('tstxsignet');
21
+ });
22
+ it('uses the statics tstxsignet coin', function () {
23
+ assert_1.default.strictEqual(basecoin.getChain(), 'tstxsignet');
24
+ assert_1.default.strictEqual(basecoin.getFullName(), 'Testnet Stacks (Signet)');
25
+ assert_1.default.strictEqual(basecoin.getFamily(), 'stx');
26
+ });
27
+ it('resolves the staking-testnet public node url', function () {
28
+ assert_1.default.strictEqual(basecoin.getPublicNodeUrl(), 'https://api.staking-testnet.hiro.so');
29
+ });
30
+ describe('wallet creation', function () {
31
+ it('generates a wallet keypair from the coin', function () {
32
+ const keyPair = basecoin.generateKeyPair();
33
+ const { pub, prv } = keyPair;
34
+ if (pub === undefined || prv === undefined) {
35
+ throw new Error('wallet keypair is missing key material');
36
+ }
37
+ pub.should.match(/^xpub/);
38
+ prv.should.match(/^xprv/);
39
+ });
40
+ it('derives a valid testnet wallet address from the generated key', function () {
41
+ const keyPair = basecoin.generateKeyPair();
42
+ if (keyPair.pub === undefined) {
43
+ throw new Error('wallet keypair is missing the extended public key');
44
+ }
45
+ const address = new src_1.StxLib.KeyPair({ pub: keyPair.pub }).getSTXAddress(false, transactions_1.TransactionVersion.Testnet);
46
+ address.startsWith('ST').should.be.true();
47
+ basecoin.isValidAddress(address).should.be.true();
48
+ });
49
+ it('creates a wallet bound to the tstxsignet coin', function () {
50
+ // mirrors the wallet data the API returns for a created tstxsignet wallet
51
+ const wallet = new sdk_core_1.Wallet(bitgo, basecoin, { coin: 'tstxsignet' });
52
+ should_1.default.equal(wallet.coin(), 'tstxsignet');
53
+ });
54
+ it('validates testnet wallet addresses', function () {
55
+ basecoin.isValidAddress('STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6').should.be.true();
56
+ basecoin.isValidAddress('not-an-address').should.be.false();
57
+ });
58
+ });
59
+ });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0eHNpZ25ldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC90c3R4c2lnbmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDRDQUEwQztBQUMxQyw4Q0FBeUM7QUFDekMsOENBQTBEO0FBQzFELHVEQUEwRDtBQUMxRCxvREFBNEI7QUFFNUIsbUNBQStDO0FBRS9DLFFBQVEsQ0FBQyxZQUFZLEVBQUU7SUFDckIsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBb0IsQ0FBQztJQUV6QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGdCQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFlLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUU7UUFDckMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RELGdCQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3RFLGdCQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRTtRQUNqRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQywwQ0FBMEMsRUFBRTtZQUM3QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7WUFDN0IsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRTtZQUNsRSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0MsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7WUFDdkUsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLGlDQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7WUFDbEQsMEVBQTBFO1lBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUksaUJBQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBVyxDQUFDLENBQUM7WUFDNUUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxjQUFjLENBQUMsMENBQTBDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JGLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25WZXJzaW9uIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5pbXBvcnQgeyBTdHhMaWIsIFRzdHhzaWduZXQgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgndHN0eHNpZ25ldCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogVHN0eHNpZ25ldDtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHN0eHNpZ25ldCcsIFRzdHhzaWduZXQuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndHN0eHNpZ25ldCcpIGFzIFRzdHhzaWduZXQ7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHRoZSBzdGF0aWNzIHRzdHhzaWduZXQgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZWNvaW4uZ2V0Q2hhaW4oKSwgJ3RzdHhzaWduZXQnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZWNvaW4uZ2V0RnVsbE5hbWUoKSwgJ1Rlc3RuZXQgU3RhY2tzIChTaWduZXQpJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2Vjb2luLmdldEZhbWlseSgpLCAnc3R4Jyk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyB0aGUgc3Rha2luZy10ZXN0bmV0IHB1YmxpYyBub2RlIHVybCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZWNvaW4uZ2V0UHVibGljTm9kZVVybCgpLCAnaHR0cHM6Ly9hcGkuc3Rha2luZy10ZXN0bmV0Lmhpcm8uc28nKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dhbGxldCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2VuZXJhdGVzIGEgd2FsbGV0IGtleXBhaXIgZnJvbSB0aGUgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGNvbnN0IHsgcHViLCBwcnYgfSA9IGtleVBhaXI7XG4gICAgICBpZiAocHViID09PSB1bmRlZmluZWQgfHwgcHJ2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3YWxsZXQga2V5cGFpciBpcyBtaXNzaW5nIGtleSBtYXRlcmlhbCcpO1xuICAgICAgfVxuICAgICAgcHViLnNob3VsZC5tYXRjaCgvXnhwdWIvKTtcbiAgICAgIHBydi5zaG91bGQubWF0Y2goL154cHJ2Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVyaXZlcyBhIHZhbGlkIHRlc3RuZXQgd2FsbGV0IGFkZHJlc3MgZnJvbSB0aGUgZ2VuZXJhdGVkIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGlmIChrZXlQYWlyLnB1YiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignd2FsbGV0IGtleXBhaXIgaXMgbWlzc2luZyB0aGUgZXh0ZW5kZWQgcHVibGljIGtleScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYWRkcmVzcyA9IG5ldyBTdHhMaWIuS2V5UGFpcih7IHB1Yjoga2V5UGFpci5wdWIgfSkuZ2V0U1RYQWRkcmVzcyhmYWxzZSwgVHJhbnNhY3Rpb25WZXJzaW9uLlRlc3RuZXQpO1xuICAgICAgYWRkcmVzcy5zdGFydHNXaXRoKCdTVCcpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZXMgYSB3YWxsZXQgYm91bmQgdG8gdGhlIHRzdHhzaWduZXQgY29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIG1pcnJvcnMgdGhlIHdhbGxldCBkYXRhIHRoZSBBUEkgcmV0dXJucyBmb3IgYSBjcmVhdGVkIHRzdHhzaWduZXQgd2FsbGV0XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCBiYXNlY29pbiwgeyBjb2luOiAndHN0eHNpZ25ldCcgfSBhcyBuZXZlcik7XG4gICAgICBzaG91bGQuZXF1YWwod2FsbGV0LmNvaW4oKSwgJ3RzdHhzaWduZXQnKTtcbiAgICB9KTtcblxuICAgIGl0KCd2YWxpZGF0ZXMgdGVzdG5ldCB3YWxsZXQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJ1NUQjQ0SFlQWUFUMkJCMlFFNTEzTlNQODFIVE1ZV0JKUDAySFBHSzYnKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZEFkZHJlc3MoJ25vdC1hbi1hZGRyZXNzJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=