@bitgo-beta/sdk-coin-eth 4.4.1-beta.182 → 4.4.1-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 (119) hide show
  1. package/dist/src/erc20Token.d.ts +1 -1
  2. package/dist/src/erc20Token.d.ts.map +1 -1
  3. package/dist/src/erc20Token.js +49 -28
  4. package/dist/src/erc721Token.d.ts +60 -0
  5. package/dist/src/erc721Token.d.ts.map +1 -0
  6. package/dist/src/erc721Token.js +334 -0
  7. package/dist/src/erc7984Token.d.ts +94 -0
  8. package/dist/src/erc7984Token.d.ts.map +1 -0
  9. package/dist/src/erc7984Token.js +328 -0
  10. package/dist/src/eth.d.ts +10 -8
  11. package/dist/src/eth.d.ts.map +1 -1
  12. package/dist/src/eth.js +49 -35
  13. package/dist/src/index.d.ts +2 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +8 -2
  16. package/dist/src/lib/index.d.ts +1 -0
  17. package/dist/src/lib/index.d.ts.map +1 -1
  18. package/dist/src/lib/index.js +7 -2
  19. package/dist/src/lib/messages/index.d.ts +3 -0
  20. package/dist/src/lib/messages/index.d.ts.map +1 -0
  21. package/dist/src/lib/messages/index.js +6 -0
  22. package/dist/src/lib/transactionBuilder.d.ts +10 -5
  23. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/transactionBuilder.js +17 -7
  25. package/dist/src/lib/transferBuilders/index.d.ts +2 -2
  26. package/dist/src/lib/transferBuilders/index.d.ts.map +1 -1
  27. package/dist/src/lib/transferBuilders/index.js +3 -2
  28. package/dist/src/register.d.ts +2 -0
  29. package/dist/src/register.d.ts.map +1 -1
  30. package/dist/src/register.js +36 -2
  31. package/dist/test/fixtures/eth.d.ts +39 -0
  32. package/dist/test/fixtures/eth.d.ts.map +1 -0
  33. package/dist/test/fixtures/eth.js +262 -0
  34. package/dist/test/resources/erc1155Abi.d.ts +40 -0
  35. package/dist/test/resources/erc1155Abi.d.ts.map +1 -0
  36. package/dist/test/resources/erc1155Abi.js +329 -0
  37. package/dist/test/resources/erc721Abi.d.ts +12 -0
  38. package/dist/test/resources/erc721Abi.d.ts.map +1 -0
  39. package/dist/test/resources/erc721Abi.js +34 -0
  40. package/dist/test/resources/eth.d.ts +51 -0
  41. package/dist/test/resources/eth.d.ts.map +1 -0
  42. package/dist/test/resources/eth.js +72 -0
  43. package/dist/test/resources/nftEncodings.d.ts +4 -0
  44. package/dist/test/resources/nftEncodings.d.ts.map +1 -0
  45. package/dist/test/resources/nftEncodings.js +7 -0
  46. package/dist/test/resources/walletSimpleAbi.d.ts +12 -0
  47. package/dist/test/resources/walletSimpleAbi.d.ts.map +1 -0
  48. package/dist/test/resources/walletSimpleAbi.js +44 -0
  49. package/dist/test/unit/erc7984Token.d.ts +2 -0
  50. package/dist/test/unit/erc7984Token.d.ts.map +1 -0
  51. package/dist/test/unit/erc7984Token.js +743 -0
  52. package/dist/test/unit/eth.d.ts +2 -0
  53. package/dist/test/unit/eth.d.ts.map +1 -0
  54. package/dist/test/unit/eth.js +2442 -0
  55. package/dist/test/unit/ethWallet.d.ts +2 -0
  56. package/dist/test/unit/ethWallet.d.ts.map +1 -0
  57. package/dist/test/unit/ethWallet.js +472 -0
  58. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts +4 -0
  59. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts.map +1 -0
  60. package/dist/test/unit/fixtures/ethMultiSigBackupKey.js +10 -0
  61. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts +5 -0
  62. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts.map +1 -0
  63. package/dist/test/unit/fixtures/ethTssBackupKey.js +25 -0
  64. package/dist/test/unit/getBuilder.d.ts +3 -0
  65. package/dist/test/unit/getBuilder.d.ts.map +1 -0
  66. package/dist/test/unit/getBuilder.js +10 -0
  67. package/dist/test/unit/keyPair.d.ts +2 -0
  68. package/dist/test/unit/keyPair.d.ts.map +1 -0
  69. package/dist/test/unit/keyPair.js +175 -0
  70. package/dist/test/unit/register.d.ts +2 -0
  71. package/dist/test/unit/register.d.ts.map +1 -0
  72. package/dist/test/unit/register.js +73 -0
  73. package/dist/test/unit/transaction.d.ts +2 -0
  74. package/dist/test/unit/transaction.d.ts.map +1 -0
  75. package/dist/test/unit/transaction.js +117 -0
  76. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +2 -0
  77. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  78. package/dist/test/unit/transactionBuilder/addressInitialization.js +101 -0
  79. package/dist/test/unit/transactionBuilder/contractCall.d.ts +2 -0
  80. package/dist/test/unit/transactionBuilder/contractCall.d.ts.map +1 -0
  81. package/dist/test/unit/transactionBuilder/contractCall.js +101 -0
  82. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +2 -0
  83. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
  84. package/dist/test/unit/transactionBuilder/decryptionDelegation.js +59 -0
  85. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts +2 -0
  86. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts.map +1 -0
  87. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.js +136 -0
  88. package/dist/test/unit/transactionBuilder/flushCoins.d.ts +2 -0
  89. package/dist/test/unit/transactionBuilder/flushCoins.d.ts.map +1 -0
  90. package/dist/test/unit/transactionBuilder/flushCoins.js +133 -0
  91. package/dist/test/unit/transactionBuilder/flushTokens.d.ts +2 -0
  92. package/dist/test/unit/transactionBuilder/flushTokens.d.ts.map +1 -0
  93. package/dist/test/unit/transactionBuilder/flushTokens.js +281 -0
  94. package/dist/test/unit/transactionBuilder/send.d.ts +2 -0
  95. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  96. package/dist/test/unit/transactionBuilder/send.js +331 -0
  97. package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts +2 -0
  98. package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts.map +1 -0
  99. package/dist/test/unit/transactionBuilder/sendERC7984Token.js +361 -0
  100. package/dist/test/unit/transactionBuilder/sendNFT.d.ts +2 -0
  101. package/dist/test/unit/transactionBuilder/sendNFT.d.ts.map +1 -0
  102. package/dist/test/unit/transactionBuilder/sendNFT.js +295 -0
  103. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts +2 -0
  104. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts.map +1 -0
  105. package/dist/test/unit/transactionBuilder/singleSigSend.js +196 -0
  106. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
  107. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  108. package/dist/test/unit/transactionBuilder/walletInitialization.js +436 -0
  109. package/dist/test/unit/transferBuilder.d.ts +2 -0
  110. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  111. package/dist/test/unit/transferBuilder.js +124 -0
  112. package/dist/test/unit/utils.d.ts +2 -0
  113. package/dist/test/unit/utils.d.ts.map +1 -0
  114. package/dist/test/unit/utils.js +74 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -0
  116. package/package.json +17 -13
  117. package/.eslintignore +0 -5
  118. package/.mocharc.yml +0 -8
  119. package/CHANGELOG.md +0 -609
@@ -0,0 +1,281 @@
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 sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const src_1 = require("../../../src");
9
+ const getBuilder_1 = require("../getBuilder");
10
+ // eslint-disable-next-line import/no-internal-modules
11
+ const transactionBuilder_1 = require("@bitgo-beta/abstract-eth/test/unit/transactionBuilder");
12
+ // Run the shared flush NFT tests from abstract-eth
13
+ describe('ETH Flush NFT Tests (from abstract-eth)', () => {
14
+ (0, transactionBuilder_1.runFlushNftTests)('eth', getBuilder_1.getBuilder);
15
+ });
16
+ describe('Eth Transaction builder flush tokens (ETH-specific)', function () {
17
+ const defaultKeyPair = new src_1.KeyPair({
18
+ prv: 'FAC4D04AA0025ECF200D74BC9B5E4616E4B8338B69B61362AAAD49F76E68EF28',
19
+ });
20
+ const buildTransaction = async function (details) {
21
+ const txBuilder = (0, getBuilder_1.getBuilder)('teth');
22
+ txBuilder.type(sdk_core_1.TransactionType.FlushTokens);
23
+ if (details.forwarderAddress !== undefined) {
24
+ txBuilder.forwarderAddress(details.forwarderAddress);
25
+ }
26
+ if (details.tokenAddress !== undefined) {
27
+ txBuilder.tokenAddress(details.tokenAddress);
28
+ }
29
+ if (details.fee !== undefined) {
30
+ txBuilder.fee(details.fee);
31
+ }
32
+ if (details.contractAddress !== undefined) {
33
+ txBuilder.contract(details.contractAddress);
34
+ }
35
+ if (details.counter !== undefined) {
36
+ txBuilder.counter(details.counter);
37
+ }
38
+ if (details.key !== undefined) {
39
+ txBuilder.sign({ key: details.key.getKeys().prv });
40
+ }
41
+ if (details.forwarderVersion !== undefined) {
42
+ txBuilder.forwarderVersion(details.forwarderVersion);
43
+ }
44
+ return await txBuilder.build();
45
+ };
46
+ describe('should build', () => {
47
+ it('a wallet flush forwarder transaction', async () => {
48
+ const tx = await buildTransaction({
49
+ fee: {
50
+ fee: '10',
51
+ gasLimit: '1000',
52
+ },
53
+ counter: 1,
54
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
55
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
56
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
57
+ });
58
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
59
+ const txJson = tx.toJson();
60
+ txJson.gasLimit.should.equal('1000');
61
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
62
+ txJson.gasPrice.should.equal('10');
63
+ should_1.default.equal(txJson.nonce, 1);
64
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodId);
65
+ });
66
+ it('a wallet flush forwarder transaction with eip1559 fee model', async () => {
67
+ const tx = await buildTransaction({
68
+ fee: {
69
+ fee: '30',
70
+ eip1559: {
71
+ maxPriorityFeePerGas: '5',
72
+ maxFeePerGas: '30',
73
+ },
74
+ gasLimit: '1000',
75
+ },
76
+ counter: 1,
77
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
78
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
79
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
80
+ });
81
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
82
+ const txJson = tx.toJson();
83
+ txJson.gasLimit.should.equal('1000');
84
+ txJson._type.should.equals(src_1.ETHTransactionType.EIP1559);
85
+ txJson.maxFeePerGas.should.equal('30');
86
+ txJson.maxPriorityFeePerGas.should.equal('5');
87
+ should_1.default.equal(txJson.nonce, 1);
88
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodId);
89
+ });
90
+ it('a wallet flush forwarder transaction with nonce 0', async () => {
91
+ const tx = await buildTransaction({
92
+ fee: {
93
+ fee: '10',
94
+ gasLimit: '1000',
95
+ },
96
+ counter: 0,
97
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
98
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
99
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
100
+ });
101
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
102
+ const txJson = tx.toJson();
103
+ txJson.gasLimit.should.equal('1000');
104
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
105
+ txJson.gasPrice.should.equal('10');
106
+ should_1.default.equal(txJson.nonce, 0);
107
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodId);
108
+ });
109
+ it('a wallet flush forwarder transaction with forwarder Version 4', async () => {
110
+ const tx = await buildTransaction({
111
+ fee: {
112
+ fee: '10',
113
+ gasLimit: '1000',
114
+ },
115
+ counter: 0,
116
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
117
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
118
+ contractAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
119
+ forwarderVersion: 4,
120
+ });
121
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
122
+ const txJson = tx.toJson();
123
+ txJson.gasLimit.should.equal('1000');
124
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
125
+ should_1.default.equal(txJson.nonce, 0);
126
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodIdV4);
127
+ });
128
+ it('decode wallet flush forwarder transaction with forwarder Version 4', async () => {
129
+ const tx = await buildTransaction({
130
+ fee: {
131
+ fee: '10',
132
+ gasLimit: '1000',
133
+ },
134
+ counter: 0,
135
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
136
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
137
+ contractAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
138
+ forwarderVersion: 4,
139
+ });
140
+ const txBuiderFromRaw = (0, getBuilder_1.getBuilder)('teth');
141
+ txBuiderFromRaw.from(tx.toBroadcastFormat());
142
+ const result = await txBuiderFromRaw.build();
143
+ const txJson = result.toJson();
144
+ txJson.to.should.equal('0x53b8e91bb3b8f618b5f01004ef108f134f219573');
145
+ txJson.data.should.containEql('bcf935d206ca32929e1b887a07ed240f0d8ccd22');
146
+ });
147
+ it('decode wallet flush forwarder transaction with forwarder Version < 4', async () => {
148
+ const tx = await buildTransaction({
149
+ fee: {
150
+ fee: '10',
151
+ gasLimit: '1000',
152
+ },
153
+ counter: 0,
154
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
155
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
156
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
157
+ forwarderVersion: 2,
158
+ });
159
+ const txBuiderFromRaw = (0, getBuilder_1.getBuilder)('teth');
160
+ txBuiderFromRaw.from(tx.toBroadcastFormat());
161
+ const result = await txBuiderFromRaw.build();
162
+ const txJson = result.toJson();
163
+ txJson.to.should.equal('0x8f977e912ef500548a0c3be6ddde9899f1199b81');
164
+ txJson.data.should.containEql('bcf935d206ca32929e1b887a07ed240f0d8ccd22');
165
+ txJson.data.should.containEql('53b8e91bb3b8f618b5f01004ef108f134f219573');
166
+ });
167
+ it('an unsigned flush transaction from serialized', async () => {
168
+ const tx = await buildTransaction({
169
+ fee: {
170
+ fee: '10',
171
+ gasLimit: '1000',
172
+ },
173
+ counter: 0,
174
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
175
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
176
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
177
+ });
178
+ const serialized = tx.toBroadcastFormat();
179
+ // now rebuild from the signed serialized tx and make sure it stays the same
180
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
181
+ newTxBuilder.from(serialized);
182
+ const newTx = await newTxBuilder.build();
183
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
184
+ newTx.toJson().data.should.startWith(src_1.flushForwarderTokensMethodId);
185
+ should_1.default.equal(newTx.toJson().v, '0x77');
186
+ });
187
+ it('a signed flush transaction from serialized', async () => {
188
+ const tx = await buildTransaction({
189
+ fee: {
190
+ fee: '10',
191
+ gasLimit: '1000',
192
+ },
193
+ counter: 0,
194
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
195
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
196
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
197
+ key: defaultKeyPair,
198
+ });
199
+ const serialized = tx.toBroadcastFormat();
200
+ // now rebuild from the signed serialized tx and make sure it stays the same
201
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
202
+ newTxBuilder.from(serialized);
203
+ const newTx = await newTxBuilder.build();
204
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
205
+ should_1.default.equal(newTx.id, '0x5bfd4c6b9ae9dfbc9e062247c0debe4e1c6870a76c420ce7f6e335390420dcd6');
206
+ const txJson = newTx.toJson();
207
+ should_1.default.exist(txJson.v);
208
+ should_1.default.exist(txJson.r);
209
+ should_1.default.exist(txJson.s);
210
+ should_1.default.exist(txJson.from);
211
+ });
212
+ });
213
+ describe('should fail to build', () => {
214
+ it('a transaction without fee', async () => {
215
+ await buildTransaction({
216
+ counter: 0,
217
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
218
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
219
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
220
+ }).should.be.rejectedWith('Invalid transaction: missing fee');
221
+ });
222
+ it('a transaction without contractAddress', async () => {
223
+ await buildTransaction({
224
+ fee: {
225
+ fee: '10',
226
+ gasLimit: '10',
227
+ },
228
+ counter: 0,
229
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
230
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
231
+ }).should.be.rejectedWith('Invalid transaction: missing contract address');
232
+ });
233
+ it('a wallet flush forwarder V4 transaction with different contract address', async () => {
234
+ await buildTransaction({
235
+ fee: {
236
+ fee: '10',
237
+ gasLimit: '1000',
238
+ },
239
+ counter: 0,
240
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
241
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
242
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
243
+ forwarderVersion: 4,
244
+ }).should.be.rejectedWith('Invalid contract address: 0x8f977e912ef500548a0c3be6ddde9899f1199b81');
245
+ });
246
+ it('a transaction without tokenAddress', async () => {
247
+ await buildTransaction({
248
+ fee: {
249
+ fee: '10',
250
+ gasLimit: '10',
251
+ },
252
+ counter: 0,
253
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
254
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
255
+ }).should.be.rejectedWith('Invalid transaction: missing token address');
256
+ });
257
+ it('a transaction without forwarderAddress', async () => {
258
+ await buildTransaction({
259
+ fee: {
260
+ fee: '10',
261
+ gasLimit: '10',
262
+ },
263
+ counter: 0,
264
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
265
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
266
+ }).should.be.rejectedWith('Invalid transaction: missing forwarder address');
267
+ });
268
+ it('a transaction with invalid counter', async () => {
269
+ await buildTransaction({
270
+ fee: {
271
+ fee: '10',
272
+ gasLimit: '10',
273
+ },
274
+ counter: -1,
275
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
276
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
277
+ }).should.be.rejectedWith('Invalid counter: -1');
278
+ });
279
+ });
280
+ });
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hUb2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2ZsdXNoVG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQUF1RDtBQUN2RCxzQ0FPc0I7QUFDdEIsOENBQTJDO0FBQzNDLHNEQUFzRDtBQUN0RCw4RkFBeUY7QUFFekYsbURBQW1EO0FBQ25ELFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBQSxxQ0FBZ0IsRUFBQyxLQUFLLEVBQUUsdUJBQVUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHFEQUFxRCxFQUFFO0lBQzlELE1BQU0sY0FBYyxHQUFHLElBQUksYUFBTyxDQUFDO1FBQ2pDLEdBQUcsRUFBRSxrRUFBa0U7S0FDeEUsQ0FBQyxDQUFDO0lBWUgsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLFdBQVcsT0FBMkI7UUFDbEUsTUFBTSxTQUFTLEdBQVEsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcs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QyxDQUFDO2dCQUNYLFlBQVksRUFBRSw0Q0FBNEM7Z0JBQzFELGVBQWUsRUFBRSw0Q0FBNEM7YUFDOUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgRVRIVHJhbnNhY3Rpb25UeXBlLFxuICBGZWUsXG4gIGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWQsXG4gIGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCxcbiAgS2V5UGFpcixcbiAgVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXNcbmltcG9ydCB7IHJ1bkZsdXNoTmZ0VGVzdHMgfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgvdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlcic7XG5cbi8vIFJ1biB0aGUgc2hhcmVkIGZsdXNoIE5GVCB0ZXN0cyBmcm9tIGFic3RyYWN0LWV0aFxuZGVzY3JpYmUoJ0VUSCBGbHVzaCBORlQgVGVzdHMgKGZyb20gYWJzdHJhY3QtZXRoKScsICgpID0+IHtcbiAgcnVuRmx1c2hOZnRUZXN0cygnZXRoJywgZ2V0QnVpbGRlcik7XG59KTtcblxuZGVzY3JpYmUoJ0V0aCBUcmFuc2FjdGlvbiBidWlsZGVyIGZsdXNoIHRva2VucyAoRVRILXNwZWNpZmljKScsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZGVmYXVsdEtleVBhaXIgPSBuZXcgS2V5UGFpcih7XG4gICAgcHJ2OiAnRkFDNEQwNEFBMDAyNUVDRjIwMEQ3NEJDOUI1RTQ2MTZFNEI4MzM4QjY5QjYxMzYyQUFBRDQ5Rjc2RTY4RUYyOCcsXG4gIH0pO1xuXG4gIGludGVyZmFjZSBGbHVzaFRva2Vuc0RldGFpbHMge1xuICAgIGZvcndhcmRlckFkZHJlc3M/OiBzdHJpbmc7XG4gICAgdG9rZW5BZGRyZXNzPzogc3RyaW5nO1xuICAgIGNvbnRyYWN0QWRkcmVzcz86IHN0cmluZztcbiAgICBjb3VudGVyPzogbnVtYmVyO1xuICAgIGZlZT86IEZlZTtcbiAgICBrZXk/OiBLZXlQYWlyO1xuICAgIGZvcndhcmRlclZlcnNpb24/OiBudW1iZXI7XG4gIH1cblxuICBjb25zdCBidWlsZFRyYW5zYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKGRldGFpbHM6IEZsdXNoVG9rZW5zRGV0YWlscyk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnMpO1xuXG4gICAgaWYgKGRldGFpbHMuZm9yd2FyZGVyQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhkZXRhaWxzLmZvcndhcmRlckFkZHJlc3MpO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLnRva2VuQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIudG9rZW5BZGRyZXNzKGRldGFpbHMudG9rZW5BZGRyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5mZWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmZlZShkZXRhaWxzLmZlZSk7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMuY29udHJhY3RBZGRyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdChkZXRhaWxzLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMuY291bnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcihkZXRhaWxzLmNvdW50ZXIpO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogZGV0YWlscy5rZXkuZ2V0S2V5cygpLnBydiB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5mb3J3YXJkZXJWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKGRldGFpbHMuZm9yd2FyZGVyVmVyc2lvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAxLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnMpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMDAwJyk7XG4gICAgICB0eEpzb24uX3R5cGUuc2hvdWxkLmVxdWFscyhFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZSEuc2hvdWxkLmVxdWFsKCcxMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMSk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbiB3aXRoIGVpcDE1NTkgZmVlIG1vZGVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMzAnLFxuICAgICAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnNScsXG4gICAgICAgICAgICBtYXhGZWVQZXJHYXM6ICczMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAxLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnMpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMDAwJyk7XG4gICAgICB0eEpzb24uX3R5cGUuc2hvdWxkLmVxdWFscyhFVEhUcmFuc2FjdGlvblR5cGUuRUlQMTU1OSk7XG4gICAgICB0eEpzb24ubWF4RmVlUGVyR2FzIS5zaG91bGQuZXF1YWwoJzMwJyk7XG4gICAgICB0eEpzb24ubWF4UHJpb3JpdHlGZWVQZXJHYXMhLnNob3VsZC5lcXVhbCgnNScpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMSk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbiB3aXRoIG5vbmNlIDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICB9KTtcblxuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkZsdXNoVG9rZW5zKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmdhc0xpbWl0LnNob3VsZC5lcXVhbCgnMTAwMCcpO1xuICAgICAgdHhKc29uLl90eXBlLnNob3VsZC5lcXVhbHMoRVRIVHJhbnNhY3Rpb25UeXBlLkxFR0FDWSk7XG4gICAgICB0eEpzb24uZ2FzUHJpY2UhLnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHdhbGxldCBmbHVzaCBmb3J3YXJkZXIgdHJhbnNhY3Rpb24gd2l0aCBmb3J3YXJkZXIgVmVyc2lvbiA0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiA0LFxuICAgICAgfSk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2Vucyk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SnNvbi5fdHlwZS5zaG91bGQuZXF1YWxzKEVUSFRyYW5zYWN0aW9uVHlwZS5MRUdBQ1kpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlIHdhbGxldCBmbHVzaCBmb3J3YXJkZXIgdHJhbnNhY3Rpb24gd2l0aCBmb3J3YXJkZXIgVmVyc2lvbiA0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiA0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eEJ1aWRlckZyb21SYXc6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICAgIHR4QnVpZGVyRnJvbVJhdy5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHhCdWlkZXJGcm9tUmF3LmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSByZXN1bHQudG9Kc29uKCk7XG4gICAgICB0eEpzb24udG8uc2hvdWxkLmVxdWFsKCcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5jb250YWluRXFsKCdiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlIHdhbGxldCBmbHVzaCBmb3J3YXJkZXIgdHJhbnNhY3Rpb24gd2l0aCBmb3J3YXJkZXIgVmVyc2lvbiA8IDQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICAgIGZvcndhcmRlclZlcnNpb246IDIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4QnVpZGVyRnJvbVJhdzogYW55ID0gZ2V0QnVpbGRlcigndGV0aCcpO1xuICAgICAgdHhCdWlkZXJGcm9tUmF3LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0eEJ1aWRlckZyb21SYXcuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHJlc3VsdC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi50by5zaG91bGQuZXF1YWwoJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoJ2JjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5jb250YWluRXFsKCc1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgZmx1c2ggdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gbm93IHJlYnVpbGQgZnJvbSB0aGUgc2lnbmVkIHNlcmlhbGl6ZWQgdHggYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cyB0aGUgc2FtZVxuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyOiBhbnkgPSBnZXRCdWlsZGVyKCd0ZXRoJyk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgICBuZXdUeC50b0pzb24oKS5kYXRhLnNob3VsZC5zdGFydFdpdGgoZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Kc29uKCkudiwgJzB4NzcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNpZ25lZCBmbHVzaCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICAgIGtleTogZGVmYXVsdEtleVBhaXIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBub3cgcmVidWlsZCBmcm9tIHRoZSBzaWduZWQgc2VyaWFsaXplZCB0eCBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzIHRoZSBzYW1lXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzZXJpYWxpemVkKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC5pZCwgJzB4NWJmZDRjNmI5YWU5ZGZiYzllMDYyMjQ3YzBkZWJlNGUxYzY4NzBhNzZjNDIwY2U3ZjZlMzM1MzkwNDIwZGNkNicpO1xuICAgICAgY29uc3QgdHhKc29uID0gbmV3VHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5yKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24ucyk7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLmZyb20pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwgdG8gYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aG91dCBmZWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGZlZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aG91dCBjb250cmFjdEFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgY29udHJhY3QgYWRkcmVzcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciBWNCB0cmFuc2FjdGlvbiB3aXRoIGRpZmZlcmVudCBjb250cmFjdCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogNCxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgY29udHJhY3QgYWRkcmVzczogMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRob3V0IHRva2VuQWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyB0b2tlbiBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRob3V0IGZvcndhcmRlckFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBmb3J3YXJkZXIgYWRkcmVzcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIGNvdW50ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAtMSxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgY291bnRlcjogLTEnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/send.ts"],"names":[],"mappings":""}