@bitgo-beta/sdk-coin-polyx 1.0.0-alpha.21 → 1.0.0-alpha.211

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 (225) 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/baseBuilder.d.ts +24 -0
  5. package/dist/src/lib/baseBuilder.d.ts.map +1 -0
  6. package/dist/src/lib/baseBuilder.js +31 -0
  7. package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
  8. package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/batchStakingBuilder.js +302 -0
  10. package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
  11. package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/batchUnstakingBuilder.js +129 -0
  13. package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
  14. package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/bondExtraBuilder.js +103 -0
  16. package/dist/src/lib/constants.d.ts +21 -0
  17. package/dist/src/lib/constants.d.ts.map +1 -0
  18. package/dist/src/lib/constants.js +24 -0
  19. package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
  20. package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
  22. package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
  23. package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/hexTransferBuilder.js +51 -0
  25. package/dist/src/lib/iface.d.ts +249 -0
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +48 -1
  28. package/dist/src/lib/index.d.ts +36 -0
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +82 -5
  31. package/dist/src/lib/nominateBuilder.d.ts +18 -0
  32. package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/nominateBuilder.js +101 -0
  34. package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
  35. package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/preApproveAssetBuilder.js +77 -0
  37. package/dist/src/lib/registerDidWithCDDBuilder.d.ts +7 -2
  38. package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/registerDidWithCDDBuilder.js +22 -3
  40. package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
  41. package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/rejectInstructionBuilder.js +89 -0
  43. package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
  44. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/tokenTransferBuilder.js +167 -0
  46. package/dist/src/lib/transaction.d.ts +30 -0
  47. package/dist/src/lib/transaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction.js +211 -0
  49. package/dist/src/lib/transactionBuilderFactory.d.ts +59 -1
  50. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  51. package/dist/src/lib/transactionBuilderFactory.js +288 -8
  52. package/dist/src/lib/transferBuilder.d.ts +4 -2
  53. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  54. package/dist/src/lib/transferBuilder.js +12 -5
  55. package/dist/src/lib/txnSchema.d.ts +67 -0
  56. package/dist/src/lib/txnSchema.d.ts.map +1 -1
  57. package/dist/src/lib/txnSchema.js +231 -2
  58. package/dist/src/lib/unbondBuilder.d.ts +37 -0
  59. package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/unbondBuilder.js +100 -0
  61. package/dist/src/lib/utils.d.ts +40 -0
  62. package/dist/src/lib/utils.d.ts.map +1 -1
  63. package/dist/src/lib/utils.js +94 -1
  64. package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
  65. package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
  67. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
  68. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
  70. package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
  71. package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/v8BondExtraBuilder.js +21 -0
  73. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
  74. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
  76. package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
  77. package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/v8HexTransferBuilder.js +21 -0
  79. package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
  80. package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
  81. package/dist/src/lib/v8NominateBuilder.js +21 -0
  82. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
  83. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
  85. package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
  86. package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
  87. package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
  88. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
  89. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  90. package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
  91. package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
  92. package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
  93. package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
  94. package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
  95. package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
  96. package/dist/src/lib/v8TransferBuilder.js +21 -0
  97. package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
  98. package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
  99. package/dist/src/lib/v8UnbondBuilder.js +21 -0
  100. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
  101. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
  102. package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
  103. package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
  104. package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
  105. package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
  106. package/dist/src/polyx.d.ts +51 -9
  107. package/dist/src/polyx.d.ts.map +1 -1
  108. package/dist/src/polyx.js +272 -15
  109. package/dist/src/polyxToken.d.ts +20 -0
  110. package/dist/src/polyxToken.d.ts.map +1 -0
  111. package/dist/src/polyxToken.js +55 -0
  112. package/dist/src/register.d.ts.map +1 -1
  113. package/dist/src/register.js +5 -1
  114. package/dist/src/resources/index.d.ts +2 -0
  115. package/dist/src/resources/index.d.ts.map +1 -1
  116. package/dist/src/resources/index.js +3 -1
  117. package/dist/src/resources/mainnetV8.d.ts +13 -0
  118. package/dist/src/resources/mainnetV8.d.ts.map +1 -0
  119. package/dist/src/resources/mainnetV8.js +24 -0
  120. package/dist/src/resources/testnetV8.d.ts +13 -0
  121. package/dist/src/resources/testnetV8.d.ts.map +1 -0
  122. package/dist/src/resources/testnetV8.js +16 -0
  123. package/dist/src/tpolyx.d.ts +7 -0
  124. package/dist/src/tpolyx.d.ts.map +1 -1
  125. package/dist/src/tpolyx.js +11 -1
  126. package/dist/test/integration/index.d.ts +1 -0
  127. package/dist/test/integration/index.d.ts.map +1 -0
  128. package/dist/test/integration/index.js +1 -0
  129. package/dist/test/resources/index.d.ts +139 -0
  130. package/dist/test/resources/index.d.ts.map +1 -0
  131. package/dist/test/resources/index.js +150 -0
  132. package/dist/test/resources/mainnet.d.ts +2 -0
  133. package/dist/test/resources/mainnet.d.ts.map +1 -0
  134. package/dist/test/resources/mainnet.js +5 -0
  135. package/dist/test/resources/materialData.json +8 -0
  136. package/dist/test/resources/materialDataModified.json +8 -0
  137. package/dist/test/resources/testnet.d.ts +2 -0
  138. package/dist/test/resources/testnet.d.ts.map +1 -0
  139. package/dist/test/resources/testnet.js +5 -0
  140. package/dist/test/resources/wrwUsers.d.ts +19 -0
  141. package/dist/test/resources/wrwUsers.d.ts.map +1 -0
  142. package/dist/test/resources/wrwUsers.js +60 -0
  143. package/dist/test/unit/polyx.d.ts +2 -0
  144. package/dist/test/unit/polyx.d.ts.map +1 -0
  145. package/dist/test/unit/polyx.js +356 -0
  146. package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
  147. package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
  148. package/dist/test/unit/transactionBuilder/base.js +245 -0
  149. package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
  150. package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
  151. package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +309 -0
  152. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
  153. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
  154. package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
  155. package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
  156. package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
  157. package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
  158. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts +2 -0
  159. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
  160. package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
  161. package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
  162. package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
  163. package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
  164. package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
  165. package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
  166. package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -0
  167. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
  168. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
  169. package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
  170. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
  171. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
  172. package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
  173. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts +2 -0
  174. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
  175. package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -0
  176. package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
  177. package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
  178. package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
  179. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  180. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  181. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -0
  182. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  183. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  184. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +240 -0
  185. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  186. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  187. package/dist/test/unit/transactionBuilder/transferBuilder.js +326 -0
  188. package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
  189. package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
  190. package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
  191. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
  192. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
  193. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
  194. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
  195. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
  196. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
  197. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
  198. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
  199. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
  200. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
  201. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
  202. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
  203. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
  204. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
  205. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
  206. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
  207. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  208. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
  209. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
  210. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
  211. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
  212. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
  213. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
  214. package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
  215. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
  216. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
  217. package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -0
  218. package/dist/test/unit/utils.d.ts +2 -0
  219. package/dist/test/unit/utils.d.ts.map +1 -0
  220. package/dist/test/unit/utils.js +143 -0
  221. package/dist/tsconfig.tsbuildinfo +1 -0
  222. package/package.json +15 -9
  223. package/.eslintignore +0 -4
  224. package/.mocharc.yml +0 -8
  225. package/CHANGELOG.md +0 -22
@@ -0,0 +1,158 @@
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 txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const should_1 = __importDefault(require("should"));
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ const lib_1 = require("../../../src/lib");
11
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
12
+ const utils_1 = __importDefault(require("../../../src/lib/utils"));
13
+ const resources_1 = require("../../resources");
14
+ function createMockTransaction(txData) {
15
+ return {
16
+ id: '123',
17
+ type: sdk_core_1.TransactionType.StakingActivate,
18
+ toBroadcastFormat: () => txData,
19
+ inputs: [],
20
+ outputs: [],
21
+ signature: ['mock-signature'],
22
+ toJson: () => ({
23
+ id: '123',
24
+ type: 'StakingActivate',
25
+ sender: resources_1.accounts.account1.address,
26
+ referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
27
+ blockNumber: 100,
28
+ genesisHash: '0x',
29
+ nonce: 1,
30
+ tip: 0,
31
+ specVersion: 1,
32
+ transactionVersion: 1,
33
+ chainName: 'Polymesh',
34
+ inputs: [],
35
+ outputs: [],
36
+ }),
37
+ };
38
+ }
39
+ describe('Polyx BondExtra Builder', function () {
40
+ let builder;
41
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
42
+ const senderAddress = resources_1.accounts.account1.address;
43
+ const testAmount = '10000';
44
+ beforeEach(() => {
45
+ builder = factory.getBondExtraBuilder();
46
+ });
47
+ describe('setter validation', () => {
48
+ it('should validate staking amount', () => {
49
+ const spy = sinon_1.default.spy(builder, 'validateValue');
50
+ should_1.default.throws(() => builder.amount('-1'), /Value cannot be less than zero/);
51
+ should_1.default.doesNotThrow(() => builder.amount('1000'));
52
+ sinon_1.default.assert.calledTwice(spy);
53
+ });
54
+ });
55
+ describe('Build and Sign', function () {
56
+ it('should build a bondExtra transaction', async () => {
57
+ builder
58
+ .amount(testAmount)
59
+ .sender({ address: senderAddress })
60
+ .validity({ firstValid: 3933, maxDuration: 64 })
61
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
62
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
63
+ const mockTx = createMockTransaction(resources_1.stakingTx.bondExtra.unsigned);
64
+ sinon_1.default.stub(builder, 'build').resolves(mockTx);
65
+ const tx = await builder.build();
66
+ should_1.default.exist(tx);
67
+ should_1.default.equal(builder.getAmount(), testAmount);
68
+ });
69
+ });
70
+ describe('Transaction Validation', function () {
71
+ it('should build, decode, and validate a real bondExtra transaction', () => {
72
+ // Build the transaction with real parameters
73
+ builder
74
+ .amount(testAmount)
75
+ .sender({ address: senderAddress })
76
+ .validity({ firstValid: 3933, maxDuration: 64 })
77
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
78
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
79
+ // Set up material for decoding
80
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
81
+ builder.material(material);
82
+ // Build the actual unsigned transaction
83
+ const unsignedTx = builder['buildTransaction']();
84
+ const registry = builder['_registry'];
85
+ // Decode the actual built transaction
86
+ const decodedTx = (0, txwrapper_polkadot_1.decode)(unsignedTx, {
87
+ metadataRpc: material.metadata,
88
+ registry: registry,
89
+ });
90
+ // Validate the decoded transaction structure
91
+ should_1.default.equal(decodedTx.method.name, 'bondExtra');
92
+ should_1.default.equal(decodedTx.method.pallet, 'staking');
93
+ const bondExtraArgs = decodedTx.method.args;
94
+ should_1.default.equal(bondExtraArgs.maxAdditional, testAmount);
95
+ // validate using the builder's validation method
96
+ should_1.default.doesNotThrow(() => {
97
+ builder.validateDecodedTransaction(decodedTx);
98
+ });
99
+ });
100
+ it('should reject non-bondExtra transactions', () => {
101
+ const mockDecodedTx = {
102
+ method: {
103
+ name: 'bond',
104
+ pallet: 'staking',
105
+ args: {},
106
+ },
107
+ };
108
+ should_1.default.throws(() => {
109
+ builder.validateDecodedTransaction(mockDecodedTx);
110
+ }, /Invalid transaction type/);
111
+ });
112
+ it('should validate amount is positive', () => {
113
+ should_1.default.doesNotThrow(() => {
114
+ builder.validateAmount('2000');
115
+ });
116
+ should_1.default.doesNotThrow(() => {
117
+ builder.validateAmount('500');
118
+ });
119
+ should_1.default.doesNotThrow(() => {
120
+ builder.validateAmount('1');
121
+ });
122
+ should_1.default.doesNotThrow(() => {
123
+ builder.validateAmount('0.0001');
124
+ });
125
+ should_1.default.throws(() => {
126
+ builder.validateAmount('0');
127
+ }, /must be a positive number/);
128
+ should_1.default.throws(() => {
129
+ builder.validateAmount('-10');
130
+ }, /must be a positive number/);
131
+ });
132
+ });
133
+ describe('From Raw Transaction', function () {
134
+ it('should rebuild from real bondExtra transaction', async () => {
135
+ // First build a transaction to get a real raw transaction
136
+ const originalBuilder = factory.getBondExtraBuilder();
137
+ originalBuilder
138
+ .amount(testAmount)
139
+ .sender({ address: senderAddress })
140
+ .validity({ firstValid: 3933, maxDuration: 64 })
141
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
142
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 100 });
143
+ // Set up material
144
+ const material = utils_1.default.getMaterial(statics_1.coins.get('tpolyx').network.type);
145
+ originalBuilder.material(material);
146
+ // Build the transaction and get the serialized hex
147
+ const tx = await originalBuilder.build();
148
+ const rawTxHex = tx.toBroadcastFormat();
149
+ // Create a new builder and reconstruct from the transaction hex
150
+ const newBuilder = factory.getBondExtraBuilder();
151
+ newBuilder.material(material);
152
+ newBuilder.from(rawTxHex);
153
+ // Verify the reconstructed builder has the same parameters
154
+ should_1.default.equal(newBuilder.getAmount(), testAmount);
155
+ });
156
+ });
157
+ });
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uZEV4dHJhQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvYm9uZEV4dHJhQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLHNFQUF1RDtBQUN2RCxpREFBNEM7QUFDNUMsb0RBQTRCO0FBQzVCLGtEQUEwQjtBQUMxQiwwQ0FBNEY7QUFDNUYsbURBQXVEO0FBQ3ZELG1FQUEyQztBQUUzQywrQ0FBc0Q7QUFFdEQsU0FBUyxxQkFBcUIsQ0FBQyxNQUFjO0lBQzNDLE9BQU87UUFDTCxFQUFFLEVBQUUsS0FBSztRQUNULElBQUksRUFBRSwwQkFBZSxDQUFDLGVBQWU7UUFDckMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTTtRQUMvQixNQUFNLEVBQUUsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDYixFQUFFLEVBQUUsS0FBSztZQUNULElBQUksRUFBRSxpQkFBaUI7WUFDdkIsTUFBTSxFQUFFLG9CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDakMsY0FBYyxFQUFFLG9FQUFvRTtZQUNwRixXQUFXLEVBQUUsR0FBRztZQUNoQixXQUFXLEVBQUUsSUFBSTtZQUNqQixLQUFLLEVBQUUsQ0FBQztZQUNSLEdBQUcsRUFBRSxDQUFDO1lBQ04sV0FBVyxFQUFFLENBQUM7WUFDZCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMseUJBQXlCLEVBQUU7SUFDbEMsSUFBSSxPQUF5QixDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUks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LGVBQWU7aUJBQ1osTUFBTSxDQUFDLFVBQVUsQ0FBQztpQkFDbEIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO2lCQUNsQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDL0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDO2lCQUNwRixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFL0Qsa0JBQWtCO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyxXQUFXLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVuQyxtREFBbUQ7WUFDbkQsTUFBTSxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFeEMsZ0VBQWdFO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUxQiwyREFBMkQ7WUFDM0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlY29kZWRTaWduaW5nUGF5bG9hZCB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBCb25kRXh0cmFCdWlsZGVyLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5pbXBvcnQgeyBhY2NvdW50cywgc3Rha2luZ1R4IH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcblxuZnVuY3Rpb24gY3JlYXRlTW9ja1RyYW5zYWN0aW9uKHR4RGF0YTogc3RyaW5nKTogUGFydGlhbDxUcmFuc2FjdGlvbj4ge1xuICByZXR1cm4ge1xuICAgIGlkOiAnMTIzJyxcbiAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlLFxuICAgIHRvQnJvYWRjYXN0Rm9ybWF0OiAoKSA9PiB0eERhdGEsXG4gICAgaW5wdXRzOiBbXSxcbiAgICBvdXRwdXRzOiBbXSxcbiAgICBzaWduYXR1cmU6IFsnbW9jay1zaWduYXR1cmUnXSxcbiAgICB0b0pzb246ICgpID0+ICh7XG4gICAgICBpZDogJzEyMycsXG4gICAgICB0eXBlOiAnU3Rha2luZ0FjdGl2YXRlJyxcbiAgICAgIHNlbmRlcjogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICAgIHJlZmVyZW5jZUJsb2NrOiAnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyxcbiAgICAgIGJsb2NrTnVtYmVyOiAxMDAsXG4gICAgICBnZW5lc2lzSGFzaDogJzB4JyxcbiAgICAgIG5vbmNlOiAxLFxuICAgICAgdGlwOiAwLFxuICAgICAgc3BlY1ZlcnNpb246IDEsXG4gICAgICB0cmFuc2FjdGlvblZlcnNpb246IDEsXG4gICAgICBjaGFpbk5hbWU6ICdQb2x5bWVzaCcsXG4gICAgICBpbnB1dHM6IFtdLFxuICAgICAgb3V0cHV0czogW10sXG4gICAgfSksXG4gIH07XG59XG5cbmRlc2NyaWJlKCdQb2x5eCBCb25kRXh0cmEgQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJ1aWxkZXI6IEJvbmRFeHRyYUJ1aWxkZXI7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3Rwb2x5eCcpKTtcblxuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcztcbiAgY29uc3QgdGVzdEFtb3VudCA9ICcxMDAwMCc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYnVpbGRlciA9IGZhY3RvcnkuZ2V0Qm9uZEV4dHJhQnVpbGRlcigpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0dGVyIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzdGFraW5nIGFtb3VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweShidWlsZGVyLCAndmFsaWRhdGVWYWx1ZScpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLmFtb3VudCgnLTEnKSwgL1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby8pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLmFtb3VudCgnMTAwMCcpKTtcbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGQgYW5kIFNpZ24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIGJvbmRFeHRyYSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCh0ZXN0QW1vdW50KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tUeCA9IGNyZWF0ZU1vY2tUcmFuc2FjdGlvbihzdGFraW5nVHguYm9uZEV4dHJhLnVuc2lnbmVkKTtcbiAgICAgIHNpbm9uLnN0dWIoYnVpbGRlciwgJ2J1aWxkJykucmVzb2x2ZXMobW9ja1R4IGFzIFRyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXhpc3QodHgpO1xuXG4gICAgICBzaG91bGQuZXF1YWwoYnVpbGRlci5nZXRBbW91bnQoKSwgdGVzdEFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQsIGRlY29kZSwgYW5kIHZhbGlkYXRlIGEgcmVhbCBib25kRXh0cmEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICAvLyBCdWlsZCB0aGUgdHJhbnNhY3Rpb24gd2l0aCByZWFsIHBhcmFtZXRlcnNcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCh0ZXN0QW1vdW50KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyQWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxMDAgfSk7XG5cbiAgICAgIC8vIFNldCB1cCBtYXRlcmlhbCBmb3IgZGVjb2RpbmdcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgYnVpbGRlci5tYXRlcmlhbChtYXRlcmlhbCk7XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSBhY3R1YWwgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHVuc2lnbmVkVHggPSBidWlsZGVyWydidWlsZFRyYW5zYWN0aW9uJ10oKTtcbiAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYnVpbGRlclsnX3JlZ2lzdHJ5J107XG5cbiAgICAgIC8vIERlY29kZSB0aGUgYWN0dWFsIGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodW5zaWduZWRUeCwge1xuICAgICAgICBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLm5hbWUsICdib25kRXh0cmEnKTtcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLnBhbGxldCwgJ3N0YWtpbmcnKTtcblxuICAgICAgY29uc3QgYm9uZEV4dHJhQXJncyA9IGRlY29kZWRUeC5tZXRob2QuYXJncyBhcyB7IG1heEFkZGl0aW9uYWw6IHN0cmluZyB9O1xuICAgICAgc2hvdWxkLmVxdWFsKGJvbmRFeHRyYUFyZ3MubWF4QWRkaXRpb25hbCwgdGVzdEFtb3VudCk7XG5cbiAgICAgIC8vIHZhbGlkYXRlIHVzaW5nIHRoZSBidWlsZGVyJ3MgdmFsaWRhdGlvbiBtZXRob2RcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5vbi1ib25kRXh0cmEgdHJhbnNhY3Rpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja0RlY29kZWRUeDogRGVjb2RlZFNpZ25pbmdQYXlsb2FkID0ge1xuICAgICAgICBtZXRob2Q6IHtcbiAgICAgICAgICBuYW1lOiAnYm9uZCcsXG4gICAgICAgICAgcGFsbGV0OiAnc3Rha2luZycsXG4gICAgICAgICAgYXJnczoge30sXG4gICAgICAgIH0sXG4gICAgICB9IGFzIHVua25vd24gYXMgRGVjb2RlZFNpZ25pbmdQYXlsb2FkO1xuXG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci52YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbihtb2NrRGVjb2RlZFR4KTtcbiAgICAgIH0sIC9JbnZhbGlkIHRyYW5zYWN0aW9uIHR5cGUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW1vdW50IGlzIHBvc2l0aXZlJywgKCkgPT4ge1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudmFsaWRhdGVBbW91bnQoJzIwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci52YWxpZGF0ZUFtb3VudCgnNTAwJyk7XG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudmFsaWRhdGVBbW91bnQoJzEnKTtcbiAgICAgIH0pO1xuXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci52YWxpZGF0ZUFtb3VudCgnMC4wMDAxJyk7XG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudmFsaWRhdGVBbW91bnQoJzAnKTtcbiAgICAgIH0sIC9tdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLyk7XG5cbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBidWlsZGVyLnZhbGlkYXRlQW1vdW50KCctMTAnKTtcbiAgICAgIH0sIC9tdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGcm9tIFJhdyBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJlYnVpbGQgZnJvbSByZWFsIGJvbmRFeHRyYSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEZpcnN0IGJ1aWxkIGEgdHJhbnNhY3Rpb24gdG8gZ2V0IGEgcmVhbCByYXcgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IG9yaWdpbmFsQnVpbGRlciA9IGZhY3RvcnkuZ2V0Qm9uZEV4dHJhQnVpbGRlcigpO1xuICAgICAgb3JpZ2luYWxCdWlsZGVyXG4gICAgICAgIC5hbW91bnQodGVzdEFtb3VudClcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTAwIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgbWF0ZXJpYWxcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gdXRpbHMuZ2V0TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgb3JpZ2luYWxCdWlsZGVyLm1hdGVyaWFsKG1hdGVyaWFsKTtcblxuICAgICAgLy8gQnVpbGQgdGhlIHRyYW5zYWN0aW9uIGFuZCBnZXQgdGhlIHNlcmlhbGl6ZWQgaGV4XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IG9yaWdpbmFsQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3VHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgYnVpbGRlciBhbmQgcmVjb25zdHJ1Y3QgZnJvbSB0aGUgdHJhbnNhY3Rpb24gaGV4XG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gZmFjdG9yeS5nZXRCb25kRXh0cmFCdWlsZGVyKCk7XG4gICAgICBuZXdCdWlsZGVyLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIG5ld0J1aWxkZXIuZnJvbShyYXdUeEhleCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgcmVjb25zdHJ1Y3RlZCBidWlsZGVyIGhhcyB0aGUgc2FtZSBwYXJhbWV0ZXJzXG4gICAgICBzaG91bGQuZXF1YWwobmV3QnVpbGRlci5nZXRBbW91bnQoKSwgdGVzdEFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hexTokenTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hexTokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/hexTokenTransferBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,261 @@
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 statics_1 = require("@bitgo-beta/statics");
8
+ const lib_1 = require("../../../src/lib");
9
+ const src_1 = require("../../../src");
10
+ const resources_1 = require("../../resources");
11
+ const base_1 = require("./base");
12
+ const NEW_MEMO_HEX = {
13
+ 0: '0x3000000000000000000000000000000000000000000000000000000000000000',
14
+ 56594: '0x3536353934000000000000000000000000000000000000000000000000000000',
15
+ testmemo: '0x746573746d656d6f000000000000000000000000000000000000000000000000',
16
+ 102329716: '0x3130323332393731360000000000000000000000000000000000000000000000',
17
+ };
18
+ const senderDID = '0x28e8649fec23dd688090b9b5bb950fd34bf20a014cf05542e3ad0264915ee775';
19
+ const receiverDID = '0x9202856204a721d2f5e8b85408067d54f1ca84390bf4f558b5615a5a6d3bddb8';
20
+ const assetId = '0x780602887b358cf48989d0d9aa6c8d28';
21
+ const commonBuilderParams = (builder, sender) => {
22
+ return builder
23
+ .toDID(receiverDID)
24
+ .fromDID(senderDID)
25
+ .assetId(assetId)
26
+ .amount('100')
27
+ .sender({ address: sender.address })
28
+ .validity({ firstValid: 3933, maxDuration: 64 })
29
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
30
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
31
+ .fee({ amount: 0, type: 'tip' });
32
+ };
33
+ describe('HexTokenTransferBuilder — memo encoding', () => {
34
+ let builder;
35
+ beforeEach(() => {
36
+ const config = (0, base_1.buildTestConfig)();
37
+ builder = new lib_1.HexTokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
38
+ });
39
+ describe('memo() produces NEW encoding', () => {
40
+ it('encodes "0"', () => {
41
+ builder.memo('0');
42
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['0']);
43
+ });
44
+ it('encodes "56594"', () => {
45
+ builder.memo('56594');
46
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['56594']);
47
+ });
48
+ it('encodes "testmemo"', () => {
49
+ builder.memo('testmemo');
50
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['testmemo']);
51
+ });
52
+ it('encodes "102329716"', () => {
53
+ builder.memo('102329716');
54
+ should_1.default.equal(builder._memo, NEW_MEMO_HEX['102329716']);
55
+ });
56
+ it('stores an already-encoded 0x hex memo as-is (round-trip)', () => {
57
+ const alreadyEncoded = NEW_MEMO_HEX['56594'];
58
+ builder.memo(alreadyEncoded);
59
+ should_1.default.equal(builder._memo, alreadyEncoded);
60
+ });
61
+ });
62
+ describe('NEW encoding differs from OLD encoding', () => {
63
+ it('produces different bytes than TokenTransferBuilder for "56594"', () => {
64
+ const config = (0, base_1.buildTestConfig)();
65
+ const oldBuilder = new lib_1.TokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
66
+ const newBuilder = new lib_1.HexTokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
67
+ oldBuilder.memo('56594');
68
+ newBuilder.memo('56594');
69
+ const oldMemo = oldBuilder._memo;
70
+ const newMemo = newBuilder._memo;
71
+ should_1.default.notEqual(oldMemo, newMemo);
72
+ should_1.default.ok(!oldMemo.startsWith('0x'), `OLD memo should not start with 0x, got: ${oldMemo}`);
73
+ should_1.default.ok(newMemo.startsWith('0x'), `NEW memo should start with 0x, got: ${newMemo}`);
74
+ should_1.default.equal(newMemo, NEW_MEMO_HEX['56594']);
75
+ });
76
+ it('produces different bytes than TokenTransferBuilder for "0"', () => {
77
+ const config = (0, base_1.buildTestConfig)();
78
+ const oldBuilder = new lib_1.TokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
79
+ const newBuilder = new lib_1.HexTokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
80
+ oldBuilder.memo('0');
81
+ newBuilder.memo('0');
82
+ should_1.default.notEqual(oldBuilder._memo, newBuilder._memo);
83
+ });
84
+ });
85
+ });
86
+ describe('HexTokenTransferBuilder — build transaction', () => {
87
+ const sender = resources_1.accounts.rbitgoTokenOwner;
88
+ let builder;
89
+ beforeEach(() => {
90
+ const config = (0, base_1.buildTestConfig)();
91
+ builder = new lib_1.HexTokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
92
+ });
93
+ it('should build a valid addAndAffirmWithMediators tx with NEW memo "56594"', async () => {
94
+ commonBuilderParams(builder, sender).memo('56594');
95
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
96
+ const tx = await builder.build();
97
+ const txJson = tx.toJson();
98
+ should_1.default.deepEqual(txJson.amount, '100');
99
+ should_1.default.deepEqual(txJson.toDID, receiverDID);
100
+ should_1.default.deepEqual(txJson.fromDID, senderDID);
101
+ should_1.default.deepEqual(txJson.assetId, assetId);
102
+ should_1.default.deepEqual(txJson.memo, NEW_MEMO_HEX['56594']);
103
+ });
104
+ it('should build a valid tx with NEW memo "testmemo"', async () => {
105
+ commonBuilderParams(builder, sender).memo('testmemo');
106
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
107
+ const tx = await builder.build();
108
+ should_1.default.deepEqual(tx.toJson().memo, NEW_MEMO_HEX['testmemo']);
109
+ });
110
+ it('should build a valid tx with NEW memo "0" (default)', async () => {
111
+ commonBuilderParams(builder, sender).memo('0');
112
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
113
+ const tx = await builder.build();
114
+ should_1.default.deepEqual(tx.toJson().memo, NEW_MEMO_HEX['0']);
115
+ });
116
+ it('should build a valid tx with NEW memo "102329716"', async () => {
117
+ commonBuilderParams(builder, sender).memo('102329716');
118
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
119
+ const tx = await builder.build();
120
+ should_1.default.deepEqual(tx.toJson().memo, NEW_MEMO_HEX['102329716']);
121
+ });
122
+ it('raw transaction bytes differ between OLD and NEW builder for same memo', async () => {
123
+ const config = (0, base_1.buildTestConfig)();
124
+ const material = src_1.utils.getMaterial(config.network.type);
125
+ const buildOld = async () => {
126
+ const b = new lib_1.TokenTransferBuilder(config)
127
+ .material(material)
128
+ .toDID(receiverDID)
129
+ .fromDID(senderDID)
130
+ .assetId(assetId)
131
+ .amount('100')
132
+ .memo('56594')
133
+ .sender({ address: sender.address })
134
+ .validity({ firstValid: 3933, maxDuration: 64 })
135
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
136
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
137
+ .fee({ amount: 0, type: 'tip' });
138
+ b.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
139
+ return (await b.build()).toBroadcastFormat();
140
+ };
141
+ const buildNew = async () => {
142
+ const b = new lib_1.HexTokenTransferBuilder(config)
143
+ .material(material)
144
+ .toDID(receiverDID)
145
+ .fromDID(senderDID)
146
+ .assetId(assetId)
147
+ .amount('100')
148
+ .memo('56594')
149
+ .sender({ address: sender.address })
150
+ .validity({ firstValid: 3933, maxDuration: 64 })
151
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
152
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
153
+ .fee({ amount: 0, type: 'tip' });
154
+ b.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
155
+ return (await b.build()).toBroadcastFormat();
156
+ };
157
+ should_1.default.notEqual(await buildOld(), await buildNew());
158
+ });
159
+ });
160
+ describe('HexTokenTransferBuilder — factory.from() round-trip', () => {
161
+ const sender = resources_1.accounts.rbitgoTokenOwner;
162
+ const commonParams = {
163
+ firstValid: 3933,
164
+ maxDuration: 64,
165
+ referenceBlock: '0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d',
166
+ nonce: 200,
167
+ };
168
+ let factory;
169
+ beforeEach(() => {
170
+ factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
171
+ });
172
+ const buildSigned = async (memo) => {
173
+ const config = (0, base_1.buildTestConfig)();
174
+ const b = new lib_1.HexTokenTransferBuilder(config)
175
+ .material(src_1.utils.getMaterial(config.network.type))
176
+ .toDID(receiverDID)
177
+ .fromDID(senderDID)
178
+ .assetId(assetId)
179
+ .amount('100')
180
+ .memo(memo)
181
+ .sender({ address: sender.address })
182
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
183
+ .referenceBlock(commonParams.referenceBlock)
184
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
185
+ .fee({ amount: 0, type: 'tip' });
186
+ b.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
187
+ return (await b.build()).toBroadcastFormat();
188
+ };
189
+ it('factory.from() returns HexTokenTransferBuilder for a NEW-encoded token transfer', async () => {
190
+ const serialized = await buildSigned('56594');
191
+ const rebuilt = factory.from(serialized);
192
+ rebuilt.should.be.instanceOf(lib_1.HexTokenTransferBuilder);
193
+ });
194
+ it('factory.from() returns TokenTransferBuilder (not Hex) for an OLD-encoded token transfer', async () => {
195
+ const config = (0, base_1.buildTestConfig)();
196
+ const b = new lib_1.TokenTransferBuilder(config)
197
+ .material(src_1.utils.getMaterial(config.network.type))
198
+ .toDID(receiverDID)
199
+ .fromDID(senderDID)
200
+ .assetId(assetId)
201
+ .amount('100')
202
+ .memo('56594')
203
+ .sender({ address: sender.address })
204
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
205
+ .referenceBlock(commonParams.referenceBlock)
206
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: commonParams.nonce })
207
+ .fee({ amount: 0, type: 'tip' });
208
+ b.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
209
+ const serialized = (await b.build()).toBroadcastFormat();
210
+ const rebuilt = factory.from(serialized);
211
+ rebuilt.should.be.instanceOf(lib_1.TokenTransferBuilder);
212
+ rebuilt.should.not.be.instanceOf(lib_1.HexTokenTransferBuilder);
213
+ });
214
+ it('round-trip preserves memo bytes for multiple memos', async () => {
215
+ for (const memo of ['56594', 'testmemo', '0', '102329716']) {
216
+ const original = await buildSigned(memo);
217
+ const rebuilt = factory
218
+ .from(original)
219
+ .validity({ firstValid: commonParams.firstValid, maxDuration: commonParams.maxDuration })
220
+ .referenceBlock(commonParams.referenceBlock);
221
+ const roundTripped = (await rebuilt.build()).toBroadcastFormat();
222
+ should_1.default.equal(roundTripped, original, `round-trip failed for memo "${memo}"`);
223
+ }
224
+ });
225
+ it('rebuilt tx has correct _memo value after round-trip', async () => {
226
+ const serialized = await buildSigned('56594');
227
+ const rebuilt = factory.from(serialized);
228
+ should_1.default.equal(rebuilt._memo, NEW_MEMO_HEX['56594']);
229
+ });
230
+ });
231
+ describe('HexTokenTransferBuilder — memo validation', () => {
232
+ let builder;
233
+ beforeEach(() => {
234
+ const config = (0, base_1.buildTestConfig)();
235
+ builder = new lib_1.HexTokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
236
+ });
237
+ it('throws when memo exceeds 32 UTF-8 bytes', () => {
238
+ should_1.default.throws(() => builder.memo('a'.repeat(33)), /exceeds maximum length of 32 bytes/);
239
+ });
240
+ it('throws for invalid hex memo', () => {
241
+ should_1.default.throws(() => builder.memo('0x' + 'zz'.repeat(32)), /Invalid memo hex encoding/);
242
+ });
243
+ });
244
+ describe('TokenTransferBuilder — no regression from HexTokenTransferBuilder', () => {
245
+ it('OLD TokenTransferBuilder still produces OLD encoding for "56594"', () => {
246
+ const config = (0, base_1.buildTestConfig)();
247
+ const builder = new lib_1.TokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
248
+ builder.memo('56594');
249
+ const memo = builder._memo;
250
+ should_1.default.ok(!memo.startsWith('0x'), `OLD memo should not start with 0x, got: ${memo}`);
251
+ should_1.default.equal(memo, '00000000000000000000000000056594'.slice(-32));
252
+ });
253
+ it('OLD TokenTransferBuilder still produces OLD encoding for "0"', () => {
254
+ const config = (0, base_1.buildTestConfig)();
255
+ const builder = new lib_1.TokenTransferBuilder(config).material(src_1.utils.getMaterial(config.network.type));
256
+ builder.memo('0');
257
+ const memo = builder._memo;
258
+ should_1.default.equal(memo, '0'.padStart(32, '0'));
259
+ });
260
+ });
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2hleFRva2VuVHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLGlEQUE0QztBQUM1QywwQ0FBNEc7QUFDNUcsc0NBQXFDO0FBQ3JDLCtDQUE2RDtBQUM3RCxpQ0FBeUM7QUFFekMsTUFBTSxZQUFZLEdBQTJCO0lBQzNDLENBQUMsRUFBRSxvRUFBb0U7SUFDdkUsS0FBSyxFQUFFLG9FQUFvRTtJQUMzRSxRQUFRLEVBQUUsb0VBQW9FO0lBQzlFLFNBQVMsRUFBRSxvRUFBb0U7Q0FDaEYsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLG9FQUFvRSxDQUFDO0FBQ3ZGLE1BQU0sV0FBVyxHQUFHLG9FQUFvRSxDQUFDO0FBQ3pGLE1BQU0sT0FBTyxHQUFHLG9DQUFvQyxDQUFDO0FBRXJELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFnQyxFQUFFLE1BQTZDLEVBQUUsRUFBRTtJQUM5RyxPQUFPLE9BQU87U0FDWCxLQUFLLENBQUMsV0FBVyxDQUFDO1NBQ2xCLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDbEIsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2IsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNuQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUM7U0FDcEYsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUMzRCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxPQUFnQyxDQUFDO0lBRXJDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztRQUNqQyxPQUFPLEdBQUcsSUFBSSw2QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1FBQzVDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixnQkFBTSxDQUFDLEtBQUssQ0FBRSxPQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFFLE9BQWUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUIsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7WUFDbEUsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUUsT0FBZSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUN0RCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsR0FBRyxFQUFFO1lBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksMEJBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sVUFBVSxHQUFHLElBQUksNkJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXhHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6QixNQUFNLE9BQU8sR0FBSSxVQUFrQixDQUFDLEtBQUssQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBSSxVQUFrQixDQUFDLEtBQUssQ0FBQztZQUUxQyxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLDJDQUEyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsdUNBQXVDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdEYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLDBCQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyRyxNQUFNLFVBQVUsR0FBRyxJQUFJLDZCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUV4RyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFckIsZ0JBQU0sQ0FBQyxRQUFRLENBQUUsVUFBa0IsQ0FBQyxLQUFLLEVBQUcsVUFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO0lBQzNELE1BQU0sTUFBTSxHQUFHLG9CQUFRLENBQUMsZ0JBQWdCLENBQUM7SUFDekMsSUFBSSxPQUFnQyxDQUFDO0lBRXJDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztRQUNqQyxPQUFPLEdBQUcsSUFBSSw2QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkYsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RixNQUFNLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25FLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakUsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RCxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RixNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxXQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSwwQkFBb0IsQ0FBQyxNQUFNLENBQUM7aUJBQ3ZDLFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLEtBQUssQ0FBQyxXQUFXLENBQUM7aUJBQ2xCLE9BQU8sQ0FBQyxTQUFTLENBQUM7aUJBQ2xCLE9BQU8sQ0FBQyxPQUFPLENBQUM7aUJBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUM7aUJBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDYixNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNuQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDL0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDO2lCQUNwRixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2lCQUMzRCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLElBQUksNkJBQXVCLENBQUMsTUFBTSxDQUFDO2lCQUMxQyxRQUFRLENBQUMsUUFBUSxDQUFDO2lCQUNsQixLQUFLLENBQUMsV0FBVyxDQUFDO2lCQUNsQixPQUFPLENBQUMsU0FBUyxDQUFDO2lCQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDO2lCQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUNiLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ2IsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDbkMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQy9DLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQztpQkFDcEYsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztpQkFDM0QsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxDQUFDLENBQUM7UUFFRixnQkFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsRUFBRSxFQUFFLE1BQU0sUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsRUFBRTtJQUNuRSxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLGdCQUFnQixDQUFDO0lBQ3pDLE1BQU0sWUFBWSxHQUFHO1FBQ25CLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLG9FQUFvRTtRQUNwRixLQUFLLEVBQUUsR0FBRztLQUNYLENBQUM7SUFDRixJQUFJLE9BQWtDLENBQUM7SUFFdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLDZCQUF1QixDQUFDLE1BQU0sQ0FBQzthQUMxQyxRQUFRLENBQUMsV0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hELEtBQUssQ0FBQyxXQUFXLENBQUM7YUFDbEIsT0FBTyxDQUFDLFNBQVMsQ0FBQzthQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDO2FBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ1YsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNuQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO2FBQzNDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDL0MsQ0FBQyxDQUFDO0lBRUYsRUFBRSxDQUFDLGlGQUFpRixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9GLE1BQU0sVUFBVSxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLDZCQUF1QixDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseUZBQXlGLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkcsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSwwQkFBb0IsQ0FBQyxNQUFNLENBQUM7YUFDdkMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRCxLQUFLLENBQUMsV0FBVyxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxTQUFTLENBQUM7YUFDbEIsT0FBTyxDQUFDLE9BQU8sQ0FBQzthQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNiLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDbkMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN4RixjQUFjLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQzthQUMzQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMxRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQywwQkFBb0IsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsNkJBQXVCLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsRSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxPQUFPO2lCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDO2lCQUNkLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3hGLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkUsTUFBTSxVQUFVLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxnQkFBTSxDQUFDLEtBQUssQ0FBRSxPQUFlLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO0lBQ3pELElBQUksT0FBZ0MsQ0FBQztJQUVyQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxHQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLElBQUksNkJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUN6RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtJQUNqRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1FBQzFFLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEIsTUFBTSxJQUFJLEdBQUksT0FBZSxDQUFDLEtBQUssQ0FBQztRQUNwQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsMkNBQTJDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsTUFBTSxJQUFJLEdBQUksT0FBZSxDQUFDLEtBQUssQ0FBQztRQUNwQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyLCBUb2tlblRyYW5zZmVyQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnIH0gZnJvbSAnLi9iYXNlJztcblxuY29uc3QgTkVXX01FTU9fSEVYOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAwOiAnMHgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgNTY1OTQ6ICcweDM1MzYzNTM5MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICB0ZXN0bWVtbzogJzB4NzQ2NTczNzQ2ZDY1NmQ2ZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gIDEwMjMyOTcxNjogJzB4MzEzMDMyMzMzMjM5MzczMTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG59O1xuXG5jb25zdCBzZW5kZXJESUQgPSAnMHgyOGU4NjQ5ZmVjMjNkZDY4ODA5MGI5YjViYjk1MGZkMzRiZjIwYTAxNGNmMDU1NDJlM2FkMDI2NDkxNWVlNzc1JztcbmNvbnN0IHJlY2VpdmVyRElEID0gJzB4OTIwMjg1NjIwNGE3MjFkMmY1ZThiODU0MDgwNjdkNTRmMWNhODQzOTBiZjRmNTU4YjU2MTVhNWE2ZDNiZGRiOCc7XG5jb25zdCBhc3NldElkID0gJzB4NzgwNjAyODg3YjM1OGNmNDg5ODlkMGQ5YWE2YzhkMjgnO1xuXG5jb25zdCBjb21tb25CdWlsZGVyUGFyYW1zID0gKGJ1aWxkZXI6IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyLCBzZW5kZXI6ICh0eXBlb2YgYWNjb3VudHMpWydyYml0Z29Ub2tlbk93bmVyJ10pID0+IHtcbiAgcmV0dXJuIGJ1aWxkZXJcbiAgICAudG9ESUQocmVjZWl2ZXJESUQpXG4gICAgLmZyb21ESUQoc2VuZGVyRElEKVxuICAgIC5hc3NldElkKGFzc2V0SWQpXG4gICAgLmFtb3VudCgnMTAwJylcbiAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMjAwIH0pXG4gICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG59O1xuXG5kZXNjcmliZSgnSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIg4oCUIG1lbW8gZW5jb2RpbmcnLCAoKSA9PiB7XG4gIGxldCBidWlsZGVyOiBIZXhUb2tlblRyYW5zZmVyQnVpbGRlcjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICBidWlsZGVyID0gbmV3IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWVtbygpIHByb2R1Y2VzIE5FVyBlbmNvZGluZycsICgpID0+IHtcbiAgICBpdCgnZW5jb2RlcyBcIjBcIicsICgpID0+IHtcbiAgICAgIGJ1aWxkZXIubWVtbygnMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsnMCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdlbmNvZGVzIFwiNTY1OTRcIicsICgpID0+IHtcbiAgICAgIGJ1aWxkZXIubWVtbygnNTY1OTQnKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBORVdfTUVNT19IRVhbJzU2NTk0J10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VuY29kZXMgXCJ0ZXN0bWVtb1wiJywgKCkgPT4ge1xuICAgICAgYnVpbGRlci5tZW1vKCd0ZXN0bWVtbycpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsndGVzdG1lbW8nXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZW5jb2RlcyBcIjEwMjMyOTcxNlwiJywgKCkgPT4ge1xuICAgICAgYnVpbGRlci5tZW1vKCcxMDIzMjk3MTYnKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBORVdfTUVNT19IRVhbJzEwMjMyOTcxNiddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdG9yZXMgYW4gYWxyZWFkeS1lbmNvZGVkIDB4IGhleCBtZW1vIGFzLWlzIChyb3VuZC10cmlwKScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlFbmNvZGVkID0gTkVXX01FTU9fSEVYWyc1NjU5NCddO1xuICAgICAgYnVpbGRlci5tZW1vKGFscmVhZHlFbmNvZGVkKTtcbiAgICAgIHNob3VsZC5lcXVhbCgoYnVpbGRlciBhcyBhbnkpLl9tZW1vLCBhbHJlYWR5RW5jb2RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdORVcgZW5jb2RpbmcgZGlmZmVycyBmcm9tIE9MRCBlbmNvZGluZycsICgpID0+IHtcbiAgICBpdCgncHJvZHVjZXMgZGlmZmVyZW50IGJ5dGVzIHRoYW4gVG9rZW5UcmFuc2ZlckJ1aWxkZXIgZm9yIFwiNTY1OTRcIicsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgICAgY29uc3Qgb2xkQnVpbGRlciA9IG5ldyBUb2tlblRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBuZXcgSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSk7XG5cbiAgICAgIG9sZEJ1aWxkZXIubWVtbygnNTY1OTQnKTtcbiAgICAgIG5ld0J1aWxkZXIubWVtbygnNTY1OTQnKTtcblxuICAgICAgY29uc3Qgb2xkTWVtbyA9IChvbGRCdWlsZGVyIGFzIGFueSkuX21lbW87XG4gICAgICBjb25zdCBuZXdNZW1vID0gKG5ld0J1aWxkZXIgYXMgYW55KS5fbWVtbztcblxuICAgICAgc2hvdWxkLm5vdEVxdWFsKG9sZE1lbW8sIG5ld01lbW8pO1xuICAgICAgc2hvdWxkLm9rKCFvbGRNZW1vLnN0YXJ0c1dpdGgoJzB4JyksIGBPTEQgbWVtbyBzaG91bGQgbm90IHN0YXJ0IHdpdGggMHgsIGdvdDogJHtvbGRNZW1vfWApO1xuICAgICAgc2hvdWxkLm9rKG5ld01lbW8uc3RhcnRzV2l0aCgnMHgnKSwgYE5FVyBtZW1vIHNob3VsZCBzdGFydCB3aXRoIDB4LCBnb3Q6ICR7bmV3TWVtb31gKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdNZW1vLCBORVdfTUVNT19IRVhbJzU2NTk0J10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Byb2R1Y2VzIGRpZmZlcmVudCBieXRlcyB0aGFuIFRva2VuVHJhbnNmZXJCdWlsZGVyIGZvciBcIjBcIicsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgICAgY29uc3Qgb2xkQnVpbGRlciA9IG5ldyBUb2tlblRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBuZXcgSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSk7XG5cbiAgICAgIG9sZEJ1aWxkZXIubWVtbygnMCcpO1xuICAgICAgbmV3QnVpbGRlci5tZW1vKCcwJyk7XG5cbiAgICAgIHNob3VsZC5ub3RFcXVhbCgob2xkQnVpbGRlciBhcyBhbnkpLl9tZW1vLCAobmV3QnVpbGRlciBhcyBhbnkpLl9tZW1vKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0hleFRva2VuVHJhbnNmZXJCdWlsZGVyIOKAlCBidWlsZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMucmJpdGdvVG9rZW5Pd25lcjtcbiAgbGV0IGJ1aWxkZXI6IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGJ1aWxkZXIgPSBuZXcgSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSB2YWxpZCBhZGRBbmRBZmZpcm1XaXRoTWVkaWF0b3JzIHR4IHdpdGggTkVXIG1lbW8gXCI1NjU5NFwiJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbW1vbkJ1aWxkZXJQYXJhbXMoYnVpbGRlciwgc2VuZGVyKS5tZW1vKCc1NjU5NCcpO1xuICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnMTAwJyk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG9ESUQsIHJlY2VpdmVyRElEKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tRElELCBzZW5kZXJESUQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFzc2V0SWQsIGFzc2V0SWQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm1lbW8sIE5FV19NRU1PX0hFWFsnNTY1OTQnXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSB2YWxpZCB0eCB3aXRoIE5FVyBtZW1vIFwidGVzdG1lbW9cIicsIGFzeW5jICgpID0+IHtcbiAgICBjb21tb25CdWlsZGVyUGFyYW1zKGJ1aWxkZXIsIHNlbmRlcikubWVtbygndGVzdG1lbW8nKTtcbiAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Kc29uKCkubWVtbywgTkVXX01FTU9fSEVYWyd0ZXN0bWVtbyddKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHZhbGlkIHR4IHdpdGggTkVXIG1lbW8gXCIwXCIgKGRlZmF1bHQpJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbW1vbkJ1aWxkZXJQYXJhbXMoYnVpbGRlciwgc2VuZGVyKS5tZW1vKCcwJyk7XG4gICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvSnNvbigpLm1lbW8sIE5FV19NRU1PX0hFWFsnMCddKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHZhbGlkIHR4IHdpdGggTkVXIG1lbW8gXCIxMDIzMjk3MTZcIicsIGFzeW5jICgpID0+IHtcbiAgICBjb21tb25CdWlsZGVyUGFyYW1zKGJ1aWxkZXIsIHNlbmRlcikubWVtbygnMTAyMzI5NzE2Jyk7XG4gICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvSnNvbigpLm1lbW8sIE5FV19NRU1PX0hFWFsnMTAyMzI5NzE2J10pO1xuICB9KTtcblxuICBpdCgncmF3IHRyYW5zYWN0aW9uIGJ5dGVzIGRpZmZlciBiZXR3ZWVuIE9MRCBhbmQgTkVXIGJ1aWxkZXIgZm9yIHNhbWUgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuXG4gICAgY29uc3QgYnVpbGRPbGQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiID0gbmV3IFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLm1hdGVyaWFsKG1hdGVyaWFsKVxuICAgICAgICAudG9ESUQocmVjZWl2ZXJESUQpXG4gICAgICAgIC5mcm9tRElEKHNlbmRlckRJRClcbiAgICAgICAgLmFzc2V0SWQoYXNzZXRJZClcbiAgICAgICAgLmFtb3VudCgnMTAwJylcbiAgICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICByZXR1cm4gKGF3YWl0IGIuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGROZXcgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiID0gbmV3IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLm1hdGVyaWFsKG1hdGVyaWFsKVxuICAgICAgICAudG9ESUQocmVjZWl2ZXJESUQpXG4gICAgICAgIC5mcm9tRElEKHNlbmRlckRJRClcbiAgICAgICAgLmFzc2V0SWQoYXNzZXRJZClcbiAgICAgICAgLmFtb3VudCgnMTAwJylcbiAgICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICByZXR1cm4gKGF3YWl0IGIuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9O1xuXG4gICAgc2hvdWxkLm5vdEVxdWFsKGF3YWl0IGJ1aWxkT2xkKCksIGF3YWl0IGJ1aWxkTmV3KCkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIg4oCUIGZhY3RvcnkuZnJvbSgpIHJvdW5kLXRyaXAnLCAoKSA9PiB7XG4gIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLnJiaXRnb1Rva2VuT3duZXI7XG4gIGNvbnN0IGNvbW1vblBhcmFtcyA9IHtcbiAgICBmaXJzdFZhbGlkOiAzOTMzLFxuICAgIG1heER1cmF0aW9uOiA2NCxcbiAgICByZWZlcmVuY2VCbG9jazogJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcsXG4gICAgbm9uY2U6IDIwMCxcbiAgfTtcbiAgbGV0IGZhY3Rvcnk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndHBvbHl4JykpO1xuICB9KTtcblxuICBjb25zdCBidWlsZFNpZ25lZCA9IGFzeW5jIChtZW1vOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICBjb25zdCBiID0gbmV3IEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgIC5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSlcbiAgICAgIC50b0RJRChyZWNlaXZlckRJRClcbiAgICAgIC5mcm9tRElEKHNlbmRlckRJRClcbiAgICAgIC5hc3NldElkKGFzc2V0SWQpXG4gICAgICAuYW1vdW50KCcxMDAnKVxuICAgICAgLm1lbW8obWVtbylcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogY29tbW9uUGFyYW1zLmZpcnN0VmFsaWQsIG1heER1cmF0aW9uOiBjb21tb25QYXJhbXMubWF4RHVyYXRpb24gfSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhjb21tb25QYXJhbXMucmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBjb21tb25QYXJhbXMubm9uY2UgfSlcbiAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgIGIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgcmV0dXJuIChhd2FpdCBiLmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gIH07XG5cbiAgaXQoJ2ZhY3RvcnkuZnJvbSgpIHJldHVybnMgSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIgZm9yIGEgTkVXLWVuY29kZWQgdG9rZW4gdHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IGJ1aWxkU2lnbmVkKCc1NjU5NCcpO1xuICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZCk7XG4gICAgcmVidWlsdC5zaG91bGQuYmUuaW5zdGFuY2VPZihIZXhUb2tlblRyYW5zZmVyQnVpbGRlcik7XG4gIH0pO1xuXG4gIGl0KCdmYWN0b3J5LmZyb20oKSByZXR1cm5zIFRva2VuVHJhbnNmZXJCdWlsZGVyIChub3QgSGV4KSBmb3IgYW4gT0xELWVuY29kZWQgdG9rZW4gdHJhbnNmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgY29uc3QgYiA9IG5ldyBUb2tlblRyYW5zZmVyQnVpbGRlcihjb25maWcpXG4gICAgICAubWF0ZXJpYWwodXRpbHMuZ2V0TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSkpXG4gICAgICAudG9ESUQocmVjZWl2ZXJESUQpXG4gICAgICAuZnJvbURJRChzZW5kZXJESUQpXG4gICAgICAuYXNzZXRJZChhc3NldElkKVxuICAgICAgLmFtb3VudCgnMTAwJylcbiAgICAgIC5tZW1vKCc1NjU5NCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IGNvbW1vblBhcmFtcy5maXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogY29tbW9uUGFyYW1zLm1heER1cmF0aW9uIH0pXG4gICAgICAucmVmZXJlbmNlQmxvY2soY29tbW9uUGFyYW1zLnJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogY29tbW9uUGFyYW1zLm5vbmNlIH0pXG4gICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICBiLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSAoYXdhaXQgYi5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgcmVidWlsdCA9IGZhY3RvcnkuZnJvbShzZXJpYWxpemVkKTtcbiAgICByZWJ1aWx0LnNob3VsZC5iZS5pbnN0YW5jZU9mKFRva2VuVHJhbnNmZXJCdWlsZGVyKTtcbiAgICByZWJ1aWx0LnNob3VsZC5ub3QuYmUuaW5zdGFuY2VPZihIZXhUb2tlblRyYW5zZmVyQnVpbGRlcik7XG4gIH0pO1xuXG4gIGl0KCdyb3VuZC10cmlwIHByZXNlcnZlcyBtZW1vIGJ5dGVzIGZvciBtdWx0aXBsZSBtZW1vcycsIGFzeW5jICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IG1lbW8gb2YgWyc1NjU5NCcsICd0ZXN0bWVtbycsICcwJywgJzEwMjMyOTcxNiddKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IGF3YWl0IGJ1aWxkU2lnbmVkKG1lbW8pO1xuICAgICAgY29uc3QgcmVidWlsdCA9IGZhY3RvcnlcbiAgICAgICAgLmZyb20ob3JpZ2luYWwpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IGNvbW1vblBhcmFtcy5maXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogY29tbW9uUGFyYW1zLm1heER1cmF0aW9uIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jayhjb21tb25QYXJhbXMucmVmZXJlbmNlQmxvY2spO1xuICAgICAgY29uc3Qgcm91bmRUcmlwcGVkID0gKGF3YWl0IHJlYnVpbHQuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChyb3VuZFRyaXBwZWQsIG9yaWdpbmFsLCBgcm91bmQtdHJpcCBmYWlsZWQgZm9yIG1lbW8gXCIke21lbW99XCJgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdyZWJ1aWx0IHR4IGhhcyBjb3JyZWN0IF9tZW1vIHZhbHVlIGFmdGVyIHJvdW5kLXRyaXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IGJ1aWxkU2lnbmVkKCc1NjU5NCcpO1xuICAgIGNvbnN0IHJlYnVpbHQgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZCk7XG4gICAgc2hvdWxkLmVxdWFsKChyZWJ1aWx0IGFzIGFueSkuX21lbW8sIE5FV19NRU1PX0hFWFsnNTY1OTQnXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdIZXhUb2tlblRyYW5zZmVyQnVpbGRlciDigJQgbWVtbyB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICBsZXQgYnVpbGRlcjogSGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXI7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgYnVpbGRlciA9IG5ldyBIZXhUb2tlblRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIG1lbW8gZXhjZWVkcyAzMiBVVEYtOCBieXRlcycsICgpID0+IHtcbiAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIubWVtbygnYScucmVwZWF0KDMzKSksIC9leGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mIDMyIGJ5dGVzLyk7XG4gIH0pO1xuXG4gIGl0KCd0aHJvd3MgZm9yIGludmFsaWQgaGV4IG1lbW8nLCAoKSA9PiB7XG4gICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLm1lbW8oJzB4JyArICd6eicucmVwZWF0KDMyKSksIC9JbnZhbGlkIG1lbW8gaGV4IGVuY29kaW5nLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdUb2tlblRyYW5zZmVyQnVpbGRlciDigJQgbm8gcmVncmVzc2lvbiBmcm9tIEhleFRva2VuVHJhbnNmZXJCdWlsZGVyJywgKCkgPT4ge1xuICBpdCgnT0xEIFRva2VuVHJhbnNmZXJCdWlsZGVyIHN0aWxsIHByb2R1Y2VzIE9MRCBlbmNvZGluZyBmb3IgXCI1NjU5NFwiJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVG9rZW5UcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSk7XG4gICAgYnVpbGRlci5tZW1vKCc1NjU5NCcpO1xuICAgIGNvbnN0IG1lbW8gPSAoYnVpbGRlciBhcyBhbnkpLl9tZW1vO1xuICAgIHNob3VsZC5vayghbWVtby5zdGFydHNXaXRoKCcweCcpLCBgT0xEIG1lbW8gc2hvdWxkIG5vdCBzdGFydCB3aXRoIDB4LCBnb3Q6ICR7bWVtb31gKTtcbiAgICBzaG91bGQuZXF1YWwobWVtbywgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2NTk0Jy5zbGljZSgtMzIpKTtcbiAgfSk7XG5cbiAgaXQoJ09MRCBUb2tlblRyYW5zZmVyQnVpbGRlciBzdGlsbCBwcm9kdWNlcyBPTEQgZW5jb2RpbmcgZm9yIFwiMFwiJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVG9rZW5UcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbCh1dGlscy5nZXRNYXRlcmlhbChjb25maWcubmV0d29yay50eXBlKSk7XG4gICAgYnVpbGRlci5tZW1vKCcwJyk7XG4gICAgY29uc3QgbWVtbyA9IChidWlsZGVyIGFzIGFueSkuX21lbW87XG4gICAgc2hvdWxkLmVxdWFsKG1lbW8sICcwJy5wYWRTdGFydCgzMiwgJzAnKSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hexTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hexTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/hexTransferBuilder.ts"],"names":[],"mappings":""}