@bitgo-beta/sdk-coin-vet 1.0.1-beta.58 → 1.0.1-beta.581

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 (160) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -1
  4. package/dist/src/lib/constants.d.ts +29 -0
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +31 -2
  7. package/dist/src/lib/iface.d.ts +28 -2
  8. package/dist/src/lib/iface.d.ts.map +1 -1
  9. package/dist/src/lib/iface.js +1 -1
  10. package/dist/src/lib/index.d.ts +21 -0
  11. package/dist/src/lib/index.d.ts.map +1 -1
  12. package/dist/src/lib/index.js +44 -2
  13. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
  14. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
  15. package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
  16. package/dist/src/lib/transaction/burnNftTransaction.d.ts +29 -0
  17. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
  18. package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
  19. package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
  20. package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
  21. package/dist/src/lib/transaction/claimRewards.js +151 -0
  22. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
  23. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
  25. package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
  26. package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
  27. package/dist/src/lib/transaction/exitDelegation.js +143 -0
  28. package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
  29. package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
  30. package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
  31. package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
  32. package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction/nftTransaction.js +108 -0
  34. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
  35. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
  36. package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
  37. package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
  38. package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction/stakingTransaction.js +169 -0
  40. package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
  41. package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
  42. package/dist/src/lib/transaction/tokenTransaction.js +95 -0
  43. package/dist/src/lib/transaction/transaction.d.ts +18 -28
  44. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  45. package/dist/src/lib/transaction/transaction.js +98 -58
  46. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +29 -0
  47. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction/validatorRegistrationTransaction.js +162 -0
  49. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
  50. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
  52. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
  53. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
  55. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
  56. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
  58. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
  59. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
  61. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
  62. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -0
  64. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
  65. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
  67. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
  68. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
  70. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
  71. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
  73. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
  74. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
  76. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
  77. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
  79. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
  80. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
  82. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +72 -0
  83. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +133 -0
  85. package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
  86. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  87. package/dist/src/lib/transactionBuilderFactory.js +124 -1
  88. package/dist/src/lib/types.d.ts +21 -0
  89. package/dist/src/lib/types.d.ts.map +1 -1
  90. package/dist/src/lib/types.js +1 -1
  91. package/dist/src/lib/utils.d.ts +121 -1
  92. package/dist/src/lib/utils.d.ts.map +1 -1
  93. package/dist/src/lib/utils.js +308 -8
  94. package/dist/src/register.d.ts.map +1 -1
  95. package/dist/src/register.js +5 -1
  96. package/dist/src/vet.d.ts +94 -3
  97. package/dist/src/vet.d.ts.map +1 -1
  98. package/dist/src/vet.js +505 -10
  99. package/dist/src/vetNFTCollection.d.ts +18 -0
  100. package/dist/src/vetNFTCollection.d.ts.map +1 -0
  101. package/dist/src/vetNFTCollection.js +52 -0
  102. package/dist/src/vetToken.d.ts +1 -1
  103. package/dist/src/vetToken.d.ts.map +1 -1
  104. package/dist/src/vetToken.js +2 -2
  105. package/dist/test/resources/vet.d.ts +86 -0
  106. package/dist/test/resources/vet.d.ts.map +1 -0
  107. package/dist/test/resources/vet.js +141 -0
  108. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  109. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  110. package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
  111. package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
  112. package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  113. package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
  114. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
  115. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  116. package/dist/test/transactionBuilder/claimRewardsBuilder.js +175 -0
  117. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
  118. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
  119. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
  120. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
  121. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  122. package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
  123. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
  124. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  125. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
  126. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
  127. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  128. package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
  129. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
  130. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
  131. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
  132. package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
  133. package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
  134. package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
  135. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
  136. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  137. package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
  138. package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
  139. package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
  140. package/dist/test/transactionBuilder/transferBuilder.js +244 -0
  141. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
  142. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
  143. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +195 -0
  144. package/dist/test/unit/keyPair.d.ts +2 -0
  145. package/dist/test/unit/keyPair.d.ts.map +1 -0
  146. package/dist/test/unit/keyPair.js +181 -0
  147. package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
  148. package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
  149. package/dist/test/unit/stakingFlowE2E.js +222 -0
  150. package/dist/test/unit/utils.d.ts +2 -0
  151. package/dist/test/unit/utils.d.ts.map +1 -0
  152. package/dist/test/unit/utils.js +106 -0
  153. package/dist/test/unit/vet.d.ts +2 -0
  154. package/dist/test/unit/vet.d.ts.map +1 -0
  155. package/dist/test/unit/vet.js +336 -0
  156. package/dist/tsconfig.tsbuildinfo +1 -0
  157. package/package.json +16 -10
  158. package/.eslintignore +0 -5
  159. package/.mocharc.yml +0 -8
  160. package/CHANGELOG.md +0 -40
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Utils = void 0;
4
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
7
+ const sdk_core_1 = require("@vechain/sdk-core");
8
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
9
+ const ethereumjs_util_1 = require("ethereumjs-util");
10
+ const sdk_core_2 = require("@bitgo-beta/sdk-core");
11
+ const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
5
12
  const constants_1 = require("./constants");
6
13
  const keyPair_1 = require("./keyPair");
7
- const sdk_core_2 = require("@vechain/sdk-core");
8
14
  class Utils {
9
15
  isValidAddress(address) {
10
16
  return this.isValidHex(address, constants_1.VET_ADDRESS_LENGTH);
@@ -41,28 +47,322 @@ class Utils {
41
47
  return regex.test(value);
42
48
  }
43
49
  deserializeTransaction(serializedTransaction) {
44
- const txBytes = sdk_core_2.HexUInt.of(serializedTransaction).bytes;
50
+ const txBytes = sdk_core_1.HexUInt.of(serializedTransaction).bytes;
45
51
  try {
46
- return sdk_core_2.Transaction.decode(txBytes, false);
52
+ return sdk_core_1.Transaction.decode(txBytes, false);
47
53
  }
48
54
  catch (err) {
49
55
  if (err.message?.includes('Expected 9 items, but got 10')) {
50
56
  // Likely signed, so retry with isSigned = true
51
- return sdk_core_2.Transaction.decode(txBytes, true);
57
+ return sdk_core_1.Transaction.decode(txBytes, true);
52
58
  }
53
59
  throw err;
54
60
  }
55
61
  }
56
62
  getTransactionTypeFromClause(clauses) {
57
63
  if (clauses[0].data === '0x') {
58
- return sdk_core_1.TransactionType.Send;
64
+ return sdk_core_2.TransactionType.Send;
65
+ }
66
+ else if (clauses[0].data.startsWith(abstract_eth_1.v4CreateForwarderMethodId)) {
67
+ return sdk_core_2.TransactionType.AddressInitialization;
68
+ }
69
+ else if (clauses[0].data.startsWith(abstract_eth_1.flushForwarderTokensMethodIdV4)) {
70
+ return sdk_core_2.TransactionType.FlushTokens;
71
+ }
72
+ else if (clauses[0].data.startsWith(constants_1.TRANSFER_TOKEN_METHOD_ID)) {
73
+ return sdk_core_2.TransactionType.SendToken;
74
+ }
75
+ else if (clauses[0].data.startsWith(constants_1.STAKING_METHOD_ID)) {
76
+ return sdk_core_2.TransactionType.ContractCall;
77
+ }
78
+ else if (clauses[0].data.startsWith(constants_1.STAKE_CLAUSE_METHOD_ID)) {
79
+ return sdk_core_2.TransactionType.StakingActivate;
80
+ }
81
+ else if (clauses[0].data.startsWith(constants_1.DELEGATE_CLAUSE_METHOD_ID)) {
82
+ return sdk_core_2.TransactionType.StakingDelegate;
83
+ }
84
+ else if (clauses[0].data.startsWith(constants_1.EXIT_DELEGATION_METHOD_ID)) {
85
+ return sdk_core_2.TransactionType.StakingUnlock;
86
+ }
87
+ else if (clauses[0].data.startsWith(constants_1.ADD_VALIDATION_METHOD_ID)) {
88
+ return sdk_core_2.TransactionType.StakingLock;
89
+ }
90
+ else if (clauses[0].data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
91
+ return sdk_core_2.TransactionType.StakingWithdraw;
92
+ }
93
+ else if (clauses[0].data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID) ||
94
+ clauses[0].data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID)) {
95
+ return sdk_core_2.TransactionType.StakingClaim;
96
+ }
97
+ else if (clauses[0].data.startsWith(constants_1.TRANSFER_NFT_METHOD_ID)) {
98
+ return sdk_core_2.TransactionType.SendNFT;
59
99
  }
60
100
  else {
61
- return sdk_core_1.TransactionType.SendToken;
101
+ return sdk_core_2.TransactionType.SendToken;
102
+ }
103
+ }
104
+ getTransferTokenData(toAddress, amountWei) {
105
+ const methodName = 'transfer';
106
+ const types = ['address', 'uint256'];
107
+ const params = [toAddress, new ethereumjs_util_1.BN(amountWei)];
108
+ const method = ethereumjs_abi_1.default.methodID(methodName, types);
109
+ const args = ethereumjs_abi_1.default.rawEncode(types, params);
110
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
111
+ }
112
+ getTransferNFTData(from, to, tokenId) {
113
+ const methodName = 'transferFrom';
114
+ const types = ['address', 'address', 'uint256'];
115
+ const params = [from, to, new ethereumjs_util_1.BN(tokenId)];
116
+ const method = ethereumjs_abi_1.default.methodID(methodName, types);
117
+ const args = ethereumjs_abi_1.default.rawEncode(types, params);
118
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
119
+ }
120
+ /**
121
+ * Decodes staking transaction data to extract levelId and autorenew
122
+ *
123
+ * @param {string} data - The encoded transaction data
124
+ * @returns {object} - Object containing levelId and autorenew
125
+ */
126
+ decodeStakingData(data) {
127
+ try {
128
+ const parameters = data.slice(10);
129
+ // Decode using ethereumjs-abi directly
130
+ const decoded = ethereumjs_abi_1.default.rawDecode(['uint8', 'bool'], Buffer.from(parameters, 'hex'));
131
+ return {
132
+ levelId: Number(decoded[0]),
133
+ autorenew: Boolean(decoded[1]),
134
+ };
135
+ }
136
+ catch (error) {
137
+ throw new Error(`Failed to decode staking data: ${error.message}`);
138
+ }
139
+ }
140
+ /**
141
+ * Decodes staking transaction data to extract levelId and autorenew
142
+ *
143
+ * @param {string} data - The encoded transaction data
144
+ * @returns {object} - Object containing levelId and autorenew
145
+ */
146
+ decodeStakeClauseData(data) {
147
+ try {
148
+ const parameters = data.slice(10);
149
+ // Decode using ethereumjs-abi directly
150
+ const decoded = ethereumjs_abi_1.default.rawDecode(['uint8'], Buffer.from(parameters, 'hex'));
151
+ return {
152
+ levelId: Number(decoded[0]),
153
+ };
154
+ }
155
+ catch (error) {
156
+ throw new Error(`Failed to decode staking data: ${error.message}`);
157
+ }
158
+ }
159
+ /**
160
+ * Decodes delegate transaction data to extract tokenId and validatorAddress
161
+ *
162
+ * @param {string} data - The encoded transaction data
163
+ * @returns {object} - Object containing levelId and validator address
164
+ */
165
+ decodeDelegateClauseData(data) {
166
+ try {
167
+ const parameters = data.slice(10);
168
+ // Decode using ethereumjs-abi directly
169
+ const decoded = ethereumjs_abi_1.default.rawDecode(['uint256', 'address'], Buffer.from(parameters, 'hex'));
170
+ return {
171
+ tokenId: String(decoded[0]),
172
+ validator: (0, ethereumjs_util_1.addHexPrefix)(decoded[1].toString()).toLowerCase(),
173
+ };
174
+ }
175
+ catch (error) {
176
+ throw new Error(`Failed to decode delegation data: ${error.message}`);
177
+ }
178
+ }
179
+ decodeTransferTokenData(data) {
180
+ const [address, amount] = (0, abstract_eth_1.getRawDecoded)(['address', 'uint256'], (0, abstract_eth_1.getBufferedByteCode)(constants_1.TRANSFER_TOKEN_METHOD_ID, data));
181
+ const recipientAddress = (0, ethereumjs_util_1.addHexPrefix)(address.toString()).toLowerCase();
182
+ return {
183
+ address: recipientAddress,
184
+ amount: amount.toString(),
185
+ };
186
+ }
187
+ decodeTransferNFTData(data) {
188
+ const [from, to, tokenIdBN] = (0, abstract_eth_1.getRawDecoded)(['address', 'address', 'uint256'], (0, abstract_eth_1.getBufferedByteCode)(constants_1.TRANSFER_NFT_METHOD_ID, data));
189
+ const recipientAddress = (0, ethereumjs_util_1.addHexPrefix)(to.toString()).toLowerCase();
190
+ const recipient = {
191
+ address: recipientAddress,
192
+ amount: '1',
193
+ };
194
+ const sender = (0, ethereumjs_util_1.addHexPrefix)(from.toString()).toLowerCase();
195
+ const tokenId = tokenIdBN.toString();
196
+ return {
197
+ recipients: [recipient],
198
+ sender,
199
+ tokenId,
200
+ };
201
+ }
202
+ /**
203
+ * Decodes claim rewards transaction data to extract tokenId
204
+ *
205
+ * @param {string} data - The encoded claim rewards method call data
206
+ * @returns {string} - The tokenId as a string
207
+ */
208
+ decodeClaimRewardsData(data) {
209
+ try {
210
+ // Remove method ID (first 10 characters: '0x' + 4-byte method ID)
211
+ const methodData = data.slice(10);
212
+ // Extract tokenId from first 32-byte slot
213
+ // The tokenId is a uint256, so we take the full 64 hex characters
214
+ const tokenIdHex = methodData.slice(0, 64);
215
+ // Convert hex to decimal string
216
+ return BigInt('0x' + tokenIdHex).toString();
217
+ }
218
+ catch (error) {
219
+ throw new Error(`Failed to decode claim rewards data: ${error.message}`);
220
+ }
221
+ }
222
+ /**
223
+ * Decodes add validation transaction data to extract validator address and staking period
224
+ *
225
+ * @param {string} data - The encoded transaction data
226
+ * @returns {object} - Object containing validator address and staking period
227
+ */
228
+ decodeAddValidationData(data) {
229
+ try {
230
+ const parameters = data.slice(10);
231
+ // Decode using ethereumjs-abi directly
232
+ const decoded = ethereumjs_abi_1.default.rawDecode(['address', 'uint32'], Buffer.from(parameters, 'hex'));
233
+ return {
234
+ validator: (0, ethereumjs_util_1.addHexPrefix)(decoded[0].toString()).toLowerCase(),
235
+ period: Number(decoded[1]),
236
+ };
237
+ }
238
+ catch (error) {
239
+ throw new Error(`Failed to decode add validation data: ${error.message}`);
240
+ }
241
+ }
242
+ /**
243
+ * Decodes exit delegation transaction data to extract tokenId
244
+ *
245
+ * @param {string} data - The encoded exit delegation method call data
246
+ * @returns {string} - The tokenId as a string
247
+ */
248
+ decodeExitDelegationData(data) {
249
+ try {
250
+ if (!data.startsWith(constants_1.EXIT_DELEGATION_METHOD_ID)) {
251
+ throw new Error('Invalid exit delegation method data');
252
+ }
253
+ const tokenIdHex = data.slice(constants_1.EXIT_DELEGATION_METHOD_ID.length);
254
+ // Convert hex to decimal (matching original parseInt logic)
255
+ return parseInt(tokenIdHex, 16).toString();
256
+ }
257
+ catch (error) {
258
+ throw new Error(`Failed to decode exit delegation data: ${error.message}`);
259
+ }
260
+ }
261
+ /**
262
+ * Decodes burn NFT transaction data to extract tokenId
263
+ *
264
+ * @param {string} data - The encoded burn NFT method call data
265
+ * @returns {string} - The tokenId as a string
266
+ */
267
+ decodeBurnNftData(data) {
268
+ try {
269
+ if (!data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
270
+ throw new Error('Invalid burn NFT method data');
271
+ }
272
+ const tokenIdHex = data.slice(constants_1.BURN_NFT_METHOD_ID.length);
273
+ // Convert hex to decimal (matching original parseInt logic)
274
+ return parseInt(tokenIdHex, 16).toString();
275
+ }
276
+ catch (error) {
277
+ throw new Error(`Failed to decode burn NFT data: ${error.message}`);
278
+ }
279
+ }
280
+ /**
281
+ * Get the network-appropriate stargate contract address
282
+ * @param {CoinConfig} coinConfig - The coin configuration object
283
+ * @returns {string} The delegation contract address for the network
284
+ */
285
+ getDefaultDelegationAddress(coinConfig) {
286
+ const isTestnet = coinConfig.network.type === 'testnet';
287
+ return isTestnet ? constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET : constants_1.STARGATE_DELEGATION_ADDRESS;
288
+ }
289
+ /**
290
+ * Get the network-appropriate staking contract address
291
+ * @param {CoinConfig} coinConfig - The coin configuration object
292
+ * @returns {string} The staking contract address for the network
293
+ */
294
+ getDefaultStakingAddress(coinConfig) {
295
+ const isTestnet = coinConfig.network.type === 'testnet';
296
+ return isTestnet ? constants_1.STARGATE_CONTRACT_ADDRESS_TESTNET : constants_1.STARGATE_NFT_ADDRESS;
297
+ }
298
+ /**
299
+ * Get the network-appropriate contract address for validator registration
300
+ * @param {CoinConfig} coinConfig - The coin configuration object
301
+ * @returns {string} The contract address for the network
302
+ */
303
+ getContractAddressForValidatorRegistration(coinConfig) {
304
+ const isTestnet = coinConfig.network.type === 'testnet';
305
+ return isTestnet
306
+ ? constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_TESTNET
307
+ : constants_1.VALIDATOR_REGISTRATION_STAKER_CONTRACT_ADDRESS_MAINNET;
308
+ }
309
+ /**
310
+ * Check if an address is a valid delegation contract address for any network
311
+ * @param {string} address - The address to check
312
+ * @returns {boolean} True if the address is a delegation contract address
313
+ */
314
+ isDelegationContractAddress(address) {
315
+ const lowerAddress = address.toLowerCase();
316
+ return (lowerAddress === constants_1.STARGATE_DELEGATION_ADDRESS.toLowerCase() ||
317
+ lowerAddress === constants_1.STARGATE_DELEGATION_ADDRESS_TESTNET.toLowerCase());
318
+ }
319
+ /**
320
+ * Check if an address is a valid NFT contract address for any network
321
+ * @param {string} address - The address to check
322
+ * @returns {boolean} True if the address is an NFT contract address
323
+ */
324
+ isNftContractAddress(address) {
325
+ const lowerAddress = address.toLowerCase();
326
+ return (lowerAddress === constants_1.STARGATE_NFT_ADDRESS.toLowerCase() || lowerAddress === constants_1.STARGATE_NFT_ADDRESS_TESTNET.toLowerCase());
327
+ }
328
+ /**
329
+ * Validate that a contract address matches the expected stargate address for the network
330
+ * @param {string} address - The contract address to validate
331
+ * @param {CoinConfig} coinConfig - The coin configuration object
332
+ * @throws {Error} If the address doesn't match the expected contract address
333
+ */
334
+ validateStakingContractAddress(address, coinConfig) {
335
+ const expectedAddress = this.getDefaultStakingAddress(coinConfig);
336
+ if (address.toLowerCase() !== expectedAddress.toLowerCase()) {
337
+ throw new Error(`Invalid staking contract address. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
338
+ }
339
+ }
340
+ /**
341
+ * Validate that the contract address matches the expected stargate address for the network
342
+ * @param {string} address - The contract address to validate
343
+ * @param {CoinConfig} coinConfig - The coin configuration object
344
+ * @throws {Error} If the address doesn't match the expected contract address
345
+ */
346
+ validateContractAddressForValidatorRegistration(address, coinConfig) {
347
+ const expectedAddress = this.getContractAddressForValidatorRegistration(coinConfig);
348
+ if (address.toLowerCase() !== expectedAddress.toLowerCase()) {
349
+ throw new Error(`Invalid contract address for validator registration. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
350
+ }
351
+ }
352
+ /**
353
+ * Validate that a contract address matches the expected stargate contract for the network
354
+ * @param {string} address - The contract address to validate
355
+ * @param {CoinConfig} coinConfig - The coin configuration object
356
+ * @throws {Error} If the address doesn't match the expected delegation contract address
357
+ */
358
+ validateDelegationContractAddress(address, coinConfig) {
359
+ const expectedAddress = this.getDefaultDelegationAddress(coinConfig);
360
+ if (address.toLowerCase() !== expectedAddress.toLowerCase()) {
361
+ throw new Error(`Invalid delegation contract address. Expected ${expectedAddress} for ${coinConfig.network.type}, got ${address}`);
62
362
  }
63
363
  }
64
364
  }
65
365
  exports.Utils = Utils;
66
366
  const utils = new Utils();
67
367
  exports.default = utils;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFrRTtBQUNsRSwyQ0FBaUc7QUFDakcsdUNBQW9DO0FBQ3BDLGdEQUE0RTtBQUU1RSxNQUFhLEtBQUs7SUFDaEIsY0FBYyxDQUFDLE9BQWU7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSw4QkFBa0IsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLCtCQUFtQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUscUNBQXlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLHVCQUF1QixNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsc0JBQXNCLENBQUMscUJBQTZCO1FBQ2xELE1BQU0sT0FBTyxHQUFHLGtCQUFPLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQztZQUNILE9BQU8sc0JBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELCtDQUErQztnQkFDL0MsT0FBTyxzQkFBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxPQUE0QjtRQUN2RCxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sMEJBQWUsQ0FBQyxTQUFTLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTVERCxzQkE0REM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBRTFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VVdGlscywgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVkVUX0FERFJFU1NfTEVOR1RILCBWRVRfQkxPQ0tfSURfTEVOR1RILCBWRVRfVFJBTlNBQ1RJT05fSURfTEVOR1RIIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBIZXhVSW50LCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoYWRkcmVzcywgVkVUX0FERFJFU1NfTEVOR1RIKTtcbiAgfVxuXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoaGFzaCwgVkVUX0JMT0NLX0lEX0xFTkdUSCk7XG4gIH1cblxuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwdWI6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHR4SWQsIFZFVF9UUkFOU0FDVElPTl9JRF9MRU5HVEgpO1xuICB9XG5cbiAgaXNWYWxpZEhleCh2YWx1ZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXigweHwwWClbYS1mQS1GMC05XXske2xlbmd0aH19JGApO1xuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplVHJhbnNhY3Rpb24oc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhCeXRlcyA9IEhleFVJbnQub2Yoc2VyaWFsaXplZFRyYW5zYWN0aW9uKS5ieXRlcztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLmRlY29kZSh0eEJ5dGVzLCBmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKCdFeHBlY3RlZCA5IGl0ZW1zLCBidXQgZ290IDEwJykpIHtcbiAgICAgICAgLy8gTGlrZWx5IHNpZ25lZCwgc28gcmV0cnkgd2l0aCBpc1NpZ25lZCA9IHRydWVcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLmRlY29kZSh0eEJ5dGVzLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKGNsYXVzZXM6IFRyYW5zYWN0aW9uQ2xhdXNlW10pOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIGlmIChjbGF1c2VzWzBdLmRhdGEgPT09ICcweCcpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdEQUE0RTtBQUM1RSxvRUFBeUM7QUFDekMscURBQW1EO0FBQ25ELG1EQUF3RjtBQUN4RiwyREFLa0M7QUFDbEMsMkNBcUJxQjtBQUNyQix1Q0FBb0M7QUFHcEMsTUFBYSxLQUFLO0lBQ2hCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSwrQkFBbUIsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixJQUFJLENBQUM7WUFDSCxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLHFDQUF5QixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQixDQUFDLHFCQUE2QjtRQUNsRCxNQUFNLE9BQU8sR0FBRyxrQkFBTyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUM7WUFDSCxPQUFPLHNCQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDO2dCQUMxRCwrQ0FBK0M7Z0JBQy9DLE9BQU8sc0JBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsT0FBNEI7UUFDdkQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sMEJBQWUsQ0FBQyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsd0NBQXlCLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sMEJBQWUsQ0FBQyxxQkFBcUIsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2Q0FBOEIsQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTywwQkFBZSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQ0FBd0IsQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTywwQkFBZSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTywwQkFBZSxDQUFDLFlBQVksQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQ0FBc0IsQ0FBQyxFQUFFLENBQUM7WUFDOUQsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBeUIsQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBeUIsQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTywwQkFBZSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQ0FBd0IsQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTywwQkFBZSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDMUQsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDO2FBQU0s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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBIZXhVSW50LCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IHsgYWRkSGV4UHJlZml4LCBCTiB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgeyBCYXNlVXRpbHMsIFRyYW5zYWN0aW9uUmVjaXBpZW50LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICB2NENyZWF0ZUZvcndhcmRlck1ldGhvZElkLFxuICBmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkVjQsXG4gIGdldFJhd0RlY29kZWQsXG4gIGdldEJ1ZmZlcmVkQnl0ZUNvZGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQge1xuICBUUkFOU0ZFUl9UT0tFTl9NRVRIT0RfSUQsXG4gIFNUQUtJTkdfTUVUSE9EX0lELFxuICBTVEFLRV9DTEFVU0VfTUVUSE9EX0lELFxuICBFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lELFxuICBCVVJOX05GVF9NRVRIT0RfSUQsXG4gIFZFVF9BRERSRVNTX0xFTkdUSCxcbiAgVkVUX0JMT0NLX0lEX0xFTkdUSCxcbiAgVkVUX1RSQU5TQUNUSU9OX0lEX0xFTkdUSCxcbiAgVFJBTlNGRVJfTkZUX01FVEhPRF9JRCxcbiAgQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCxcbiAgQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRCxcbiAgU1RBUkdBVEVfTkZUX0FERFJFU1MsXG4gIFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQsXG4gIFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUyxcbiAgREVMRUdBVEVfQ0xBVVNFX01FVEhPRF9JRCxcbiAgU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVULFxuICBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1NfVEVTVE5FVCxcbiAgVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19NQUlOTkVULFxuICBWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVQsXG4gIEFERF9WQUxJREFUSU9OX01FVEhPRF9JRCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoYWRkcmVzcywgVkVUX0FERFJFU1NfTEVOR1RIKTtcbiAgfVxuXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRIZXgoaGFzaCwgVkVUX0JMT0NLX0lEX0xFTkdUSCk7XG4gIH1cblxuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwdWI6IGtleSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkSGV4KHR4SWQsIFZFVF9UUkFOU0FDVElPTl9JRF9MRU5HVEgpO1xuICB9XG5cbiAgaXNWYWxpZEhleCh2YWx1ZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXigweHwwWClbYS1mQS1GMC05XXske2xlbmd0aH19JGApO1xuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGRlc2VyaWFsaXplVHJhbnNhY3Rpb24oc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhCeXRlcyA9IEhleFVJbnQub2Yoc2VyaWFsaXplZFRyYW5zYWN0aW9uKS5ieXRlcztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLmRlY29kZSh0eEJ5dGVzLCBmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2U/LmluY2x1ZGVzKCdFeHBlY3RlZCA5IGl0ZW1zLCBidXQgZ290IDEwJykpIHtcbiAgICAgICAgLy8gTGlrZWx5IHNpZ25lZCwgc28gcmV0cnkgd2l0aCBpc1NpZ25lZCA9IHRydWVcbiAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLmRlY29kZSh0eEJ5dGVzLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKGNsYXVzZXM6IFRyYW5zYWN0aW9uQ2xhdXNlW10pOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIGlmIChjbGF1c2VzWzBdLmRhdGEgPT09ICcweCcpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKHY0Q3JlYXRlRm9yd2FyZGVyTWV0aG9kSWQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnM7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChUUkFOU0ZFUl9UT0tFTl9NRVRIT0RfSUQpKSB7XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmRUb2tlbjtcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKFNUQUtJTkdfTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGw7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChTVEFLRV9DTEFVU0VfTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChERUxFR0FURV9DTEFVU0VfTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVsZWdhdGU7XG4gICAgfSBlbHNlIGlmIChjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoQUREX1ZBTElEQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jaztcbiAgICB9IGVsc2UgaWYgKGNsYXVzZXNbMF0uZGF0YS5zdGFydHNXaXRoKEJVUk5fTkZUX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjbGF1c2VzWzBdLmRhdGEuc3RhcnRzV2l0aChDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lEKSB8fFxuICAgICAgY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRClcbiAgICApIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltO1xuICAgIH0gZWxzZSBpZiAoY2xhdXNlc1swXS5kYXRhLnN0YXJ0c1dpdGgoVFJBTlNGRVJfTkZUX01FVEhPRF9JRCkpIHtcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZE5GVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgfVxuICB9XG5cbiAgZ2V0VHJhbnNmZXJUb2tlbkRhdGEodG9BZGRyZXNzOiBzdHJpbmcsIGFtb3VudFdlaTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ3RyYW5zZmVyJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG4gICAgY29uc3QgcGFyYW1zID0gW3RvQWRkcmVzcywgbmV3IEJOKGFtb3VudFdlaSldO1xuXG4gICAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQobWV0aG9kTmFtZSwgdHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICBnZXRUcmFuc2Zlck5GVERhdGEoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCB0b2tlbklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAndHJhbnNmZXJGcm9tJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICdhZGRyZXNzJywgJ3VpbnQyNTYnXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbZnJvbSwgdG8sIG5ldyBCTih0b2tlbklkKV07XG5cbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRChtZXRob2ROYW1lLCB0eXBlcyk7XG4gICAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZSh0eXBlcywgcGFyYW1zKTtcblxuICAgIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHN0YWtpbmcgdHJhbnNhY3Rpb24gZGF0YSB0byBleHRyYWN0IGxldmVsSWQgYW5kIGF1dG9yZW5ld1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge29iamVjdH0gLSBPYmplY3QgY29udGFpbmluZyBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICovXG4gIGRlY29kZVN0YWtpbmdEYXRhKGRhdGE6IHN0cmluZyk6IHsgbGV2ZWxJZDogbnVtYmVyOyBhdXRvcmVuZXc6IGJvb2xlYW4gfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgICAgLy8gRGVjb2RlIHVzaW5nIGV0aGVyZXVtanMtYWJpIGRpcmVjdGx5XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsndWludDgnLCAnYm9vbCddLCBCdWZmZXIuZnJvbShwYXJhbWV0ZXJzLCAnaGV4JykpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZXZlbElkOiBOdW1iZXIoZGVjb2RlZFswXSksXG4gICAgICAgIGF1dG9yZW5ldzogQm9vbGVhbihkZWNvZGVkWzFdKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBzdGFraW5nIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBzdGFraW5nIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCBsZXZlbElkIGFuZCBhdXRvcmVuZXdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgLSBUaGUgZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IC0gT2JqZWN0IGNvbnRhaW5pbmcgbGV2ZWxJZCBhbmQgYXV0b3JlbmV3XG4gICAqL1xuICBkZWNvZGVTdGFrZUNsYXVzZURhdGEoZGF0YTogc3RyaW5nKTogeyBsZXZlbElkOiBudW1iZXIgfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgICAgLy8gRGVjb2RlIHVzaW5nIGV0aGVyZXVtanMtYWJpIGRpcmVjdGx5XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsndWludDgnXSwgQnVmZmVyLmZyb20ocGFyYW1ldGVycywgJ2hleCcpKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGV2ZWxJZDogTnVtYmVyKGRlY29kZWRbMF0pLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIHN0YWtpbmcgZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGRlbGVnYXRlIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkIGFuZCB2YWxpZGF0b3JBZGRyZXNzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIE9iamVjdCBjb250YWluaW5nIGxldmVsSWQgYW5kIHZhbGlkYXRvciBhZGRyZXNzXG4gICAqL1xuICBkZWNvZGVEZWxlZ2F0ZUNsYXVzZURhdGEoZGF0YTogc3RyaW5nKTogeyB0b2tlbklkOiBzdHJpbmc7IHZhbGlkYXRvcjogc3RyaW5nIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIERlY29kZSB1c2luZyBldGhlcmV1bWpzLWFiaSBkaXJlY3RseVxuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ3VpbnQyNTYnLCAnYWRkcmVzcyddLCBCdWZmZXIuZnJvbShwYXJhbWV0ZXJzLCAnaGV4JykpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbklkOiBTdHJpbmcoZGVjb2RlZFswXSksXG4gICAgICAgIHZhbGlkYXRvcjogYWRkSGV4UHJlZml4KGRlY29kZWRbMV0udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRlY29kZSBkZWxlZ2F0aW9uIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVUcmFuc2ZlclRva2VuRGF0YShkYXRhOiBzdHJpbmcpOiBUcmFuc2FjdGlvblJlY2lwaWVudCB7XG4gICAgY29uc3QgW2FkZHJlc3MsIGFtb3VudF0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgWydhZGRyZXNzJywgJ3VpbnQyNTYnXSxcbiAgICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoVFJBTlNGRVJfVE9LRU5fTUVUSE9EX0lELCBkYXRhKVxuICAgICk7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IGFkZEhleFByZWZpeChhZGRyZXNzLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsXG4gICAgICBhbW91bnQ6IGFtb3VudC50b1N0cmluZygpLFxuICAgIH07XG4gIH1cblxuICBkZWNvZGVUcmFuc2Zlck5GVERhdGEoZGF0YTogc3RyaW5nKToge1xuICAgIHJlY2lwaWVudHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gICAgc2VuZGVyOiBzdHJpbmc7XG4gICAgdG9rZW5JZDogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBbZnJvbSwgdG8sIHRva2VuSWRCTl0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NiddLFxuICAgICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShUUkFOU0ZFUl9ORlRfTUVUSE9EX0lELCBkYXRhKVxuICAgICk7XG4gICAgY29uc3QgcmVjaXBpZW50QWRkcmVzcyA9IGFkZEhleFByZWZpeCh0by50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJlY2lwaWVudDogVHJhbnNhY3Rpb25SZWNpcGllbnQgPSB7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLFxuICAgICAgYW1vdW50OiAnMScsXG4gICAgfTtcbiAgICBjb25zdCBzZW5kZXIgPSBhZGRIZXhQcmVmaXgoZnJvbS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHRva2VuSWQgPSB0b2tlbklkQk4udG9TdHJpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50czogW3JlY2lwaWVudF0sXG4gICAgICBzZW5kZXIsXG4gICAgICB0b2tlbklkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBjbGFpbSByZXdhcmRzIHRyYW5zYWN0aW9uIGRhdGEgdG8gZXh0cmFjdCB0b2tlbklkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIC0gVGhlIGVuY29kZWQgY2xhaW0gcmV3YXJkcyBtZXRob2QgY2FsbCBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRva2VuSWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIGRlY29kZUNsYWltUmV3YXJkc0RhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gUmVtb3ZlIG1ldGhvZCBJRCAoZmlyc3QgMTAgY2hhcmFjdGVyczogJzB4JyArIDQtYnl0ZSBtZXRob2QgSUQpXG4gICAgICBjb25zdCBtZXRob2REYXRhID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIEV4dHJhY3QgdG9rZW5JZCBmcm9tIGZpcnN0IDMyLWJ5dGUgc2xvdFxuICAgICAgLy8gVGhlIHRva2VuSWQgaXMgYSB1aW50MjU2LCBzbyB3ZSB0YWtlIHRoZSBmdWxsIDY0IGhleCBjaGFyYWN0ZXJzXG4gICAgICBjb25zdCB0b2tlbklkSGV4ID0gbWV0aG9kRGF0YS5zbGljZSgwLCA2NCk7XG5cbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgc3RyaW5nXG4gICAgICByZXR1cm4gQmlnSW50KCcweCcgKyB0b2tlbklkSGV4KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgY2xhaW0gcmV3YXJkcyBkYXRhOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgYWRkIHZhbGlkYXRpb24gdHJhbnNhY3Rpb24gZGF0YSB0byBleHRyYWN0IHZhbGlkYXRvciBhZGRyZXNzIGFuZCBzdGFraW5nIHBlcmlvZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge29iamVjdH0gLSBPYmplY3QgY29udGFpbmluZyB2YWxpZGF0b3IgYWRkcmVzcyBhbmQgc3Rha2luZyBwZXJpb2RcbiAgICovXG4gIGRlY29kZUFkZFZhbGlkYXRpb25EYXRhKGRhdGE6IHN0cmluZyk6IHsgdmFsaWRhdG9yOiBzdHJpbmc7IHBlcmlvZDogbnVtYmVyIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gZGF0YS5zbGljZSgxMCk7XG5cbiAgICAgIC8vIERlY29kZSB1c2luZyBldGhlcmV1bWpzLWFiaSBkaXJlY3RseVxuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ2FkZHJlc3MnLCAndWludDMyJ10sIEJ1ZmZlci5mcm9tKHBhcmFtZXRlcnMsICdoZXgnKSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRvcjogYWRkSGV4UHJlZml4KGRlY29kZWRbMF0udG9TdHJpbmcoKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgcGVyaW9kOiBOdW1iZXIoZGVjb2RlZFsxXSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgYWRkIHZhbGlkYXRpb24gZGF0YTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGV4aXQgZGVsZWdhdGlvbiBtZXRob2QgY2FsbCBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHRva2VuSWQgYXMgYSBzdHJpbmdcbiAgICovXG4gIGRlY29kZUV4aXREZWxlZ2F0aW9uRGF0YShkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWRhdGEuc3RhcnRzV2l0aChFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXhpdCBkZWxlZ2F0aW9uIG1ldGhvZCBkYXRhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuSWRIZXggPSBkYXRhLnNsaWNlKEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQubGVuZ3RoKTtcbiAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWwgKG1hdGNoaW5nIG9yaWdpbmFsIHBhcnNlSW50IGxvZ2ljKVxuICAgICAgcmV0dXJuIHBhcnNlSW50KHRva2VuSWRIZXgsIDE2KS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBkZWNvZGUgZXhpdCBkZWxlZ2F0aW9uIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBidXJuIE5GVCB0cmFuc2FjdGlvbiBkYXRhIHRvIGV4dHJhY3QgdG9rZW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAtIFRoZSBlbmNvZGVkIGJ1cm4gTkZUIG1ldGhvZCBjYWxsIGRhdGFcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdG9rZW5JZCBhcyBhIHN0cmluZ1xuICAgKi9cbiAgZGVjb2RlQnVybk5mdERhdGEoZGF0YTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFkYXRhLnN0YXJ0c1dpdGgoQlVSTl9ORlRfTUVUSE9EX0lEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYnVybiBORlQgbWV0aG9kIGRhdGEnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW5JZEhleCA9IGRhdGEuc2xpY2UoQlVSTl9ORlRfTUVUSE9EX0lELmxlbmd0aCk7XG4gICAgICAvLyBDb252ZXJ0IGhleCB0byBkZWNpbWFsIChtYXRjaGluZyBvcmlnaW5hbCBwYXJzZUludCBsb2dpYylcbiAgICAgIHJldHVybiBwYXJzZUludCh0b2tlbklkSGV4LCAxNikudG9TdHJpbmcoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIGJ1cm4gTkZUIGRhdGE6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXR3b3JrLWFwcHJvcHJpYXRlIHN0YXJnYXRlIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGRlbGVnYXRpb24gY29udHJhY3QgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmtcbiAgICovXG4gIGdldERlZmF1bHREZWxlZ2F0aW9uQWRkcmVzcyhjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNUZXN0bmV0ID0gY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09ICd0ZXN0bmV0JztcbiAgICByZXR1cm4gaXNUZXN0bmV0ID8gU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUIDogU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV0d29yay1hcHByb3ByaWF0ZSBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3NcbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmtcbiAgICovXG4gIGdldERlZmF1bHRTdGFraW5nQWRkcmVzcyhjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNUZXN0bmV0ID0gY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09ICd0ZXN0bmV0JztcbiAgICByZXR1cm4gaXNUZXN0bmV0ID8gU1RBUkdBVEVfQ09OVFJBQ1RfQUREUkVTU19URVNUTkVUIDogU1RBUkdBVEVfTkZUX0FERFJFU1M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuZXR3b3JrLWFwcHJvcHJpYXRlIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHZhbGlkYXRvciByZWdpc3RyYXRpb25cbiAgICogQHBhcmFtIHtDb2luQ29uZmlnfSBjb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHRoZSBuZXR3b3JrXG4gICAqL1xuICBnZXRDb250cmFjdEFkZHJlc3NGb3JWYWxpZGF0b3JSZWdpc3RyYXRpb24oY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGlzVGVzdG5ldCA9IGNvaW5Db25maWcubmV0d29yay50eXBlID09PSAndGVzdG5ldCc7XG4gICAgcmV0dXJuIGlzVGVzdG5ldFxuICAgICAgPyBWQUxJREFUT1JfUkVHSVNUUkFUSU9OX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTX1RFU1RORVRcbiAgICAgIDogVkFMSURBVE9SX1JFR0lTVFJBVElPTl9TVEFLRVJfQ09OVFJBQ1RfQUREUkVTU19NQUlOTkVUO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFkZHJlc3MgaXMgYSB2YWxpZCBkZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3MgZm9yIGFueSBuZXR3b3JrXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGFkZHJlc3MgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgYSBkZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3NcbiAgICovXG4gIGlzRGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlckFkZHJlc3MgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvd2VyQWRkcmVzcyA9PT0gU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIGxvd2VyQWRkcmVzcyA9PT0gU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTX1RFU1RORVQudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyBhIHZhbGlkIE5GVCBjb250cmFjdCBhZGRyZXNzIGZvciBhbnkgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIGFuIE5GVCBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICBpc05mdENvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlckFkZHJlc3MgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGxvd2VyQWRkcmVzcyA9PT0gU1RBUkdBVEVfTkZUX0FERFJFU1MudG9Mb3dlckNhc2UoKSB8fCBsb3dlckFkZHJlc3MgPT09IFNUQVJHQVRFX05GVF9BRERSRVNTX1RFU1RORVQudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBhIGNvbnRyYWN0IGFkZHJlc3MgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgc3RhcmdhdGUgYWRkcmVzcyBmb3IgdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgY29udHJhY3QgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgY29udHJhY3QgYWRkcmVzc1xuICAgKi9cbiAgdmFsaWRhdGVTdGFraW5nQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pOiB2b2lkIHtcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSB0aGlzLmdldERlZmF1bHRTdGFraW5nQWRkcmVzcyhjb2luQ29uZmlnKTtcbiAgICBpZiAoYWRkcmVzcy50b0xvd2VyQ2FzZSgpICE9PSBleHBlY3RlZEFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MuIEV4cGVjdGVkICR7ZXhwZWN0ZWRBZGRyZXNzfSBmb3IgJHtjb2luQ29uZmlnLm5ldHdvcmsudHlwZX0sIGdvdCAke2FkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCB0aGUgY29udHJhY3QgYWRkcmVzcyBtYXRjaGVzIHRoZSBleHBlY3RlZCBzdGFyZ2F0ZSBhZGRyZXNzIGZvciB0aGUgbmV0d29ya1xuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIFRoZSBjb250cmFjdCBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gY29pbkNvbmZpZyAtIFRoZSBjb2luIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYWRkcmVzcyBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICB2YWxpZGF0ZUNvbnRyYWN0QWRkcmVzc0ZvclZhbGlkYXRvclJlZ2lzdHJhdGlvbihhZGRyZXNzOiBzdHJpbmcsIGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KTogdm9pZCB7XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gdGhpcy5nZXRDb250cmFjdEFkZHJlc3NGb3JWYWxpZGF0b3JSZWdpc3RyYXRpb24oY29pbkNvbmZpZyk7XG4gICAgaWYgKGFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPT0gZXhwZWN0ZWRBZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgY29udHJhY3QgYWRkcmVzcyBmb3IgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbi4gRXhwZWN0ZWQgJHtleHBlY3RlZEFkZHJlc3N9IGZvciAke2NvaW5Db25maWcubmV0d29yay50eXBlfSwgZ290ICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IGEgY29udHJhY3QgYWRkcmVzcyBtYXRjaGVzIHRoZSBleHBlY3RlZCBzdGFyZ2F0ZSBjb250cmFjdCBmb3IgdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgY29udHJhY3QgYWRkcmVzcyB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IGNvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzXG4gICAqL1xuICB2YWxpZGF0ZURlbGVnYXRpb25Db250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPik6IHZvaWQge1xuICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9IHRoaXMuZ2V0RGVmYXVsdERlbGVnYXRpb25BZGRyZXNzKGNvaW5Db25maWcpO1xuICAgIGlmIChhZGRyZXNzLnRvTG93ZXJDYXNlKCkgIT09IGV4cGVjdGVkQWRkcmVzcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlbGVnYXRpb24gY29udHJhY3QgYWRkcmVzcy4gRXhwZWN0ZWQgJHtleHBlY3RlZEFkZHJlc3N9IGZvciAke2NvaW5Db25maWcubmV0d29yay50eXBlfSwgZ290ICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAMzC,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IASzC,CAAC"}
@@ -4,12 +4,16 @@ exports.register = void 0;
4
4
  const vet_1 = require("./vet");
5
5
  const tvet_1 = require("./tvet");
6
6
  const vetToken_1 = require("./vetToken");
7
+ const vetNFTCollection_1 = require("./vetNFTCollection");
7
8
  const register = (sdk) => {
8
9
  sdk.register('vet', vet_1.Vet.createInstance);
9
10
  sdk.register('tvet', tvet_1.Tvet.createInstance);
10
11
  vetToken_1.VetToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
11
12
  sdk.register(name, coinConstructor);
12
13
  });
14
+ vetNFTCollection_1.VetNFTCollection.createNFTCollectionConstructors().forEach(({ name, coinConstructor }) => {
15
+ sdk.register(name, coinConstructor);
16
+ });
13
17
  };
14
18
  exports.register = register;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRCO0FBQzVCLGlDQUE4QjtBQUM5Qix5Q0FBc0M7QUFFL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLG1CQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxRQUFRLFlBTW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVmV0IH0gZnJvbSAnLi92ZXQnO1xuaW1wb3J0IHsgVHZldCB9IGZyb20gJy4vdHZldCc7XG5pbXBvcnQgeyBWZXRUb2tlbiB9IGZyb20gJy4vdmV0VG9rZW4nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCd2ZXQnLCBWZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3R2ZXQnLCBUdmV0LmNyZWF0ZUluc3RhbmNlKTtcbiAgVmV0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRCO0FBQzVCLGlDQUE4QjtBQUM5Qix5Q0FBc0M7QUFDdEMseURBQXNEO0FBRS9DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxQyxtQkFBUSxDQUFDLHVCQUF1QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUN2RSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNILG1DQUFnQixDQUFDLCtCQUErQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUN2RixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQVRXLFFBQUEsUUFBUSxZQVNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFZldCB9IGZyb20gJy4vdmV0JztcbmltcG9ydCB7IFR2ZXQgfSBmcm9tICcuL3R2ZXQnO1xuaW1wb3J0IHsgVmV0VG9rZW4gfSBmcm9tICcuL3ZldFRva2VuJztcbmltcG9ydCB7IFZldE5GVENvbGxlY3Rpb24gfSBmcm9tICcuL3ZldE5GVENvbGxlY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCd2ZXQnLCBWZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3R2ZXQnLCBUdmV0LmNyZWF0ZUluc3RhbmNlKTtcbiAgVmV0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuICBWZXRORlRDb2xsZWN0aW9uLmNyZWF0ZU5GVENvbGxlY3Rpb25Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==
package/dist/src/vet.d.ts CHANGED
@@ -1,8 +1,16 @@
1
- import { AuditDecryptedKeyParams, BaseCoin, BaseTransaction, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, SignedTransaction, SignTransactionOptions, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
1
+ import BigNumber from 'bignumber.js';
2
+ import { TransactionClause } from '@vechain/sdk-core';
3
+ import { AuditDecryptedKeyParams, BaseCoin, BaseTransaction, BitGoBase, BuildNftTransferDataOptions, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, SignedTransaction, SignTransactionOptions, TokenTransferRecipientParams, TssVerifyAddressOptions, VerifyTransactionOptions, BaseBroadcastTransactionOptions, BaseBroadcastTransactionResult } from '@bitgo-beta/sdk-core';
2
4
  import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
5
+ import { Hash } from 'crypto';
3
6
  import { TransactionBuilderFactory } from './lib';
4
- import { ExplainTransactionOptions, VetParseTransactionOptions } from './lib/types';
7
+ import { ExplainTransactionOptions, RecoverOptions, RecoveryTransaction, UnsignedSweepRecoveryTransaction, VetParseTransactionOptions } from './lib/types';
5
8
  import { VetTransactionExplanation } from './lib/iface';
9
+ export interface TssVerifyVetAddressOptions extends TssVerifyAddressOptions {
10
+ address: string;
11
+ baseAddress?: string;
12
+ walletVersion?: number;
13
+ }
6
14
  /**
7
15
  * Full Name: Vechain
8
16
  * Docs: https://docs.vechain.org/
@@ -19,6 +27,7 @@ export declare class Vet extends BaseCoin {
19
27
  getChain(): string;
20
28
  getFamily(): string;
21
29
  getFullName(): string;
30
+ valuelessTransferAllowed(): boolean;
22
31
  /** @inheritDoc */
23
32
  supportsTss(): boolean;
24
33
  /** inherited doc */
@@ -26,7 +35,15 @@ export declare class Vet extends BaseCoin {
26
35
  getMPCAlgorithm(): MPCAlgorithm;
27
36
  allowsAccountConsolidations(): boolean;
28
37
  verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
29
- isWalletAddress(params: VerifyAddressOptions): Promise<boolean>;
38
+ /**
39
+ * Verify that an address belongs to this wallet.
40
+ *
41
+ * @param {TssVerifyVetAddressOptions} params - Verification parameters
42
+ * @returns {Promise<boolean>} True if address belongs to wallet
43
+ * @throws {InvalidAddressError} If address format is invalid
44
+ * @throws {Error} If invalid wallet version or missing parameters
45
+ */
46
+ isWalletAddress(params: TssVerifyVetAddressOptions): Promise<boolean>;
30
47
  parseTransaction(params: VetParseTransactionOptions): Promise<ParsedTransaction>;
31
48
  /**
32
49
  * Explain a Vechain transaction
@@ -41,5 +58,79 @@ export declare class Vet extends BaseCoin {
41
58
  protected rebuildTransaction(txHex: string): Promise<BaseTransaction>;
42
59
  /** @inheritDoc */
43
60
  auditDecryptedKey(params: AuditDecryptedKeyParams): void;
61
+ /**
62
+ * Function to get coin specific hash function used to generate transaction digests.
63
+ * @returns {@see Hash} hash function if implemented, otherwise throws exception
64
+ */
65
+ getHashFunction(): Hash;
66
+ buildNftTransferData(params: BuildNftTransferDataOptions): TokenTransferRecipientParams;
67
+ /**
68
+ * Broadcasts a signed transaction to the VeChain network.
69
+ *
70
+ * @param {BaseBroadcastTransactionOptions} payload - The payload containing the serialized signed transaction.
71
+ * @param {string} payload.serializedSignedTransaction - The serialized signed transaction to broadcast.
72
+ * @returns {Promise<BaseBroadcastTransactionResult>} A promise that resolves to an empty object if the broadcast is successful.
73
+ * @throws {Error} If the broadcast fails, an error is thrown with the failure message.
74
+ */
75
+ broadcastTransaction(payload: BaseBroadcastTransactionOptions): Promise<BaseBroadcastTransactionResult>;
76
+ /** @inheritDoc */
77
+ recover(params: RecoverOptions): Promise<RecoveryTransaction | UnsignedSweepRecoveryTransaction>;
78
+ /**
79
+ * Returns the public node URL for the VeChain network.
80
+ * @returns {string} The URL of the public VeChain node.
81
+ */
82
+ private getPublicNodeUrl;
83
+ /**
84
+ * Calculates the transaction fee based on the estimated gas limit and fee estimate data.
85
+ * @param {FeeEstimateData} feeEstimateData - The fee estimate data.
86
+ * @param {BigNumber} estimatedGasLimit - The estimated gas limit for the transaction.
87
+ * @returns {BigNumber} The calculated transaction fee.
88
+ */
89
+ private calculateFee;
90
+ /**
91
+ * Ensures that the given address has sufficient VTHO balance to cover the transaction fee.
92
+ * @param {string} baseAddress - The address to check for VTHO balance.
93
+ * @param {BigNumber} requiredGasUnits - The required gas units for the transaction.
94
+ * @throws {Error} If the VTHO balance is insufficient or if there's an error checking the balance.
95
+ */
96
+ ensureVthoBalanceForFee(baseAddress: string, requiredGasUnits: BigNumber): Promise<void>;
97
+ /**
98
+ * Fetches the balance for a given Vechain address.
99
+ *
100
+ * @param address The Vechain address (e.g., "0x...") to check.
101
+ * @param tokenContractAddress (Optional) The contract address of a VIP180 token.
102
+ * @returns A Promise that resolves to a BigNumber instance of the balance.
103
+ */
104
+ getBalance(address: string, tokenContractAddress?: string): Promise<BigNumber>;
105
+ /**
106
+ * Retrieves the block reference from the VeChain network.
107
+ * @returns {Promise<string>} A promise that resolves to the block reference string.
108
+ * @throws {Error} If there's an error fetching the block reference or if the response is invalid.
109
+ */
110
+ getBlockRef(): Promise<string>;
111
+ /**
112
+ * Generates a random nonce for use in transactions.
113
+ * @returns {string} A hexadecimal string representing the random nonce.
114
+ */
115
+ getRandomNonce(): string;
116
+ /**
117
+ * Estimates the gas required for a set of transaction clauses.
118
+ * @param {TransactionClause[]} clauses - An array of transaction clauses.
119
+ * @param {string} caller - The address of the transaction caller.
120
+ * @returns {Promise<BigNumber>} A promise that resolves to the estimated gas amount.
121
+ * @throws {Error} If the clauses are invalid, the caller is not provided, or if there's an error in gas estimation.
122
+ */
123
+ estimateGas(clauses: TransactionClause[], caller: string): Promise<BigNumber>;
124
+ /**
125
+ * Builds a recovery transaction for the given address.
126
+ * @param {Object} buildParams - The parameters for building the recovery transaction.
127
+ * @param {string} buildParams.baseAddress - The address to recover funds from.
128
+ * @param {RecoverOptions} buildParams.params - The recovery options.
129
+ * @returns {Promise<Transaction>} A promise that resolves to the built recovery transaction.
130
+ * @throws {Error} If there's no VET balance to recover or if there's an error building the transaction.
131
+ */
132
+ private buildRecoveryTransaction;
133
+ recoverTokens(params: RecoverOptions): Promise<RecoveryTransaction | UnsignedSweepRecoveryTransaction>;
134
+ private buildTokenRecoveryTransaction;
44
135
  }
45
136
  //# sourceMappingURL=vet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../src/vet.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,eAAe,EACf,SAAS,EAET,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKlE,OAAO,EAAE,yBAAyB,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;GAIG;AACH,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,eAAe,IAAI,YAAY;IAI/B,2BAA2B,IAAI,OAAO;IAIhC,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqCrE,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/D,gBAAgB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqBtF;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAU3G,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAevC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAUhC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,SAAS,CAAC,mBAAmB,IAAI,yBAAyB;cAI1C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAU3E,kBAAkB;IAClB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;CAIzD"}
1
+ {"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../src/vet.ts"],"names":[],"mappings":"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"}