@bitgo-beta/sdk-coin-flrp 1.0.1-beta.26 → 1.0.1-beta.260

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 (84) hide show
  1. package/dist/src/lib/atomicTransactionBuilder.d.ts +10 -7
  2. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  3. package/dist/src/lib/atomicTransactionBuilder.js +155 -89
  4. package/dist/src/lib/constants.d.ts +160 -1
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +213 -3
  7. package/dist/src/lib/delegatorTxBuilder.d.ts +58 -0
  8. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/delegatorTxBuilder.js +224 -0
  10. package/dist/src/lib/exportInCTxBuilder.d.ts +1 -1
  11. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/exportInCTxBuilder.js +46 -17
  13. package/dist/src/lib/exportInPTxBuilder.d.ts +1 -1
  14. package/dist/src/lib/exportInPTxBuilder.d.ts.map +1 -1
  15. package/dist/src/lib/exportInPTxBuilder.js +70 -6
  16. package/dist/src/lib/importInCTxBuilder.d.ts +67 -0
  17. package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/importInCTxBuilder.js +403 -0
  19. package/dist/src/lib/importInPTxBuilder.d.ts +73 -0
  20. package/dist/src/lib/importInPTxBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/importInPTxBuilder.js +464 -0
  22. package/dist/src/lib/index.d.ts +5 -0
  23. package/dist/src/lib/index.d.ts.map +1 -1
  24. package/dist/src/lib/index.js +11 -2
  25. package/dist/src/lib/keyPair.d.ts +4 -4
  26. package/dist/src/lib/keyPair.d.ts.map +1 -1
  27. package/dist/src/lib/keyPair.js +9 -5
  28. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +81 -0
  29. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  30. package/dist/src/lib/permissionlessValidatorTxBuilder.js +248 -0
  31. package/dist/src/lib/transaction.d.ts.map +1 -1
  32. package/dist/src/lib/transaction.js +14 -13
  33. package/dist/src/lib/transactionBuilder.d.ts +85 -0
  34. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  35. package/dist/src/lib/transactionBuilder.js +167 -0
  36. package/dist/src/lib/types.d.ts +78 -0
  37. package/dist/src/lib/types.d.ts.map +1 -0
  38. package/dist/src/lib/types.js +5 -0
  39. package/dist/src/lib/utils.d.ts +28 -23
  40. package/dist/src/lib/utils.d.ts.map +1 -1
  41. package/dist/src/lib/utils.js +161 -65
  42. package/dist/src/lib/validatorTxBuilder.d.ts +40 -0
  43. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
  44. package/dist/src/lib/validatorTxBuilder.js +180 -0
  45. package/dist/test/resources/account.d.ts +49 -0
  46. package/dist/test/resources/account.d.ts.map +1 -0
  47. package/dist/test/resources/account.js +52 -0
  48. package/dist/test/unit/delegatorTxBuilder.test.d.ts +2 -0
  49. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +1 -0
  50. package/dist/test/unit/delegatorTxBuilder.test.js +233 -0
  51. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
  52. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
  53. package/dist/test/unit/lib/exportInCTxBuilder.js +584 -0
  54. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
  55. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
  56. package/dist/test/unit/lib/exportInPTxBuilder.js +377 -0
  57. package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
  58. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
  59. package/dist/test/unit/lib/importInCTxBuilder.js +258 -0
  60. package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
  61. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
  62. package/dist/test/unit/lib/importInPTxBuilder.js +501 -0
  63. package/dist/test/unit/lib/keyPair.d.ts +2 -0
  64. package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
  65. package/dist/test/unit/lib/keyPair.js +158 -0
  66. package/dist/test/unit/lib/utils.js +122 -43
  67. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +2 -0
  68. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +1 -0
  69. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +271 -0
  70. package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
  71. package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
  72. package/dist/test/unit/transactionBuilder.test.js +114 -0
  73. package/dist/test/unit/validatorTxBuilder.test.d.ts +2 -0
  74. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +1 -0
  75. package/dist/test/unit/validatorTxBuilder.test.js +293 -0
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/package.json +15 -10
  78. package/.eslintignore +0 -5
  79. package/.eslintrc.json +0 -7
  80. package/.mocharc.yml +0 -8
  81. package/CHANGELOG.md +0 -0
  82. package/dist/test/unit/lib/exportTxBuilder.d.ts +0 -2
  83. package/dist/test/unit/lib/exportTxBuilder.d.ts.map +0 -1
  84. package/dist/test/unit/lib/exportTxBuilder.js +0 -45
@@ -0,0 +1,501 @@
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 statics_1 = require("@bitgo-beta/statics");
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const assert = __importStar(require("assert"));
42
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
43
+ const importInPTxBuilder_1 = require("../../../src/lib/importInPTxBuilder");
44
+ describe('ImportInPTxBuilder', function () {
45
+ const coinConfig = statics_1.coins.get('tflrp');
46
+ let builder;
47
+ beforeEach(function () {
48
+ builder = new importInPTxBuilder_1.ImportInPTxBuilder(coinConfig);
49
+ });
50
+ describe('Constructor', function () {
51
+ it('should initialize with coin config', function () {
52
+ assert.ok(builder);
53
+ assert.ok(builder instanceof importInPTxBuilder_1.ImportInPTxBuilder);
54
+ });
55
+ it('should initialize with default values', function () {
56
+ // Builder should be initialized without throwing errors
57
+ assert.ok(builder);
58
+ });
59
+ });
60
+ describe('UTXO Management', function () {
61
+ it('should add single UTXO', function () {
62
+ const utxo = {
63
+ outputID: 1,
64
+ amount: '1000000000000000000', // 1 FLR
65
+ txid: 'test-txid-single',
66
+ outputidx: '0',
67
+ threshold: 1,
68
+ addresses: ['C-flare1test'],
69
+ };
70
+ assert.doesNotThrow(() => {
71
+ builder.addUtxos([utxo]);
72
+ });
73
+ });
74
+ it('should add multiple UTXOs', function () {
75
+ const utxos = [
76
+ {
77
+ outputID: 1,
78
+ amount: '1000000000000000000', // 1 FLR
79
+ txid: 'test-txid-1',
80
+ outputidx: '0',
81
+ threshold: 1,
82
+ addresses: ['C-flare1test1'],
83
+ },
84
+ {
85
+ outputID: 2,
86
+ amount: '2000000000000000000', // 2 FLR
87
+ txid: 'test-txid-2',
88
+ outputidx: '1',
89
+ threshold: 2,
90
+ addresses: ['C-flare1test2', 'C-flare1test3'],
91
+ },
92
+ {
93
+ outputID: 3,
94
+ amount: '500000000000000000', // 0.5 FLR
95
+ txid: 'test-txid-3',
96
+ outputidx: '0',
97
+ threshold: 1,
98
+ addresses: ['C-flare1test4'],
99
+ },
100
+ ];
101
+ assert.doesNotThrow(() => {
102
+ builder.addUtxos(utxos);
103
+ });
104
+ });
105
+ it('should handle empty UTXO array', function () {
106
+ assert.doesNotThrow(() => {
107
+ builder.addUtxos([]);
108
+ });
109
+ });
110
+ it('should accumulate UTXOs from multiple calls', function () {
111
+ const utxos1 = [
112
+ {
113
+ outputID: 1,
114
+ amount: '1000000000000000000',
115
+ txid: 'test-txid-1',
116
+ outputidx: '0',
117
+ threshold: 1,
118
+ addresses: ['C-flare1test1'],
119
+ },
120
+ ];
121
+ const utxos2 = [
122
+ {
123
+ outputID: 2,
124
+ amount: '2000000000000000000',
125
+ txid: 'test-txid-2',
126
+ outputidx: '0',
127
+ threshold: 1,
128
+ addresses: ['C-flare1test2'],
129
+ },
130
+ ];
131
+ builder.addUtxos(utxos1);
132
+ builder.addUtxos(utxos2);
133
+ // Should not throw
134
+ assert.ok(true);
135
+ });
136
+ });
137
+ describe('Fee Management', function () {
138
+ it('should set valid positive fee', function () {
139
+ const validFees = ['1000', '0', '1000000000000000000', '999999999999999999'];
140
+ validFees.forEach((fee) => {
141
+ assert.doesNotThrow(() => {
142
+ builder.fee(fee);
143
+ }, `Should accept fee: ${fee}`);
144
+ });
145
+ });
146
+ it('should reject negative fees', function () {
147
+ const negativeFees = ['-1', '-1000', '-1000000000000000000'];
148
+ negativeFees.forEach((fee) => {
149
+ assert.throws(() => {
150
+ builder.fee(fee);
151
+ }, sdk_core_1.BuildTransactionError, `Should reject negative fee: ${fee}`);
152
+ });
153
+ });
154
+ it('should handle invalid fee formats (BigNumber behavior)', function () {
155
+ const invalidFees = ['abc', 'not-a-number', '1.5.5', 'infinity'];
156
+ invalidFees.forEach((fee) => {
157
+ // BigNumber doesn't throw for invalid strings, it creates NaN values
158
+ // But our implementation should still accept them (no additional validation)
159
+ assert.doesNotThrow(() => {
160
+ builder.fee(fee);
161
+ }, `BigNumber accepts invalid strings: ${fee}`);
162
+ });
163
+ });
164
+ it('should handle BigNumber fee inputs', function () {
165
+ const bigNumberFee = new bignumber_js_1.default('1000000000000000000');
166
+ assert.doesNotThrow(() => {
167
+ builder.fee(bigNumberFee.toString());
168
+ });
169
+ });
170
+ it('should chain fee setting with other methods', function () {
171
+ const fee = '1000';
172
+ const utxo = {
173
+ outputID: 1,
174
+ amount: '1000000000000000000',
175
+ txid: 'test-txid',
176
+ outputidx: '0',
177
+ threshold: 1,
178
+ addresses: ['C-flare1test'],
179
+ };
180
+ assert.doesNotThrow(() => {
181
+ builder.fee(fee).addUtxos([utxo]);
182
+ });
183
+ });
184
+ });
185
+ describe('Locktime Management', function () {
186
+ it('should set valid locktime values', function () {
187
+ const validLocktimes = [0, 1, 1000, 4294967295]; // Max uint32
188
+ validLocktimes.forEach((locktime) => {
189
+ assert.doesNotThrow(() => {
190
+ builder.locktime(locktime);
191
+ }, `Should accept locktime: ${locktime}`);
192
+ });
193
+ });
194
+ it('should handle negative locktime (no validation)', function () {
195
+ const negativeLocktimes = [-1, -1000];
196
+ negativeLocktimes.forEach((locktime) => {
197
+ assert.doesNotThrow(() => {
198
+ builder.locktime(locktime);
199
+ }, `Should accept negative locktime: ${locktime} (no validation in implementation)`);
200
+ });
201
+ });
202
+ it('should handle boundary values', function () {
203
+ const boundaryValues = [0, 4294967295]; // Min and max uint32
204
+ boundaryValues.forEach((locktime) => {
205
+ assert.doesNotThrow(() => {
206
+ builder.locktime(locktime);
207
+ });
208
+ });
209
+ });
210
+ it('should chain locktime setting with other methods', function () {
211
+ const locktime = 123456;
212
+ const fee = '1000';
213
+ assert.doesNotThrow(() => {
214
+ builder.locktime(locktime).fee(fee);
215
+ });
216
+ });
217
+ });
218
+ describe('Threshold Management', function () {
219
+ it('should set valid threshold values', function () {
220
+ const validThresholds = [1, 2, 5, 10];
221
+ validThresholds.forEach((threshold) => {
222
+ assert.doesNotThrow(() => {
223
+ builder.threshold(threshold);
224
+ }, `Should accept threshold: ${threshold}`);
225
+ });
226
+ });
227
+ it('should reject invalid threshold values', function () {
228
+ const invalidThresholds = [0, -1, -10];
229
+ invalidThresholds.forEach((threshold) => {
230
+ assert.throws(() => {
231
+ builder.threshold(threshold);
232
+ }, sdk_core_1.BuildTransactionError, `Should reject threshold: ${threshold}`);
233
+ });
234
+ });
235
+ it('should handle typical threshold scenarios', function () {
236
+ // Single signature
237
+ assert.doesNotThrow(() => {
238
+ builder.threshold(1);
239
+ });
240
+ // Multi-signature
241
+ assert.doesNotThrow(() => {
242
+ builder.threshold(3);
243
+ });
244
+ });
245
+ it('should chain threshold setting with other methods', function () {
246
+ const threshold = 2;
247
+ const locktime = 123456;
248
+ assert.doesNotThrow(() => {
249
+ builder.threshold(threshold).locktime(locktime);
250
+ });
251
+ });
252
+ });
253
+ describe('Source Chain Management', function () {
254
+ // TODO : Enable these tests after fixing sourceChain method to accept P-chain IDs
255
+ it.skip('should set valid source chain IDs', function () {
256
+ const validChainIds = ['C-flare12345', 'NodeID-flare67890', '0x123456789abcdef', 'abc123def456'];
257
+ validChainIds.forEach((chainId) => {
258
+ assert.doesNotThrow(() => {
259
+ builder.sourceChain(chainId);
260
+ }, `Should accept chain ID: ${chainId}`);
261
+ });
262
+ });
263
+ it('should handle different chain ID formats', function () {
264
+ const chainIds = ['C-chain-id-123', 'P-chain-id-456', 'hex-formatted-id', '1234567890abcdef'];
265
+ chainIds.forEach((chainId) => {
266
+ assert.doesNotThrow(() => {
267
+ builder.sourceChain(chainId);
268
+ });
269
+ });
270
+ });
271
+ });
272
+ describe('Input/Output Creation', function () {
273
+ it('should test public methods only due to protected access', function () {
274
+ // Note: createInputOutput is protected, so we test through public interface
275
+ // Test that we can set parameters that would be used by createInputOutput
276
+ assert.doesNotThrow(() => {
277
+ builder.fee('1000');
278
+ builder.threshold(1);
279
+ // Protected method cannot be tested directly
280
+ });
281
+ });
282
+ it('should handle configuration for output creation', function () {
283
+ const fee = '1000';
284
+ const locktime = 0;
285
+ const threshold = 1;
286
+ assert.doesNotThrow(() => {
287
+ builder.fee(fee).locktime(locktime).threshold(threshold);
288
+ });
289
+ });
290
+ it('should allow setting parameters for large amounts', function () {
291
+ const locktime = 0;
292
+ const threshold = 1;
293
+ assert.doesNotThrow(() => {
294
+ builder.fee('1000').locktime(locktime).threshold(threshold);
295
+ });
296
+ });
297
+ it('should configure for different threshold scenarios', function () {
298
+ const locktime = 0;
299
+ // Test different thresholds
300
+ [1, 2, 3].forEach((threshold) => {
301
+ assert.doesNotThrow(() => {
302
+ builder.threshold(threshold).locktime(locktime);
303
+ });
304
+ });
305
+ });
306
+ });
307
+ describe('Transaction Type Verification', function () {
308
+ it('should verify transaction type (placeholder)', function () {
309
+ const mockTx = { type: 'import' };
310
+ const result = importInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(mockTx);
311
+ assert.strictEqual(result, true); // Placeholder returns true
312
+ });
313
+ it('should handle different transaction objects', function () {
314
+ const testCases = [{}, null, undefined, { type: 'export' }, { data: 'test' }];
315
+ testCases.forEach((testCase, index) => {
316
+ const result = importInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(testCase);
317
+ assert.strictEqual(result, true, `Test case ${index} should return true (placeholder)`);
318
+ });
319
+ });
320
+ it('should verify via instance method', function () {
321
+ const mockTx = { type: 'import' };
322
+ const result = builder.verifyTxType(mockTx);
323
+ assert.strictEqual(result, true);
324
+ });
325
+ });
326
+ describe('Transaction Building Preparation', function () {
327
+ it('should prepare basic import transaction parameters', function () {
328
+ const fee = '1000';
329
+ const locktime = 123456;
330
+ const threshold = 2;
331
+ const chainId = 'C-source-chain-123';
332
+ const utxos = [
333
+ {
334
+ outputID: 1,
335
+ amount: '1000000000000000000',
336
+ txid: 'test-txid',
337
+ outputidx: '0',
338
+ threshold: 1,
339
+ addresses: ['C-flare1test'],
340
+ },
341
+ ];
342
+ // Set all parameters
343
+ builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId).addUtxos(utxos);
344
+ // Should not throw
345
+ assert.ok(true);
346
+ });
347
+ it('should handle minimal configuration', function () {
348
+ const fee = '0';
349
+ const utxos = [
350
+ {
351
+ outputID: 1,
352
+ amount: '1000000000000000000',
353
+ txid: 'test-txid',
354
+ outputidx: '0',
355
+ threshold: 1,
356
+ addresses: ['C-flare1test'],
357
+ },
358
+ ];
359
+ builder.fee(fee).addUtxos(utxos);
360
+ // Should not throw
361
+ assert.ok(true);
362
+ });
363
+ });
364
+ describe('Complex Scenarios', function () {
365
+ it('should handle multiple UTXOs with different properties', function () {
366
+ const utxos = [
367
+ {
368
+ outputID: 1,
369
+ amount: '1000000000000000000',
370
+ txid: 'test-txid-1',
371
+ outputidx: '0',
372
+ threshold: 1,
373
+ addresses: ['C-flare1single'],
374
+ },
375
+ {
376
+ outputID: 2,
377
+ amount: '2000000000000000000',
378
+ txid: 'test-txid-2',
379
+ outputidx: '1',
380
+ threshold: 2,
381
+ addresses: ['C-flare1multi1', 'C-flare1multi2'],
382
+ },
383
+ {
384
+ outputID: 3,
385
+ amount: '3000000000000000000',
386
+ txid: 'test-txid-3',
387
+ outputidx: '0',
388
+ threshold: 3,
389
+ addresses: ['C-flare1multi1', 'C-flare1multi2', 'C-flare1multi3'],
390
+ },
391
+ ];
392
+ builder.addUtxos(utxos);
393
+ builder.fee('5000'); // Higher fee for complex transaction
394
+ builder.threshold(2);
395
+ // Should handle complex UTXO set
396
+ assert.ok(true);
397
+ });
398
+ it('should handle large transaction parameters', function () {
399
+ const fee = '1000000000000000000'; // 1 FLR fee
400
+ const locktime = 4294967295; // Max uint32
401
+ const threshold = 10; // High threshold
402
+ const chainId = 'very-long-chain-id-with-lots-of-characters-0x123456789abcdef0123456789abcdef';
403
+ builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId);
404
+ // Should handle large values
405
+ assert.ok(true);
406
+ });
407
+ it('should handle rapid parameter changes', function () {
408
+ // Simulate rapid parameter updates
409
+ builder.fee('1000').fee('2000').fee('3000');
410
+ builder.locktime(100).locktime(200).locktime(300);
411
+ builder.threshold(1).threshold(2).threshold(3);
412
+ // Should handle rapid changes without issues
413
+ assert.ok(true);
414
+ });
415
+ });
416
+ describe('Edge Cases', function () {
417
+ it('should handle zero values where appropriate', function () {
418
+ builder.fee('0');
419
+ builder.locktime(0);
420
+ // threshold of 0 should be invalid
421
+ assert.throws(() => {
422
+ builder.threshold(0);
423
+ }, sdk_core_1.BuildTransactionError);
424
+ });
425
+ it('should handle maximum values', function () {
426
+ const maxFee = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // Max uint256
427
+ const maxLocktime = 4294967295; // Max uint32
428
+ assert.doesNotThrow(() => {
429
+ builder.fee(maxFee);
430
+ });
431
+ assert.doesNotThrow(() => {
432
+ builder.locktime(maxLocktime);
433
+ });
434
+ });
435
+ it('should maintain state across multiple operations', function () {
436
+ const utxo1 = {
437
+ outputID: 1,
438
+ amount: '1000000000000000000',
439
+ txid: 'test-txid-1',
440
+ outputidx: '0',
441
+ threshold: 1,
442
+ addresses: ['C-flare1test1'],
443
+ };
444
+ const utxo2 = {
445
+ outputID: 2,
446
+ amount: '2000000000000000000',
447
+ txid: 'test-txid-2',
448
+ outputidx: '0',
449
+ threshold: 1,
450
+ addresses: ['C-flare1test2'],
451
+ };
452
+ // Build state incrementally
453
+ builder.fee('1000');
454
+ builder.addUtxos([utxo1]);
455
+ builder.locktime(123456);
456
+ builder.addUtxos([utxo2]);
457
+ builder.threshold(2);
458
+ // State should be maintained across operations
459
+ assert.ok(true);
460
+ });
461
+ });
462
+ describe('Integration Tests', function () {
463
+ it('should handle complete P-chain import flow preparation', function () {
464
+ const fee = '2000';
465
+ const locktime = 654321;
466
+ const threshold = 1;
467
+ const chainId = 'C-source-chain-456';
468
+ const utxos = [
469
+ {
470
+ outputID: 1,
471
+ amount: '6000000000000000000', // 6 FLR (more than output for fees)
472
+ txid: 'integration-test-txid',
473
+ outputidx: '0',
474
+ threshold: 1,
475
+ addresses: ['C-flare1source'],
476
+ },
477
+ ];
478
+ // Complete setup
479
+ builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId).addUtxos(utxos);
480
+ // All operations should complete without throwing
481
+ assert.ok(true);
482
+ });
483
+ it('should handle method chaining extensively', function () {
484
+ const utxos = [
485
+ {
486
+ outputID: 1,
487
+ amount: '10000000000000000000', // 10 FLR
488
+ txid: 'chain-test-txid',
489
+ outputidx: '0',
490
+ threshold: 1,
491
+ addresses: ['C-flare1test'],
492
+ },
493
+ ];
494
+ // Test extensive method chaining
495
+ assert.doesNotThrow(() => {
496
+ builder.fee('1000').locktime(100000).threshold(1).sourceChain('C-chain-123').addUtxos(utxos);
497
+ });
498
+ });
499
+ });
500
+ });
501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9pbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsbURBQTZEO0FBQzdELCtDQUFpQztBQUNqQyxnRUFBcUM7QUFDckMsNEVBQXlFO0FBR3pFLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLElBQUksT0FBMkIsQ0FBQztJQUVoQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksdUNBQWtCLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyx3REFBd0Q7WUFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRTtZQUMzQixNQUFNLElBQUksR0FBbUI7Z0JBQzNCLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxRQUFRO2dCQUN2QyxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixTQUFTLEVBQUUs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LENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlGLGtEQUFrRDtZQUNsRCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFO1lBQzlDLE1BQU0sS0FBSyxHQUFxQjtnQkFDOUI7b0JBQ0UsUUFBUSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxFQUFFLHNCQUFzQixFQUFFLFNBQVM7b0JBQ3pDLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLFNBQVMsRUFBRSxHQUFHO29CQUNkLFNBQVMsRUFBRSxDQUFDO29CQUNaLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztpQkFDNUI7YUFDRixDQUFDO1lBRUYsaUNBQWlDO1lBQ2pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO2dCQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEltcG9ydEluUFR4QnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaW1wb3J0SW5QVHhCdWlsZGVyJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmRlc2NyaWJlKCdJbXBvcnRJblBUeEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gIGxldCBidWlsZGVyOiBJbXBvcnRJblBUeEJ1aWxkZXI7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgYnVpbGRlciA9IG5ldyBJbXBvcnRJblBUeEJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCBjb2luIGNvbmZpZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhidWlsZGVyKTtcbiAgICAgIGFzc2VydC5vayhidWlsZGVyIGluc3RhbmNlb2YgSW1wb3J0SW5QVHhCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnVpbGRlciBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aHJvd2luZyBlcnJvcnNcbiAgICAgIGFzc2VydC5vayhidWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1VUWE8gTWFuYWdlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFkZCBzaW5nbGUgVVRYTycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHV0eG86IERlY29kZWRVdHhvT2JqID0ge1xuICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDEgRkxSXG4gICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtc2luZ2xlJyxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdCddLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYWRkVXR4b3MoW3V0eG9dKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhZGQgbXVsdGlwbGUgVVRYT3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLCAvLyAxIEZMUlxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMScsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QxJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMixcbiAgICAgICAgICBhbW91bnQ6ICcyMDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMiBGTFJcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTInLFxuICAgICAgICAgIG91dHB1dGlkeDogJzEnLFxuICAgICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0MicsICdDLWZsYXJlMXRlc3QzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMyxcbiAgICAgICAgICBhbW91bnQ6ICc1MDAwMDAwMDAwMDAwMDAwMDAnLCAvLyAwLjUgRkxSXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0zJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDQnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmFkZFV0eG9zKHV0eG9zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgVVRYTyBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmFkZFV0eG9zKFtdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2N1bXVsYXRlIFVUWE9zIGZyb20gbXVsdGlwbGUgY2FsbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvczE6IERlY29kZWRVdHhvT2JqW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTEnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0MSddLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgdXR4b3MyOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDIsXG4gICAgICAgICAgYW1vdW50OiAnMjAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0yJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDInXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGJ1aWxkZXIuYWRkVXR4b3ModXR4b3MxKTtcbiAgICAgIGJ1aWxkZXIuYWRkVXR4b3ModXR4b3MyKTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRmVlIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdmFsaWQgcG9zaXRpdmUgZmVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRGZWVzID0gWycxMDAwJywgJzAnLCAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsICc5OTk5OTk5OTk5OTk5OTk5OTknXTtcblxuICAgICAgdmFsaWRGZWVzLmZvckVhY2goKGZlZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmZlZShmZWUpO1xuICAgICAgICB9LCBgU2hvdWxkIGFjY2VwdCBmZWU6ICR7ZmVlfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBmZWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmVnYXRpdmVGZWVzID0gWyctMScsICctMTAwMCcsICctMTAwMDAwMDAwMDAwMDAwMDAwMCddO1xuXG4gICAgICBuZWdhdGl2ZUZlZXMuZm9yRWFjaCgoZmVlKSA9PiB7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgYnVpbGRlci5mZWUoZmVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgICAgICAgICBgU2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBmZWU6ICR7ZmVlfWBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgaW52YWxpZCBmZWUgZm9ybWF0cyAoQmlnTnVtYmVyIGJlaGF2aW9yKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRGZWVzID0gWydhYmMnLCAnbm90LWEtbnVtYmVyJywgJzEuNS41JywgJ2luZmluaXR5J107XG5cbiAgICAgIGludmFsaWRGZWVzLmZvckVhY2goKGZlZSkgPT4ge1xuICAgICAgICAvLyBCaWdOdW1iZXIgZG9lc24ndCB0aHJvdyBmb3IgaW52YWxpZCBzdHJpbmdzLCBpdCBjcmVhdGVzIE5hTiB2YWx1ZXNcbiAgICAgICAgLy8gQnV0IG91ciBpbXBsZW1lbnRhdGlvbiBzaG91bGQgc3RpbGwgYWNjZXB0IHRoZW0gKG5vIGFkZGl0aW9uYWwgdmFsaWRhdGlvbilcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mZWUoZmVlKTtcbiAgICAgICAgfSwgYEJpZ051bWJlciBhY2NlcHRzIGludmFsaWQgc3RyaW5nczogJHtmZWV9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIEJpZ051bWJlciBmZWUgaW5wdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYmlnTnVtYmVyRmVlID0gbmV3IEJpZ051bWJlcignMTAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKGJpZ051bWJlckZlZS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjaGFpbiBmZWUgc2V0dGluZyB3aXRoIG90aGVyIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZWUgPSAnMTAwMCc7XG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB0eGlkOiAndGVzdC10eGlkJyxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdCddLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKGZlZSkuYWRkVXR4b3MoW3V0eG9dKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTG9ja3RpbWUgTWFuYWdlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB2YWxpZCBsb2NrdGltZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZExvY2t0aW1lcyA9IFswLCAxLCAxMDAwLCA0Mjk0OTY3Mjk1XTsgLy8gTWF4IHVpbnQzMlxuXG4gICAgICB2YWxpZExvY2t0aW1lcy5mb3JFYWNoKChsb2NrdGltZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmxvY2t0aW1lKGxvY2t0aW1lKTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgbG9ja3RpbWU6ICR7bG9ja3RpbWV9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG5lZ2F0aXZlIGxvY2t0aW1lIChubyB2YWxpZGF0aW9uKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlTG9ja3RpbWVzID0gWy0xLCAtMTAwMF07XG5cbiAgICAgIG5lZ2F0aXZlTG9ja3RpbWVzLmZvckVhY2goKGxvY2t0aW1lKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIubG9ja3RpbWUobG9ja3RpbWUpO1xuICAgICAgICB9LCBgU2hvdWxkIGFjY2VwdCBuZWdhdGl2ZSBsb2NrdGltZTogJHtsb2NrdGltZX0gKG5vIHZhbGlkYXRpb24gaW4gaW1wbGVtZW50YXRpb24pYCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGJvdW5kYXJ5IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJvdW5kYXJ5VmFsdWVzID0gWzAsIDQyOTQ5NjcyOTVdOyAvLyBNaW4gYW5kIG1heCB1aW50MzJcblxuICAgICAgYm91bmRhcnlWYWx1ZXMuZm9yRWFjaCgobG9ja3RpbWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5sb2NrdGltZShsb2NrdGltZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNoYWluIGxvY2t0aW1lIHNldHRpbmcgd2l0aCBvdGhlciBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbG9ja3RpbWUgPSAxMjM0NTY7XG4gICAgICBjb25zdCBmZWUgPSAnMTAwMCc7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmxvY2t0aW1lKGxvY2t0aW1lKS5mZWUoZmVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVGhyZXNob2xkIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdmFsaWQgdGhyZXNob2xkIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkVGhyZXNob2xkcyA9IFsxLCAyLCA1LCAxMF07XG5cbiAgICAgIHZhbGlkVGhyZXNob2xkcy5mb3JFYWNoKCh0aHJlc2hvbGQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci50aHJlc2hvbGQodGhyZXNob2xkKTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgdGhyZXNob2xkOiAke3RocmVzaG9sZH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaW52YWxpZCB0aHJlc2hvbGQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZFRocmVzaG9sZHMgPSBbMCwgLTEsIC0xMF07XG5cbiAgICAgIGludmFsaWRUaHJlc2hvbGRzLmZvckVhY2goKHRocmVzaG9sZCkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKHRocmVzaG9sZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICAgYFNob3VsZCByZWplY3QgdGhyZXNob2xkOiAke3RocmVzaG9sZH1gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHR5cGljYWwgdGhyZXNob2xkIHNjZW5hcmlvcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNpbmdsZSBzaWduYXR1cmVcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnRocmVzaG9sZCgxKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNdWx0aS1zaWduYXR1cmVcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnRocmVzaG9sZCgzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjaGFpbiB0aHJlc2hvbGQgc2V0dGluZyB3aXRoIG90aGVyIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgY29uc3QgbG9ja3RpbWUgPSAxMjM0NTY7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnRocmVzaG9sZCh0aHJlc2hvbGQpLmxvY2t0aW1lKGxvY2t0aW1lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU291cmNlIENoYWluIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVE9ETyA6IEVuYWJsZSB0aGVzZSB0ZXN0cyBhZnRlciBmaXhpbmcgc291cmNlQ2hhaW4gbWV0aG9kIHRvIGFjY2VwdCBQLWNoYWluIElEc1xuICAgIGl0LnNraXAoJ3Nob3VsZCBzZXQgdmFsaWQgc291cmNlIGNoYWluIElEcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQ2hhaW5JZHMgPSBbJ0MtZmxhcmUxMjM0NScsICdOb2RlSUQtZmxhcmU2Nzg5MCcsICcweDEyMzQ1Njc4OWFiY2RlZicsICdhYmMxMjNkZWY0NTYnXTtcblxuICAgICAgdmFsaWRDaGFpbklkcy5mb3JFYWNoKChjaGFpbklkKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuc291cmNlQ2hhaW4oY2hhaW5JZCk7XG4gICAgICAgIH0sIGBTaG91bGQgYWNjZXB0IGNoYWluIElEOiAke2NoYWluSWR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRpZmZlcmVudCBjaGFpbiBJRCBmb3JtYXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2hhaW5JZHMgPSBbJ0MtY2hhaW4taWQtMTIzJywgJ1AtY2hhaW4taWQtNDU2JywgJ2hleC1mb3JtYXR0ZWQtaWQnLCAnMTIzNDU2Nzg5MGFiY2RlZiddO1xuXG4gICAgICBjaGFpbklkcy5mb3JFYWNoKChjaGFpbklkKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuc291cmNlQ2hhaW4oY2hhaW5JZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdJbnB1dC9PdXRwdXQgQ3JlYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0ZXN0IHB1YmxpYyBtZXRob2RzIG9ubHkgZHVlIHRvIHByb3RlY3RlZCBhY2Nlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBOb3RlOiBjcmVhdGVJbnB1dE91dHB1dCBpcyBwcm90ZWN0ZWQsIHNvIHdlIHRlc3QgdGhyb3VnaCBwdWJsaWMgaW50ZXJmYWNlXG4gICAgICAvLyBUZXN0IHRoYXQgd2UgY2FuIHNldCBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgdXNlZCBieSBjcmVhdGVJbnB1dE91dHB1dFxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJyk7XG4gICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKDEpO1xuICAgICAgICAvLyBQcm90ZWN0ZWQgbWV0aG9kIGNhbm5vdCBiZSB0ZXN0ZWQgZGlyZWN0bHlcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgY29uZmlndXJhdGlvbiBmb3Igb3V0cHV0IGNyZWF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAnO1xuICAgICAgY29uc3QgbG9ja3RpbWUgPSAwO1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKGZlZSkubG9ja3RpbWUobG9ja3RpbWUpLnRocmVzaG9sZCh0aHJlc2hvbGQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFsbG93IHNldHRpbmcgcGFyYW1ldGVycyBmb3IgbGFyZ2UgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMDtcbiAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZSgnMTAwMCcpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb25maWd1cmUgZm9yIGRpZmZlcmVudCB0aHJlc2hvbGQgc2NlbmFyaW9zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbG9ja3RpbWUgPSAwO1xuXG4gICAgICAvLyBUZXN0IGRpZmZlcmVudCB0aHJlc2hvbGRzXG4gICAgICBbMSwgMiwgM10uZm9yRWFjaCgodGhyZXNob2xkKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKHRocmVzaG9sZCkubG9ja3RpbWUobG9ja3RpbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gVHlwZSBWZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdHJhbnNhY3Rpb24gdHlwZSAocGxhY2Vob2xkZXIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1R4ID0geyB0eXBlOiAnaW1wb3J0JyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZShtb2NrVHgpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSk7IC8vIFBsYWNlaG9sZGVyIHJldHVybnMgdHJ1ZVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZGlmZmVyZW50IHRyYW5zYWN0aW9uIG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbe30sIG51bGwsIHVuZGVmaW5lZCwgeyB0eXBlOiAnZXhwb3J0JyB9LCB7IGRhdGE6ICd0ZXN0JyB9XTtcblxuICAgICAgdGVzdENhc2VzLmZvckVhY2goKHRlc3RDYXNlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBJbXBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHRlc3RDYXNlKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgdHJ1ZSwgYFRlc3QgY2FzZSAke2luZGV4fSBzaG91bGQgcmV0dXJuIHRydWUgKHBsYWNlaG9sZGVyKWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB2aWEgaW5zdGFuY2UgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1R4ID0geyB0eXBlOiAnaW1wb3J0JyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gQnVpbGRpbmcgUHJlcGFyYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwcmVwYXJlIGJhc2ljIGltcG9ydCB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAnO1xuICAgICAgY29uc3QgbG9ja3RpbWUgPSAxMjM0NTY7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgY29uc3QgY2hhaW5JZCA9ICdDLXNvdXJjZS1jaGFpbi0xMjMnO1xuICAgICAgY29uc3QgdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdCddLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgLy8gU2V0IGFsbCBwYXJhbWV0ZXJzXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKS5zb3VyY2VDaGFpbihjaGFpbklkKS5hZGRVdHhvcyh1dHhvcyk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1pbmltYWwgY29uZmlndXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcwJztcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZCcsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGJ1aWxkZXIuZmVlKGZlZSkuYWRkVXR4b3ModXR4b3MpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb21wbGV4IFNjZW5hcmlvcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBVVFhPcyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTEnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTFzaW5nbGUnXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAyLFxuICAgICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMicsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMScsXG4gICAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMW11bHRpMScsICdDLWZsYXJlMW11bHRpMiddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDMsXG4gICAgICAgICAgYW1vdW50OiAnMzAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0zJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDMsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxbXVsdGkxJywgJ0MtZmxhcmUxbXVsdGkyJywgJ0MtZmxhcmUxbXVsdGkzJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBidWlsZGVyLmFkZFV0eG9zKHV0eG9zKTtcbiAgICAgIGJ1aWxkZXIuZmVlKCc1MDAwJyk7IC8vIEhpZ2hlciBmZWUgZm9yIGNvbXBsZXggdHJhbnNhY3Rpb25cbiAgICAgIGJ1aWxkZXIudGhyZXNob2xkKDIpO1xuXG4gICAgICAvLyBTaG91bGQgaGFuZGxlIGNvbXBsZXggVVRYTyBzZXRcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIHRyYW5zYWN0aW9uIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZWUgPSAnMTAwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIDEgRkxSIGZlZVxuICAgICAgY29uc3QgbG9ja3RpbWUgPSA0Mjk0OTY3Mjk1OyAvLyBNYXggdWludDMyXG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSAxMDsgLy8gSGlnaCB0aHJlc2hvbGRcbiAgICAgIGNvbnN0IGNoYWluSWQgPSAndmVyeS1sb25nLWNoYWluLWlkLXdpdGgtbG90cy1vZi1jaGFyYWN0ZXJzLTB4MTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgICAgIGJ1aWxkZXIuZmVlKGZlZSkubG9ja3RpbWUobG9ja3RpbWUpLnRocmVzaG9sZCh0aHJlc2hvbGQpLnNvdXJjZUNoYWluKGNoYWluSWQpO1xuXG4gICAgICAvLyBTaG91bGQgaGFuZGxlIGxhcmdlIHZhbHVlc1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmFwaWQgcGFyYW1ldGVyIGNoYW5nZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaW11bGF0ZSByYXBpZCBwYXJhbWV0ZXIgdXBkYXRlc1xuICAgICAgYnVpbGRlci5mZWUoJzEwMDAnKS5mZWUoJzIwMDAnKS5mZWUoJzMwMDAnKTtcbiAgICAgIGJ1aWxkZXIubG9ja3RpbWUoMTAwKS5sb2NrdGltZSgyMDApLmxvY2t0aW1lKDMwMCk7XG4gICAgICBidWlsZGVyLnRocmVzaG9sZCgxKS50aHJlc2hvbGQoMikudGhyZXNob2xkKDMpO1xuXG4gICAgICAvLyBTaG91bGQgaGFuZGxlIHJhcGlkIGNoYW5nZXMgd2l0aG91dCBpc3N1ZXNcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VkZ2UgQ2FzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgemVybyB2YWx1ZXMgd2hlcmUgYXBwcm9wcmlhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBidWlsZGVyLmZlZSgnMCcpO1xuICAgICAgYnVpbGRlci5sb2NrdGltZSgwKTtcbiAgICAgIC8vIHRocmVzaG9sZCBvZiAwIHNob3VsZCBiZSBpbnZhbGlkXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQoMCk7XG4gICAgICB9LCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbWF4aW11bSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYXhGZWUgPSAnMTE1NzkyMDg5MjM3MzE2MTk1NDIzNTcwOTg1MDA4Njg3OTA3ODUzMjY5OTg0NjY1NjQwNTY0MDM5NDU3NTg0MDA3OTEzMTI5NjM5OTM1JzsgLy8gTWF4IHVpbnQyNTZcbiAgICAgIGNvbnN0IG1heExvY2t0aW1lID0gNDI5NDk2NzI5NTsgLy8gTWF4IHVpbnQzMlxuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5mZWUobWF4RmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5sb2NrdGltZShtYXhMb2NrdGltZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFpbnRhaW4gc3RhdGUgYWNyb3NzIG11bHRpcGxlIG9wZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvMTogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0xJyxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDEnXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHV0eG8yOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDIsXG4gICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICB0eGlkOiAndGVzdC10eGlkLTInLFxuICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0MiddLFxuICAgICAgfTtcblxuICAgICAgLy8gQnVpbGQgc3RhdGUgaW5jcmVtZW50YWxseVxuICAgICAgYnVpbGRlci5mZWUoJzEwMDAnKTtcbiAgICAgIGJ1aWxkZXIuYWRkVXR4b3MoW3V0eG8xXSk7XG4gICAgICBidWlsZGVyLmxvY2t0aW1lKDEyMzQ1Nik7XG4gICAgICBidWlsZGVyLmFkZFV0eG9zKFt1dHhvMl0pO1xuICAgICAgYnVpbGRlci50aHJlc2hvbGQoMik7XG5cbiAgICAgIC8vIFN0YXRlIHNob3VsZCBiZSBtYWludGFpbmVkIGFjcm9zcyBvcGVyYXRpb25zXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdJbnRlZ3JhdGlvbiBUZXN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBjb21wbGV0ZSBQLWNoYWluIGltcG9ydCBmbG93IHByZXBhcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzIwMDAnO1xuICAgICAgY29uc3QgbG9ja3RpbWUgPSA2NTQzMjE7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSAxO1xuICAgICAgY29uc3QgY2hhaW5JZCA9ICdDLXNvdXJjZS1jaGFpbi00NTYnO1xuICAgICAgY29uc3QgdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgICBhbW91bnQ6ICc2MDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gNiBGTFIgKG1vcmUgdGhhbiBvdXRwdXQgZm9yIGZlZXMpXG4gICAgICAgICAgdHhpZDogJ2ludGVncmF0aW9uLXRlc3QtdHhpZCcsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXNvdXJjZSddLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgLy8gQ29tcGxldGUgc2V0dXBcbiAgICAgIGJ1aWxkZXIuZmVlKGZlZSkubG9ja3RpbWUobG9ja3RpbWUpLnRocmVzaG9sZCh0aHJlc2hvbGQpLnNvdXJjZUNoYWluKGNoYWluSWQpLmFkZFV0eG9zKHV0eG9zKTtcblxuICAgICAgLy8gQWxsIG9wZXJhdGlvbnMgc2hvdWxkIGNvbXBsZXRlIHdpdGhvdXQgdGhyb3dpbmdcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1ldGhvZCBjaGFpbmluZyBleHRlbnNpdmVseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMDAnLCAvLyAxMCBGTFJcbiAgICAgICAgICB0eGlkOiAnY2hhaW4tdGVzdC10eGlkJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdCddLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgLy8gVGVzdCBleHRlbnNpdmUgbWV0aG9kIGNoYWluaW5nXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5mZWUoJzEwMDAnKS5sb2NrdGltZSgxMDAwMDApLnRocmVzaG9sZCgxKS5zb3VyY2VDaGFpbignQy1jaGFpbi0xMjMnKS5hZGRVdHhvcyh1dHhvcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyPair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/keyPair.ts"],"names":[],"mappings":""}