@bitgo-beta/sdk-coin-dot 1.3.3-alpha.1 → 1.3.3-alpha.100

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 (58) hide show
  1. package/CHANGELOG.md +816 -0
  2. package/dist/src/dot.d.ts +24 -19
  3. package/dist/src/dot.d.ts.map +1 -1
  4. package/dist/src/dot.js +259 -81
  5. package/dist/src/index.d.ts +1 -0
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +2 -1
  8. package/dist/src/lib/addressInitializationBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/addressInitializationBuilder.js +11 -9
  10. package/dist/src/lib/batchTransactionBuilder.d.ts +15 -1
  11. package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/batchTransactionBuilder.js +114 -16
  13. package/dist/src/lib/iface.d.ts +134 -4
  14. package/dist/src/lib/iface.d.ts.map +1 -1
  15. package/dist/src/lib/iface.js +90 -2
  16. package/dist/src/lib/iface_utils.d.ts +59 -0
  17. package/dist/src/lib/iface_utils.d.ts.map +1 -0
  18. package/dist/src/lib/iface_utils.js +93 -0
  19. package/dist/src/lib/index.d.ts +1 -0
  20. package/dist/src/lib/index.d.ts.map +1 -1
  21. package/dist/src/lib/index.js +4 -2
  22. package/dist/src/lib/nativeTransferBuilder.d.ts +5 -2
  23. package/dist/src/lib/nativeTransferBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/nativeTransferBuilder.js +16 -8
  25. package/dist/src/lib/proxyBuilder.d.ts +54 -0
  26. package/dist/src/lib/proxyBuilder.d.ts.map +1 -0
  27. package/dist/src/lib/proxyBuilder.js +118 -0
  28. package/dist/src/lib/stakingBuilder.d.ts +8 -0
  29. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  30. package/dist/src/lib/stakingBuilder.js +43 -13
  31. package/dist/src/lib/transaction.d.ts +19 -0
  32. package/dist/src/lib/transaction.d.ts.map +1 -1
  33. package/dist/src/lib/transaction.js +245 -65
  34. package/dist/src/lib/transactionBuilder.d.ts +1 -0
  35. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/transactionBuilder.js +6 -1
  37. package/dist/src/lib/transactionBuilderFactory.d.ts +2 -0
  38. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  39. package/dist/src/lib/transactionBuilderFactory.js +12 -2
  40. package/dist/src/lib/txnSchema.d.ts +1 -1
  41. package/dist/src/lib/txnSchema.d.ts.map +1 -1
  42. package/dist/src/lib/txnSchema.js +13 -3
  43. package/dist/src/lib/utils.d.ts +109 -2
  44. package/dist/src/lib/utils.d.ts.map +1 -1
  45. package/dist/src/lib/utils.js +173 -2
  46. package/dist/src/register.d.ts +3 -0
  47. package/dist/src/register.d.ts.map +1 -0
  48. package/dist/src/register.js +11 -0
  49. package/dist/src/resources/index.d.ts +3 -0
  50. package/dist/src/resources/index.d.ts.map +1 -0
  51. package/dist/src/resources/index.js +15 -0
  52. package/dist/src/resources/mainnet.d.ts +2 -0
  53. package/dist/src/resources/mainnet.d.ts.map +1 -0
  54. package/dist/src/resources/mainnet.js +5 -0
  55. package/dist/src/resources/westend.d.ts +2 -0
  56. package/dist/src/resources/westend.d.ts.map +1 -0
  57. package/dist/src/resources/westend.js +5 -0
  58. package/package.json +15 -14
@@ -22,13 +22,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
23
  };
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.Transaction = void 0;
25
+ exports.Transaction = exports.STAKING_DESTINATION = void 0;
26
26
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
27
27
  const keyring_1 = __importStar(require("@polkadot/keyring"));
28
28
  const util_1 = require("@polkadot/util");
29
29
  const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
30
30
  const keyPair_1 = require("./keyPair");
31
+ const iface_1 = require("./iface");
32
+ const iface_utils_1 = require("./iface_utils");
31
33
  const utils_1 = __importDefault(require("./utils"));
34
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
35
+ /**
36
+ * Use a dummy address as the destination of a bond or bondExtra because our inputs and outputs model
37
+ * doesn't seem to handle the concept of locking funds within a wallet as a method of transferring coins.
38
+ */
39
+ exports.STAKING_DESTINATION = keyring_1.encodeAddress('0x0000000000000000000000000000000000000000000000000000000000000000');
32
40
  class Transaction extends sdk_core_1.BaseTransaction {
33
41
  constructor(coinConfig) {
34
42
  super(coinConfig);
@@ -75,6 +83,13 @@ class Transaction extends sdk_core_1.BaseTransaction {
75
83
  addSignature(signature) {
76
84
  this._signedTransaction = utils_1.default.serializeSignedTransaction(this._dotTransaction, signature, this._dotTransaction.metadataRpc, this._registry);
77
85
  }
86
+ /**
87
+ * Returns a serialized representation of this transaction with a fake signature attached which
88
+ * can be used to estimate transaction fees.
89
+ */
90
+ fakeSign() {
91
+ return utils_1.default.serializeSignedTransaction(this._dotTransaction, Transaction.FAKE_SIGNATURE, this._dotTransaction.metadataRpc, this._registry);
92
+ }
78
93
  registry(registry) {
79
94
  this._registry = registry;
80
95
  }
@@ -129,7 +144,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
129
144
  const txMethod = decodedTx.method.args;
130
145
  if (utils_1.default.isProxyTransfer(txMethod)) {
131
146
  const keypairReal = new keyPair_1.KeyPair({
132
- pub: Buffer.from(keyring_1.decodeAddress(txMethod.real)).toString('hex'),
147
+ pub: Buffer.from(keyring_1.decodeAddress(iface_utils_1.getAddress(txMethod))).toString('hex'),
133
148
  });
134
149
  result.owner = keypairReal.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
135
150
  result.forceProxyType = txMethod.forceProxyType;
@@ -155,6 +170,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
155
170
  pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
156
171
  });
157
172
  result.to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
173
+ result.keepAlive = txMethod.keepAlive;
158
174
  }
159
175
  else {
160
176
  throw new sdk_core_1.ParseTransactionError(`Serializing unknown Transfer type parameters`);
@@ -162,30 +178,35 @@ class Transaction extends sdk_core_1.BaseTransaction {
162
178
  }
163
179
  if (this.type === sdk_core_1.TransactionType.StakingActivate) {
164
180
  const txMethod = decodedTx.method.args;
165
- const keypair = new keyPair_1.KeyPair({
166
- pub: Buffer.from(keyring_1.decodeAddress(txMethod.controller.id, false, this._registry.chainSS58)).toString('hex'),
167
- });
168
- result.controller = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
169
- result.amount = txMethod.value;
170
- const payee = txMethod.payee;
171
- if (payee.account) {
181
+ if (utils_1.default.isBond(txMethod)) {
172
182
  const keypair = new keyPair_1.KeyPair({
173
- pub: Buffer.from(keyring_1.decodeAddress(payee.account, false, this._registry.chainSS58)).toString('hex'),
183
+ pub: Buffer.from(keyring_1.decodeAddress(this._sender, false, this._registry.chainSS58)).toString('hex'),
174
184
  });
175
- result.payee = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
185
+ result.controller = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
186
+ result.amount = txMethod.value;
187
+ const payee = txMethod.payee;
188
+ if (payee.account) {
189
+ const keypair = new keyPair_1.KeyPair({
190
+ pub: Buffer.from(keyring_1.decodeAddress(payee.account, false, this._registry.chainSS58)).toString('hex'),
191
+ });
192
+ result.payee = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
193
+ }
194
+ else {
195
+ const payeeType = utils_1.default.capitalizeFirstLetter(Object.keys(payee)[0]);
196
+ result.payee = payeeType;
197
+ }
176
198
  }
177
- else {
178
- const payeeType = utils_1.default.capitalizeFirstLetter(Object.keys(payee)[0]);
179
- result.payee = payeeType;
199
+ else if (utils_1.default.isBondExtra(decodedTx.method.args)) {
200
+ result.amount = decodedTx.method.args.maxAdditional;
180
201
  }
181
202
  }
182
203
  if (this.type === sdk_core_1.TransactionType.AddressInitialization) {
183
204
  let txMethod;
184
205
  if (((_a = decodedTx.method) === null || _a === void 0 ? void 0 : _a.args).delegate) {
185
206
  txMethod = decodedTx.method.args;
186
- const keypair = new keyPair_1.KeyPair({
187
- pub: Buffer.from(keyring_1.decodeAddress(txMethod.delegate, false, this._registry.chainSS58)).toString('hex'),
188
- });
207
+ const delegateAddress = iface_utils_1.getDelegateAddress(txMethod);
208
+ const decodedAddress = keyring_1.decodeAddress(delegateAddress, false, this._registry.chainSS58);
209
+ const keypair = new keyPair_1.KeyPair({ pub: Buffer.from(decodedAddress).toString('hex') });
189
210
  result.owner = keypair.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
190
211
  }
191
212
  else {
@@ -311,60 +332,218 @@ class Transaction extends sdk_core_1.BaseTransaction {
311
332
  isImmortalEra: utils_1.default.isZeroHex(this._dotTransaction.era),
312
333
  });
313
334
  if (this.type === sdk_core_1.TransactionType.Send) {
314
- const txMethod = decodedTx.method.args;
315
- let to;
316
- let value;
317
- let from;
318
- if (utils_1.default.isProxyTransfer(txMethod)) {
319
- const decodedCall = utils_1.default.decodeCallMethod(this._dotTransaction, {
320
- metadataRpc: this._dotTransaction.metadataRpc,
321
- registry: this._registry,
322
- });
323
- const keypairDest = new keyPair_1.KeyPair({
324
- pub: Buffer.from(keyring_1.decodeAddress(decodedCall.dest.id)).toString('hex'),
325
- });
326
- const keypairFrom = new keyPair_1.KeyPair({
327
- pub: Buffer.from(keyring_1.decodeAddress(txMethod.real)).toString('hex'),
328
- });
329
- to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
330
- value = `${decodedCall.value}`;
331
- from = keypairFrom.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
335
+ this.decodeInputsAndOutputsForSend(decodedTx);
336
+ }
337
+ else if (this.type === sdk_core_1.TransactionType.Batch) {
338
+ this.decodeInputsAndOutputsForBatch(decodedTx);
339
+ }
340
+ else if (this.type === sdk_core_1.TransactionType.StakingActivate) {
341
+ this.decodeInputsAndOutputsForBond(decodedTx);
342
+ }
343
+ else if (this.type === sdk_core_1.TransactionType.StakingUnlock) {
344
+ this.decodeInputsAndOutputsForUnbond(decodedTx);
345
+ }
346
+ else if (this.type === sdk_core_1.TransactionType.StakingWithdraw) {
347
+ this.decodeInputsAndOutputsForWithdrawUnbond(decodedTx);
348
+ }
349
+ }
350
+ decodeInputsAndOutputsForSend(decodedTx) {
351
+ const txMethod = decodedTx.method.args;
352
+ let to;
353
+ let value;
354
+ let from;
355
+ if (utils_1.default.isProxyTransfer(txMethod)) {
356
+ const decodedCall = utils_1.default.decodeCallMethod(this._dotTransaction, {
357
+ metadataRpc: this._dotTransaction.metadataRpc,
358
+ registry: this._registry,
359
+ });
360
+ const keypairDest = new keyPair_1.KeyPair({
361
+ pub: Buffer.from(keyring_1.decodeAddress(decodedCall.dest.id)).toString('hex'),
362
+ });
363
+ const keypairFrom = new keyPair_1.KeyPair({
364
+ pub: Buffer.from(keyring_1.decodeAddress(iface_utils_1.getAddress(txMethod))).toString('hex'),
365
+ });
366
+ to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
367
+ value = `${decodedCall.value}`;
368
+ from = keypairFrom.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
369
+ }
370
+ else if (utils_1.default.isTransferAll(txMethod)) {
371
+ const keypairDest = new keyPair_1.KeyPair({
372
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
373
+ });
374
+ to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
375
+ value = '0'; // DOT transferAll's do not deserialize amounts
376
+ from = decodedTx.address;
377
+ }
378
+ else if (utils_1.default.isTransfer(txMethod)) {
379
+ const keypairDest = new keyPair_1.KeyPair({
380
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
381
+ });
382
+ to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
383
+ value = txMethod.value;
384
+ from = decodedTx.address;
385
+ }
386
+ else {
387
+ throw new sdk_core_1.ParseTransactionError(`Loading inputs of unknown Transfer type parameters`);
388
+ }
389
+ this._outputs = [
390
+ {
391
+ address: to,
392
+ value,
393
+ coin: this._coinConfig.name,
394
+ },
395
+ ];
396
+ this._inputs = [
397
+ {
398
+ address: from,
399
+ value,
400
+ coin: this._coinConfig.name,
401
+ },
402
+ ];
403
+ }
404
+ decodeInputsAndOutputsForBatch(decodedTx) {
405
+ const sender = decodedTx.address;
406
+ this._inputs = [];
407
+ this._outputs = [];
408
+ const txMethod = decodedTx.method.args;
409
+ if (utils_1.default.isStakingBatch(txMethod)) {
410
+ if (!txMethod.calls) {
411
+ throw new sdk_core_1.InvalidTransactionError('failed to decode calls from batch transaction');
332
412
  }
333
- else if (utils_1.default.isTransferAll(txMethod)) {
334
- const keypairDest = new keyPair_1.KeyPair({
335
- pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
336
- });
337
- to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
338
- value = 'sweep';
339
- from = decodedTx.address;
413
+ const bondMethod = txMethod.calls[0].callIndex;
414
+ const decodedBondCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(bondMethod)));
415
+ if (decodedBondCall.section !== iface_1.SectionNames.Staking || decodedBondCall.method !== iface_1.MethodNames.Bond) {
416
+ throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected first call to be bond.');
340
417
  }
341
- else if (utils_1.default.isTransfer(txMethod)) {
342
- const keypairDest = new keyPair_1.KeyPair({
343
- pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
344
- });
345
- to = keypairDest.getAddress(utils_1.default.getAddressFormat(this._coinConfig.name));
346
- value = txMethod.value;
347
- from = decodedTx.address;
418
+ const addProxyMethod = txMethod.calls[1].callIndex;
419
+ const decodedAddProxyCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(addProxyMethod)));
420
+ if (decodedAddProxyCall.section !== iface_1.SectionNames.Proxy || decodedAddProxyCall.method !== iface_1.MethodNames.AddProxy) {
421
+ throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected second call to be addProxy.');
422
+ }
423
+ const stakeArgs = txMethod.calls[0].args;
424
+ const addProxyArgs = txMethod.calls[1].args;
425
+ const bondValue = `${stakeArgs.value}`;
426
+ const proxyAddress = iface_utils_1.getDelegateAddress(addProxyArgs);
427
+ this._inputs.push({
428
+ address: sender,
429
+ value: bondValue,
430
+ coin: this._coinConfig.name,
431
+ });
432
+ this._outputs.push({
433
+ address: exports.STAKING_DESTINATION,
434
+ value: bondValue,
435
+ coin: this._coinConfig.name,
436
+ });
437
+ const addProxyCost = this.getAddProxyCost().toString(10);
438
+ this._inputs.push({
439
+ address: sender,
440
+ value: addProxyCost,
441
+ coin: this._coinConfig.name,
442
+ });
443
+ this._outputs.push({
444
+ address: proxyAddress,
445
+ value: addProxyCost,
446
+ coin: this._coinConfig.name,
447
+ });
448
+ }
449
+ else if (utils_1.default.isUnstakingBatch(txMethod)) {
450
+ if (!txMethod.calls) {
451
+ throw new sdk_core_1.InvalidTransactionError('failed to decode calls from batch transaction');
452
+ }
453
+ const removeProxyMethod = txMethod.calls[0].callIndex;
454
+ const decodedRemoveProxyCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(removeProxyMethod)));
455
+ if (decodedRemoveProxyCall.section !== iface_1.SectionNames.Proxy ||
456
+ decodedRemoveProxyCall.method !== iface_1.MethodNames.RemoveProxy) {
457
+ throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected first call to be removeProxy.');
458
+ }
459
+ const chillMethod = txMethod.calls[1].callIndex;
460
+ const decodedChillCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(chillMethod)));
461
+ if (decodedChillCall.section !== iface_1.SectionNames.Staking || decodedChillCall.method !== iface_1.MethodNames.Chill) {
462
+ throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected second call to be chill.');
463
+ }
464
+ const unstakeMethod = txMethod.calls[2].callIndex;
465
+ const decodedUnstakeCall = this._registry.findMetaCall(sdk_core_1.toUint8Array(utils_1.default.stripHexPrefix(unstakeMethod)));
466
+ if (decodedUnstakeCall.section !== iface_1.SectionNames.Staking || decodedUnstakeCall.method !== iface_1.MethodNames.Unbond) {
467
+ throw new sdk_core_1.InvalidTransactionError('Invalid batch transaction, only staking batch calls are supported, expected third call to be unbond.');
468
+ }
469
+ const removeProxyArgs = txMethod.calls[0].args;
470
+ const proxyAddress = iface_utils_1.getDelegateAddress(removeProxyArgs);
471
+ const removeProxyCost = this.getRemoveProxyCost().toString(10);
472
+ this._inputs.push({
473
+ address: proxyAddress,
474
+ value: removeProxyCost,
475
+ coin: this._coinConfig.name,
476
+ });
477
+ this._outputs.push({
478
+ address: sender,
479
+ value: removeProxyCost,
480
+ coin: this._coinConfig.name,
481
+ });
482
+ }
483
+ }
484
+ getRemoveProxyCost() {
485
+ return this.getAddProxyCost();
486
+ }
487
+ getAddProxyCost() {
488
+ const proxyPallet = this._registry.metadata.pallets.find((p) => p.name.toString().toLowerCase() === iface_1.SectionNames.Proxy);
489
+ if (proxyPallet) {
490
+ const proxyDepositBase = this.getConstant('ProxyDepositBase', proxyPallet.constants);
491
+ const proxyDepositFactor = this.getConstant('ProxyDepositFactor', proxyPallet.constants);
492
+ return proxyDepositBase.plus(proxyDepositFactor);
493
+ }
494
+ else {
495
+ const palletNames = this._registry.metadata.pallets.map((p) => p.name.toString().toLowerCase());
496
+ throw new Error(`Could not find ${iface_1.SectionNames.Proxy} pallet in [${palletNames}]`);
497
+ }
498
+ }
499
+ getConstant(name, constants) {
500
+ const constant = constants.find((c) => c.name.toString() === name);
501
+ if (constant === undefined) {
502
+ const constantNames = constants.map((p) => p.name.toString());
503
+ throw new Error(`Could not find constant ${name} in [${constantNames}]`);
504
+ }
505
+ else {
506
+ // Convert from Little-Endian to Big-Endian
507
+ const valueBe = Buffer.from(constant.value.toU8a(true).reverse()).toString('hex');
508
+ return bignumber_js_1.default(valueBe, 16);
509
+ }
510
+ }
511
+ decodeInputsAndOutputsForBond(decodedTx) {
512
+ const sender = decodedTx.address;
513
+ this._inputs = [];
514
+ this._outputs = [];
515
+ const txMethod = decodedTx.method.args;
516
+ if (decodedTx.method.pallet === iface_1.SectionNames.Staking) {
517
+ let bondValue = '0';
518
+ if (decodedTx.method.name === iface_1.MethodNames.Bond && utils_1.default.isBond(txMethod)) {
519
+ bondValue = txMethod.value;
520
+ }
521
+ else if (decodedTx.method.name === iface_1.MethodNames.BondExtra && utils_1.default.isBondExtra(txMethod)) {
522
+ bondValue = txMethod.maxAdditional;
348
523
  }
349
524
  else {
350
- throw new sdk_core_1.ParseTransactionError(`Loading inputs of unknown Transfer type parameters`);
525
+ throw new sdk_core_1.ParseTransactionError(`Loading inputs of unknown StakingActivate type parameters`);
351
526
  }
352
- this._outputs = [
353
- {
354
- address: to,
355
- value,
356
- coin: this._coinConfig.name,
357
- },
358
- ];
359
- this._inputs = [
360
- {
361
- address: from,
362
- value,
363
- coin: this._coinConfig.name,
364
- },
365
- ];
527
+ this._inputs.push({
528
+ address: sender,
529
+ value: bondValue,
530
+ coin: this._coinConfig.name,
531
+ });
532
+ this._outputs.push({
533
+ address: exports.STAKING_DESTINATION,
534
+ value: bondValue,
535
+ coin: this._coinConfig.name,
536
+ });
366
537
  }
367
538
  }
539
+ decodeInputsAndOutputsForUnbond(decodedTx) {
540
+ this._inputs = [];
541
+ this._outputs = [];
542
+ }
543
+ decodeInputsAndOutputsForWithdrawUnbond(decodedTx) {
544
+ this._inputs = [];
545
+ this._outputs = [];
546
+ }
368
547
  /**
369
548
  * Constructs a signed payload using construct.signTx
370
549
  * This method will be called during the build step if a TSS signature
@@ -407,4 +586,5 @@ class Transaction extends sdk_core_1.BaseTransaction {
407
586
  }
408
587
  }
409
588
  exports.Transaction = Transaction;
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFTOEI7QUFFOUIsNkRBQTJEO0FBQzNELHlDQUE2QztBQUM3QyxzRUFBa0U7QUFHbEUsdUNBQW9DO0FBZXBDLG9EQUE0QjtBQUU1QixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQU85QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBVztRQUN0QixNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLENBQUMsT0FBZ0I7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDZCQUE2QixDQUFDLENBQUM7U0FDbEU7UUFDRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLHVCQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMvQztRQUNELE1BQU0sY0FBYyxHQUFHLDhCQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLEVB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QUMsZUFBZ0M7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBM1pELGtDQTJaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRG90QXNzZXRUeXBlcyxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgS2V5cmluZywgeyBkZWNvZGVBZGRyZXNzIH0gZnJvbSAnQHBvbGthZG90L2tleXJpbmcnO1xuaW1wb3J0IHsgdThhVG9CdWZmZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjb25zdHJ1Y3QsIGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IFR5cGVSZWdpc3RyeSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUvbGliL3R5cGVzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgQWRkQW5vbnltb3VzUHJveHlBcmdzLFxuICBBZGRQcm94eUFyZ3MsXG4gIEJhdGNoQXJncyxcbiAgQ2xhaW1BcmdzLFxuICBEZWNvZGVkVHgsXG4gIEhleFN0cmluZyxcbiAgU3Rha2VBcmdzLFxuICBTdGFrZUFyZ3NQYXllZVJhdyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHhEYXRhLFxuICBVbnN0YWtlQXJncyxcbiAgV2l0aGRyYXdVbnN0YWtlZEFyZ3MsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2RvdFRyYW5zYWN0aW9uOiBVbnNpZ25lZFRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF9zaWduZWRUcmFuc2FjdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVnaXN0cnk6IFR5cGVSZWdpc3RyeTtcbiAgcHJpdmF0ZSBfY2hhaW5OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NlbmRlcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbih7IGtleSB9OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIGNvbnN0IGFkZHIgPSBrcC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICByZXR1cm4gYWRkciA9PT0gdGhpcy5fc2VuZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBwb2xrYWRvdCB0cmFuc2FjdGlvbiBhbmQgdXBkYXRlIHRoZSB0cmFuc2FjdGlvbiBoZXhcbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIC0gZWQgc2lnbmF0dXJlXG4gICAqL1xuICBzaWduKGtleVBhaXI6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RvdFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ05vIHRyYW5zYWN0aW9uIGRhdGEgdG8gc2lnbicpO1xuICAgIH1cbiAgICBjb25zdCB7IHBydiwgcHViIH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBjb25zdCBzaWduaW5nUGF5bG9hZCA9IGNvbnN0cnVjdC5zaWduaW5nUGF5bG9hZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgIH0pO1xuICAgIC8vIFNpZ24gYSBwYXlsb2FkLiBUaGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIGFuIG9mZmxpbmUgZGV2aWNlLlxuICAgIGNvbnN0IGtleXJpbmcgPSBuZXcgS2V5cmluZyh7IHR5cGU6ICdlZDI1NTE5JyB9KTtcbiAgICBjb25zdCBzZWNyZXRLZXkgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShwcnYsICdoZXgnKSk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuICAgIGNvbnN0IHNpZ25pbmdLZXlQYWlyID0ga2V5cmluZy5hZGRGcm9tUGFpcih7IHNlY3JldEtleSwgcHVibGljS2V5IH0pO1xuICAgIGNvbnN0IHR4SGV4ID0gdXRpbHMuY3JlYXRlU2lnbmVkVHgoc2lnbmluZ0tleVBhaXIsIHNpZ25pbmdQYXlsb2FkLCB0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgIH0pO1xuXG4gICAgLy8gZ2V0IHNpZ25hdHVyZSBmcm9tIHNpZ25lZCB0eEhleCBnZW5lcmF0ZWQgYWJvdmVcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW3V0aWxzLnJlY292ZXJTaWduYXR1cmVGcm9tUmF3VHgodHhIZXgsIHsgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5IH0pXTtcbiAgICB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiA9IHR4SGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIHNpZ25hdHVyZSB0byB0aGUgRE9UIFRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmVcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uID0gdXRpbHMuc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICB0aGlzLl9kb3RUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25hdHVyZSxcbiAgICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgdGhpcy5fcmVnaXN0cnlcbiAgICApO1xuICB9XG5cbiAgcmVnaXN0cnkocmVnaXN0cnk6IFR5cGVSZWdpc3RyeSk6IHZvaWQge1xuICAgIHRoaXMuX3JlZ2lzdHJ5ID0gcmVnaXN0cnk7XG4gIH1cblxuICBjaGFpbk5hbWUoY2hhaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFpbk5hbWUgPSBjaGFpbk5hbWU7XG4gIH1cblxuICBzZW5kZXIoc2VuZGVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zZW5kZXIgPSBzZW5kZXI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2RvdFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiAmJiB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3Quc2lnbmluZ1BheWxvYWQodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNhY3Rpb25TaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9Ccm9hZGNhc3RGb3JtYXQoKS5sZW5ndGggLyAyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGlmICghdGhpcy5fZG90VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFR4ID0gZGVjb2RlKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICBpc0ltbW9ydGFsRXJhOiB1dGlscy5pc1plcm9IZXgodGhpcy5fZG90VHJhbnNhY3Rpb24uZXJhKSxcbiAgICB9KSBhcyB1bmtub3duIGFzIERlY29kZWRUeDtcblxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IGNvbnN0cnVjdC50eEhhc2godGhpcy50b0Jyb2FkY2FzdEZvcm1hdCgpKSxcbiAgICAgIHNlbmRlcjogZGVjb2RlZFR4LmFkZHJlc3MsXG4gICAgICByZWZlcmVuY2VCbG9jazogZGVjb2RlZFR4LmJsb2NrSGFzaCxcbiAgICAgIGJsb2NrTnVtYmVyOiBkZWNvZGVkVHguYmxvY2tOdW1iZXIsXG4gICAgICBnZW5lc2lzSGFzaDogZGVjb2RlZFR4LmdlbmVzaXNIYXNoLFxuICAgICAgbm9uY2U6IGRlY29kZWRUeC5ub25jZSxcbiAgICAgIHNwZWNWZXJzaW9uOiBkZWNvZGVkVHguc3BlY1ZlcnNpb24sXG4gICAgICB0cmFuc2FjdGlvblZlcnNpb246IGRlY29kZWRUeC50cmFuc2FjdGlvblZlcnNpb24sXG4gICAgICBlcmFQZXJpb2Q6IGRlY29kZWRUeC5lcmFQZXJpb2QsXG4gICAgICBjaGFpbk5hbWU6IHRoaXMuX2NoYWluTmFtZSxcbiAgICAgIHRpcDogZGVjb2RlZFR4LnRpcCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgICAgaWYgKHV0aWxzLmlzUHJveHlUcmFuc2Zlcih0eE1ldGhvZCkpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpclJlYWwgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLnJlYWwpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub3duZXIgPSBrZXlwYWlyUmVhbC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgcmVzdWx0LmZvcmNlUHJveHlUeXBlID0gdHhNZXRob2QuZm9yY2VQcm94eVR5cGU7XG4gICAgICAgIGNvbnN0IGRlY29kZWRDYWxsID0gdXRpbHMuZGVjb2RlQ2FsbE1ldGhvZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoZGVjb2RlZENhbGwuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC50byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gZGVjb2RlZENhbGwudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVHJhbnNmZXIodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNUcmFuc2ZlckFsbCh0eE1ldGhvZCkpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQudG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoYFNlcmlhbGl6aW5nIHVua25vd24gVHJhbnNmZXIgdHlwZSBwYXJhbWV0ZXJzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgU3Rha2VBcmdzO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmNvbnRyb2xsZXIuaWQsIGZhbHNlLCB0aGlzLl9yZWdpc3RyeS5jaGFpblNTNTgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LmNvbnRyb2xsZXIgPSBrZXlwYWlyLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgcmVzdWx0LmFtb3VudCA9IHR4TWV0aG9kLnZhbHVlO1xuXG4gICAgICBjb25zdCBwYXllZSA9IHR4TWV0aG9kLnBheWVlIGFzIFN0YWtlQXJnc1BheWVlUmF3O1xuICAgICAgaWYgKHBheWVlLmFjY291bnQpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MocGF5ZWUuYWNjb3VudCwgZmFsc2UsIHRoaXMuX3JlZ2lzdHJ5LmNoYWluU1M1OCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5wYXllZSA9IGtleXBhaXIuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXllZVR5cGUgPSB1dGlscy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIoT2JqZWN0LmtleXMocGF5ZWUpWzBdKSBhcyBzdHJpbmc7XG4gICAgICAgIHJlc3VsdC5wYXllZSA9IHBheWVlVHlwZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKSB7XG4gICAgICBsZXQgdHhNZXRob2Q6IEFkZEFub255bW91c1Byb3h5QXJncyB8IEFkZFByb3h5QXJncztcbiAgICAgIGlmICgoZGVjb2RlZFR4Lm1ldGhvZD8uYXJncyBhcyBBZGRQcm94eUFyZ3MpLmRlbGVnYXRlKSB7XG4gICAgICAgIHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIEFkZFByb3h5QXJncztcbiAgICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QuZGVsZWdhdGUsIGZhbHNlLCB0aGlzLl9yZWdpc3RyeS5jaGFpblNTNTgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub3duZXIgPSBrZXlwYWlyLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQWRkQW5vbnltb3VzUHJveHlBcmdzO1xuICAgICAgICByZXN1bHQuaW5kZXggPSB0eE1ldGhvZC5pbmRleDtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5tZXRob2QgPSB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRob2Q7XG4gICAgICByZXN1bHQucHJveHlUeXBlID0gdHhNZXRob2QucHJveHlUeXBlO1xuICAgICAgcmVzdWx0LmRlbGF5ID0gdHhNZXRob2QuZGVsYXk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2spIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIFVuc3Rha2VBcmdzO1xuICAgICAgcmVzdWx0LmFtb3VudCA9IHR4TWV0aG9kLnZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIFdpdGhkcmF3VW5zdGFrZWRBcmdzO1xuICAgICAgcmVzdWx0Lm51bVNsYXNoaW5nU3BhbnMgPSB0eE1ldGhvZC5udW1TbGFzaGluZ1NwYW5zO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0pIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIENsYWltQXJncztcbiAgICAgIHJlc3VsdC52YWxpZGF0b3JTdGFzaCA9IHR4TWV0aG9kLnZhbGlkYXRvclN0YXNoO1xuICAgICAgcmVzdWx0LmNsYWltRXJhID0gdHhNZXRob2QuZXJhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5CYXRjaCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQmF0Y2hBcmdzO1xuICAgICAgcmVzdWx0LmJhdGNoQ2FsbHMgPSB0eE1ldGhvZC5jYWxscztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZXhwbGFpblRyYW5zZmVyVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGV4cGxhbmF0aW9uUmVzdWx0LmRpc3BsYXlPcmRlci5wdXNoKCdvd25lcicsICdmb3JjZVByb3h5VHlwZScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGpzb24udG8/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgYW1vdW50OiBqc29uLmFtb3VudD8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvd25lcjoganNvbi5vd25lcixcbiAgICAgIGZvcmNlUHJveHlUeXBlOiBqc29uLmZvcmNlUHJveHlUeXBlLFxuICAgIH07XG4gIH1cblxuICBleHBsYWluU3Rha2luZ0FjdGl2YXRlVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGV4cGxhbmF0aW9uUmVzdWx0LmRpc3BsYXlPcmRlci5wdXNoKCdwYXllZScsICdmb3JjZVByb3h5VHlwZScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGpzb24uY29udHJvbGxlcj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBhbW91bnQ6IGpzb24uYW1vdW50IHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBheWVlOiBqc29uLnBheWVlLFxuICAgICAgZm9yY2VQcm94eVR5cGU6IGpzb24uZm9yY2VQcm94eVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5BZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbihcbiAgICBqc29uOiBUeERhdGEsXG4gICAgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgZXhwbGFuYXRpb25SZXN1bHQuZGlzcGxheU9yZGVyLnB1c2goJ293bmVyJywgJ3Byb3h5VHlwZScsICdkZWxheScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG93bmVyOiBqc29uLm93bmVyLFxuICAgICAgcHJveHlUeXBlOiBqc29uLnByb3h5VHlwZSxcbiAgICAgIGRlbGF5OiBqc29uLmRlbGF5LFxuICAgIH07XG4gIH1cblxuICBleHBsYWluU3Rha2luZ1VubG9ja1RyYW5zYWN0aW9uKGpzb246IFR4RGF0YSwgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBqc29uLnNlbmRlci50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDoganNvbi5hbW91bnQgfHwgJycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIC8vIHR4aGFzaCB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0cmFuc2FjdGlvbnNcbiAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBvdXRwdXRBbW91bnQ6IHJlc3VsdC5hbW91bnQ/LnRvU3RyaW5nKCkgfHwgJzAnLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIG91dHB1dHMsXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiByZXN1bHQudGlwPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICB0eXBlOiAndGlwJyxcbiAgICAgIH0sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zZmVyVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5TdGFraW5nQWN0aXZhdGVUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpbkFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblN0YWtpbmdVbmxvY2tUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgIGlzSW1tb3J0YWxFcmE6IHV0aWxzLmlzWmVyb0hleCh0aGlzLl9kb3RUcmFuc2FjdGlvbi5lcmEpLFxuICAgIH0pIGFzIHVua25vd24gYXMgRGVjb2RlZFR4O1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgICAgbGV0IHRvOiBzdHJpbmc7XG4gICAgICBsZXQgdmFsdWU6IHN0cmluZztcbiAgICAgIGxldCBmcm9tOiBzdHJpbmc7XG4gICAgICBpZiAodXRpbHMuaXNQcm94eVRyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHV0aWxzLmRlY29kZUNhbGxNZXRob2QodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKGRlY29kZWRDYWxsLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlwYWlyRnJvbSA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QucmVhbCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHZhbHVlID0gYCR7ZGVjb2RlZENhbGwudmFsdWV9YDtcbiAgICAgICAgZnJvbSA9IGtleXBhaXJGcm9tLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyQWxsKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHZhbHVlID0gJ3N3ZWVwJztcbiAgICAgICAgZnJvbSA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHZhbHVlID0gdHhNZXRob2QudmFsdWU7XG4gICAgICAgIGZyb20gPSBkZWNvZGVkVHguYWRkcmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoYExvYWRpbmcgaW5wdXRzIG9mIHVua25vd24gVHJhbnNmZXIgdHlwZSBwYXJhbWV0ZXJzYCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vdXRwdXRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogdG8sXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgdGhpcy5faW5wdXRzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogZnJvbSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc2lnbmVkIHBheWxvYWQgdXNpbmcgY29uc3RydWN0LnNpZ25UeFxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHN0ZXAgaWYgYSBUU1Mgc2lnbmF0dXJlXG4gICAqIGlzIGFkZGVkIGFuZCB3aWxsIHNldCB0aGUgc2lnblRyYW5zYWN0aW9uIHdoaWNoIGlzIHRoZSB0eEhleCB0aGF0IHdpbGwgYmUgYnJvYWRjYXN0ZWRcbiAgICogQXMgd2VsbCBhcyBhZGQgdGhlIHNpZ25hdHVyZSB1c2VkIHRvIHNpZ24gdG8gdGhlIHNpZ25hdHVyZSBhcnJheSBpbiBoZXggZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSB0byBiZSBhZGRlZCB0byBhIGRvdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgY29uc3RydWN0U2lnbmVkUGF5bG9hZChzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIC8vIDB4MDAgbWVhbnMgaXRzIGFuIEVEMjU1MTkgc2lnbmF0dXJlXG4gICAgY29uc3QgZWRTaWduYXR1cmUgPSBgMHgwMCR7c2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKX1gIGFzIEhleFN0cmluZztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiA9IGNvbnN0cnVjdC5zaWduZWRUeCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwgZWRTaWduYXR1cmUsIHtcbiAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKGBVbmFibGUgdG8gc2lnbiBkb3QgdHJhbnNhY3Rpb24gd2l0aCBzaWduYXR1cmUgJHtlZFNpZ25hdHVyZX0gYCArIGUpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKV07XG4gIH1cblxuICBzZXRUcmFuc2FjdGlvbih0eDogVW5zaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKiovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBjb25zdCBleHRyaW5zaWNQYXlsb2FkID0gdGhpcy5fcmVnaXN0cnkuY3JlYXRlVHlwZSgnRXh0cmluc2ljUGF5bG9hZCcsIHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi52ZXJzaW9uLFxuICAgIH0pO1xuICAgIHJldHVybiB1OGFUb0J1ZmZlcihleHRyaW5zaWNQYXlsb2FkLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxufVxuIl19
589
+ Transaction.FAKE_SIGNATURE = `0x${Buffer.from(new Uint8Array(256).fill(1)).toString('hex')}`;
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFVOEI7QUFFOUIsNkRBQTBFO0FBQzFFLHlDQUE2QztBQUM3QyxzRUFBa0U7QUFHbEUsdUNBQW9DO0FBQ3BDLG1DQWlCaUI7QUFDakIsK0NBQStEO0FBQy9ELG9EQUE0QjtBQUM1QixnRUFBcUM7QUFJckM7OztHQUdHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRyx1QkFBYSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7QUFFdkgsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFTOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsRUFBRSxHQUFHLEVBQVc7UUFDdEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLE9BQWdCO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2xFO1FBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNS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QUFlLENBQUMsV0FBVzthQUM5QyxDQUFDLENBQUM7U0FDSjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLHVCQUFZLENBQUMsaURBQWlELFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdGO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQXVCO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxlQUFlO1FBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMzRixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPO1NBQ3RDLENBQUMsQ0FBQztRQUNILE9BQU8sa0JBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGVBQWdDO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO0lBQy9CLENBQUM7O0FBbG1CSCxrQ0FtbUJDO0FBNWxCZ0IsMEJBQWMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIERvdEFzc2V0VHlwZXMsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFNpZ25pbmdFcnJvcixcbiAgdG9VaW50OEFycmF5LFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgS2V5cmluZywgeyBkZWNvZGVBZGRyZXNzLCBlbmNvZGVBZGRyZXNzIH0gZnJvbSAnQHBvbGthZG90L2tleXJpbmcnO1xuaW1wb3J0IHsgdThhVG9CdWZmZXIgfSBmcm9tICdAcG9sa2Fkb3QvdXRpbCc7XG5pbXBvcnQgeyBjb25zdHJ1Y3QsIGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IFR5cGVSZWdpc3RyeSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUvbGliL3R5cGVzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgQWRkQW5vbnltb3VzUHJveHlBcmdzLFxuICBBZGRQcm94eUFyZ3MsXG4gIEFkZFByb3h5QmF0Y2hDYWxsQXJncyxcbiAgQmF0Y2hBcmdzLFxuICBCYXRjaENhbGxPYmplY3QsXG4gIENsYWltQXJncyxcbiAgRGVjb2RlZFR4LFxuICBIZXhTdHJpbmcsXG4gIE1ldGhvZE5hbWVzLFxuICBTZWN0aW9uTmFtZXMsXG4gIFN0YWtlQXJnc1BheWVlUmF3LFxuICBTdGFrZUJhdGNoQ2FsbEFyZ3MsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFR4RGF0YSxcbiAgVW5zdGFrZUFyZ3MsXG4gIFdpdGhkcmF3VW5zdGFrZWRBcmdzLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGdldEFkZHJlc3MsIGdldERlbGVnYXRlQWRkcmVzcyB9IGZyb20gJy4vaWZhY2VfdXRpbHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVmVjIH0gZnJvbSAnQHBvbGthZG90L3R5cGVzJztcbmltcG9ydCB7IFBhbGxldENvbnN0YW50TWV0YWRhdGFWMTQgfSBmcm9tICdAcG9sa2Fkb3QvdHlwZXMvaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogVXNlIGEgZHVtbXkgYWRkcmVzcyBhcyB0aGUgZGVzdGluYXRpb24gb2YgYSBib25kIG9yIGJvbmRFeHRyYSBiZWNhdXNlIG91ciBpbnB1dHMgYW5kIG91dHB1dHMgbW9kZWxcbiAqIGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgdGhlIGNvbmNlcHQgb2YgbG9ja2luZyBmdW5kcyB3aXRoaW4gYSB3YWxsZXQgYXMgYSBtZXRob2Qgb2YgdHJhbnNmZXJyaW5nIGNvaW5zLlxuICovXG5leHBvcnQgY29uc3QgU1RBS0lOR19ERVNUSU5BVElPTiA9IGVuY29kZUFkZHJlc3MoJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2RvdFRyYW5zYWN0aW9uOiBVbnNpZ25lZFRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF9zaWduZWRUcmFuc2FjdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVnaXN0cnk6IFR5cGVSZWdpc3RyeTtcbiAgcHJpdmF0ZSBfY2hhaW5OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3NlbmRlcjogc3RyaW5nO1xuXG4gIHByaXZhdGUgc3RhdGljIEZBS0VfU0lHTkFUVVJFID0gYDB4JHtCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSgyNTYpLmZpbGwoMSkpLnRvU3RyaW5nKCdoZXgnKX1gO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbih7IGtleSB9OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIGNvbnN0IGFkZHIgPSBrcC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICByZXR1cm4gYWRkciA9PT0gdGhpcy5fc2VuZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBwb2xrYWRvdCB0cmFuc2FjdGlvbiBhbmQgdXBkYXRlIHRoZSB0cmFuc2FjdGlvbiBoZXhcbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIC0gZWQgc2lnbmF0dXJlXG4gICAqL1xuICBzaWduKGtleVBhaXI6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2RvdFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ05vIHRyYW5zYWN0aW9uIGRhdGEgdG8gc2lnbicpO1xuICAgIH1cbiAgICBjb25zdCB7IHBydiwgcHViIH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBjb25zdCBzaWduaW5nUGF5bG9hZCA9IGNvbnN0cnVjdC5zaWduaW5nUGF5bG9hZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgIH0pO1xuICAgIC8vIFNpZ24gYSBwYXlsb2FkLiBUaGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIG9uIGFuIG9mZmxpbmUgZGV2aWNlLlxuICAgIGNvbnN0IGtleXJpbmcgPSBuZXcgS2V5cmluZyh7IHR5cGU6ICdlZDI1NTE5JyB9KTtcbiAgICBjb25zdCBzZWNyZXRLZXkgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShwcnYsICdoZXgnKSk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuICAgIGNvbnN0IHNpZ25pbmdLZXlQYWlyID0ga2V5cmluZy5hZGRGcm9tUGFpcih7IHNlY3JldEtleSwgcHVibGljS2V5IH0pO1xuICAgIGNvbnN0IHR4SGV4ID0gdXRpbHMuY3JlYXRlU2lnbmVkVHgoc2lnbmluZ0tleVBhaXIsIHNpZ25pbmdQYXlsb2FkLCB0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgIH0pO1xuXG4gICAgLy8gZ2V0IHNpZ25hdHVyZSBmcm9tIHNpZ25lZCB0eEhleCBnZW5lcmF0ZWQgYWJvdmVcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW3V0aWxzLnJlY292ZXJTaWduYXR1cmVGcm9tUmF3VHgodHhIZXgsIHsgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5IH0pXTtcbiAgICB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiA9IHR4SGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIHNpZ25hdHVyZSB0byB0aGUgRE9UIFRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmVcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uID0gdXRpbHMuc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oXG4gICAgICB0aGlzLl9kb3RUcmFuc2FjdGlvbixcbiAgICAgIHNpZ25hdHVyZSxcbiAgICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgdGhpcy5fcmVnaXN0cnlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdHJhbnNhY3Rpb24gd2l0aCBhIGZha2Ugc2lnbmF0dXJlIGF0dGFjaGVkIHdoaWNoXG4gICAqIGNhbiBiZSB1c2VkIHRvIGVzdGltYXRlIHRyYW5zYWN0aW9uIGZlZXMuXG4gICAqL1xuICBmYWtlU2lnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dGlscy5zZXJpYWxpemVTaWduZWRUcmFuc2FjdGlvbihcbiAgICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uLFxuICAgICAgVHJhbnNhY3Rpb24uRkFLRV9TSUdOQVRVUkUsXG4gICAgICB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5XG4gICAgKTtcbiAgfVxuXG4gIHJlZ2lzdHJ5KHJlZ2lzdHJ5OiBUeXBlUmVnaXN0cnkpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICB9XG5cbiAgY2hhaW5OYW1lKGNoYWluTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhaW5OYW1lID0gY2hhaW5OYW1lO1xuICB9XG5cbiAgc2VuZGVyKHNlbmRlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc2VuZGVyID0gc2VuZGVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc2lnbmVkVHJhbnNhY3Rpb24gJiYgdGhpcy5fc2lnbmVkVHJhbnNhY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0LnNpZ25pbmdQYXlsb2FkKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zYWN0aW9uU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvQnJvYWRjYXN0Rm9ybWF0KCkubGVuZ3RoIC8gMjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX2RvdFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZWRUeCA9IGRlY29kZSh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgaXNJbW1vcnRhbEVyYTogdXRpbHMuaXNaZXJvSGV4KHRoaXMuX2RvdFRyYW5zYWN0aW9uLmVyYSksXG4gICAgfSkgYXMgdW5rbm93biBhcyBEZWNvZGVkVHg7XG5cbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiBjb25zdHJ1Y3QudHhIYXNoKHRoaXMudG9Ccm9hZGNhc3RGb3JtYXQoKSksXG4gICAgICBzZW5kZXI6IGRlY29kZWRUeC5hZGRyZXNzLFxuICAgICAgcmVmZXJlbmNlQmxvY2s6IGRlY29kZWRUeC5ibG9ja0hhc2gsXG4gICAgICBibG9ja051bWJlcjogZGVjb2RlZFR4LmJsb2NrTnVtYmVyLFxuICAgICAgZ2VuZXNpc0hhc2g6IGRlY29kZWRUeC5nZW5lc2lzSGFzaCxcbiAgICAgIG5vbmNlOiBkZWNvZGVkVHgubm9uY2UsXG4gICAgICBzcGVjVmVyc2lvbjogZGVjb2RlZFR4LnNwZWNWZXJzaW9uLFxuICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiBkZWNvZGVkVHgudHJhbnNhY3Rpb25WZXJzaW9uLFxuICAgICAgZXJhUGVyaW9kOiBkZWNvZGVkVHguZXJhUGVyaW9kLFxuICAgICAgY2hhaW5OYW1lOiB0aGlzLl9jaGFpbk5hbWUsXG4gICAgICB0aXA6IGRlY29kZWRUeC50aXAsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncztcbiAgICAgIGlmICh1dGlscy5pc1Byb3h5VHJhbnNmZXIodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXJSZWFsID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyhnZXRBZGRyZXNzKHR4TWV0aG9kKSkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5vd25lciA9IGtleXBhaXJSZWFsLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICByZXN1bHQuZm9yY2VQcm94eVR5cGUgPSB0eE1ldGhvZC5mb3JjZVByb3h5VHlwZTtcbiAgICAgICAgY29uc3QgZGVjb2RlZENhbGwgPSB1dGlscy5kZWNvZGVDYWxsTWV0aG9kKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX2RvdFRyYW5zYWN0aW9uLm1ldGFkYXRhUnBjLFxuICAgICAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyhkZWNvZGVkQ2FsbC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSBkZWNvZGVkQ2FsbC52YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNUcmFuc2Zlcih0eE1ldGhvZCkpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQudG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgcmVzdWx0LmFtb3VudCA9IHR4TWV0aG9kLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyQWxsKHR4TWV0aG9kKSkge1xuICAgICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QuZGVzdC5pZCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC50byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICByZXN1bHQua2VlcEFsaXZlID0gdHhNZXRob2Qua2VlcEFsaXZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgU2VyaWFsaXppbmcgdW5rbm93biBUcmFuc2ZlciB0eXBlIHBhcmFtZXRlcnNgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeC5tZXRob2QuYXJncztcbiAgICAgIGlmICh1dGlscy5pc0JvbmQodHhNZXRob2QpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHRoaXMuX3NlbmRlciwgZmFsc2UsIHRoaXMuX3JlZ2lzdHJ5LmNoYWluU1M1OCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0LmNvbnRyb2xsZXIgPSBrZXlwYWlyLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gdHhNZXRob2QudmFsdWU7XG5cbiAgICAgICAgY29uc3QgcGF5ZWUgPSB0eE1ldGhvZC5wYXllZSBhcyBTdGFrZUFyZ3NQYXllZVJhdztcbiAgICAgICAgaWYgKHBheWVlLmFjY291bnQpIHtcbiAgICAgICAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHBheWVlLmFjY291bnQsIGZhbHNlLCB0aGlzLl9yZWdpc3RyeS5jaGFpblNTNTgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzdWx0LnBheWVlID0ga2V5cGFpci5nZXRBZGRyZXNzKHV0aWxzLmdldEFkZHJlc3NGb3JtYXQodGhpcy5fY29pbkNvbmZpZy5uYW1lIGFzIERvdEFzc2V0VHlwZXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwYXllZVR5cGUgPSB1dGlscy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIoT2JqZWN0LmtleXMocGF5ZWUpWzBdKSBhcyBzdHJpbmc7XG4gICAgICAgICAgcmVzdWx0LnBheWVlID0gcGF5ZWVUeXBlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQm9uZEV4dHJhKGRlY29kZWRUeC5tZXRob2QuYXJncykpIHtcbiAgICAgICAgcmVzdWx0LmFtb3VudCA9IGRlY29kZWRUeC5tZXRob2QuYXJncy5tYXhBZGRpdGlvbmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pIHtcbiAgICAgIGxldCB0eE1ldGhvZDogQWRkQW5vbnltb3VzUHJveHlBcmdzIHwgQWRkUHJveHlBcmdzO1xuICAgICAgaWYgKChkZWNvZGVkVHgubWV0aG9kPy5hcmdzIGFzIEFkZFByb3h5QXJncykuZGVsZWdhdGUpIHtcbiAgICAgICAgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQWRkUHJveHlBcmdzO1xuICAgICAgICBjb25zdCBkZWxlZ2F0ZUFkZHJlc3MgPSBnZXREZWxlZ2F0ZUFkZHJlc3ModHhNZXRob2QpO1xuICAgICAgICBjb25zdCBkZWNvZGVkQWRkcmVzcyA9IGRlY29kZUFkZHJlc3MoZGVsZWdhdGVBZGRyZXNzLCBmYWxzZSwgdGhpcy5fcmVnaXN0cnkuY2hhaW5TUzU4KTtcbiAgICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVkQWRkcmVzcykudG9TdHJpbmcoJ2hleCcpIH0pO1xuICAgICAgICByZXN1bHQub3duZXIgPSBrZXlwYWlyLmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQWRkQW5vbnltb3VzUHJveHlBcmdzO1xuICAgICAgICByZXN1bHQuaW5kZXggPSB0eE1ldGhvZC5pbmRleDtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5tZXRob2QgPSB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRob2Q7XG4gICAgICByZXN1bHQucHJveHlUeXBlID0gdHhNZXRob2QucHJveHlUeXBlO1xuICAgICAgcmVzdWx0LmRlbGF5ID0gdHhNZXRob2QuZGVsYXk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2spIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIFVuc3Rha2VBcmdzO1xuICAgICAgcmVzdWx0LmFtb3VudCA9IHR4TWV0aG9kLnZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIFdpdGhkcmF3VW5zdGFrZWRBcmdzO1xuICAgICAgcmVzdWx0Lm51bVNsYXNoaW5nU3BhbnMgPSB0eE1ldGhvZC5udW1TbGFzaGluZ1NwYW5zO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0pIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzIGFzIENsYWltQXJncztcbiAgICAgIHJlc3VsdC52YWxpZGF0b3JTdGFzaCA9IHR4TWV0aG9kLnZhbGlkYXRvclN0YXNoO1xuICAgICAgcmVzdWx0LmNsYWltRXJhID0gdHhNZXRob2QuZXJhO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5CYXRjaCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQmF0Y2hBcmdzO1xuICAgICAgcmVzdWx0LmJhdGNoQ2FsbHMgPSB0eE1ldGhvZC5jYWxscztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZXhwbGFpblRyYW5zZmVyVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGV4cGxhbmF0aW9uUmVzdWx0LmRpc3BsYXlPcmRlci5wdXNoKCdvd25lcicsICdmb3JjZVByb3h5VHlwZScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGpzb24udG8/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgYW1vdW50OiBqc29uLmFtb3VudD8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvd25lcjoganNvbi5vd25lcixcbiAgICAgIGZvcmNlUHJveHlUeXBlOiBqc29uLmZvcmNlUHJveHlUeXBlLFxuICAgIH07XG4gIH1cblxuICBleHBsYWluU3Rha2luZ0FjdGl2YXRlVHJhbnNhY3Rpb24oanNvbjogVHhEYXRhLCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGV4cGxhbmF0aW9uUmVzdWx0LmRpc3BsYXlPcmRlci5wdXNoKCdwYXllZScsICdmb3JjZVByb3h5VHlwZScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGpzb24uY29udHJvbGxlcj8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBhbW91bnQ6IGpzb24uYW1vdW50IHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHBheWVlOiBqc29uLnBheWVlLFxuICAgICAgZm9yY2VQcm94eVR5cGU6IGpzb24uZm9yY2VQcm94eVR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIGV4cGxhaW5BZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbihcbiAgICBqc29uOiBUeERhdGEsXG4gICAgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgZXhwbGFuYXRpb25SZXN1bHQuZGlzcGxheU9yZGVyLnB1c2goJ293bmVyJywgJ3Byb3h5VHlwZScsICdkZWxheScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG93bmVyOiBqc29uLm93bmVyLFxuICAgICAgcHJveHlUeXBlOiBqc29uLnByb3h5VHlwZSxcbiAgICAgIGRlbGF5OiBqc29uLmRlbGF5LFxuICAgIH07XG4gIH1cblxuICBleHBsYWluU3Rha2luZ1VubG9ja1RyYW5zYWN0aW9uKGpzb246IFR4RGF0YSwgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBqc29uLnNlbmRlci50b1N0cmluZygpLFxuICAgICAgICAgIGFtb3VudDoganNvbi5hbW91bnQgfHwgJycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAndHlwZSddO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIC8vIHR4aGFzaCB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0cmFuc2FjdGlvbnNcbiAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBvdXRwdXRBbW91bnQ6IHJlc3VsdC5hbW91bnQ/LnRvU3RyaW5nKCkgfHwgJzAnLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIG91dHB1dHMsXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiByZXN1bHQudGlwPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICB0eXBlOiAndGlwJyxcbiAgICAgIH0sXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgfTtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblRyYW5zZmVyVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5TdGFraW5nQWN0aXZhdGVUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpbkFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpblN0YWtpbmdVbmxvY2tUcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgIGlzSW1tb3J0YWxFcmE6IHV0aWxzLmlzWmVyb0hleCh0aGlzLl9kb3RUcmFuc2FjdGlvbi5lcmEpLFxuICAgIH0pIGFzIHVua25vd24gYXMgRGVjb2RlZFR4O1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIHRoaXMuZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvclNlbmQoZGVjb2RlZFR4KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkJhdGNoKSB7XG4gICAgICB0aGlzLmRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JCYXRjaChkZWNvZGVkVHgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICB0aGlzLmRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JCb25kKGRlY29kZWRUeCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrKSB7XG4gICAgICB0aGlzLmRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JVbmJvbmQoZGVjb2RlZFR4KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdykge1xuICAgICAgdGhpcy5kZWNvZGVJbnB1dHNBbmRPdXRwdXRzRm9yV2l0aGRyYXdVbmJvbmQoZGVjb2RlZFR4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JTZW5kKGRlY29kZWRUeDogRGVjb2RlZFR4KSB7XG4gICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3M7XG4gICAgbGV0IHRvOiBzdHJpbmc7XG4gICAgbGV0IHZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGZyb206IHN0cmluZztcbiAgICBpZiAodXRpbHMuaXNQcm94eVRyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgY29uc3QgZGVjb2RlZENhbGwgPSB1dGlscy5kZWNvZGVDYWxsTWV0aG9kKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBrZXlwYWlyRGVzdCA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKGRlY29kZWRDYWxsLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGtleXBhaXJGcm9tID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3MoZ2V0QWRkcmVzcyh0eE1ldGhvZCkpKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KTtcbiAgICAgIHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgICB2YWx1ZSA9IGAke2RlY29kZWRDYWxsLnZhbHVlfWA7XG4gICAgICBmcm9tID0ga2V5cGFpckZyb20uZ2V0QWRkcmVzcyh1dGlscy5nZXRBZGRyZXNzRm9ybWF0KHRoaXMuX2NvaW5Db25maWcubmFtZSBhcyBEb3RBc3NldFR5cGVzKSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyQWxsKHR4TWV0aG9kKSkge1xuICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSk7XG4gICAgICB0byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgdmFsdWUgPSAnMCc7IC8vIERPVCB0cmFuc2ZlckFsbCdzIGRvIG5vdCBkZXNlcmlhbGl6ZSBhbW91bnRzXG4gICAgICBmcm9tID0gZGVjb2RlZFR4LmFkZHJlc3M7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1RyYW5zZmVyKHR4TWV0aG9kKSkge1xuICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSk7XG4gICAgICB0byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3ModXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcykpO1xuICAgICAgdmFsdWUgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgIGZyb20gPSBkZWNvZGVkVHguYWRkcmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgTG9hZGluZyBpbnB1dHMgb2YgdW5rbm93biBUcmFuc2ZlciB0eXBlIHBhcmFtZXRlcnNgKTtcbiAgICB9XG4gICAgdGhpcy5fb3V0cHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdG8sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IGZyb20sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JCYXRjaChkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIGNvbnN0IHNlbmRlciA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXTtcblxuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgIGlmICh1dGlscy5pc1N0YWtpbmdCYXRjaCh0eE1ldGhvZCkpIHtcbiAgICAgIGlmICghdHhNZXRob2QuY2FsbHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdmYWlsZWQgdG8gZGVjb2RlIGNhbGxzIGZyb20gYmF0Y2ggdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm9uZE1ldGhvZCA9ICh0eE1ldGhvZC5jYWxsc1swXSBhcyBCYXRjaENhbGxPYmplY3QpLmNhbGxJbmRleDtcbiAgICAgIGNvbnN0IGRlY29kZWRCb25kQ2FsbCA9IHRoaXMuX3JlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh0b1VpbnQ4QXJyYXkodXRpbHMuc3RyaXBIZXhQcmVmaXgoYm9uZE1ldGhvZCkpKTtcbiAgICAgIGlmIChkZWNvZGVkQm9uZENhbGwuc2VjdGlvbiAhPT0gU2VjdGlvbk5hbWVzLlN0YWtpbmcgfHwgZGVjb2RlZEJvbmRDYWxsLm1ldGhvZCAhPT0gTWV0aG9kTmFtZXMuQm9uZCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgYmF0Y2ggdHJhbnNhY3Rpb24sIG9ubHkgc3Rha2luZyBiYXRjaCBjYWxscyBhcmUgc3VwcG9ydGVkLCBleHBlY3RlZCBmaXJzdCBjYWxsIHRvIGJlIGJvbmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgYWRkUHJveHlNZXRob2QgPSAodHhNZXRob2QuY2FsbHNbMV0gYXMgQmF0Y2hDYWxsT2JqZWN0KS5jYWxsSW5kZXg7XG4gICAgICBjb25zdCBkZWNvZGVkQWRkUHJveHlDYWxsID0gdGhpcy5fcmVnaXN0cnkuZmluZE1ldGFDYWxsKHRvVWludDhBcnJheSh1dGlscy5zdHJpcEhleFByZWZpeChhZGRQcm94eU1ldGhvZCkpKTtcbiAgICAgIGlmIChkZWNvZGVkQWRkUHJveHlDYWxsLnNlY3Rpb24gIT09IFNlY3Rpb25OYW1lcy5Qcm94eSB8fCBkZWNvZGVkQWRkUHJveHlDYWxsLm1ldGhvZCAhPT0gTWV0aG9kTmFtZXMuQWRkUHJveHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdJbnZhbGlkIGJhdGNoIHRyYW5zYWN0aW9uLCBvbmx5IHN0YWtpbmcgYmF0Y2ggY2FsbHMgYXJlIHN1cHBvcnRlZCwgZXhwZWN0ZWQgc2Vjb25kIGNhbGwgdG8gYmUgYWRkUHJveHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFrZUFyZ3MgPSB0eE1ldGhvZC5jYWxsc1swXS5hcmdzIGFzIFN0YWtlQmF0Y2hDYWxsQXJncztcbiAgICAgIGNvbnN0IGFkZFByb3h5QXJncyA9IHR4TWV0aG9kLmNhbGxzWzFdLmFyZ3MgYXMgQWRkUHJveHlCYXRjaENhbGxBcmdzO1xuICAgICAgY29uc3QgYm9uZFZhbHVlID0gYCR7c3Rha2VBcmdzLnZhbHVlfWA7XG4gICAgICBjb25zdCBwcm94eUFkZHJlc3MgPSBnZXREZWxlZ2F0ZUFkZHJlc3MoYWRkUHJveHlBcmdzKTtcblxuICAgICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBzZW5kZXIsXG4gICAgICAgIHZhbHVlOiBib25kVmFsdWUsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogU1RBS0lOR19ERVNUSU5BVElPTixcbiAgICAgICAgdmFsdWU6IGJvbmRWYWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFByb3h5Q29zdCA9IHRoaXMuZ2V0QWRkUHJveHlDb3N0KCkudG9TdHJpbmcoMTApO1xuICAgICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBzZW5kZXIsXG4gICAgICAgIHZhbHVlOiBhZGRQcm94eUNvc3QsXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogcHJveHlBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogYWRkUHJveHlDb3N0LFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzVW5zdGFraW5nQmF0Y2godHhNZXRob2QpKSB7XG4gICAgICBpZiAoIXR4TWV0aG9kLmNhbGxzKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZmFpbGVkIHRvIGRlY29kZSBjYWxscyBmcm9tIGJhdGNoIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbW92ZVByb3h5TWV0aG9kID0gKHR4TWV0aG9kLmNhbGxzWzBdIGFzIEJhdGNoQ2FsbE9iamVjdCkuY2FsbEluZGV4O1xuICAgICAgY29uc3QgZGVjb2RlZFJlbW92ZVByb3h5Q2FsbCA9IHRoaXMuX3JlZ2lzdHJ5LmZpbmRNZXRhQ2FsbCh0b1VpbnQ4QXJyYXkodXRpbHMuc3RyaXBIZXhQcmVmaXgocmVtb3ZlUHJveHlNZXRob2QpKSk7XG4gICAgICBpZiAoXG4gICAgICAgIGRlY29kZWRSZW1vdmVQcm94eUNhbGwuc2VjdGlvbiAhPT0gU2VjdGlvbk5hbWVzLlByb3h5IHx8XG4gICAgICAgIGRlY29kZWRSZW1vdmVQcm94eUNhbGwubWV0aG9kICE9PSBNZXRob2ROYW1lcy5SZW1vdmVQcm94eVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAnSW52YWxpZCBiYXRjaCB0cmFuc2FjdGlvbiwgb25seSBzdGFraW5nIGJhdGNoIGNhbGxzIGFyZSBzdXBwb3J0ZWQsIGV4cGVjdGVkIGZpcnN0IGNhbGwgdG8gYmUgcmVtb3ZlUHJveHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGxNZXRob2QgPSAodHhNZXRob2QuY2FsbHNbMV0gYXMgQmF0Y2hDYWxsT2JqZWN0KS5jYWxsSW5kZXg7XG4gICAgICBjb25zdCBkZWNvZGVkQ2hpbGxDYWxsID0gdGhpcy5fcmVnaXN0cnkuZmluZE1ldGFDYWxsKHRvVWludDhBcnJheSh1dGlscy5zdHJpcEhleFByZWZpeChjaGlsbE1ldGhvZCkpKTtcbiAgICAgIGlmIChkZWNvZGVkQ2hpbGxDYWxsLnNlY3Rpb24gIT09IFNlY3Rpb25OYW1lcy5TdGFraW5nIHx8IGRlY29kZWRDaGlsbENhbGwubWV0aG9kICE9PSBNZXRob2ROYW1lcy5DaGlsbCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgYmF0Y2ggdHJhbnNhY3Rpb24sIG9ubHkgc3Rha2luZyBiYXRjaCBjYWxscyBhcmUgc3VwcG9ydGVkLCBleHBlY3RlZCBzZWNvbmQgY2FsbCB0byBiZSBjaGlsbC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCB1bnN0YWtlTWV0aG9kID0gKHR4TWV0aG9kLmNhbGxzWzJdIGFzIEJhdGNoQ2FsbE9iamVjdCkuY2FsbEluZGV4O1xuICAgICAgY29uc3QgZGVjb2RlZFVuc3Rha2VDYWxsID0gdGhpcy5fcmVnaXN0cnkuZmluZE1ldGFDYWxsKHRvVWludDhBcnJheSh1dGlscy5zdHJpcEhleFByZWZpeCh1bnN0YWtlTWV0aG9kKSkpO1xuICAgICAgaWYgKGRlY29kZWRVbnN0YWtlQ2FsbC5zZWN0aW9uICE9PSBTZWN0aW9uTmFtZXMuU3Rha2luZyB8fCBkZWNvZGVkVW5zdGFrZUNhbGwubWV0aG9kICE9PSBNZXRob2ROYW1lcy5VbmJvbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdJbnZhbGlkIGJhdGNoIHRyYW5zYWN0aW9uLCBvbmx5IHN0YWtpbmcgYmF0Y2ggY2FsbHMgYXJlIHN1cHBvcnRlZCwgZXhwZWN0ZWQgdGhpcmQgY2FsbCB0byBiZSB1bmJvbmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZW1vdmVQcm94eUFyZ3MgPSB0eE1ldGhvZC5jYWxsc1swXS5hcmdzIGFzIEFkZFByb3h5QmF0Y2hDYWxsQXJncztcbiAgICAgIGNvbnN0IHByb3h5QWRkcmVzcyA9IGdldERlbGVnYXRlQWRkcmVzcyhyZW1vdmVQcm94eUFyZ3MpO1xuXG4gICAgICBjb25zdCByZW1vdmVQcm94eUNvc3QgPSB0aGlzLmdldFJlbW92ZVByb3h5Q29zdCgpLnRvU3RyaW5nKDEwKTtcbiAgICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogcHJveHlBZGRyZXNzLFxuICAgICAgICB2YWx1ZTogcmVtb3ZlUHJveHlDb3N0LFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHNlbmRlcixcbiAgICAgICAgdmFsdWU6IHJlbW92ZVByb3h5Q29zdCxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdmVQcm94eUNvc3QoKTogQmlnTnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBZGRQcm94eUNvc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWRkUHJveHlDb3N0KCk6IEJpZ051bWJlciB7XG4gICAgY29uc3QgcHJveHlQYWxsZXQgPSB0aGlzLl9yZWdpc3RyeS5tZXRhZGF0YS5wYWxsZXRzLmZpbmQoXG4gICAgICAocCkgPT4gcC5uYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gU2VjdGlvbk5hbWVzLlByb3h5XG4gICAgKTtcbiAgICBpZiAocHJveHlQYWxsZXQpIHtcbiAgICAgIGNvbnN0IHByb3h5RGVwb3NpdEJhc2UgPSB0aGlzLmdldENvbnN0YW50KCdQcm94eURlcG9zaXRCYXNlJywgcHJveHlQYWxsZXQuY29uc3RhbnRzKTtcbiAgICAgIGNvbnN0IHByb3h5RGVwb3NpdEZhY3RvciA9IHRoaXMuZ2V0Q29uc3RhbnQoJ1Byb3h5RGVwb3NpdEZhY3RvcicsIHByb3h5UGFsbGV0LmNvbnN0YW50cyk7XG4gICAgICByZXR1cm4gcHJveHlEZXBvc2l0QmFzZS5wbHVzKHByb3h5RGVwb3NpdEZhY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhbGxldE5hbWVzID0gdGhpcy5fcmVnaXN0cnkubWV0YWRhdGEucGFsbGV0cy5tYXAoKHApID0+IHAubmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCAke1NlY3Rpb25OYW1lcy5Qcm94eX0gcGFsbGV0IGluIFske3BhbGxldE5hbWVzfV1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbnN0YW50KG5hbWU6IHN0cmluZywgY29uc3RhbnRzOiBWZWM8UGFsbGV0Q29uc3RhbnRNZXRhZGF0YVYxND4pOiBCaWdOdW1iZXIge1xuICAgIGNvbnN0IGNvbnN0YW50ID0gY29uc3RhbnRzLmZpbmQoKGMpID0+IGMubmFtZS50b1N0cmluZygpID09PSBuYW1lKTtcbiAgICBpZiAoY29uc3RhbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29uc3RhbnROYW1lcyA9IGNvbnN0YW50cy5tYXAoKHApID0+IHAubmFtZS50b1N0cmluZygpKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgY29uc3RhbnQgJHtuYW1lfSBpbiBbJHtjb25zdGFudE5hbWVzfV1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCBmcm9tIExpdHRsZS1FbmRpYW4gdG8gQmlnLUVuZGlhblxuICAgICAgY29uc3QgdmFsdWVCZSA9IEJ1ZmZlci5mcm9tKGNvbnN0YW50LnZhbHVlLnRvVThhKHRydWUpLnJldmVyc2UoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgcmV0dXJuIEJpZ051bWJlcih2YWx1ZUJlLCAxNik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNvZGVJbnB1dHNBbmRPdXRwdXRzRm9yQm9uZChkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIGNvbnN0IHNlbmRlciA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXTtcblxuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4Lm1ldGhvZC5hcmdzO1xuICAgIGlmIChkZWNvZGVkVHgubWV0aG9kLnBhbGxldCA9PT0gU2VjdGlvbk5hbWVzLlN0YWtpbmcpIHtcbiAgICAgIGxldCBib25kVmFsdWUgPSAnMCc7XG4gICAgICBpZiAoZGVjb2RlZFR4Lm1ldGhvZC5uYW1lID09PSBNZXRob2ROYW1lcy5Cb25kICYmIHV0aWxzLmlzQm9uZCh0eE1ldGhvZCkpIHtcbiAgICAgICAgYm9uZFZhbHVlID0gdHhNZXRob2QudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKGRlY29kZWRUeC5tZXRob2QubmFtZSA9PT0gTWV0aG9kTmFtZXMuQm9uZEV4dHJhICYmIHV0aWxzLmlzQm9uZEV4dHJhKHR4TWV0aG9kKSkge1xuICAgICAgICBib25kVmFsdWUgPSB0eE1ldGhvZC5tYXhBZGRpdGlvbmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcihgTG9hZGluZyBpbnB1dHMgb2YgdW5rbm93biBTdGFraW5nQWN0aXZhdGUgdHlwZSBwYXJhbWV0ZXJzYCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHNlbmRlcixcbiAgICAgICAgdmFsdWU6IGJvbmRWYWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBTVEFLSU5HX0RFU1RJTkFUSU9OLFxuICAgICAgICB2YWx1ZTogYm9uZFZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JVbmJvbmQoZGVjb2RlZFR4OiBEZWNvZGVkVHgpIHtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0c0FuZE91dHB1dHNGb3JXaXRoZHJhd1VuYm9uZChkZWNvZGVkVHg6IERlY29kZWRUeCkge1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgIHRoaXMuX291dHB1dHMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgc2lnbmVkIHBheWxvYWQgdXNpbmcgY29uc3RydWN0LnNpZ25UeFxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGJ1aWxkIHN0ZXAgaWYgYSBUU1Mgc2lnbmF0dXJlXG4gICAqIGlzIGFkZGVkIGFuZCB3aWxsIHNldCB0aGUgc2lnblRyYW5zYWN0aW9uIHdoaWNoIGlzIHRoZSB0eEhleCB0aGF0IHdpbGwgYmUgYnJvYWRjYXN0ZWRcbiAgICogQXMgd2VsbCBhcyBhZGQgdGhlIHNpZ25hdHVyZSB1c2VkIHRvIHNpZ24gdG8gdGhlIHNpZ25hdHVyZSBhcnJheSBpbiBoZXggZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYXR1cmUgVGhlIHNpZ25hdHVyZSB0byBiZSBhZGRlZCB0byBhIGRvdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgY29uc3RydWN0U2lnbmVkUGF5bG9hZChzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIC8vIDB4MDAgbWVhbnMgaXRzIGFuIEVEMjU1MTkgc2lnbmF0dXJlXG4gICAgY29uc3QgZWRTaWduYXR1cmUgPSBgMHgwMCR7c2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKX1gIGFzIEhleFN0cmluZztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbiA9IGNvbnN0cnVjdC5zaWduZWRUeCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwgZWRTaWduYXR1cmUsIHtcbiAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKGBVbmFibGUgdG8gc2lnbiBkb3QgdHJhbnNhY3Rpb24gd2l0aCBzaWduYXR1cmUgJHtlZFNpZ25hdHVyZX0gYCArIGUpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKV07XG4gIH1cblxuICBzZXRUcmFuc2FjdGlvbih0eDogVW5zaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKiovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBjb25zdCBleHRyaW5zaWNQYXlsb2FkID0gdGhpcy5fcmVnaXN0cnkuY3JlYXRlVHlwZSgnRXh0cmluc2ljUGF5bG9hZCcsIHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICB2ZXJzaW9uOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi52ZXJzaW9uLFxuICAgIH0pO1xuICAgIHJldHVybiB1OGFUb0J1ZmZlcihleHRyaW5zaWNQYXlsb2FkLnRvVThhKHsgbWV0aG9kOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0LlxuICAgKi9cbiAgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxufVxuIl19
@@ -96,6 +96,7 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
96
96
  protected set transaction(transaction: Transaction);
97
97
  /** @inheritdoc */
98
98
  protected fromImplementation(rawTransaction: string): Transaction;
99
+ getMethodAndArguments(): string;
99
100
  /** @inheritdoc */
100
101
  protected buildImplementation(): Promise<Transaction>;
101
102
  protected createBaseTxInfo(): CreateBaseTxInfo;
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}