@bitgo-beta/sdk-coin-ada 2.3.14-beta.182 → 2.3.14-beta.1821

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 (113) hide show
  1. package/dist/src/ada.d.ts +15 -13
  2. package/dist/src/ada.d.ts.map +1 -1
  3. package/dist/src/ada.js +124 -42
  4. package/dist/src/adaToken.d.ts +16 -11
  5. package/dist/src/adaToken.d.ts.map +1 -1
  6. package/dist/src/adaToken.js +109 -3
  7. package/dist/src/index.js +6 -2
  8. package/dist/src/lib/index.d.ts +3 -1
  9. package/dist/src/lib/index.d.ts.map +1 -1
  10. package/dist/src/lib/index.js +29 -9
  11. package/dist/src/lib/keyPair.js +29 -16
  12. package/dist/src/lib/messages/cip8/cip8Message.d.ts +25 -0
  13. package/dist/src/lib/messages/cip8/cip8Message.d.ts.map +1 -0
  14. package/dist/src/lib/messages/cip8/cip8Message.js +140 -0
  15. package/dist/src/lib/messages/cip8/cip8MessageBuilder.d.ts +19 -0
  16. package/dist/src/lib/messages/cip8/cip8MessageBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/messages/cip8/cip8MessageBuilder.js +27 -0
  18. package/dist/src/lib/messages/cip8/index.d.ts +4 -0
  19. package/dist/src/lib/messages/cip8/index.d.ts.map +1 -0
  20. package/dist/src/lib/messages/cip8/index.js +20 -0
  21. package/dist/src/lib/messages/cip8/utils.d.ts +24 -0
  22. package/dist/src/lib/messages/cip8/utils.d.ts.map +1 -0
  23. package/dist/src/lib/messages/cip8/utils.js +73 -0
  24. package/dist/src/lib/messages/index.d.ts +3 -0
  25. package/dist/src/lib/messages/index.d.ts.map +1 -0
  26. package/dist/src/lib/messages/index.js +19 -0
  27. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  28. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  29. package/dist/src/lib/messages/messageBuilderFactory.js +20 -0
  30. package/dist/src/lib/stakingActivateBuilder.d.ts +1 -1
  31. package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
  32. package/dist/src/lib/stakingActivateBuilder.js +30 -10
  33. package/dist/src/lib/stakingDeactivateBuilder.js +24 -10
  34. package/dist/src/lib/transaction.d.ts +24 -7
  35. package/dist/src/lib/transaction.d.ts.map +1 -1
  36. package/dist/src/lib/transaction.js +81 -17
  37. package/dist/src/lib/transactionBuilder.d.ts +114 -3
  38. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/transactionBuilder.js +464 -20
  40. package/dist/src/lib/transactionBuilderFactory.d.ts +2 -0
  41. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  42. package/dist/src/lib/transactionBuilderFactory.js +7 -1
  43. package/dist/src/lib/utils.d.ts +22 -0
  44. package/dist/src/lib/utils.d.ts.map +1 -1
  45. package/dist/src/lib/utils.js +152 -17
  46. package/dist/src/lib/voteDelegationBuilder.d.ts +24 -0
  47. package/dist/src/lib/voteDelegationBuilder.d.ts.map +1 -0
  48. package/dist/src/lib/voteDelegationBuilder.js +84 -0
  49. package/dist/test/resources/cip8Resources.d.ts +25 -0
  50. package/dist/test/resources/cip8Resources.d.ts.map +1 -0
  51. package/dist/test/resources/cip8Resources.js +76 -0
  52. package/dist/test/resources/index.d.ts +458 -0
  53. package/dist/test/resources/index.d.ts.map +1 -0
  54. package/dist/test/resources/index.js +659 -0
  55. package/dist/test/unit/StakingActivateBuilder.d.ts +2 -0
  56. package/dist/test/unit/StakingActivateBuilder.d.ts.map +1 -0
  57. package/dist/test/unit/StakingActivateBuilder.js +213 -0
  58. package/dist/test/unit/StakingDeactivateBuilder.d.ts +2 -0
  59. package/dist/test/unit/StakingDeactivateBuilder.d.ts.map +1 -0
  60. package/dist/test/unit/StakingDeactivateBuilder.js +158 -0
  61. package/dist/test/unit/ada.d.ts +5 -0
  62. package/dist/test/unit/ada.d.ts.map +1 -0
  63. package/dist/test/unit/ada.js +1430 -0
  64. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  65. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  66. package/dist/test/unit/getBuilderFactory.js +10 -0
  67. package/dist/test/unit/index.d.ts +2 -0
  68. package/dist/test/unit/index.d.ts.map +1 -0
  69. package/dist/test/unit/index.js +32 -0
  70. package/dist/test/unit/keyPair.d.ts +2 -0
  71. package/dist/test/unit/keyPair.d.ts.map +1 -0
  72. package/dist/test/unit/keyPair.js +88 -0
  73. package/dist/test/unit/messages/cip8/cip8Message.d.ts +2 -0
  74. package/dist/test/unit/messages/cip8/cip8Message.d.ts.map +1 -0
  75. package/dist/test/unit/messages/cip8/cip8Message.js +131 -0
  76. package/dist/test/unit/messages/cip8/cip8MessageBuilder.d.ts +2 -0
  77. package/dist/test/unit/messages/cip8/cip8MessageBuilder.d.ts.map +1 -0
  78. package/dist/test/unit/messages/cip8/cip8MessageBuilder.js +132 -0
  79. package/dist/test/unit/messages/cip8/utils.d.ts +2 -0
  80. package/dist/test/unit/messages/cip8/utils.d.ts.map +1 -0
  81. package/dist/test/unit/messages/cip8/utils.js +127 -0
  82. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  83. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  84. package/dist/test/unit/messages/messageBuilderFactory.js +35 -0
  85. package/dist/test/unit/stakingClaimRewardsBuilder.d.ts +2 -0
  86. package/dist/test/unit/stakingClaimRewardsBuilder.d.ts.map +1 -0
  87. package/dist/test/unit/stakingClaimRewardsBuilder.js +70 -0
  88. package/dist/test/unit/stakingPledgeBuilder.d.ts +2 -0
  89. package/dist/test/unit/stakingPledgeBuilder.d.ts.map +1 -0
  90. package/dist/test/unit/stakingPledgeBuilder.js +141 -0
  91. package/dist/test/unit/stakingWithdrawBuilder.d.ts +2 -0
  92. package/dist/test/unit/stakingWithdrawBuilder.d.ts.map +1 -0
  93. package/dist/test/unit/stakingWithdrawBuilder.js +167 -0
  94. package/dist/test/unit/tokenWithdrawal.d.ts +2 -0
  95. package/dist/test/unit/tokenWithdrawal.d.ts.map +1 -0
  96. package/dist/test/unit/tokenWithdrawal.js +959 -0
  97. package/dist/test/unit/transaction.d.ts +2 -0
  98. package/dist/test/unit/transaction.d.ts.map +1 -0
  99. package/dist/test/unit/transaction.js +100 -0
  100. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  101. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  102. package/dist/test/unit/transactionBuilder.js +545 -0
  103. package/dist/test/unit/utils.d.ts +2 -0
  104. package/dist/test/unit/utils.d.ts.map +1 -0
  105. package/dist/test/unit/utils.js +138 -0
  106. package/dist/test/unit/voteDelegationBuilder.d.ts +2 -0
  107. package/dist/test/unit/voteDelegationBuilder.d.ts.map +1 -0
  108. package/dist/test/unit/voteDelegationBuilder.js +96 -0
  109. package/dist/tsconfig.tsbuildinfo +1 -0
  110. package/package.json +18 -13
  111. package/.eslintignore +0 -5
  112. package/.mocharc.yml +0 -8
  113. package/CHANGELOG.md +0 -450
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const src_1 = require("../../src");
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const cardano_serialization_lib_nodejs_1 = require("@emurgo/cardano-serialization-lib-nodejs");
10
+ const resources_1 = require("../resources");
11
+ describe('utils', () => {
12
+ it('should validate addresses correctly', () => {
13
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address1), true);
14
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address2), true);
15
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address3), true);
16
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address4), true);
17
+ should_1.default.equal(src_1.Utils.default.isValidAddress('dfjk35y'), false);
18
+ should_1.default.equal(src_1.Utils.default.isValidAddress(undefined), false);
19
+ should_1.default.equal(src_1.Utils.default.isValidAddress(''), false);
20
+ // validator addresses
21
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address7), true);
22
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address8), true);
23
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address9), false);
24
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address10), false);
25
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address11), false);
26
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address12), false);
27
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address13), false);
28
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address14), false);
29
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address15), false);
30
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.address16), false);
31
+ // Byron addresses
32
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron1), true);
33
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron2), true);
34
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron3), true);
35
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron4), false);
36
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron5), false);
37
+ should_1.default.equal(src_1.Utils.default.isValidAddress(resources_1.address.byron6), false);
38
+ });
39
+ it('should create stake and payment keys correctly', () => {
40
+ const keyPair1 = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account1.publicKey });
41
+ const keyPair2 = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account3.publicKey });
42
+ should_1.default.equal(src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet), 'addr_test1qq9arfq9pugs57apr3535z470ma2tvg8pnjy54q6s60muz5kelhytwhzrw9snh7759n9m8fr2xurpk4zyw8hmvk2avdsf62mmj');
43
+ });
44
+ it('should create stake and payment keys correctly from private keys', () => {
45
+ const keyPair1 = new src_1.KeyPair({ prv: resources_1.privateKeys.prvKey4 });
46
+ const keyPair2 = new src_1.KeyPair({ prv: resources_1.privateKeys.prvKey2 });
47
+ should_1.default.equal(src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet), 'addr_test1qqvglhn9k8um66dsahxyukn9l2f6zdmnpy8puth00gjulk7g0xp5f99mdzwswz4rmfwu00x724w2jahygheyk2zqg9lsvz2muj');
48
+ });
49
+ it('should create stake and payment keys correctly with keypairs initialized from nothing', () => {
50
+ const keyPair1 = new src_1.KeyPair();
51
+ const keyPair2 = new src_1.KeyPair();
52
+ should_1.default.equal(src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet), src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPair1, keyPair2, sdk_core_1.AddressFormat.testnet));
53
+ });
54
+ it('should validate block hash correctly', () => {
55
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(resources_1.blockHash.hash1), true);
56
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(resources_1.blockHash.hash2), true);
57
+ // param is coming as undefined so it was causing an issue
58
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(undefined), false);
59
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(''), false);
60
+ });
61
+ it('should validate invalid block hash correctly', () => {
62
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(''), false);
63
+ should_1.default.equal(src_1.Utils.default.isValidBlockId('0xade35465gfvdcsxsz24300'), false);
64
+ should_1.default.equal(src_1.Utils.default.isValidBlockId(resources_1.blockHash.hash2 + 'ff'), false);
65
+ });
66
+ it('should validate public key correctly', () => {
67
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey('da025aa02990ef466069fadce5e3dcfad663914d6bf42fea3be50a8c3094d8e8'), true);
68
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey1), true);
69
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey2), true);
70
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey3), true);
71
+ should_1.default.equal(src_1.Utils.default.isValidPublicKey(resources_1.publicKeys.pubKey4), false);
72
+ });
73
+ it('should validate private key correctly', () => {
74
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKeyExtended), true);
75
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey2), true);
76
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey3WrongFormat), false);
77
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey4), true);
78
+ should_1.default.equal(src_1.Utils.default.isValidPrivateKey(resources_1.privateKeys.prvKey5WrongFormat), false);
79
+ });
80
+ it('should validate signature correctly', () => {
81
+ should_1.default.equal(src_1.Utils.default.isValidSignature((0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.Ed25519Signature.from_bech32(resources_1.signatures.signature1).to_bytes())), true);
82
+ should_1.default.equal(src_1.Utils.default.isValidSignature((0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.Ed25519Signature.from_bech32(resources_1.signatures.signature2).to_bytes())), true);
83
+ });
84
+ it('should validate invalid signature correctly', () => {
85
+ should_1.default.equal(src_1.Utils.default.isValidSignature(''), false);
86
+ should_1.default.equal(src_1.Utils.default.isValidSignature('0x00'), false);
87
+ should_1.default.equal(src_1.Utils.default.isValidSignature(resources_1.privateKeys.prvKeyExtended), false);
88
+ should_1.default.equal(src_1.Utils.default.isValidSignature(resources_1.signatures.signature1.slice(2)), false);
89
+ should_1.default.equal(src_1.Utils.default.isValidSignature(resources_1.signatures.signature2 + 'ff'), false);
90
+ });
91
+ it('should validate transaction id correctly', () => {
92
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash1), true);
93
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash2), true);
94
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash3), true);
95
+ });
96
+ it('should validate invalid transaction id correctly', () => {
97
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(''), false);
98
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash1.slice(3)), false);
99
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId(resources_1.txIds.hash3 + '00'), false);
100
+ should_1.default.equal(src_1.Utils.default.isValidTransactionId('dalij43ta0ga2dadda02'), false);
101
+ });
102
+ it('should validate DRepId correctly', () => {
103
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('always-abstain'), true);
104
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('not-a-correct-choice'), false);
105
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('always-no-confidence'), true);
106
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0incorrect'), false);
107
+ // CIP-105 standard DRepId
108
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd'), true);
109
+ // CIP-129 standard DRepId
110
+ should_1.default.equal(src_1.Utils.default.isValidDRepId('drep1y29h2q6cst2pvkl2sqqvf5ljcy36uv7pmy482xnczddzgqshus24w'), true);
111
+ });
112
+ it('should get DRep entity from DRepId correctly', () => {
113
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('always-abstain').to_json(), cardano_serialization_lib_nodejs_1.DRep.new_always_abstain().to_json());
114
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('always-no-confidence').to_json(), cardano_serialization_lib_nodejs_1.DRep.new_always_no_confidence().to_json());
115
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd').to_json(), cardano_serialization_lib_nodejs_1.DRep.from_bech32('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd').to_json());
116
+ // DRep should be the same from both CIP-105 and CIP-129 IDs
117
+ should_1.default.equal(src_1.Utils.default.getDRepFromDRepId('drep1y29h2q6cst2pvkl2sqqvf5ljcy36uv7pmy482xnczddzgqshus24w').to_json(), src_1.Utils.default.getDRepFromDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd').to_json());
118
+ });
119
+ it('should get DRepId from DRep entity correctly', () => {
120
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(cardano_serialization_lib_nodejs_1.DRep.new_always_abstain()), 'always-abstain');
121
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(cardano_serialization_lib_nodejs_1.DRep.new_always_no_confidence()), 'always-no-confidence');
122
+ // Regardless of whether DRep was created from CIP-105 or CIP-129 ID, the DRepId from getDRepIdFromDRep will be the ID format from `to_bech32`
123
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(src_1.Utils.default.getDRepFromDRepId('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd')), 'drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
124
+ should_1.default.equal(src_1.Utils.default.getDRepIdFromDRep(src_1.Utils.default.getDRepFromDRepId('drep1y29h2q6cst2pvkl2sqqvf5ljcy36uv7pmy482xnczddzgqshus24w')), 'drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
125
+ });
126
+ it('should get transaction body correctly', () => {
127
+ const { unsignedTx, unsignedTxBody, unsignedVoteDelegationTx, unsignedVoteDelegationTxBody, unsignedStakingActiveTx, unsignedStakingActiveTxBody, unsignedStakingDeactiveTx, unsignedStakingDeactiveTxBody, unsignedStakingWithdrawTx, unsignedStakingWithdrawTxBody, unsignedUpdatePledgeTx, unsignedUpdatePledgeTxBody, unsignedNewPledgeTx, unsignedNewPledgeTxBody, partiallySignedPledgeTx, } = resources_1.rawTx;
128
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedTx), unsignedTxBody);
129
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedVoteDelegationTx), unsignedVoteDelegationTxBody);
130
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedStakingActiveTx), unsignedStakingActiveTxBody);
131
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedStakingDeactiveTx), unsignedStakingDeactiveTxBody);
132
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedStakingWithdrawTx), unsignedStakingWithdrawTxBody);
133
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedUpdatePledgeTx), unsignedUpdatePledgeTxBody);
134
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(unsignedNewPledgeTx), unsignedNewPledgeTxBody);
135
+ should_1.default.equal(src_1.Utils.default.getTransactionBody(partiallySignedPledgeTx), unsignedNewPledgeTxBody);
136
+ });
137
+ });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBQTJDO0FBQzNDLG1EQUE0RDtBQUM1RCwrRkFBa0Y7QUFDbEYsNENBU3NCO0FBRXRCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7UUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQkFBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLG1CQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUE4QixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxD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LENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQzdGLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBLZXlQYWlyLCBVdGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBBZGRyZXNzRm9ybWF0LCB0b0hleCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEVkMjU1MTlTaWduYXR1cmUsIERSZXAgfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7XG4gIGFkZHJlc3MsXG4gIGJsb2NrSGFzaCxcbiAgZW50ZXJwcmlzZUFjY291bnRzLFxuICBwcml2YXRlS2V5cyxcbiAgcHVibGljS2V5cyxcbiAgc2lnbmF0dXJlcyxcbiAgdHhJZHMsXG4gIHJhd1R4LFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MxKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczMpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3M0KSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoJ2RmamszNXknKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcygnJyksIGZhbHNlKTtcblxuICAgIC8vIHZhbGlkYXRvciBhZGRyZXNzZXNcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3M3KSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzOCksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczkpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTApLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTEpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTIpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTMpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTQpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTUpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMTYpLCBmYWxzZSk7XG5cbiAgICAvLyBCeXJvbiBhZGRyZXNzZXNcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmJ5cm9uMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYnlyb24yKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5ieXJvbjMpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmJ5cm9uNCksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmJ5cm9uNSksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmJ5cm9uNiksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgc3Rha2UgYW5kIHBheW1lbnQga2V5cyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5UGFpcjEgPSBuZXcgS2V5UGFpcih7IHB1YjogZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSB9KTtcbiAgICBjb25zdCBrZXlQYWlyMiA9IG5ldyBLZXlQYWlyKHsgcHViOiBlbnRlcnByaXNlQWNjb3VudHMuYWNjb3VudDMucHVibGljS2V5IH0pO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuY3JlYXRlQmFzZUFkZHJlc3NXaXRoU3Rha2VBbmRQYXltZW50S2V5KGtleVBhaXIxLCBrZXlQYWlyMiwgQWRkcmVzc0Zvcm1hdC50ZXN0bmV0KSxcbiAgICAgICdhZGRyX3Rlc3QxcXE5YXJmcTlwdWdzNTdhcHIzNTM1ejQ3MG1hMnR2Zzhwbmp5NTRxNnM2MG11ejVrZWxoeXR3aHpydzlzbmg3NzU5bjltOGZyMnh1cnBrNHp5dzhobXZrMmF2ZHNmNjJtbWonXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgc3Rha2UgYW5kIHBheW1lbnQga2V5cyBjb3JyZWN0bHkgZnJvbSBwcml2YXRlIGtleXMnLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5UGFpcjEgPSBuZXcgS2V5UGFpcih7IHBydjogcHJpdmF0ZUtleXMucHJ2S2V5NCB9KTtcbiAgICBjb25zdCBrZXlQYWlyMiA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBwcml2YXRlS2V5cy5wcnZLZXkyIH0pO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuY3JlYXRlQmFzZUFkZHJlc3NXaXRoU3Rha2VBbmRQYXltZW50S2V5KGtleVBhaXIxLCBrZXlQYWlyMiwgQWRkcmVzc0Zvcm1hdC50ZXN0bmV0KSxcbiAgICAgICdhZGRyX3Rlc3QxcXF2Z2xobjlrOHVtNjZkc2FoeHl1a245bDJmNnpkbW5weThwdXRoMDBnanVsazdnMHhwNWY5OW1kendzd3o0cm1md3UwMHg3MjR3MmphaHlnaGV5azJ6cWc5bHN2ejJtdWonXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgc3Rha2UgYW5kIHBheW1lbnQga2V5cyBjb3JyZWN0bHkgd2l0aCBrZXlwYWlycyBpbml0aWFsaXplZCBmcm9tIG5vdGhpbmcnLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5UGFpcjEgPSBuZXcgS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleVBhaXIyID0gbmV3IEtleVBhaXIoKTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShrZXlQYWlyMSwga2V5UGFpcjIsIEFkZHJlc3NGb3JtYXQudGVzdG5ldCksXG4gICAgICBVdGlscy5kZWZhdWx0LmNyZWF0ZUJhc2VBZGRyZXNzV2l0aFN0YWtlQW5kUGF5bWVudEtleShrZXlQYWlyMSwga2V5UGFpcjIsIEFkZHJlc3NGb3JtYXQudGVzdG5ldClcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJsb2NrIGhhc2ggY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaC5oYXNoMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaC5oYXNoMiksIHRydWUpO1xuICAgIC8vIHBhcmFtIGlzIGNvbWluZyBhcyB1bmRlZmluZWQgc28gaXQgd2FzIGNhdXNpbmcgYW4gaXNzdWVcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZEJsb2NrSWQoJycpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgaW52YWxpZCBibG9jayBoYXNoIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQmxvY2tJZCgnJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQmxvY2tJZCgnMHhhZGUzNTQ2NWdmdmRjc3hzejI0MzAwJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkQmxvY2tJZChibG9ja0hhc2guaGFzaDIgKyAnZmYnKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIHB1YmxpYyBrZXkgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuaXNWYWxpZFB1YmxpY0tleSgnZGEwMjVhYTAyOTkwZWY0NjYwNjlmYWRjZTVlM2RjZmFkNjYzOTE0ZDZiZjQyZmVhM2JlNTBhOGMzMDk0ZDhlOCcpLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXlzLnB1YktleTEpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleXMucHViS2V5MiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5cy5wdWJLZXkzKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXlzLnB1YktleTQpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgcHJpdmF0ZSBrZXkgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXlzLnBydktleUV4dGVuZGVkKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleXMucHJ2S2V5MiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXlzLnBydktleTNXcm9uZ0Zvcm1hdCksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkUHJpdmF0ZUtleShwcml2YXRlS2V5cy5wcnZLZXk0KSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleXMucHJ2S2V5NVdyb25nRm9ybWF0KSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIHNpZ25hdHVyZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgVXRpbHMuZGVmYXVsdC5pc1ZhbGlkU2lnbmF0dXJlKHRvSGV4KEVkMjU1MTlTaWduYXR1cmUuZnJvbV9iZWNoMzIoc2lnbmF0dXJlcy5zaWduYXR1cmUxKS50b19ieXRlcygpKSksXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmlzVmFsaWRTaWduYXR1cmUodG9IZXgoRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2JlY2gzMihzaWduYXR1cmVzLnNpZ25hdHVyZTIpLnRvX2J5dGVzKCkpKSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGludmFsaWQgc2lnbmF0dXJlIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkU2lnbmF0dXJlKCcnKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRTaWduYXR1cmUoJzB4MDAnKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRTaWduYXR1cmUocHJpdmF0ZUtleXMucHJ2S2V5RXh0ZW5kZWQpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmVzLnNpZ25hdHVyZTEuc2xpY2UoMikpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmVzLnNpZ25hdHVyZTIgKyAnZmYnKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIHRyYW5zYWN0aW9uIGlkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gyKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDMpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBpbnZhbGlkIHRyYW5zYWN0aW9uIGlkIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMS5zbGljZSgzKSksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMyArICcwMCcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ2RhbGlqNDN0YTBnYTJkYWRkYTAyJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBEUmVwSWQgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWREUmVwSWQoJ2Fsd2F5cy1hYnN0YWluJyksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWREUmVwSWQoJ25vdC1hLWNvcnJlY3QtY2hvaWNlJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkRFJlcElkKCdhbHdheXMtbm8tY29uZmlkZW5jZScpLCB0cnVlKTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5pc1ZhbGlkRFJlcElkKCdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwaW5jb3JyZWN0JyksIGZhbHNlKTtcbiAgICAvLyBDSVAtMTA1IHN0YW5kYXJkIERSZXBJZFxuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmlzVmFsaWREUmVwSWQoJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJyksIHRydWUpO1xuICAgIC8vIENJUC0xMjkgc3RhbmRhcmQgRFJlcElkXG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuaXNWYWxpZERSZXBJZCgnZHJlcDF5MjloMnE2Y3N0MnB2a2wyc3FxdmY1bGpjeTM2dXY3cG15NDgyeG5jemRkemdxc2h1czI0dycpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBnZXQgRFJlcCBlbnRpdHkgZnJvbSBEUmVwSWQgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5kZWZhdWx0LmdldERSZXBGcm9tRFJlcElkKCdhbHdheXMtYWJzdGFpbicpLnRvX2pzb24oKSwgRFJlcC5uZXdfYWx3YXlzX2Fic3RhaW4oKS50b19qc29uKCkpO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuZ2V0RFJlcEZyb21EUmVwSWQoJ2Fsd2F5cy1uby1jb25maWRlbmNlJykudG9fanNvbigpLFxuICAgICAgRFJlcC5uZXdfYWx3YXlzX25vX2NvbmZpZGVuY2UoKS50b19qc29uKClcbiAgICApO1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuZ2V0RFJlcEZyb21EUmVwSWQoJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJykudG9fanNvbigpLFxuICAgICAgRFJlcC5mcm9tX2JlY2gzMignZHJlcDEzZDZzeGt5ejZzdDloNjVxcXJ6ZDh1a3B5d2hyOHN3ZTlmNjM1N3FudGdqcXllMGd0dGQnKS50b19qc29uKClcbiAgICApO1xuICAgIC8vIERSZXAgc2hvdWxkIGJlIHRoZSBzYW1lIGZyb20gYm90aCBDSVAtMTA1IGFuZCBDSVAtMTI5IElEc1xuICAgIHNob3VsZC5lcXVhbChcbiAgICAgIFV0aWxzLmRlZmF1bHQuZ2V0RFJlcEZyb21EUmVwSWQoJ2RyZXAxeTI5aDJxNmNzdDJwdmtsMnNxcXZmNWxqY3kzNnV2N3BteTQ4MnhuY3pkZHpncXNodXMyNHcnKS50b19qc29uKCksXG4gICAgICBVdGlscy5kZWZhdWx0LmdldERSZXBGcm9tRFJlcElkKCdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCcpLnRvX2pzb24oKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2V0IERSZXBJZCBmcm9tIERSZXAgZW50aXR5IGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXREUmVwSWRGcm9tRFJlcChEUmVwLm5ld19hbHdheXNfYWJzdGFpbigpKSwgJ2Fsd2F5cy1hYnN0YWluJyk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0RFJlcElkRnJvbURSZXAoRFJlcC5uZXdfYWx3YXlzX25vX2NvbmZpZGVuY2UoKSksICdhbHdheXMtbm8tY29uZmlkZW5jZScpO1xuICAgIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBEUmVwIHdhcyBjcmVhdGVkIGZyb20gQ0lQLTEwNSBvciBDSVAtMTI5IElELCB0aGUgRFJlcElkIGZyb20gZ2V0RFJlcElkRnJvbURSZXAgd2lsbCBiZSB0aGUgSUQgZm9ybWF0IGZyb20gYHRvX2JlY2gzMmBcbiAgICBzaG91bGQuZXF1YWwoXG4gICAgICBVdGlscy5kZWZhdWx0LmdldERSZXBJZEZyb21EUmVwKFxuICAgICAgICBVdGlscy5kZWZhdWx0LmdldERSZXBGcm9tRFJlcElkKCdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCcpXG4gICAgICApLFxuICAgICAgJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJ1xuICAgICk7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgVXRpbHMuZGVmYXVsdC5nZXREUmVwSWRGcm9tRFJlcChcbiAgICAgICAgVXRpbHMuZGVmYXVsdC5nZXREUmVwRnJvbURSZXBJZCgnZHJlcDF5MjloMnE2Y3N0MnB2a2wyc3FxdmY1bGpjeTM2dXY3cG15NDgyeG5jemRkemdxc2h1czI0dycpXG4gICAgICApLFxuICAgICAgJ2RyZXAxM2Q2c3hreXo2c3Q5aDY1cXFyemQ4dWtweXdocjhzd2U5ZjYzNTdxbnRnanF5ZTBndHRkJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2V0IHRyYW5zYWN0aW9uIGJvZHkgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVuc2lnbmVkVHgsXG4gICAgICB1bnNpZ25lZFR4Qm9keSxcbiAgICAgIHVuc2lnbmVkVm90ZURlbGVnYXRpb25UeCxcbiAgICAgIHVuc2lnbmVkVm90ZURlbGVnYXRpb25UeEJvZHksXG4gICAgICB1bnNpZ25lZFN0YWtpbmdBY3RpdmVUeCxcbiAgICAgIHVuc2lnbmVkU3Rha2luZ0FjdGl2ZVR4Qm9keSxcbiAgICAgIHVuc2lnbmVkU3Rha2luZ0RlYWN0aXZlVHgsXG4gICAgICB1bnNpZ25lZFN0YWtpbmdEZWFjdGl2ZVR4Qm9keSxcbiAgICAgIHVuc2lnbmVkU3Rha2luZ1dpdGhkcmF3VHgsXG4gICAgICB1bnNpZ25lZFN0YWtpbmdXaXRoZHJhd1R4Qm9keSxcbiAgICAgIHVuc2lnbmVkVXBkYXRlUGxlZGdlVHgsXG4gICAgICB1bnNpZ25lZFVwZGF0ZVBsZWRnZVR4Qm9keSxcbiAgICAgIHVuc2lnbmVkTmV3UGxlZGdlVHgsXG4gICAgICB1bnNpZ25lZE5ld1BsZWRnZVR4Qm9keSxcbiAgICAgIHBhcnRpYWxseVNpZ25lZFBsZWRnZVR4LFxuICAgIH0gPSByYXdUeDtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkodW5zaWduZWRUeCksIHVuc2lnbmVkVHhCb2R5KTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkodW5zaWduZWRWb3RlRGVsZWdhdGlvblR4KSwgdW5zaWduZWRWb3RlRGVsZWdhdGlvblR4Qm9keSk7XG4gICAgc2hvdWxkLmVxdWFsKFV0aWxzLmRlZmF1bHQuZ2V0VHJhbnNhY3Rpb25Cb2R5KHVuc2lnbmVkU3Rha2luZ0FjdGl2ZVR4KSwgdW5zaWduZWRTdGFraW5nQWN0aXZlVHhCb2R5KTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkodW5zaWduZWRTdGFraW5nRGVhY3RpdmVUeCksIHVuc2lnbmVkU3Rha2luZ0RlYWN0aXZlVHhCb2R5KTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkodW5zaWduZWRTdGFraW5nV2l0aGRyYXdUeCksIHVuc2lnbmVkU3Rha2luZ1dpdGhkcmF3VHhCb2R5KTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkodW5zaWduZWRVcGRhdGVQbGVkZ2VUeCksIHVuc2lnbmVkVXBkYXRlUGxlZGdlVHhCb2R5KTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkodW5zaWduZWROZXdQbGVkZ2VUeCksIHVuc2lnbmVkTmV3UGxlZGdlVHhCb2R5KTtcbiAgICBzaG91bGQuZXF1YWwoVXRpbHMuZGVmYXVsdC5nZXRUcmFuc2FjdGlvbkJvZHkocGFydGlhbGx5U2lnbmVkUGxlZGdlVHgpLCB1bnNpZ25lZE5ld1BsZWRnZVR4Qm9keSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=voteDelegationBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voteDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/voteDelegationBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
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 should_1 = __importDefault(require("should"));
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const testData = __importStar(require("../resources"));
42
+ const src_1 = require("../../src");
43
+ const statics_1 = require("@bitgo-beta/statics");
44
+ const transaction_1 = require("../../src/lib/transaction");
45
+ describe('ADA Vote Delegation Transaction Builder', async () => {
46
+ const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tada'));
47
+ it('start and build an unsigned staking vote delegation tx', async () => {
48
+ const keyPairStake = new src_1.KeyPair({ prv: testData.privateKeys.prvKey2 });
49
+ const txBuilder = factory.getVoteDelegationBuilder();
50
+ txBuilder.input({
51
+ transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
52
+ transaction_index: 1,
53
+ });
54
+ const totalInput = '4000000';
55
+ txBuilder.changeAddress('addr1q8rm9z7w4yx5gz652kn2q238efvms6t0qelur9nlglun8eu4tr5knj4fu4adelzqhxg8adu5xca4jra0gtllfrpcawyq9psz23', totalInput);
56
+ txBuilder.addVoteDelegationCertificate(keyPairStake.getKeys().pub, 'drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
57
+ txBuilder.ttl(800000000);
58
+ const tx = (await txBuilder.build());
59
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.VoteDelegation);
60
+ const explainedTx = tx.explainTransaction();
61
+ should_1.default.equal(explainedTx.type, 'VoteDelegation');
62
+ const txData = tx.toJson();
63
+ const fee = tx.getFee;
64
+ fee.should.equal('168537');
65
+ txData.certs.length.should.equal(1);
66
+ txData.certs[0].type.should.equal(transaction_1.CertType.VoteDelegation);
67
+ txData.outputs.length.should.equal(1);
68
+ txData.outputs[0].amount.should.equal((Number(totalInput) - Number(fee)).toString());
69
+ tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedVoteDelegationTx);
70
+ should_1.default.equal(tx.id, testData.rawTx.unsignedVoteDelegationTxHash);
71
+ });
72
+ it('should build a vote delegation transaction', async () => {
73
+ const prebuiltTx = new transaction_1.Transaction(statics_1.coins.get('tada'));
74
+ prebuiltTx.fromRawTransaction(testData.rawTx.unsignedVoteDelegationTx);
75
+ const txBuilder = factory.getVoteDelegationBuilder();
76
+ txBuilder.initBuilder(prebuiltTx);
77
+ const tx = (await txBuilder.build());
78
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.VoteDelegation);
79
+ const txData = tx.toJson();
80
+ txData.inputs.length.should.equal(1);
81
+ txData.outputs.length.should.equal(1);
82
+ txData.certs.length.should.equal(1);
83
+ txData.certs[0].type.should.equal(transaction_1.CertType.VoteDelegation);
84
+ should_1.default.exist(txData.certs[0].dRepId);
85
+ txData.certs[0].dRepId.should.equal('drep13d6sxkyz6st9h65qqrzd8ukpywhr8swe9f6357qntgjqye0gttd');
86
+ txData.withdrawals.length.should.equal(0);
87
+ txData.witnesses.length.should.equal(0);
88
+ const fee = tx.getFee;
89
+ fee.should.equal('168537');
90
+ tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedVoteDelegationTx);
91
+ should_1.default.equal(tx.id, testData.rawTx.unsignedVoteDelegationTxHash);
92
+ const explainedTx = tx.explainTransaction();
93
+ should_1.default.equal(explainedTx.type, 'VoteDelegation');
94
+ });
95
+ });
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm90ZURlbGVnYXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3ZvdGVEZWxlZ2F0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsdURBQXlDO0FBQ3pDLG1DQUErRDtBQUMvRCxpREFBNEM7QUFDNUMsMkRBQWtFO0FBRWxFLFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxFQUFFLENBQUMsd0RBQXdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDZCxjQUFjLEVBQUUsa0VBQWtFO1lBQ2xGLGlCQUFpQixFQUFFLENBQUM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxhQUFhLENBQ3JCLHlHQUF5RyxFQUN6RyxVQUFVLENBQ1gsQ0FBQztRQUNGLFNBQVMsQ0FBQyw0QkFBNEIsQ0FDcEMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFDMUIsMERBQTBELENBQzNELENBQUM7UUFDRixTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7UUFDcEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVqRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN0QixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRixFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM3RSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLHlCQUFXLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RELFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDckQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFnQixDQUFDO1FBQ3BELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdFLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IENlcnRUeXBlLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuXG5kZXNjcmliZSgnQURBIFZvdGUgRGVsZWdhdGlvbiBUcmFuc2FjdGlvbiBCdWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YWRhJykpO1xuICBpdCgnc3RhcnQgYW5kIGJ1aWxkIGFuIHVuc2lnbmVkIHN0YWtpbmcgdm90ZSBkZWxlZ2F0aW9uIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGtleVBhaXJTdGFrZSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXkyIH0pO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Vm90ZURlbGVnYXRpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMzY3N2U3NWM3YmE2OTliZmRjNmNkNTdkNDJmMjQ2Zjg2ZjYzYWVmZDc2MDI1MDA2YWM3ODMxM2ZhZDJiYmEyMScsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMSxcbiAgICB9KTtcbiAgICBjb25zdCB0b3RhbElucHV0ID0gJzQwMDAwMDAnO1xuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKFxuICAgICAgJ2FkZHIxcThybTl6N3c0eXg1Z3o2NTJrbjJxMjM4ZWZ2bXM2dDBxZWx1cjlubGdsdW44ZXU0dHI1a25qNGZ1NGFkZWx6cWh4ZzhhZHU1eGNhNGpyYTBndGxsZnJwY2F3eXE5cHN6MjMnLFxuICAgICAgdG90YWxJbnB1dFxuICAgICk7XG4gICAgdHhCdWlsZGVyLmFkZFZvdGVEZWxlZ2F0aW9uQ2VydGlmaWNhdGUoXG4gICAgICBrZXlQYWlyU3Rha2UuZ2V0S2V5cygpLnB1YixcbiAgICAgICdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCdcbiAgICApO1xuICAgIHR4QnVpbGRlci50dGwoODAwMDAwMDAwKTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvbik7XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgIHNob3VsZC5lcXVhbChleHBsYWluZWRUeC50eXBlLCAnVm90ZURlbGVnYXRpb24nKTtcblxuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuICAgIGNvbnN0IGZlZSA9IHR4LmdldEZlZTtcbiAgICBmZWUuc2hvdWxkLmVxdWFsKCcxNjg1MzcnKTtcblxuICAgIHR4RGF0YS5jZXJ0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS5jZXJ0c1swXS50eXBlLnNob3VsZC5lcXVhbChDZXJ0VHlwZS5Wb3RlRGVsZWdhdGlvbik7XG5cbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoKE51bWJlcih0b3RhbElucHV0KSAtIE51bWJlcihmZWUpKS50b1N0cmluZygpKTtcbiAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC5pZCwgdGVzdERhdGEucmF3VHgudW5zaWduZWRWb3RlRGVsZWdhdGlvblR4SGFzaCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSB2b3RlIGRlbGVnYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJlYnVpbHRUeCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RhZGEnKSk7XG4gICAgcHJlYnVpbHRUeC5mcm9tUmF3VHJhbnNhY3Rpb24odGVzdERhdGEucmF3VHgudW5zaWduZWRWb3RlRGVsZWdhdGlvblR4KTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFZvdGVEZWxlZ2F0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihwcmVidWlsdFR4KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5Wb3RlRGVsZWdhdGlvbik7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdHhEYXRhLmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLmNlcnRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLmNlcnRzWzBdLnR5cGUuc2hvdWxkLmVxdWFsKENlcnRUeXBlLlZvdGVEZWxlZ2F0aW9uKTtcbiAgICBzaG91bGQuZXhpc3QodHhEYXRhLmNlcnRzWzBdLmRSZXBJZCk7XG4gICAgdHhEYXRhLmNlcnRzWzBdLmRSZXBJZCEuc2hvdWxkLmVxdWFsKCdkcmVwMTNkNnN4a3l6NnN0OWg2NXFxcnpkOHVrcHl3aHI4c3dlOWY2MzU3cW50Z2pxeWUwZ3R0ZCcpO1xuICAgIHR4RGF0YS53aXRoZHJhd2Fscy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIHR4RGF0YS53aXRuZXNzZXMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcblxuICAgIGNvbnN0IGZlZSA9IHR4LmdldEZlZTtcbiAgICBmZWUuc2hvdWxkLmVxdWFsKCcxNjg1MzcnKTtcbiAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFZvdGVEZWxlZ2F0aW9uVHgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC5pZCwgdGVzdERhdGEucmF3VHgudW5zaWduZWRWb3RlRGVsZWdhdGlvblR4SGFzaCk7XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgIHNob3VsZC5lcXVhbChleHBsYWluZWRUeC50eXBlLCAnVm90ZURlbGVnYXRpb24nKTtcbiAgfSk7XG59KTtcbiJdfQ==