@bitgo-beta/sdk-coin-stx 1.1.1-beta.232 → 1.1.1-beta.2321

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/src/index.d.ts +2 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +25 -9
  4. package/dist/src/lib/abstractContractBuilder.js +4 -4
  5. package/dist/src/lib/btcAddressUtils.d.ts +30 -0
  6. package/dist/src/lib/btcAddressUtils.d.ts.map +1 -0
  7. package/dist/src/lib/btcAddressUtils.js +134 -0
  8. package/dist/src/lib/constants.d.ts +16 -1
  9. package/dist/src/lib/constants.d.ts.map +1 -1
  10. package/dist/src/lib/constants.js +30 -3
  11. package/dist/src/lib/contractBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/contractBuilder.js +44 -12
  13. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts +62 -0
  14. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/fungibleTokenTransferBuilder.js +131 -0
  16. package/dist/src/lib/iface.d.ts +61 -0
  17. package/dist/src/lib/iface.d.ts.map +1 -1
  18. package/dist/src/lib/iface.js +1 -1
  19. package/dist/src/lib/index.d.ts +5 -0
  20. package/dist/src/lib/index.d.ts.map +1 -1
  21. package/dist/src/lib/index.js +28 -9
  22. package/dist/src/lib/keyPair.js +18 -19
  23. package/dist/src/lib/network.d.ts +16 -0
  24. package/dist/src/lib/network.d.ts.map +1 -0
  25. package/dist/src/lib/network.js +29 -0
  26. package/dist/src/lib/pox5Builder.d.ts +78 -0
  27. package/dist/src/lib/pox5Builder.d.ts.map +1 -0
  28. package/dist/src/lib/pox5Builder.js +148 -0
  29. package/dist/src/lib/sbtcWithdrawBuilder.d.ts +38 -0
  30. package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -0
  31. package/dist/src/lib/sbtcWithdrawBuilder.js +150 -0
  32. package/dist/src/lib/sendmanyBuilder.js +12 -12
  33. package/dist/src/lib/transaction.d.ts.map +1 -1
  34. package/dist/src/lib/transaction.js +31 -15
  35. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/transactionBuilder.js +16 -17
  37. package/dist/src/lib/transactionBuilderFactory.d.ts +6 -0
  38. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  39. package/dist/src/lib/transactionBuilderFactory.js +23 -2
  40. package/dist/src/lib/transferBuilder.js +7 -7
  41. package/dist/src/lib/utils.d.ts +45 -3
  42. package/dist/src/lib/utils.d.ts.map +1 -1
  43. package/dist/src/lib/utils.js +199 -64
  44. package/dist/src/register.d.ts.map +1 -1
  45. package/dist/src/register.js +7 -1
  46. package/dist/src/sip10Token.d.ts +22 -0
  47. package/dist/src/sip10Token.d.ts.map +1 -0
  48. package/dist/src/sip10Token.js +130 -0
  49. package/dist/src/stx.d.ts +154 -2
  50. package/dist/src/stx.d.ts.map +1 -1
  51. package/dist/src/stx.js +489 -11
  52. package/dist/src/tstx.js +1 -1
  53. package/dist/src/tstxsignet.d.ts +20 -0
  54. package/dist/src/tstxsignet.d.ts.map +1 -0
  55. package/dist/src/tstxsignet.js +36 -0
  56. package/dist/test/fixtures.d.ts +119 -0
  57. package/dist/test/fixtures.d.ts.map +1 -0
  58. package/dist/test/fixtures.js +147 -0
  59. package/dist/test/unit/btcAddressUtils.d.ts +2 -0
  60. package/dist/test/unit/btcAddressUtils.d.ts.map +1 -0
  61. package/dist/test/unit/btcAddressUtils.js +82 -0
  62. package/dist/test/unit/keyPair.d.ts +2 -0
  63. package/dist/test/unit/keyPair.d.ts.map +1 -0
  64. package/dist/test/unit/keyPair.js +144 -0
  65. package/dist/test/unit/network.d.ts +2 -0
  66. package/dist/test/unit/network.d.ts.map +1 -0
  67. package/dist/test/unit/network.js +50 -0
  68. package/dist/test/unit/resources.d.ts +97 -0
  69. package/dist/test/unit/resources.d.ts.map +1 -0
  70. package/dist/test/unit/resources.js +144 -0
  71. package/dist/test/unit/sip10Token.d.ts +2 -0
  72. package/dist/test/unit/sip10Token.d.ts.map +1 -0
  73. package/dist/test/unit/sip10Token.js +374 -0
  74. package/dist/test/unit/stx.d.ts +2 -0
  75. package/dist/test/unit/stx.d.ts.map +1 -0
  76. package/dist/test/unit/stx.js +624 -0
  77. package/dist/test/unit/transaction.d.ts +2 -0
  78. package/dist/test/unit/transaction.d.ts.map +1 -0
  79. package/dist/test/unit/transaction.js +83 -0
  80. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
  81. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
  82. package/dist/test/unit/transactionBuilder/contractBuilder.js +463 -0
  83. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
  84. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
  85. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +191 -0
  86. package/dist/test/unit/transactionBuilder/pox5Builder.d.ts +2 -0
  87. package/dist/test/unit/transactionBuilder/pox5Builder.d.ts.map +1 -0
  88. package/dist/test/unit/transactionBuilder/pox5Builder.js +418 -0
  89. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.d.ts +2 -0
  90. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.d.ts.map +1 -0
  91. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +306 -0
  92. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
  93. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
  94. package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
  95. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  96. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  97. package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
  98. package/dist/test/unit/tstxsignet.d.ts +2 -0
  99. package/dist/test/unit/tstxsignet.d.ts.map +1 -0
  100. package/dist/test/unit/tstxsignet.js +60 -0
  101. package/dist/test/unit/util.d.ts +2 -0
  102. package/dist/test/unit/util.d.ts.map +1 -0
  103. package/dist/test/unit/util.js +340 -0
  104. package/dist/tsconfig.tsbuildinfo +1 -0
  105. package/package.json +16 -12
  106. package/.eslintignore +0 -5
  107. package/.mocharc.yml +0 -8
  108. package/CHANGELOG.md +0 -127
@@ -0,0 +1,418 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const transactions_1 = require("@stacks/transactions");
41
+ const statics_1 = require("@bitgo-beta/statics");
42
+ const should_1 = __importDefault(require("should"));
43
+ const src_1 = require("../../../src");
44
+ const testData = __importStar(require("../resources"));
45
+ describe('Stacks: PoX-5 Builder', function () {
46
+ const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get('tstx'));
47
+ const signerManager = 'STDE7Y8HV3RX8VBM2TZVWJTS7ZA1XB0SSC3NEVH0.signer-manager';
48
+ const oldSignerManager = 'STDE7Y8HV3RX8VBM2TZVWJTS7ZA1XB0SSC3NEVH0.old-signer-manager';
49
+ function configure(builder) {
50
+ builder.fee({ fee: '180' });
51
+ builder.nonce(0);
52
+ builder.fromPubKey(testData.TX_SENDER.pub);
53
+ builder.numberSignatures(1);
54
+ return builder;
55
+ }
56
+ function validLockupOutput() {
57
+ return {
58
+ height: 9231,
59
+ tx: '00',
60
+ outputIndex: 0,
61
+ header: '00'.repeat(80),
62
+ leafHashes: ['00'.repeat(32)],
63
+ txCount: 1,
64
+ txIndex: 0,
65
+ amount: 10000,
66
+ unlockBurnHeight: 9490,
67
+ };
68
+ }
69
+ it('builds and parses register-for-bond with an L1 lockup', async () => {
70
+ const builder = configure(factory.getPox5Builder());
71
+ builder.registerForBond({
72
+ bondIndex: 210,
73
+ signerManager,
74
+ amountUstx: '1005000',
75
+ lockup: {
76
+ kind: 'btc',
77
+ unlockBytes: '00',
78
+ outputs: [
79
+ {
80
+ height: 9231,
81
+ tx: '00',
82
+ outputIndex: 0,
83
+ header: '00'.repeat(80),
84
+ leafHashes: ['00'.repeat(32)],
85
+ txCount: 1,
86
+ txIndex: 0,
87
+ amount: 10000,
88
+ unlockBurnHeight: 9490,
89
+ },
90
+ ],
91
+ },
92
+ signerCalldata: '00',
93
+ });
94
+ const tx = await builder.build();
95
+ const payload = tx.toJson().payload;
96
+ should_1.default.equal(payload.functionName, 'register-for-bond');
97
+ should_1.default.equal(payload.functionArgs.length, 5);
98
+ should_1.default.equal(payload.functionArgs[0].type, transactions_1.ClarityType.UInt);
99
+ should_1.default.equal(payload.functionArgs[1].type, transactions_1.ClarityType.PrincipalContract);
100
+ should_1.default.equal(payload.functionArgs[3].type, transactions_1.ClarityType.ResponseOk);
101
+ should_1.default.equal(payload.functionArgs[4].type, transactions_1.ClarityType.OptionalSome);
102
+ const rebuiltBuilder = factory.from(tx.toBroadcastFormat());
103
+ rebuiltBuilder.fromPubKey(testData.TX_SENDER.pub);
104
+ const rebuilt = await rebuiltBuilder.build();
105
+ should_1.default.equal(rebuilt.toBroadcastFormat(), tx.toBroadcastFormat());
106
+ });
107
+ it('validates the PoX-5 contract address during factory routing', async () => {
108
+ const builder = configure(factory.getPox5Builder());
109
+ builder.registerForBond({
110
+ bondIndex: 210,
111
+ signerManager,
112
+ amountUstx: '1005000',
113
+ lockup: { kind: 'btc', unlockBytes: '00', outputs: [validLockupOutput()] },
114
+ });
115
+ const tx = await builder.build();
116
+ const payload = tx.stxTransaction.payload;
117
+ should_1.default.equal(src_1.StxLib.Pox5Builder.isValidContractCall(statics_1.coins.get('tstx'), payload), true);
118
+ should_1.default.equal(src_1.StxLib.Pox5Builder.isValidContractCall(statics_1.coins.get('tstx'), {
119
+ ...payload,
120
+ contractAddress: (0, transactions_1.createAddress)(testData.ACCOUNT_1.address),
121
+ }), false);
122
+ });
123
+ it('builds sBTC registration using response error', async () => {
124
+ const builder = configure(factory.getPox5Builder());
125
+ builder.registerForBond({
126
+ bondIndex: 210,
127
+ signerManager,
128
+ amountUstx: '1005000',
129
+ lockup: { kind: 'sbtc', sbtcSats: 10000 },
130
+ });
131
+ const tx = await builder.build();
132
+ const payload = tx.toJson().payload;
133
+ should_1.default.equal(payload.functionArgs[3].type, transactions_1.ClarityType.ResponseErr);
134
+ should_1.default.equal((0, transactions_1.cvToValue)(payload.functionArgs[3].value).toString(), '10000');
135
+ });
136
+ it('builds validator update, early exit, and reward calls', async () => {
137
+ const update = configure(factory.getPox5Builder()).updateBondRegistration({
138
+ signerManager,
139
+ oldSignerManager,
140
+ signerCalldata: '00',
141
+ });
142
+ should_1.default.equal((await update.build()).toJson().payload.functionName, 'update-bond-registration');
143
+ const earlyExit = configure(factory.getPox5Builder()).announceL1EarlyExit({
144
+ staker: testData.TX_SENDER.address,
145
+ oldSignerManager,
146
+ });
147
+ const earlyExitPayload = (await earlyExit.build()).toJson().payload;
148
+ should_1.default.equal(earlyExitPayload.functionName, 'announce-l1-early-exit');
149
+ should_1.default.equal((0, transactions_1.cvToString)(earlyExitPayload.functionArgs[0]), testData.TX_SENDER.address);
150
+ const claims = configure(factory.getPox5Builder()).claimRewards({
151
+ bondIndices: [210, 226],
152
+ rewardCycle: 391,
153
+ });
154
+ const claimPayload = (await claims.build()).toJson().payload;
155
+ should_1.default.equal(claimPayload.functionName, 'claim-rewards');
156
+ should_1.default.equal(claimPayload.functionArgs[0].type, transactions_1.ClarityType.List);
157
+ should_1.default.equal(claimPayload.functionArgs[1].type, transactions_1.ClarityType.UInt);
158
+ });
159
+ it('accepts every supported PoX-5 function name', () => {
160
+ const functionNames = [
161
+ 'stake',
162
+ 'stake-update',
163
+ 'unstake',
164
+ 'register-for-bond',
165
+ 'update-bond-registration',
166
+ 'announce-l1-early-exit',
167
+ 'claim-rewards',
168
+ 'claim-staker-rewards-for-signer',
169
+ 'calculate-rewards',
170
+ ];
171
+ for (const functionName of functionNames) {
172
+ configure(factory.getPox5Builder()).functionName(functionName);
173
+ }
174
+ });
175
+ it('parses response, list, and explicit principal JSON values', async () => {
176
+ const builder = configure(factory.getPox5Builder());
177
+ builder.functionName('calculate-rewards');
178
+ builder.functionArgs([
179
+ {
180
+ type: 'response',
181
+ val: {
182
+ type: 'ok',
183
+ val: {
184
+ type: 'list',
185
+ val: [{ type: 'uint128', val: '210' }],
186
+ },
187
+ },
188
+ },
189
+ { type: 'contract-principal', val: oldSignerManager },
190
+ ]);
191
+ const args = (await builder.build()).toJson().payload.functionArgs;
192
+ should_1.default.equal(args[0].type, transactions_1.ClarityType.ResponseOk);
193
+ should_1.default.equal(args[0].value.type, transactions_1.ClarityType.List);
194
+ should_1.default.equal(args[1].type, transactions_1.ClarityType.PrincipalContract);
195
+ });
196
+ it('rejects invalid SPV proof byte lengths', () => {
197
+ const lockup = {
198
+ kind: 'btc',
199
+ unlockBytes: '00',
200
+ outputs: [
201
+ {
202
+ height: 9231,
203
+ tx: '00',
204
+ outputIndex: 0,
205
+ header: '00',
206
+ leafHashes: ['00'.repeat(32)],
207
+ txCount: 1,
208
+ txIndex: 0,
209
+ amount: 10000,
210
+ unlockBurnHeight: 9490,
211
+ },
212
+ ],
213
+ };
214
+ assert_1.default.throws(() => configure(factory.getPox5Builder()).registerForBond({
215
+ bondIndex: 210,
216
+ signerManager,
217
+ amountUstx: '1005000',
218
+ lockup,
219
+ }), /header must be exactly 80 bytes/);
220
+ assert_1.default.throws(() => configure(factory.getPox5Builder()).registerForBond({
221
+ bondIndex: 210,
222
+ signerManager,
223
+ amountUstx: '1005000',
224
+ lockup: {
225
+ ...lockup,
226
+ outputs: [{ ...lockup.outputs[0], header: '00'.repeat(80), leafHashes: ['00'] }],
227
+ },
228
+ }), /leafHash must be exactly 32 bytes/);
229
+ });
230
+ it('rejects malformed lockup fields and contract principals', () => {
231
+ const validLockup = { kind: 'btc', unlockBytes: '00', outputs: [validLockupOutput()] };
232
+ const register = (lockup, manager = signerManager) => configure(factory.getPox5Builder()).registerForBond({
233
+ bondIndex: 210,
234
+ signerManager: manager,
235
+ amountUstx: '1005000',
236
+ lockup,
237
+ });
238
+ assert_1.default.throws(() => register(validLockup, 'no-dot'), /address.contract-name format/);
239
+ assert_1.default.throws(() => register(validLockup, 'a.b.c'), /address.contract-name format/);
240
+ assert_1.default.throws(() => register(validLockup, 'STDE7Y8HV3RX8VBM2TZVWJTS7ZA1XB0SSC3NEVH0.'), /address.contract-name/);
241
+ assert_1.default.throws(() => register({ ...validLockup, outputs: [{ ...validLockup.outputs[0], tx: '0' }] }), /tx must be an even-length hexadecimal string/);
242
+ assert_1.default.throws(() => register({ ...validLockup, outputs: [{ ...validLockup.outputs[0], tx: 'zz' }] }), /tx must be an even-length hexadecimal string/);
243
+ assert_1.default.throws(() => register({ ...validLockup, outputs: Array.from({ length: 11 }, () => validLockupOutput()) }), /between 1 and 10 outputs/);
244
+ assert_1.default.throws(() => register({
245
+ ...validLockup,
246
+ outputs: [{ ...validLockup.outputs[0], leafHashes: Array(15).fill('00'.repeat(32)) }],
247
+ }), /more than 14 merkle siblings/);
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
+ });
417
+ });
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG94NUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3BveDVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHVEQUE4RztBQUM5RyxpREFBNEM7QUFDNUMsb0RBQTRCO0FBRzVCLHNDQUFzQztBQUN0Qyx1REFBeUM7QUFFekMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLHlCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLGFBQWEsR0FBRyx5REFBeUQsQ0FBQztJQUNoRixNQUFNLGdCQUFnQixHQUFHLDZEQUE2RCxDQUFDO0lBRXZGLFNBQVMsU0FBUyxDQUFDLE9BQTJCO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVMsaUJBQWlCO1FBQ3hCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSTtZQUNaLEVBQUUsRUFBRSxJQUFJO1lBQ1IsV0FBVyxFQUFFLENBQUM7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZ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QztZQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxHQUFHLEVBQUU7WUFDcEYsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQzFELGdCQUFNLENBQUMsTUFBTSxDQUNYLEdBQUcsRUFBRSxDQUNILE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ1osYUFBYSxFQUFFLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxXQUFXO2dCQUN2QixTQUFTLEVBQUUsQ0FBQztnQkFDWixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDLEVBQ0osOEJBQThCLENBQy9CLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBDbGFyaXR5VHlwZSwgQ29udHJhY3RDYWxsUGF5bG9hZCwgY3JlYXRlQWRkcmVzcywgY3ZUb1N0cmluZywgY3ZUb1ZhbHVlIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3R4TGliIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdTdGFja3M6IFBvWC01IEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4JykpO1xuICBjb25zdCBzaWduZXJNYW5hZ2VyID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAuc2lnbmVyLW1hbmFnZXInO1xuICBjb25zdCBvbGRTaWduZXJNYW5hZ2VyID0gJ1NUREU3WThIVjNSWDhWQk0yVFpWV0pUUzdaQTFYQjBTU0MzTkVWSDAub2xkLXNpZ25lci1tYW5hZ2VyJztcblxuICBmdW5jdGlvbiBjb25maWd1cmUoYnVpbGRlcjogU3R4TGliLlBveDVCdWlsZGVyKTogU3R4TGliLlBveDVCdWlsZGVyIHtcbiAgICBidWlsZGVyLmZlZSh7IGZlZTogJzE4MCcgfSk7XG4gICAgYnVpbGRlci5ub25jZSgwKTtcbiAgICBidWlsZGVyLmZyb21QdWJLZXkodGVzdERhdGEuVFhfU0VOREVSLnB1Yik7XG4gICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRMb2NrdXBPdXRwdXQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogOTIzMSxcbiAgICAgIHR4OiAnMDAnLFxuICAgICAgb3V0cHV0SW5kZXg6IDAsXG4gICAgICBoZWFkZXI6ICcwMCcucmVwZWF0KDgwKSxcbiAgICAgIGxlYWZIYXNoZXM6IFsnMDAnLnJlcGVhdCgzMildLFxuICAgICAgdHhDb3VudDogMSxcbiAgICAgIHR4SW5kZXg6IDAsXG4gICAgICBhbW91bnQ6IDEwMDAwLFxuICAgICAgdW5sb2NrQnVybkhlaWdodDogOTQ5MCxcbiAgICB9O1xuICB9XG5cbiAgaXQoJ2J1aWxkcyBhbmQgcGFyc2VzIHJlZ2lzdGVyLWZvci1ib25kIHdpdGggYW4gTDEgbG9ja3VwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICBsb2NrdXA6IHtcbiAgICAgICAga2luZDogJ2J0YycsXG4gICAgICAgIHVubG9ja0J5dGVzOiAnMDAnLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGVpZ2h0OiA5MjMxLFxuICAgICAgICAgICAgdHg6ICcwMCcsXG4gICAgICAgICAgICBvdXRwdXRJbmRleDogMCxcbiAgICAgICAgICAgIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLFxuICAgICAgICAgICAgbGVhZkhhc2hlczogWycwMCcucmVwZWF0KDMyKV0sXG4gICAgICAgICAgICB0eENvdW50OiAxLFxuICAgICAgICAgICAgdHhJbmRleDogMCxcbiAgICAgICAgICAgIGFtb3VudDogMTAwMDAsXG4gICAgICAgICAgICB1bmxvY2tCdXJuSGVpZ2h0OiA5NDkwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgc2lnbmVyQ2FsbGRhdGE6ICcwMCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25OYW1lLCAncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLCA1KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0udHlwZSwgQ2xhcml0eVR5cGUuVUludCk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgICBzaG91bGQuZXF1YWwocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10udHlwZSwgQ2xhcml0eVR5cGUuUmVzcG9uc2VPayk7XG4gICAgc2hvdWxkLmVxdWFsKHBheWxvYWQuZnVuY3Rpb25BcmdzWzRdLnR5cGUsIENsYXJpdHlUeXBlLk9wdGlvbmFsU29tZSk7XG5cbiAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICByZWJ1aWx0QnVpbGRlci5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgIGNvbnN0IHJlYnVpbHQgPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICB9KTtcblxuICBpdCgndmFsaWRhdGVzIHRoZSBQb1gtNSBjb250cmFjdCBhZGRyZXNzIGR1cmluZyBmYWN0b3J5IHJvdXRpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgIGxvY2t1cDogeyBraW5kOiAnYnRjJywgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSAodHggYXMgU3R4TGliLlRyYW5zYWN0aW9uKS5zdHhUcmFuc2FjdGlvbi5wYXlsb2FkIGFzIGFueTtcbiAgICBzaG91bGQuZXF1YWwoU3R4TGliLlBveDVCdWlsZGVyLmlzVmFsaWRDb250cmFjdENhbGwoY29pbnMuZ2V0KCd0c3R4JyksIHBheWxvYWQpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHgnKSwge1xuICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6IGNyZWF0ZUFkZHJlc3ModGVzdERhdGEuQUNDT1VOVF8xLmFkZHJlc3MpLFxuICAgICAgfSksXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdidWlsZHMgc0JUQyByZWdpc3RyYXRpb24gdXNpbmcgcmVzcG9uc2UgZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgIGJ1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgIGxvY2t1cDogeyBraW5kOiAnc2J0YycsIHNidGNTYXRzOiAxMDAwMCB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHR4LnRvSnNvbigpLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLCBDbGFyaXR5VHlwZS5SZXNwb25zZUVycik7XG4gICAgc2hvdWxkLmVxdWFsKGN2VG9WYWx1ZShwYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS52YWx1ZSkudG9TdHJpbmcoKSwgJzEwMDAwJyk7XG4gIH0pO1xuXG4gIGl0KCdidWlsZHMgdmFsaWRhdG9yIHVwZGF0ZSwgZWFybHkgZXhpdCwgYW5kIHJld2FyZCBjYWxscycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1cGRhdGUgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS51cGRhdGVCb25kUmVnaXN0cmF0aW9uKHtcbiAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICBvbGRTaWduZXJNYW5hZ2VyLFxuICAgICAgc2lnbmVyQ2FsbGRhdGE6ICcwMCcsXG4gICAgfSk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgKChhd2FpdCB1cGRhdGUuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyB7IGZ1bmN0aW9uTmFtZTogc3RyaW5nIH0pLmZ1bmN0aW9uTmFtZSxcbiAgICAgICd1cGRhdGUtYm9uZC1yZWdpc3RyYXRpb24nXG4gICAgKTtcblxuICAgIGNvbnN0IGVhcmx5RXhpdCA9IGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLmFubm91bmNlTDFFYXJseUV4aXQoe1xuICAgICAgc3Rha2VyOiB0ZXN0RGF0YS5UWF9TRU5ERVIuYWRkcmVzcyxcbiAgICAgIG9sZFNpZ25lck1hbmFnZXIsXG4gICAgfSk7XG4gICAgY29uc3QgZWFybHlFeGl0UGF5bG9hZCA9IChhd2FpdCBlYXJseUV4aXQuYnVpbGQoKSkudG9Kc29uKCkucGF5bG9hZCBhcyBhbnk7XG4gICAgc2hvdWxkLmVxdWFsKGVhcmx5RXhpdFBheWxvYWQuZnVuY3Rpb25OYW1lLCAnYW5ub3VuY2UtbDEtZWFybHktZXhpdCcpO1xuICAgIHNob3VsZC5lcXVhbChjdlRvU3RyaW5nKGVhcmx5RXhpdFBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKSwgdGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuXG4gICAgY29uc3QgY2xhaW1zID0gY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuY2xhaW1SZXdhcmRzKHtcbiAgICAgIGJvbmRJbmRpY2VzOiBbMjEwLCAyMjZdLFxuICAgICAgcmV3YXJkQ3ljbGU6IDM5MSxcbiAgICB9KTtcbiAgICBjb25zdCBjbGFpbVBheWxvYWQgPSAoYXdhaXQgY2xhaW1zLmJ1aWxkKCkpLnRvSnNvbigpLnBheWxvYWQgYXMgYW55O1xuICAgIHNob3VsZC5lcXVhbChjbGFpbVBheWxvYWQuZnVuY3Rpb25OYW1lLCAnY2xhaW0tcmV3YXJkcycpO1xuICAgIHNob3VsZC5lcXVhbChjbGFpbVBheWxvYWQuZnVuY3Rpb25BcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLkxpc3QpO1xuICAgIHNob3VsZC5lcXVhbChjbGFpbVBheWxvYWQuZnVuY3Rpb25BcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlVJbnQpO1xuICB9KTtcblxuICBpdCgnYWNjZXB0cyBldmVyeSBzdXBwb3J0ZWQgUG9YLTUgZnVuY3Rpb24gbmFtZScsICgpID0+IHtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gW1xuICAgICAgJ3N0YWtlJyxcbiAgICAgICdzdGFrZS11cGRhdGUnLFxuICAgICAgJ3Vuc3Rha2UnLFxuICAgICAgJ3JlZ2lzdGVyLWZvci1ib25kJyxcbiAgICAgICd1cGRhdGUtYm9uZC1yZWdpc3RyYXRpb24nLFxuICAgICAgJ2Fubm91bmNlLWwxLWVhcmx5LWV4aXQnLFxuICAgICAgJ2NsYWltLXJld2FyZHMnLFxuICAgICAgJ2NsYWltLXN0YWtlci1yZXdhcmRzLWZvci1zaWduZXInLFxuICAgICAgJ2NhbGN1bGF0ZS1yZXdhcmRzJyxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmdW5jdGlvbk5hbWUgb2YgZnVuY3Rpb25OYW1lcykge1xuICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkuZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSk7XG4gICAgfVxuICB9KTtcblxuICBpdCgncGFyc2VzIHJlc3BvbnNlLCBsaXN0LCBhbmQgZXhwbGljaXQgcHJpbmNpcGFsIEpTT04gdmFsdWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICBidWlsZGVyLmZ1bmN0aW9uTmFtZSgnY2FsY3VsYXRlLXJld2FyZHMnKTtcbiAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdyZXNwb25zZScsXG4gICAgICAgIHZhbDoge1xuICAgICAgICAgIHR5cGU6ICdvaycsXG4gICAgICAgICAgdmFsOiB7XG4gICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICB2YWw6IFt7IHR5cGU6ICd1aW50MTI4JywgdmFsOiAnMjEwJyB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgdHlwZTogJ2NvbnRyYWN0LXByaW5jaXBhbCcsIHZhbDogb2xkU2lnbmVyTWFuYWdlciB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgYXJncyA9ICgoYXdhaXQgYnVpbGRlci5idWlsZCgpKS50b0pzb24oKS5wYXlsb2FkIGFzIGFueSkuZnVuY3Rpb25BcmdzO1xuICAgIHNob3VsZC5lcXVhbChhcmdzWzBdLnR5cGUsIENsYXJpdHlUeXBlLlJlc3BvbnNlT2spO1xuICAgIHNob3VsZC5lcXVhbChhcmdzWzBdLnZhbHVlLnR5cGUsIENsYXJpdHlUeXBlLkxpc3QpO1xuICAgIHNob3VsZC5lcXVhbChhcmdzWzFdLnR5cGUsIENsYXJpdHlUeXBlLlByaW5jaXBhbENvbnRyYWN0KTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgaW52YWxpZCBTUFYgcHJvb2YgYnl0ZSBsZW5ndGhzJywgKCkgPT4ge1xuICAgIGNvbnN0IGxvY2t1cCA9IHtcbiAgICAgIGtpbmQ6ICdidGMnIGFzIGNvbnN0LFxuICAgICAgdW5sb2NrQnl0ZXM6ICcwMCcsXG4gICAgICBvdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWlnaHQ6IDkyMzEsXG4gICAgICAgICAgdHg6ICcwMCcsXG4gICAgICAgICAgb3V0cHV0SW5kZXg6IDAsXG4gICAgICAgICAgaGVhZGVyOiAnMDAnLFxuICAgICAgICAgIGxlYWZIYXNoZXM6IFsnMDAnLnJlcGVhdCgzMildLFxuICAgICAgICAgIHR4Q291bnQ6IDEsXG4gICAgICAgICAgdHhJbmRleDogMCxcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwLFxuICAgICAgICAgIHVubG9ja0J1cm5IZWlnaHQ6IDk0OTAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT5cbiAgICAgICAgY29uZmlndXJlKGZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSkucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgICBsb2NrdXAsXG4gICAgICAgIH0pLFxuICAgICAgL2hlYWRlciBtdXN0IGJlIGV4YWN0bHkgODAgYnl0ZXMvXG4gICAgKTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBjb25maWd1cmUoZmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKS5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICAgIGxvY2t1cDoge1xuICAgICAgICAgICAgLi4ubG9ja3VwLFxuICAgICAgICAgICAgb3V0cHV0czogW3sgLi4ubG9ja3VwLm91dHB1dHNbMF0sIGhlYWRlcjogJzAwJy5yZXBlYXQoODApLCBsZWFmSGFzaGVzOiBbJzAwJ10gfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAvbGVhZkhhc2ggbXVzdCBiZSBleGFjdGx5IDMyIGJ5dGVzL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG1hbGZvcm1lZCBsb2NrdXAgZmllbGRzIGFuZCBjb250cmFjdCBwcmluY2lwYWxzJywgKCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkTG9ja3VwID0geyBraW5kOiAnYnRjJyBhcyBjb25zdCwgdW5sb2NrQnl0ZXM6ICcwMCcsIG91dHB1dHM6IFt2YWxpZExvY2t1cE91dHB1dCgpXSB9O1xuICAgIGNvbnN0IHJlZ2lzdGVyID0gKGxvY2t1cDogdHlwZW9mIHZhbGlkTG9ja3VwLCBtYW5hZ2VyID0gc2lnbmVyTWFuYWdlcikgPT5cbiAgICAgIGNvbmZpZ3VyZShmYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpLnJlZ2lzdGVyRm9yQm9uZCh7XG4gICAgICAgIGJvbmRJbmRleDogMjEwLFxuICAgICAgICBzaWduZXJNYW5hZ2VyOiBtYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwNTAwMCcsXG4gICAgICAgIGxvY2t1cCxcbiAgICAgIH0pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWdpc3Rlcih2YWxpZExvY2t1cCwgJ25vLWRvdCcpLCAvYWRkcmVzcy5jb250cmFjdC1uYW1lIGZvcm1hdC8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcmVnaXN0ZXIodmFsaWRMb2NrdXAsICdhLmIuYycpLCAvYWRkcmVzcy5jb250cmFjdC1uYW1lIGZvcm1hdC8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcmVnaXN0ZXIodmFsaWRMb2NrdXAsICdTVERFN1k4SFYzUlg4VkJNMlRaVldKVFM3WkExWEIwU1NDM05FVkgwLicpLCAvYWRkcmVzcy5jb250cmFjdC1uYW1lLyk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IHJlZ2lzdGVyKHsgLi4udmFsaWRMb2NrdXAsIG91dHB1dHM6IFt7IC4uLnZhbGlkTG9ja3VwLm91dHB1dHNbMF0sIHR4OiAnMCcgfV0gfSksXG4gICAgICAvdHggbXVzdCBiZSBhbiBldmVuLWxlbmd0aCBoZXhhZGVjaW1hbCBzdHJpbmcvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogW3sgLi4udmFsaWRMb2NrdXAub3V0cHV0c1swXSwgdHg6ICd6eicgfV0gfSksXG4gICAgICAvdHggbXVzdCBiZSBhbiBldmVuLWxlbmd0aCBoZXhhZGVjaW1hbCBzdHJpbmcvXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gcmVnaXN0ZXIoeyAuLi52YWxpZExvY2t1cCwgb3V0cHV0czogQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKCkgPT4gdmFsaWRMb2NrdXBPdXRwdXQoKSkgfSksXG4gICAgICAvYmV0d2VlbiAxIGFuZCAxMCBvdXRwdXRzL1xuICAgICk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+XG4gICAgICAgIHJlZ2lzdGVyKHtcbiAgICAgICAgICAuLi52YWxpZExvY2t1cCxcbiAgICAgICAgICBvdXRwdXRzOiBbeyAuLi52YWxpZExvY2t1cC5vdXRwdXRzWzBdLCBsZWFmSGFzaGVzOiBBcnJheSgxNSkuZmlsbCgnMDAnLnJlcGVhdCgzMikpIH1dLFxuICAgICAgICB9KSxcbiAgICAgIC9tb3JlIHRoYW4gMTQgbWVya2xlIHNpYmxpbmdzL1xuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQb1gtNSBCdWlsZGVyIG9uIHRzdHhzaWduZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RhY2tzIEZvdW5kYXRpb24gc3Rha2luZy10ZXN0bmV0OiBjaGFpbiBJRCAxMjgwICgweDAwMDAwNTAwKSB3aXRoIHRoZSAweDgwIHRlc3RuZXQgdHggdmVyc2lvblxuICAgIGNvbnN0IHNpZ25ldEZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0c3R4c2lnbmV0JykpO1xuICAgIGNvbnN0IFRTVFhTSUdORVRfVFhfUFJFRklYID0gJzgwMDAwMDA1MDAnO1xuICAgIGNvbnN0IFBPWDVfQk9PVF9BRERSRVNTID0gJ1NUMDAwMDAwMDAwMDAwMDAwMDAwMDAyQU1XNDJIJztcblxuICAgIGZ1bmN0aW9uIGNvbmZpZ3VyZShidWlsZGVyOiBTdHhMaWIuUG94NUJ1aWxkZXIpOiBTdHhMaWIuUG94NUJ1aWxkZXIge1xuICAgICAgYnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgYnVpbGRlci5ub25jZSgwKTtcbiAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgIGJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcygxKTtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBheWxvYWRPZih0eDogQmFzZVRyYW5zYWN0aW9uKTogU3R4TGliLlN0YWNrc0NvbnRyYWN0UGF5bG9hZCB7XG4gICAgICByZXR1cm4gdHgudG9Kc29uKCkucGF5bG9hZCBhcyBTdHhMaWIuU3RhY2tzQ29udHJhY3RQYXlsb2FkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVpbnRBcmcoY3Y6IHsgdHlwZTogbnVtYmVyOyB2YWx1ZT86IHVua25vd24gfSwgZXhwZWN0ZWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgY3YudHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuVUludCk7XG4gICAgICBTdHJpbmcoY3YudmFsdWUpLnNob3VsZC5lcXVhbChleHBlY3RlZCk7XG4gICAgfVxuXG4gICAgaXQoJ2J1aWxkcyBhIHN0YWtlIHRyYW5zYWN0aW9uIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChUU1RYU0lHTkVUX1RYX1BSRUZJWCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXlsb2FkT2YodHgpO1xuICAgICAgcGF5bG9hZC5jb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKFBPWDVfQk9PVF9BRERSRVNTKTtcbiAgICAgIHBheWxvYWQuY29udHJhY3ROYW1lLnNob3VsZC5lcXVhbCgncG94LTUnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25OYW1lLnNob3VsZC5lcXVhbCgnc3Rha2UnKTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25BcmdzLmxlbmd0aC5zaG91bGQuZXF1YWwoNSk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5QcmluY2lwYWxDb250cmFjdCk7XG4gICAgICBjdlRvU3RyaW5nKHBheWxvYWQuZnVuY3Rpb25BcmdzWzBdKS5zaG91bGQuZXF1YWwoc2lnbmVyTWFuYWdlcik7XG4gICAgICB1aW50QXJnKHBheWxvYWQuZnVuY3Rpb25BcmdzWzFdLCAnMTAwMDAwMDAwJyk7XG5cbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMl0sICcxJyk7XG5cbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10sICc2Njg0OScpO1xuXG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJnc1s0XS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5PcHRpb25hbE5vbmUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkcyBhIHN0YWtlLXVwZGF0ZSB0cmFuc2FjdGlvbiBjYXJyeWluZyB0aGUgdHN0eHNpZ25ldCBjaGFpbiBJRCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIuc3Rha2VVcGRhdGUoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBvbGRTaWduZXJNYW5hZ2VyLFxuICAgICAgICBjeWNsZXNUb0V4dGVuZDogMSxcbiAgICAgICAgYW1vdW50SW5jcmVhc2U6ICc1MDAwMCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gcGF5bG9hZE9mKHR4KTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25OYW1lLnNob3VsZC5lcXVhbCgnc3Rha2UtdXBkYXRlJyk7XG4gICAgICBwYXlsb2FkLmZ1bmN0aW9uQXJncy5sZW5ndGguc2hvdWxkLmVxdWFsKDUpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1swXSkuc2hvdWxkLmVxdWFsKHNpZ25lck1hbmFnZXIpO1xuICAgICAgY3ZUb1N0cmluZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1sxXSkuc2hvdWxkLmVxdWFsKG9sZFNpZ25lck1hbmFnZXIpO1xuICAgICAgdWludEFyZyhwYXlsb2FkLmZ1bmN0aW9uQXJnc1syXSwgJzEnKTtcbiAgICAgIHVpbnRBcmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbM10sICc1MDAwMCcpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3NbNF0udHlwZS5zaG91bGQuZXF1YWwoQ2xhcml0eVR5cGUuT3B0aW9uYWxOb25lKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZHMgYW4gdW5zdGFrZSB0cmFuc2FjdGlvbiBjYXJyeWluZyB0aGUgdHN0eHNpZ25ldCBjaGFpbiBJRCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIGJ1aWxkZXIudW5zdGFrZShvbGRTaWduZXJNYW5hZ2VyKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0gcGF5bG9hZE9mKHR4KTtcbiAgICAgIHBheWxvYWQuZnVuY3Rpb25OYW1lLnNob3VsZC5lcXVhbCgndW5zdGFrZScpO1xuICAgICAgcGF5bG9hZC5mdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIGN2VG9TdHJpbmcocGF5bG9hZC5mdW5jdGlvbkFyZ3NbMF0pLnNob3VsZC5lcXVhbChvbGRTaWduZXJNYW5hZ2VyKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZHMgcmVnaXN0ZXItZm9yLWJvbmQgdHJhbnNhY3Rpb25zIChMMSBsb2NrdXAgYW5kIHNCVEMpIGNhcnJ5aW5nIHRoZSB0c3R4c2lnbmV0IGNoYWluIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnRjQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnRjQnVpbGRlci5yZWdpc3RlckZvckJvbmQoe1xuICAgICAgICBib25kSW5kZXg6IDIxMCxcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDUwMDAnLFxuICAgICAgICBsb2NrdXA6IHsga2luZDogJ2J0YycsIHVubG9ja0J5dGVzOiAnMDAnLCBvdXRwdXRzOiBbdmFsaWRMb2NrdXBPdXRwdXQoKV0gfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYnRjVHggPSBhd2FpdCBidGNCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBidGNUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoVFNUWFNJR05FVF9UWF9QUkVGSVgpO1xuXG4gICAgICBjb25zdCBidGNQYXlsb2FkID0gcGF5bG9hZE9mKGJ0Y1R4KTtcbiAgICAgIGJ0Y1BheWxvYWQuZnVuY3Rpb25OYW1lLnNob3VsZC5lcXVhbCgncmVnaXN0ZXItZm9yLWJvbmQnKTtcbiAgICAgIGJ0Y1BheWxvYWQuZnVuY3Rpb25BcmdzWzNdLnR5cGUuc2hvdWxkLmVxdWFsKENsYXJpdHlUeXBlLlJlc3BvbnNlT2spO1xuXG4gICAgICBjb25zdCBzYnRjQnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgc2J0Y0J1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdzYnRjJywgc2J0Y1NhdHM6IDEwMDAwIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNidGNUeCA9IGF3YWl0IHNidGNCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzYnRjVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKFRTVFhTSUdORVRfVFhfUFJFRklYKTtcblxuICAgICAgY29uc3Qgc2J0Y1BheWxvYWQgPSBwYXlsb2FkT2Yoc2J0Y1R4KTtcbiAgICAgIHNidGNQYXlsb2FkLmZ1bmN0aW9uQXJnc1szXS50eXBlLnNob3VsZC5lcXVhbChDbGFyaXR5VHlwZS5SZXNwb25zZUVycik7XG4gICAgfSk7XG5cbiAgICBpdCgncmVidWlsZHMgZXZlcnkgc3Rha2luZyBmbG93IGJ5dGUtaWRlbnRpY2FsbHkgZnJvbSByYXcgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgc3Rha2VCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBzdGFrZUJ1aWxkZXIuc3Rha2Uoe1xuICAgICAgICBzaWduZXJNYW5hZ2VyLFxuICAgICAgICBhbW91bnRVc3R4OiAnMTAwMDAwMDAwJyxcbiAgICAgICAgbnVtQ3ljbGVzOiAxLFxuICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YWtlVHggPSBhd2FpdCBzdGFrZUJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3Qgc3Rha2VSZWJ1aWx0ID0gc2lnbmV0RmFjdG9yeS5mcm9tKHN0YWtlVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICBzdGFrZVJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgIChhd2FpdCBzdGFrZVJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwoc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcblxuICAgICAgY29uc3QgdW5zdGFrZUJ1aWxkZXIgPSBjb25maWd1cmUoc2lnbmV0RmFjdG9yeS5nZXRQb3g1QnVpbGRlcigpKTtcbiAgICAgIHVuc3Rha2VCdWlsZGVyLnVuc3Rha2Uob2xkU2lnbmVyTWFuYWdlcik7XG4gICAgICBjb25zdCB1bnN0YWtlVHggPSBhd2FpdCB1bnN0YWtlQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB1bnN0YWtlUmVidWlsdCA9IHNpZ25ldEZhY3RvcnkuZnJvbSh1bnN0YWtlVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICB1bnN0YWtlUmVidWlsdC5mcm9tUHViS2V5KHRlc3REYXRhLlRYX1NFTkRFUi5wdWIpO1xuICAgICAgKGF3YWl0IHVuc3Rha2VSZWJ1aWx0LmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHVuc3Rha2VUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcblxuICAgICAgY29uc3QgcmVnaXN0ZXJCdWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICByZWdpc3RlckJ1aWxkZXIucmVnaXN0ZXJGb3JCb25kKHtcbiAgICAgICAgYm9uZEluZGV4OiAyMTAsXG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDA1MDAwJyxcbiAgICAgICAgbG9ja3VwOiB7IGtpbmQ6ICdzYnRjJywgc2J0Y1NhdHM6IDEwMDAwIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlZ2lzdGVyVHggPSBhd2FpdCByZWdpc3RlckJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgcmVnaXN0ZXJSZWJ1aWx0ID0gc2lnbmV0RmFjdG9yeS5mcm9tKHJlZ2lzdGVyVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICByZWdpc3RlclJlYnVpbHQuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgIChhd2FpdCByZWdpc3RlclJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmVnaXN0ZXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdyb3V0ZXMgcGFyc2VkIHN0YWtlIHRyYW5zYWN0aW9ucyB0byB0aGUgUG9YLTUgYnVpbGRlciBvbiB0c3R4c2lnbmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYnVpbGRlci5zdGFrZSh7XG4gICAgICAgIHNpZ25lck1hbmFnZXIsXG4gICAgICAgIGFtb3VudFVzdHg6ICcxMDAwMDAwMDAnLFxuICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgIHN0YXJ0QnVybkh0OiA2Njg0OSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gKHR4IGFzIFN0eExpYi5UcmFuc2FjdGlvbikuc3R4VHJhbnNhY3Rpb24ucGF5bG9hZCBhcyB1bmtub3duIGFzIENvbnRyYWN0Q2FsbFBheWxvYWQ7XG5cbiAgICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmFuLmluc3RhbmNlT2YoU3R4TGliLlBveDVCdWlsZGVyKTtcbiAgICAgIHNob3VsZC5lcXVhbChTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHhzaWduZXQnKSwgcGF5bG9hZCksIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBTdHhMaWIuUG94NUJ1aWxkZXIuaXNWYWxpZENvbnRyYWN0Q2FsbChjb2lucy5nZXQoJ3RzdHhzaWduZXQnKSwge1xuICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBjcmVhdGVBZGRyZXNzKHRlc3REYXRhLkFDQ09VTlRfMS5hZGRyZXNzKSxcbiAgICAgICAgfSksXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBjb25zdCByb3V0ZWQgPSBzaWduZXRGYWN0b3J5LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICByb3V0ZWQuc2hvdWxkLmJlLmFuLmluc3RhbmNlT2YoU3R4TGliLlBveDVCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHBvc2VzIGZlZSwgbm9uY2UgYW5kIHNlbmRlciBvbiB0aGUgYnVpbHQgc3Rha2UgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gY29uZmlndXJlKHNpZ25ldEZhY3RvcnkuZ2V0UG94NUJ1aWxkZXIoKSk7XG4gICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgc2lnbmVyTWFuYWdlcixcbiAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgIG51bUN5Y2xlczogMSxcbiAgICAgICAgc3RhcnRCdXJuSHQ6IDY2ODQ5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHR4SnNvbiA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuICAgICAgdHhKc29uLmZlZS5zaG91bGQuZXF1YWwoJzE4MCcpO1xuICAgICAgdHhKc29uLm5vbmNlLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIHR4SnNvbi5pZC5zaG91bGQubWF0Y2goL15bMC05YS1mXXs2NH0kLyk7XG4gICAgICB0eEpzb24uZnJvbS5zaG91bGQuZXF1YWwodGVzdERhdGEuVFhfU0VOREVSLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBzaWduZXItbWFuYWdlciBwcmluY2lwYWwgd2l0aG91dCB0aGUgYWRkcmVzcy5jb250cmFjdC1uYW1lIHNoYXBlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGNvbmZpZ3VyZShzaWduZXRGYWN0b3J5LmdldFBveDVCdWlsZGVyKCkpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBidWlsZGVyLnN0YWtlKHtcbiAgICAgICAgICAgIHNpZ25lck1hbmFnZXI6ICduby1kb3QnLFxuICAgICAgICAgICAgYW1vdW50VXN0eDogJzEwMDAwMDAwMCcsXG4gICAgICAgICAgICBudW1DeWNsZXM6IDEsXG4gICAgICAgICAgICBzdGFydEJ1cm5IdDogNjY4NDksXG4gICAgICAgICAgfSksXG4gICAgICAgIC9hZGRyZXNzLmNvbnRyYWN0LW5hbWUgZm9ybWF0L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sbtcWithdrawBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sbtcWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/sbtcWithdrawBuilder.ts"],"names":[],"mappings":""}