@bitgo/account-lib 2.20.0-rc.3 → 2.20.0-rc.32

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 (592) hide show
  1. package/.mocharc.js +1 -1
  2. package/CHANGELOG.md +311 -0
  3. package/dist/resources/README.md +8 -2
  4. package/dist/resources/trx/protobuf/tron.js +5 -1
  5. package/dist/src/coin/dot/addressInitializationBuilder.d.ts +1 -2
  6. package/dist/src/coin/dot/addressInitializationBuilder.d.ts.map +1 -1
  7. package/dist/src/coin/dot/addressInitializationBuilder.js +60 -83
  8. package/dist/src/coin/dot/batchTransactionBuilder.d.ts +1 -1
  9. package/dist/src/coin/dot/batchTransactionBuilder.d.ts.map +1 -1
  10. package/dist/src/coin/dot/batchTransactionBuilder.js +55 -78
  11. package/dist/src/coin/dot/claimBuilder.d.ts +1 -2
  12. package/dist/src/coin/dot/claimBuilder.d.ts.map +1 -1
  13. package/dist/src/coin/dot/claimBuilder.js +49 -69
  14. package/dist/src/coin/dot/errors.d.ts +1 -1
  15. package/dist/src/coin/dot/errors.d.ts.map +1 -1
  16. package/dist/src/coin/dot/errors.js +12 -33
  17. package/dist/src/coin/dot/iface.d.ts +1 -2
  18. package/dist/src/coin/dot/iface.d.ts.map +1 -1
  19. package/dist/src/coin/dot/iface.js +1 -1
  20. package/dist/src/coin/dot/index.js +3 -3
  21. package/dist/src/coin/dot/keyPair.d.ts +2 -3
  22. package/dist/src/coin/dot/keyPair.d.ts.map +1 -1
  23. package/dist/src/coin/dot/keyPair.js +34 -56
  24. package/dist/src/coin/dot/singletonRegistry.js +6 -9
  25. package/dist/src/coin/dot/stakingBuilder.d.ts +1 -2
  26. package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -1
  27. package/dist/src/coin/dot/stakingBuilder.js +55 -73
  28. package/dist/src/coin/dot/transaction.d.ts +1 -2
  29. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  30. package/dist/src/coin/dot/transaction.js +154 -170
  31. package/dist/src/coin/dot/transactionBuilder.d.ts +2 -3
  32. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  33. package/dist/src/coin/dot/transactionBuilder.js +133 -205
  34. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +1 -1
  35. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +1 -1
  36. package/dist/src/coin/dot/transactionBuilderFactory.js +46 -65
  37. package/dist/src/coin/dot/transferBuilder.d.ts +1 -2
  38. package/dist/src/coin/dot/transferBuilder.d.ts.map +1 -1
  39. package/dist/src/coin/dot/transferBuilder.js +71 -88
  40. package/dist/src/coin/dot/txnSchema.js +17 -15
  41. package/dist/src/coin/dot/unnominateBuilder.d.ts +1 -1
  42. package/dist/src/coin/dot/unnominateBuilder.d.ts.map +1 -1
  43. package/dist/src/coin/dot/unnominateBuilder.js +24 -46
  44. package/dist/src/coin/dot/unstakeBuilder.d.ts +1 -1
  45. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -1
  46. package/dist/src/coin/dot/unstakeBuilder.js +38 -60
  47. package/dist/src/coin/dot/utils.d.ts +9 -3
  48. package/dist/src/coin/dot/utils.d.ts.map +1 -1
  49. package/dist/src/coin/dot/utils.js +112 -102
  50. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts +1 -1
  51. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts.map +1 -1
  52. package/dist/src/coin/dot/withdrawUnstakedBuilder.js +38 -60
  53. package/dist/src/coin/etc/index.d.ts +2 -4
  54. package/dist/src/coin/etc/index.d.ts.map +1 -1
  55. package/dist/src/coin/etc/index.js +7 -9
  56. package/dist/src/coin/etc/resources.js +3 -3
  57. package/dist/src/coin/etc/transactionBuilder.d.ts.map +1 -1
  58. package/dist/src/coin/etc/transactionBuilder.js +22 -41
  59. package/dist/src/coin/etc/transferBuilder.d.ts +1 -1
  60. package/dist/src/coin/etc/transferBuilder.d.ts.map +1 -1
  61. package/dist/src/coin/etc/transferBuilder.js +8 -28
  62. package/dist/src/coin/etc/utils.d.ts +1 -2
  63. package/dist/src/coin/etc/utils.d.ts.map +1 -1
  64. package/dist/src/coin/etc/utils.js +10 -50
  65. package/dist/src/coin/eth2/keyPair.d.ts +1 -2
  66. package/dist/src/coin/eth2/keyPair.d.ts.map +1 -1
  67. package/dist/src/coin/eth2/keyPair.js +19 -37
  68. package/dist/src/coin/hbar/coinTransferBuilder.d.ts +46 -0
  69. package/dist/src/coin/hbar/coinTransferBuilder.d.ts.map +1 -0
  70. package/dist/src/coin/hbar/coinTransferBuilder.js +143 -0
  71. package/dist/src/coin/hbar/constants.d.ts +8 -0
  72. package/dist/src/coin/hbar/constants.d.ts.map +1 -0
  73. package/dist/src/coin/hbar/constants.js +12 -0
  74. package/dist/src/coin/hbar/iface.d.ts +49 -0
  75. package/dist/src/coin/hbar/iface.d.ts.map +1 -0
  76. package/dist/src/coin/hbar/iface.js +3 -0
  77. package/dist/src/coin/hbar/index.d.ts +3 -0
  78. package/dist/src/coin/hbar/index.d.ts.map +1 -1
  79. package/dist/src/coin/hbar/index.js +9 -3
  80. package/dist/src/coin/hbar/keyPair.d.ts +2 -3
  81. package/dist/src/coin/hbar/keyPair.d.ts.map +1 -1
  82. package/dist/src/coin/hbar/keyPair.js +31 -50
  83. package/dist/src/coin/hbar/tokenAssociateBuilder.d.ts +38 -0
  84. package/dist/src/coin/hbar/tokenAssociateBuilder.d.ts.map +1 -0
  85. package/dist/src/coin/hbar/tokenAssociateBuilder.js +126 -0
  86. package/dist/src/coin/hbar/tokenTransferBuilder.d.ts +25 -0
  87. package/dist/src/coin/hbar/tokenTransferBuilder.d.ts.map +1 -0
  88. package/dist/src/coin/hbar/tokenTransferBuilder.js +115 -0
  89. package/dist/src/coin/hbar/transaction.d.ts +30 -23
  90. package/dist/src/coin/hbar/transaction.d.ts.map +1 -1
  91. package/dist/src/coin/hbar/transaction.js +197 -193
  92. package/dist/src/coin/hbar/transactionBuilder.d.ts +23 -25
  93. package/dist/src/coin/hbar/transactionBuilder.d.ts.map +1 -1
  94. package/dist/src/coin/hbar/transactionBuilder.js +146 -223
  95. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts +14 -4
  96. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts.map +1 -1
  97. package/dist/src/coin/hbar/transactionBuilderFactory.js +50 -57
  98. package/dist/src/coin/hbar/transferBuilder.d.ts +9 -29
  99. package/dist/src/coin/hbar/transferBuilder.d.ts.map +1 -1
  100. package/dist/src/coin/hbar/transferBuilder.js +37 -157
  101. package/dist/src/coin/hbar/utils.d.ts +99 -58
  102. package/dist/src/coin/hbar/utils.d.ts.map +1 -1
  103. package/dist/src/coin/hbar/utils.js +183 -105
  104. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts +5 -5
  105. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts.map +1 -1
  106. package/dist/src/coin/hbar/walletInitializationBuilder.js +68 -113
  107. package/dist/src/coin/near/contractCallWrapper.js +46 -65
  108. package/dist/src/coin/near/errors.d.ts +1 -1
  109. package/dist/src/coin/near/errors.d.ts.map +1 -1
  110. package/dist/src/coin/near/errors.js +7 -25
  111. package/dist/src/coin/near/iface.d.ts +1 -2
  112. package/dist/src/coin/near/iface.d.ts.map +1 -1
  113. package/dist/src/coin/near/iface.js +1 -1
  114. package/dist/src/coin/near/index.js +2 -2
  115. package/dist/src/coin/near/keyPair.d.ts +1 -2
  116. package/dist/src/coin/near/keyPair.d.ts.map +1 -1
  117. package/dist/src/coin/near/keyPair.js +23 -40
  118. package/dist/src/coin/near/stakingActivateBuilder.d.ts +1 -1
  119. package/dist/src/coin/near/stakingActivateBuilder.d.ts.map +1 -1
  120. package/dist/src/coin/near/stakingActivateBuilder.js +36 -105
  121. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts +1 -1
  122. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts.map +1 -1
  123. package/dist/src/coin/near/stakingDeactivateBuilder.js +36 -105
  124. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts +1 -1
  125. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts.map +1 -1
  126. package/dist/src/coin/near/stakingWithdrawBuilder.js +36 -105
  127. package/dist/src/coin/near/transaction.d.ts +1 -2
  128. package/dist/src/coin/near/transaction.d.ts.map +1 -1
  129. package/dist/src/coin/near/transaction.js +125 -154
  130. package/dist/src/coin/near/transactionBuilder.d.ts +1 -2
  131. package/dist/src/coin/near/transactionBuilder.d.ts.map +1 -1
  132. package/dist/src/coin/near/transactionBuilder.js +81 -144
  133. package/dist/src/coin/near/transactionBuilderFactory.d.ts +1 -1
  134. package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +1 -1
  135. package/dist/src/coin/near/transactionBuilderFactory.js +33 -51
  136. package/dist/src/coin/near/transferBuilder.d.ts +1 -1
  137. package/dist/src/coin/near/transferBuilder.d.ts.map +1 -1
  138. package/dist/src/coin/near/transferBuilder.js +27 -91
  139. package/dist/src/coin/near/utils.d.ts +1 -1
  140. package/dist/src/coin/near/utils.d.ts.map +1 -1
  141. package/dist/src/coin/near/utils.js +35 -45
  142. package/dist/src/coin/near/walletInitializationBuilder.d.ts +1 -1
  143. package/dist/src/coin/near/walletInitializationBuilder.d.ts.map +1 -1
  144. package/dist/src/coin/near/walletInitializationBuilder.js +13 -70
  145. package/dist/src/coin/polygon/index.d.ts +6 -0
  146. package/dist/src/coin/polygon/index.d.ts.map +1 -0
  147. package/dist/src/coin/{celo → polygon}/index.js +7 -9
  148. package/dist/src/coin/polygon/resources.d.ts +10 -0
  149. package/dist/src/coin/polygon/resources.d.ts.map +1 -0
  150. package/dist/src/coin/polygon/resources.js +25 -0
  151. package/dist/src/coin/{avaxc → polygon}/transactionBuilder.d.ts +1 -1
  152. package/dist/src/coin/polygon/transactionBuilder.d.ts.map +1 -0
  153. package/dist/src/coin/polygon/transactionBuilder.js +44 -0
  154. package/dist/src/coin/{avaxc → polygon}/transferBuilder.d.ts +4 -2
  155. package/dist/src/coin/polygon/transferBuilder.d.ts.map +1 -0
  156. package/dist/src/coin/polygon/transferBuilder.js +27 -0
  157. package/dist/src/coin/polygon/utils.d.ts +17 -0
  158. package/dist/src/coin/polygon/utils.d.ts.map +1 -0
  159. package/dist/src/coin/polygon/utils.js +42 -0
  160. package/dist/src/coin/polygon/walletUtil.d.ts +48 -0
  161. package/dist/src/coin/polygon/walletUtil.d.ts.map +1 -0
  162. package/dist/src/coin/polygon/walletUtil.js +632 -0
  163. package/dist/src/coin/rbtc/index.d.ts +2 -4
  164. package/dist/src/coin/rbtc/index.d.ts.map +1 -1
  165. package/dist/src/coin/rbtc/index.js +7 -9
  166. package/dist/src/coin/rbtc/resources.js +3 -3
  167. package/dist/src/coin/rbtc/transactionBuilder.d.ts.map +1 -1
  168. package/dist/src/coin/rbtc/transactionBuilder.js +21 -40
  169. package/dist/src/coin/rbtc/transferBuilder.d.ts +1 -1
  170. package/dist/src/coin/rbtc/transferBuilder.d.ts.map +1 -1
  171. package/dist/src/coin/rbtc/transferBuilder.js +8 -28
  172. package/dist/src/coin/rbtc/utils.d.ts +1 -2
  173. package/dist/src/coin/rbtc/utils.d.ts.map +1 -1
  174. package/dist/src/coin/rbtc/utils.js +10 -50
  175. package/dist/src/coin/sol/ataInitializationBuilder.d.ts +12 -3
  176. package/dist/src/coin/sol/ataInitializationBuilder.d.ts.map +1 -1
  177. package/dist/src/coin/sol/ataInitializationBuilder.js +74 -126
  178. package/dist/src/coin/sol/ataInitializationTransaction.d.ts.map +1 -1
  179. package/dist/src/coin/sol/ataInitializationTransaction.js +36 -59
  180. package/dist/src/coin/sol/iface.d.ts +2 -1
  181. package/dist/src/coin/sol/iface.d.ts.map +1 -1
  182. package/dist/src/coin/sol/iface.js +1 -1
  183. package/dist/src/coin/sol/index.js +3 -3
  184. package/dist/src/coin/sol/instructionParamsFactory.d.ts +1 -1
  185. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -1
  186. package/dist/src/coin/sol/instructionParamsFactory.js +72 -70
  187. package/dist/src/coin/sol/keyPair.d.ts +1 -2
  188. package/dist/src/coin/sol/keyPair.d.ts.map +1 -1
  189. package/dist/src/coin/sol/keyPair.js +24 -42
  190. package/dist/src/coin/sol/solInstructionFactory.js +33 -33
  191. package/dist/src/coin/sol/stakingActivateBuilder.d.ts +1 -1
  192. package/dist/src/coin/sol/stakingActivateBuilder.d.ts.map +1 -1
  193. package/dist/src/coin/sol/stakingActivateBuilder.js +45 -113
  194. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts +1 -1
  195. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts.map +1 -1
  196. package/dist/src/coin/sol/stakingDeactivateBuilder.js +36 -104
  197. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts +1 -1
  198. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts.map +1 -1
  199. package/dist/src/coin/sol/stakingWithdrawBuilder.js +41 -109
  200. package/dist/src/coin/sol/tokenEncodeDecode.js +46 -75
  201. package/dist/src/coin/sol/tokenTransferBuilder.d.ts +1 -1
  202. package/dist/src/coin/sol/tokenTransferBuilder.d.ts.map +1 -1
  203. package/dist/src/coin/sol/tokenTransferBuilder.js +42 -115
  204. package/dist/src/coin/sol/transaction.d.ts +1 -2
  205. package/dist/src/coin/sol/transaction.d.ts.map +1 -1
  206. package/dist/src/coin/sol/transaction.js +130 -221
  207. package/dist/src/coin/sol/transactionBuilder.d.ts +1 -2
  208. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -1
  209. package/dist/src/coin/sol/transactionBuilder.js +104 -171
  210. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +1 -1
  211. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -1
  212. package/dist/src/coin/sol/transactionBuilderFactory.js +46 -64
  213. package/dist/src/coin/sol/transferBuilder.d.ts +1 -1
  214. package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -1
  215. package/dist/src/coin/sol/transferBuilder.js +37 -108
  216. package/dist/src/coin/sol/utils.d.ts +1 -1
  217. package/dist/src/coin/sol/utils.d.ts.map +1 -1
  218. package/dist/src/coin/sol/utils.js +49 -117
  219. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +1 -1
  220. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -1
  221. package/dist/src/coin/sol/walletInitializationBuilder.js +39 -107
  222. package/dist/src/coin/trx/address.d.ts +1 -1
  223. package/dist/src/coin/trx/address.d.ts.map +1 -1
  224. package/dist/src/coin/trx/address.js +3 -6
  225. package/dist/src/coin/trx/contractCallBuilder.d.ts +1 -1
  226. package/dist/src/coin/trx/contractCallBuilder.d.ts.map +1 -1
  227. package/dist/src/coin/trx/contractCallBuilder.js +100 -160
  228. package/dist/src/coin/trx/iface.d.ts +1 -1
  229. package/dist/src/coin/trx/iface.d.ts.map +1 -1
  230. package/dist/src/coin/trx/iface.js +1 -1
  231. package/dist/src/coin/trx/index.js +4 -4
  232. package/dist/src/coin/trx/keyPair.d.ts +1 -3
  233. package/dist/src/coin/trx/keyPair.d.ts.map +1 -1
  234. package/dist/src/coin/trx/keyPair.js +37 -57
  235. package/dist/src/coin/trx/transaction.d.ts +1 -3
  236. package/dist/src/coin/trx/transaction.d.ts.map +1 -1
  237. package/dist/src/coin/trx/transaction.js +84 -124
  238. package/dist/src/coin/trx/transactionBuilder.d.ts +1 -2
  239. package/dist/src/coin/trx/transactionBuilder.d.ts.map +1 -1
  240. package/dist/src/coin/trx/transactionBuilder.js +72 -134
  241. package/dist/src/coin/trx/utils.js +57 -59
  242. package/dist/src/coin/trx/wrappedBuilder.d.ts +1 -2
  243. package/dist/src/coin/trx/wrappedBuilder.d.ts.map +1 -1
  244. package/dist/src/coin/trx/wrappedBuilder.js +43 -101
  245. package/dist/src/coin/xrp/index.js +2 -2
  246. package/dist/src/coin/xrp/keyPair.d.ts +1 -2
  247. package/dist/src/coin/xrp/keyPair.d.ts.map +1 -1
  248. package/dist/src/coin/xrp/keyPair.js +6 -23
  249. package/dist/src/coin/xrp/transaction.d.ts +1 -2
  250. package/dist/src/coin/xrp/transaction.d.ts.map +1 -1
  251. package/dist/src/coin/xrp/transaction.js +13 -34
  252. package/dist/src/coin/xrp/transactionBuilder.d.ts +1 -2
  253. package/dist/src/coin/xrp/transactionBuilder.d.ts.map +1 -1
  254. package/dist/src/coin/xrp/transactionBuilder.js +29 -51
  255. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts +1 -1
  256. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts.map +1 -1
  257. package/dist/src/coin/xrp/transactionBuilderFactory.js +17 -35
  258. package/dist/src/coin/xrp/transferBuilder.d.ts +1 -1
  259. package/dist/src/coin/xrp/transferBuilder.d.ts.map +1 -1
  260. package/dist/src/coin/xrp/transferBuilder.js +16 -73
  261. package/dist/src/coin/xrp/utils.d.ts +1 -1
  262. package/dist/src/coin/xrp/utils.d.ts.map +1 -1
  263. package/dist/src/coin/xrp/utils.js +22 -25
  264. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts +1 -1
  265. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts.map +1 -1
  266. package/dist/src/coin/xrp/walletInitializationBuilder.js +16 -73
  267. package/dist/src/index.d.ts +24 -16
  268. package/dist/src/index.d.ts.map +1 -1
  269. package/dist/src/index.js +58 -50
  270. package/dist/src/keyPair/index.d.ts +1 -2
  271. package/dist/src/keyPair/index.d.ts.map +1 -1
  272. package/dist/src/keyPair/index.js +9 -9
  273. package/dist/src/utils/index.d.ts +1 -1
  274. package/dist/src/utils/index.d.ts.map +1 -1
  275. package/dist/src/utils/index.js +9 -9
  276. package/dist/tsconfig.tsbuildinfo +29398 -22560
  277. package/package.json +25 -58
  278. package/resources/README.md +8 -2
  279. package/resources/trx/protobuf/tron.js +5 -1
  280. package/dist/browser/bitgo-account-lib.js +0 -2
  281. package/dist/browser/bitgo-account-lib.js.LICENSE.txt +0 -335
  282. package/dist/resources/hbar/protobuf/BasicTypes.proto +0 -424
  283. package/dist/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  284. package/dist/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  285. package/dist/resources/hbar/protobuf/Duration.proto +0 -28
  286. package/dist/resources/hbar/protobuf/Timestamp.proto +0 -34
  287. package/dist/resources/hbar/protobuf/Transaction.proto +0 -35
  288. package/dist/resources/hbar/protobuf/TransactionBody.proto +0 -24
  289. package/dist/resources/hbar/protobuf/TransactionContents.proto +0 -33
  290. package/dist/resources/hbar/protobuf/hedera.d.ts +0 -4612
  291. package/dist/resources/hbar/protobuf/hedera.js +0 -12192
  292. package/dist/src/coin/algo/assetTransferBuilder.d.ts +0 -43
  293. package/dist/src/coin/algo/assetTransferBuilder.d.ts.map +0 -1
  294. package/dist/src/coin/algo/assetTransferBuilder.js +0 -127
  295. package/dist/src/coin/algo/errors.d.ts +0 -11
  296. package/dist/src/coin/algo/errors.d.ts.map +0 -1
  297. package/dist/src/coin/algo/errors.js +0 -51
  298. package/dist/src/coin/algo/ifaces.d.ts +0 -46
  299. package/dist/src/coin/algo/ifaces.d.ts.map +0 -1
  300. package/dist/src/coin/algo/ifaces.js +0 -3
  301. package/dist/src/coin/algo/index.d.ts +0 -13
  302. package/dist/src/coin/algo/index.d.ts.map +0 -1
  303. package/dist/src/coin/algo/index.js +0 -47
  304. package/dist/src/coin/algo/keyPair.d.ts +0 -26
  305. package/dist/src/coin/algo/keyPair.d.ts.map +0 -1
  306. package/dist/src/coin/algo/keyPair.js +0 -95
  307. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts +0 -104
  308. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts.map +0 -1
  309. package/dist/src/coin/algo/keyRegistrationBuilder.js +0 -262
  310. package/dist/src/coin/algo/seedEncoding.d.ts +0 -25
  311. package/dist/src/coin/algo/seedEncoding.d.ts.map +0 -1
  312. package/dist/src/coin/algo/seedEncoding.js +0 -100
  313. package/dist/src/coin/algo/transaction.d.ts +0 -76
  314. package/dist/src/coin/algo/transaction.d.ts.map +0 -1
  315. package/dist/src/coin/algo/transaction.js +0 -287
  316. package/dist/src/coin/algo/transactionBuilder.d.ts +0 -205
  317. package/dist/src/coin/algo/transactionBuilder.d.ts.map +0 -1
  318. package/dist/src/coin/algo/transactionBuilder.js +0 -445
  319. package/dist/src/coin/algo/transactionBuilderFactory.d.ts +0 -16
  320. package/dist/src/coin/algo/transactionBuilderFactory.d.ts.map +0 -1
  321. package/dist/src/coin/algo/transactionBuilderFactory.js +0 -70
  322. package/dist/src/coin/algo/transferBuilder.d.ts +0 -41
  323. package/dist/src/coin/algo/transferBuilder.d.ts.map +0 -1
  324. package/dist/src/coin/algo/transferBuilder.js +0 -111
  325. package/dist/src/coin/algo/txnSchema.d.ts +0 -7
  326. package/dist/src/coin/algo/txnSchema.d.ts.map +0 -1
  327. package/dist/src/coin/algo/txnSchema.js +0 -68
  328. package/dist/src/coin/algo/utils.d.ts +0 -249
  329. package/dist/src/coin/algo/utils.d.ts.map +0 -1
  330. package/dist/src/coin/algo/utils.js +0 -544
  331. package/dist/src/coin/avaxc/index.d.ts +0 -8
  332. package/dist/src/coin/avaxc/index.d.ts.map +0 -1
  333. package/dist/src/coin/avaxc/index.js +0 -35
  334. package/dist/src/coin/avaxc/keyPair.d.ts +0 -27
  335. package/dist/src/coin/avaxc/keyPair.d.ts.map +0 -1
  336. package/dist/src/coin/avaxc/keyPair.js +0 -102
  337. package/dist/src/coin/avaxc/resources.d.ts +0 -12
  338. package/dist/src/coin/avaxc/resources.d.ts.map +0 -1
  339. package/dist/src/coin/avaxc/resources.js +0 -27
  340. package/dist/src/coin/avaxc/transactionBuilder.d.ts.map +0 -1
  341. package/dist/src/coin/avaxc/transactionBuilder.js +0 -64
  342. package/dist/src/coin/avaxc/transferBuilder.d.ts.map +0 -1
  343. package/dist/src/coin/avaxc/transferBuilder.js +0 -45
  344. package/dist/src/coin/avaxc/utils.d.ts +0 -39
  345. package/dist/src/coin/avaxc/utils.d.ts.map +0 -1
  346. package/dist/src/coin/avaxc/utils.js +0 -110
  347. package/dist/src/coin/avaxc/walletUtil.d.ts +0 -22
  348. package/dist/src/coin/avaxc/walletUtil.d.ts.map +0 -1
  349. package/dist/src/coin/avaxc/walletUtil.js +0 -62
  350. package/dist/src/coin/baseCoin/baseKeyPair.d.ts +0 -27
  351. package/dist/src/coin/baseCoin/baseKeyPair.d.ts.map +0 -1
  352. package/dist/src/coin/baseCoin/baseKeyPair.js +0 -3
  353. package/dist/src/coin/baseCoin/baseTransaction.d.ts +0 -71
  354. package/dist/src/coin/baseCoin/baseTransaction.d.ts.map +0 -1
  355. package/dist/src/coin/baseCoin/baseTransaction.js +0 -94
  356. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts +0 -128
  357. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +0 -1
  358. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +0 -179
  359. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts +0 -30
  360. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts.map +0 -1
  361. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.js +0 -20
  362. package/dist/src/coin/baseCoin/baseUtils.d.ts +0 -45
  363. package/dist/src/coin/baseCoin/baseUtils.d.ts.map +0 -1
  364. package/dist/src/coin/baseCoin/baseUtils.js +0 -3
  365. package/dist/src/coin/baseCoin/blsKeyPair.d.ts +0 -75
  366. package/dist/src/coin/baseCoin/blsKeyPair.d.ts.map +0 -1
  367. package/dist/src/coin/baseCoin/blsKeyPair.js +0 -232
  368. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts +0 -50
  369. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts.map +0 -1
  370. package/dist/src/coin/baseCoin/ed25519KeyPair.js +0 -141
  371. package/dist/src/coin/baseCoin/enum.d.ts +0 -43
  372. package/dist/src/coin/baseCoin/enum.d.ts.map +0 -1
  373. package/dist/src/coin/baseCoin/enum.js +0 -70
  374. package/dist/src/coin/baseCoin/errors.d.ts +0 -65
  375. package/dist/src/coin/baseCoin/errors.d.ts.map +0 -1
  376. package/dist/src/coin/baseCoin/errors.js +0 -156
  377. package/dist/src/coin/baseCoin/iface.d.ts +0 -162
  378. package/dist/src/coin/baseCoin/iface.d.ts.map +0 -1
  379. package/dist/src/coin/baseCoin/iface.js +0 -38
  380. package/dist/src/coin/baseCoin/index.d.ts +0 -12
  381. package/dist/src/coin/baseCoin/index.d.ts.map +0 -1
  382. package/dist/src/coin/baseCoin/index.js +0 -41
  383. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts +0 -55
  384. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +0 -1
  385. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.js +0 -124
  386. package/dist/src/coin/celo/index.d.ts +0 -8
  387. package/dist/src/coin/celo/index.d.ts.map +0 -1
  388. package/dist/src/coin/celo/resources.d.ts +0 -10
  389. package/dist/src/coin/celo/resources.d.ts.map +0 -1
  390. package/dist/src/coin/celo/resources.js +0 -26
  391. package/dist/src/coin/celo/stakingBuilder.d.ts +0 -91
  392. package/dist/src/coin/celo/stakingBuilder.d.ts.map +0 -1
  393. package/dist/src/coin/celo/stakingBuilder.js +0 -279
  394. package/dist/src/coin/celo/stakingCall.d.ts +0 -7
  395. package/dist/src/coin/celo/stakingCall.d.ts.map +0 -1
  396. package/dist/src/coin/celo/stakingCall.js +0 -31
  397. package/dist/src/coin/celo/stakingUtils.d.ts +0 -15
  398. package/dist/src/coin/celo/stakingUtils.d.ts.map +0 -1
  399. package/dist/src/coin/celo/stakingUtils.js +0 -99
  400. package/dist/src/coin/celo/transaction.d.ts +0 -10
  401. package/dist/src/coin/celo/transaction.d.ts.map +0 -1
  402. package/dist/src/coin/celo/transaction.js +0 -57
  403. package/dist/src/coin/celo/transactionBuilder.d.ts +0 -86
  404. package/dist/src/coin/celo/transactionBuilder.d.ts.map +0 -1
  405. package/dist/src/coin/celo/transactionBuilder.js +0 -247
  406. package/dist/src/coin/celo/transferBuilder.d.ts +0 -19
  407. package/dist/src/coin/celo/transferBuilder.d.ts.map +0 -1
  408. package/dist/src/coin/celo/transferBuilder.js +0 -47
  409. package/dist/src/coin/celo/types.d.ts +0 -52
  410. package/dist/src/coin/celo/types.d.ts.map +0 -1
  411. package/dist/src/coin/celo/types.js +0 -276
  412. package/dist/src/coin/celo/utils.d.ts +0 -18
  413. package/dist/src/coin/celo/utils.d.ts.map +0 -1
  414. package/dist/src/coin/celo/utils.js +0 -99
  415. package/dist/src/coin/cspr/constants.d.ts +0 -19
  416. package/dist/src/coin/cspr/constants.d.ts.map +0 -1
  417. package/dist/src/coin/cspr/constants.js +0 -28
  418. package/dist/src/coin/cspr/delegateBuilder.d.ts +0 -49
  419. package/dist/src/coin/cspr/delegateBuilder.d.ts.map +0 -1
  420. package/dist/src/coin/cspr/delegateBuilder.js +0 -175
  421. package/dist/src/coin/cspr/ifaces.d.ts +0 -69
  422. package/dist/src/coin/cspr/ifaces.d.ts.map +0 -1
  423. package/dist/src/coin/cspr/ifaces.js +0 -3
  424. package/dist/src/coin/cspr/index.d.ts +0 -5
  425. package/dist/src/coin/cspr/index.d.ts.map +0 -1
  426. package/dist/src/coin/cspr/index.js +0 -29
  427. package/dist/src/coin/cspr/keyPair.d.ts +0 -19
  428. package/dist/src/coin/cspr/keyPair.d.ts.map +0 -1
  429. package/dist/src/coin/cspr/keyPair.js +0 -94
  430. package/dist/src/coin/cspr/transaction.d.ts +0 -56
  431. package/dist/src/coin/cspr/transaction.d.ts.map +0 -1
  432. package/dist/src/coin/cspr/transaction.js +0 -251
  433. package/dist/src/coin/cspr/transactionBuilder.d.ts +0 -125
  434. package/dist/src/coin/cspr/transactionBuilder.d.ts.map +0 -1
  435. package/dist/src/coin/cspr/transactionBuilder.js +0 -383
  436. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts +0 -46
  437. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts.map +0 -1
  438. package/dist/src/coin/cspr/transactionBuilderFactory.js +0 -116
  439. package/dist/src/coin/cspr/transferBuilder.d.ts +0 -39
  440. package/dist/src/coin/cspr/transferBuilder.d.ts.map +0 -1
  441. package/dist/src/coin/cspr/transferBuilder.js +0 -169
  442. package/dist/src/coin/cspr/undelegateBuilder.d.ts +0 -49
  443. package/dist/src/coin/cspr/undelegateBuilder.d.ts.map +0 -1
  444. package/dist/src/coin/cspr/undelegateBuilder.js +0 -175
  445. package/dist/src/coin/cspr/utils.d.ts +0 -189
  446. package/dist/src/coin/cspr/utils.d.ts.map +0 -1
  447. package/dist/src/coin/cspr/utils.js +0 -483
  448. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts +0 -27
  449. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts.map +0 -1
  450. package/dist/src/coin/cspr/walletInitializationBuilder.js +0 -160
  451. package/dist/src/coin/eth/contractCall.d.ts +0 -8
  452. package/dist/src/coin/eth/contractCall.d.ts.map +0 -1
  453. package/dist/src/coin/eth/contractCall.js +0 -18
  454. package/dist/src/coin/eth/iface.d.ts +0 -122
  455. package/dist/src/coin/eth/iface.d.ts.map +0 -1
  456. package/dist/src/coin/eth/iface.js +0 -8
  457. package/dist/src/coin/eth/index.d.ts +0 -10
  458. package/dist/src/coin/eth/index.d.ts.map +0 -1
  459. package/dist/src/coin/eth/index.js +0 -39
  460. package/dist/src/coin/eth/keyPair.d.ts +0 -27
  461. package/dist/src/coin/eth/keyPair.d.ts.map +0 -1
  462. package/dist/src/coin/eth/keyPair.js +0 -104
  463. package/dist/src/coin/eth/transaction.d.ts +0 -65
  464. package/dist/src/coin/eth/transaction.d.ts.map +0 -1
  465. package/dist/src/coin/eth/transaction.js +0 -203
  466. package/dist/src/coin/eth/transactionBuilder.d.ts +0 -195
  467. package/dist/src/coin/eth/transactionBuilder.d.ts.map +0 -1
  468. package/dist/src/coin/eth/transactionBuilder.js +0 -695
  469. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.d.ts +0 -47
  470. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.d.ts.map +0 -1
  471. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.js +0 -114
  472. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.d.ts +0 -14
  473. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.d.ts.map +0 -1
  474. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.js +0 -100
  475. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.d.ts +0 -13
  476. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.d.ts.map +0 -1
  477. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.js +0 -85
  478. package/dist/src/coin/eth/transferBuilder.d.ts +0 -65
  479. package/dist/src/coin/eth/transferBuilder.d.ts.map +0 -1
  480. package/dist/src/coin/eth/transferBuilder.js +0 -198
  481. package/dist/src/coin/eth/types.d.ts +0 -39
  482. package/dist/src/coin/eth/types.d.ts.map +0 -1
  483. package/dist/src/coin/eth/types.js +0 -139
  484. package/dist/src/coin/eth/utils.d.ts +0 -201
  485. package/dist/src/coin/eth/utils.d.ts.map +0 -1
  486. package/dist/src/coin/eth/utils.js +0 -533
  487. package/dist/src/coin/eth/walletUtil.d.ts +0 -19
  488. package/dist/src/coin/eth/walletUtil.d.ts.map +0 -1
  489. package/dist/src/coin/eth/walletUtil.js +0 -29
  490. package/dist/src/coin/hbar/ifaces.d.ts +0 -26
  491. package/dist/src/coin/hbar/ifaces.d.ts.map +0 -1
  492. package/dist/src/coin/hbar/ifaces.js +0 -3
  493. package/dist/src/coin/stx/abstractContractBuilder.d.ts +0 -19
  494. package/dist/src/coin/stx/abstractContractBuilder.d.ts.map +0 -1
  495. package/dist/src/coin/stx/abstractContractBuilder.js +0 -140
  496. package/dist/src/coin/stx/constants.d.ts +0 -8
  497. package/dist/src/coin/stx/constants.d.ts.map +0 -1
  498. package/dist/src/coin/stx/constants.js +0 -19
  499. package/dist/src/coin/stx/contractBuilder.d.ts +0 -33
  500. package/dist/src/coin/stx/contractBuilder.d.ts.map +0 -1
  501. package/dist/src/coin/stx/contractBuilder.js +0 -135
  502. package/dist/src/coin/stx/iface.d.ts +0 -48
  503. package/dist/src/coin/stx/iface.d.ts.map +0 -1
  504. package/dist/src/coin/stx/iface.js +0 -3
  505. package/dist/src/coin/stx/index.d.ts +0 -6
  506. package/dist/src/coin/stx/index.d.ts.map +0 -1
  507. package/dist/src/coin/stx/index.js +0 -32
  508. package/dist/src/coin/stx/keyPair.d.ts +0 -56
  509. package/dist/src/coin/stx/keyPair.d.ts.map +0 -1
  510. package/dist/src/coin/stx/keyPair.js +0 -163
  511. package/dist/src/coin/stx/sendmanyBuilder.d.ts +0 -23
  512. package/dist/src/coin/stx/sendmanyBuilder.d.ts.map +0 -1
  513. package/dist/src/coin/stx/sendmanyBuilder.js +0 -140
  514. package/dist/src/coin/stx/transaction.d.ts +0 -50
  515. package/dist/src/coin/stx/transaction.d.ts.map +0 -1
  516. package/dist/src/coin/stx/transaction.js +0 -306
  517. package/dist/src/coin/stx/transactionBuilder.d.ts +0 -87
  518. package/dist/src/coin/stx/transactionBuilder.d.ts.map +0 -1
  519. package/dist/src/coin/stx/transactionBuilder.js +0 -360
  520. package/dist/src/coin/stx/transactionBuilderFactory.d.ts +0 -30
  521. package/dist/src/coin/stx/transactionBuilderFactory.d.ts.map +0 -1
  522. package/dist/src/coin/stx/transactionBuilderFactory.js +0 -99
  523. package/dist/src/coin/stx/transferBuilder.d.ts +0 -30
  524. package/dist/src/coin/stx/transferBuilder.d.ts.map +0 -1
  525. package/dist/src/coin/stx/transferBuilder.js +0 -169
  526. package/dist/src/coin/stx/utils.d.ts +0 -207
  527. package/dist/src/coin/stx/utils.d.ts.map +0 -1
  528. package/dist/src/coin/stx/utils.js +0 -510
  529. package/dist/src/coin/xtz/address.d.ts +0 -8
  530. package/dist/src/coin/xtz/address.d.ts.map +0 -1
  531. package/dist/src/coin/xtz/address.js +0 -13
  532. package/dist/src/coin/xtz/iface.d.ts +0 -81
  533. package/dist/src/coin/xtz/iface.d.ts.map +0 -1
  534. package/dist/src/coin/xtz/iface.js +0 -3
  535. package/dist/src/coin/xtz/index.d.ts +0 -8
  536. package/dist/src/coin/xtz/index.d.ts.map +0 -1
  537. package/dist/src/coin/xtz/index.js +0 -37
  538. package/dist/src/coin/xtz/keyPair.d.ts +0 -41
  539. package/dist/src/coin/xtz/keyPair.d.ts.map +0 -1
  540. package/dist/src/coin/xtz/keyPair.js +0 -156
  541. package/dist/src/coin/xtz/multisigUtils.d.ts +0 -134
  542. package/dist/src/coin/xtz/multisigUtils.d.ts.map +0 -1
  543. package/dist/src/coin/xtz/multisigUtils.js +0 -1193
  544. package/dist/src/coin/xtz/transaction.d.ts +0 -120
  545. package/dist/src/coin/xtz/transaction.d.ts.map +0 -1
  546. package/dist/src/coin/xtz/transaction.js +0 -485
  547. package/dist/src/coin/xtz/transactionBuilder.d.ts +0 -172
  548. package/dist/src/coin/xtz/transactionBuilder.d.ts.map +0 -1
  549. package/dist/src/coin/xtz/transactionBuilder.js +0 -588
  550. package/dist/src/coin/xtz/transferBuilder.d.ts +0 -24
  551. package/dist/src/coin/xtz/transferBuilder.d.ts.map +0 -1
  552. package/dist/src/coin/xtz/transferBuilder.js +0 -67
  553. package/dist/src/coin/xtz/utils.d.ts +0 -265
  554. package/dist/src/coin/xtz/utils.d.ts.map +0 -1
  555. package/dist/src/coin/xtz/utils.js +0 -531
  556. package/dist/src/mpc/curves/baseCurve.d.ts +0 -18
  557. package/dist/src/mpc/curves/baseCurve.d.ts.map +0 -1
  558. package/dist/src/mpc/curves/baseCurve.js +0 -6
  559. package/dist/src/mpc/curves/ed25519.d.ts +0 -17
  560. package/dist/src/mpc/curves/ed25519.d.ts.map +0 -1
  561. package/dist/src/mpc/curves/ed25519.js +0 -96
  562. package/dist/src/mpc/curves/index.d.ts +0 -5
  563. package/dist/src/mpc/curves/index.d.ts.map +0 -1
  564. package/dist/src/mpc/curves/index.js +0 -6
  565. package/dist/src/mpc/hdTree.d.ts +0 -24
  566. package/dist/src/mpc/hdTree.d.ts.map +0 -1
  567. package/dist/src/mpc/hdTree.js +0 -143
  568. package/dist/src/mpc/shamir.d.ts +0 -26
  569. package/dist/src/mpc/shamir.d.ts.map +0 -1
  570. package/dist/src/mpc/shamir.js +0 -87
  571. package/dist/src/mpc/tss.d.ts +0 -98
  572. package/dist/src/mpc/tss.d.ts.map +0 -1
  573. package/dist/src/mpc/tss.js +0 -346
  574. package/dist/src/mpc/util.d.ts +0 -7
  575. package/dist/src/mpc/util.d.ts.map +0 -1
  576. package/dist/src/mpc/util.js +0 -38
  577. package/dist/src/utils/crypto.d.ts +0 -99
  578. package/dist/src/utils/crypto.d.ts.map +0 -1
  579. package/dist/src/utils/crypto.js +0 -260
  580. package/dist/src/utils/ed25519KeyDeriver.d.ts +0 -49
  581. package/dist/src/utils/ed25519KeyDeriver.d.ts.map +0 -1
  582. package/dist/src/utils/ed25519KeyDeriver.js +0 -92
  583. package/resources/hbar/protobuf/BasicTypes.proto +0 -424
  584. package/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  585. package/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  586. package/resources/hbar/protobuf/Duration.proto +0 -28
  587. package/resources/hbar/protobuf/Timestamp.proto +0 -34
  588. package/resources/hbar/protobuf/Transaction.proto +0 -35
  589. package/resources/hbar/protobuf/TransactionBody.proto +0 -24
  590. package/resources/hbar/protobuf/TransactionContents.proto +0 -33
  591. package/resources/hbar/protobuf/hedera.d.ts +0 -4612
  592. package/resources/hbar/protobuf/hedera.js +0 -12192
@@ -1,533 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- var _a;
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.getToken = exports.getBufferedByteCode = exports.getRawDecoded = exports.hasSignature = exports.toStringSig = exports.getProxyInitcode = exports.calculateForwarderV1Address = exports.calculateForwarderAddress = exports.hexStringToNumber = exports.numberToHexString = exports.classifyTransaction = exports.decodeFlushTokensData = exports.decodeNativeTransferData = exports.decodeERC1155TransferData = exports.decodeERC721TransferData = exports.decodeTokenTransferData = exports.decodeTransferData = exports.decodeWalletCreationData = exports.isValidAmount = exports.isValidEthAddress = exports.getAddressInitializationData = exports.flushCoinsData = exports.flushTokensData = exports.sendMultiSigTokenData = exports.sendMultiSigData = exports.sign = exports.signInternal = exports.getCommon = void 0;
44
- var buffer_1 = require("buffer");
45
- var assert_1 = __importDefault(require("assert"));
46
- var ethereumjs_utils_old_1 = require("ethereumjs-utils-old");
47
- var ethereumjs_util_1 = require("ethereumjs-util");
48
- var statics_1 = require("@bitgo/statics");
49
- var ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
50
- var common_1 = __importDefault(require("@ethereumjs/common"));
51
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
52
- var errors_1 = require("../baseCoin/errors");
53
- var baseCoin_1 = require("../baseCoin");
54
- var stakingUtils_1 = require("../celo/stakingUtils");
55
- var walletUtil_1 = require("./walletUtil");
56
- var types_1 = require("./types");
57
- /**
58
- * @param network
59
- */
60
- function getCommon(network) {
61
- return common_1.default.forCustomChain(
62
- // use the mainnet config as a base, override chain ids and network name
63
- 'mainnet', {
64
- name: network.type,
65
- networkId: network.chainId,
66
- chainId: network.chainId,
67
- }, 'london');
68
- }
69
- exports.getCommon = getCommon;
70
- /**
71
- * Signs the transaction using the appropriate algorithm
72
- * and the provided common for the blockchain
73
- *
74
- * @param {TxData} transactionData the transaction data to sign
75
- * @param {KeyPair} keyPair the signer's keypair
76
- * @param {EthereumCommon} customCommon the network's custom common
77
- * @returns {string} the transaction signed and encoded
78
- */
79
- function signInternal(transactionData, keyPair, customCommon) {
80
- return __awaiter(this, void 0, void 0, function () {
81
- var ethTx;
82
- return __generator(this, function (_a) {
83
- if (!keyPair.getKeys().prv) {
84
- throw new errors_1.SigningError('Missing private key');
85
- }
86
- ethTx = types_1.EthTransactionData.fromJson(transactionData, customCommon);
87
- ethTx.sign(keyPair);
88
- return [2 /*return*/, ethTx.toSerialized()];
89
- });
90
- });
91
- }
92
- exports.signInternal = signInternal;
93
- /**
94
- * Signs the transaction using the appropriate algorithm
95
- *
96
- * @param {TxData} transactionData the transaction data to sign
97
- * @param {KeyPair} keyPair the signer's keypair
98
- * @returns {string} the transaction signed and encoded
99
- */
100
- function sign(transactionData, keyPair) {
101
- return __awaiter(this, void 0, void 0, function () {
102
- return __generator(this, function (_a) {
103
- return [2 /*return*/, signInternal(transactionData, keyPair, getCommon(statics_1.coins.get('teth').network))];
104
- });
105
- });
106
- }
107
- exports.sign = sign;
108
- /**
109
- * Returns the contract method encoded data
110
- *
111
- * @param {string} to destination address
112
- * @param {number} value Amount to tranfer
113
- * @param {string} data aditional method call data
114
- * @param {number} expireTime expiration time for the transaction in seconds
115
- * @param {number} sequenceId sequence id
116
- * @param {string} signature signature of the call
117
- * @returns {string} -- the contract method encoded data
118
- */
119
- function sendMultiSigData(to, value, data, expireTime, sequenceId, signature) {
120
- var params = [to, value, ethereumjs_utils_old_1.toBuffer(data), expireTime, sequenceId, ethereumjs_utils_old_1.toBuffer(signature)];
121
- var method = ethereumjs_abi_1.default.methodID('sendMultiSig', walletUtil_1.sendMultiSigTypes);
122
- var args = ethereumjs_abi_1.default.rawEncode(walletUtil_1.sendMultiSigTypes, params);
123
- return ethereumjs_utils_old_1.addHexPrefix(buffer_1.Buffer.concat([method, args]).toString('hex'));
124
- }
125
- exports.sendMultiSigData = sendMultiSigData;
126
- /**
127
- * Returns the contract method encoded data
128
- *
129
- * @param {string} to destination address
130
- * @param {number} value Amount to tranfer
131
- * @param {string} tokenContractAddress the address of the erc20 token contract
132
- * @param {number} expireTime expiration time for the transaction in seconds
133
- * @param {number} sequenceId sequence id
134
- * @param {string} signature signature of the call
135
- * @returns {string} -- the contract method encoded data
136
- */
137
- function sendMultiSigTokenData(to, value, tokenContractAddress, expireTime, sequenceId, signature) {
138
- var params = [to, value, tokenContractAddress, expireTime, sequenceId, ethereumjs_utils_old_1.toBuffer(signature)];
139
- var method = ethereumjs_abi_1.default.methodID('sendMultiSigToken', walletUtil_1.sendMultiSigTokenTypes);
140
- var args = ethereumjs_abi_1.default.rawEncode(walletUtil_1.sendMultiSigTokenTypes, params);
141
- return ethereumjs_utils_old_1.addHexPrefix(buffer_1.Buffer.concat([method, args]).toString('hex'));
142
- }
143
- exports.sendMultiSigTokenData = sendMultiSigTokenData;
144
- /**
145
- * Get the data required to make a flush tokens contract call
146
- *
147
- * @param forwarderAddress The forwarder address to flush
148
- * @param tokenAddress The token address to flush from
149
- */
150
- function flushTokensData(forwarderAddress, tokenAddress) {
151
- var params = [forwarderAddress, tokenAddress];
152
- var method = ethereumjs_abi_1.default.methodID('flushForwarderTokens', walletUtil_1.flushTokensTypes);
153
- var args = ethereumjs_abi_1.default.rawEncode(walletUtil_1.flushTokensTypes, params);
154
- return ethereumjs_utils_old_1.addHexPrefix(buffer_1.Buffer.concat([method, args]).toString('hex'));
155
- }
156
- exports.flushTokensData = flushTokensData;
157
- /**
158
- * Get the data required to make a flush native coins contract call
159
- */
160
- function flushCoinsData() {
161
- var params = [];
162
- var method = ethereumjs_abi_1.default.methodID('flush', walletUtil_1.flushCoinsTypes);
163
- var args = ethereumjs_abi_1.default.rawEncode(walletUtil_1.flushCoinsTypes, params);
164
- return ethereumjs_utils_old_1.addHexPrefix(buffer_1.Buffer.concat([method, args]).toString('hex'));
165
- }
166
- exports.flushCoinsData = flushCoinsData;
167
- /**
168
- * Returns the create forwarder method calling data
169
- *
170
- * @returns {string} - the createForwarder method encoded
171
- */
172
- function getAddressInitializationData() {
173
- return walletUtil_1.createForwarderMethodId;
174
- }
175
- exports.getAddressInitializationData = getAddressInitializationData;
176
- /**
177
- * Returns whether or not the string is a valid Eth address
178
- *
179
- * @param {string} address - the tx hash to validate
180
- * @returns {boolean} - the validation result
181
- */
182
- function isValidEthAddress(address) {
183
- return ethereumjs_utils_old_1.isValidAddress(address);
184
- }
185
- exports.isValidEthAddress = isValidEthAddress;
186
- /**
187
- * Returns whether or not the string is a valid amount number
188
- *
189
- * @param {string} amount - the string to validate
190
- * @returns {boolean} - the validation result
191
- */
192
- function isValidAmount(amount) {
193
- var bigNumberAmount = new bignumber_js_1.default(amount);
194
- return bigNumberAmount.isInteger() && bigNumberAmount.isGreaterThanOrEqualTo(0);
195
- }
196
- exports.isValidAmount = isValidAmount;
197
- /**
198
- * Returns the smart contract encoded data
199
- *
200
- * @param {string} data The wallet creation data to decode
201
- * @returns {string[]} - The list of signer addresses
202
- */
203
- function decodeWalletCreationData(data) {
204
- if (!data.startsWith(walletUtil_1.walletInitializationFirstBytes)) {
205
- throw new errors_1.BuildTransactionError("Invalid wallet bytecode: " + data);
206
- }
207
- var dataBuffer = buffer_1.Buffer.from(data.slice(2), 'hex');
208
- // the last 160 bytes contain the serialized address array
209
- var serializedSigners = dataBuffer.slice(-160);
210
- var resultEncodedParameters = ethereumjs_abi_1.default.rawDecode(walletUtil_1.walletSimpleConstructor, serializedSigners);
211
- if (resultEncodedParameters.length !== 1) {
212
- throw new errors_1.BuildTransactionError("Could not decode wallet constructor bytecode: " + resultEncodedParameters);
213
- }
214
- var addresses = resultEncodedParameters[0];
215
- if (addresses.length !== 3) {
216
- throw new errors_1.BuildTransactionError("invalid number of addresses in parsed constructor: " + addresses);
217
- }
218
- // sometimes ethereumjs-abi removes 0 padding at the start of addresses,
219
- // so we should pad until they are the standard 20 bytes
220
- var paddedAddresses = addresses.map(function (address) { return ethereumjs_utils_old_1.stripHexPrefix(address.toString('hex')).padStart(40, '0'); });
221
- return paddedAddresses.map(function (address) { return ethereumjs_utils_old_1.addHexPrefix(address); });
222
- }
223
- exports.decodeWalletCreationData = decodeWalletCreationData;
224
- /**
225
- * Decode the given ABI-encoded transfer data and return parsed fields
226
- *
227
- * @param data The data to decode
228
- * @returns parsed transfer data
229
- */
230
- function decodeTransferData(data) {
231
- if (data.startsWith(walletUtil_1.sendMultisigMethodId)) {
232
- return decodeNativeTransferData(data);
233
- }
234
- else if (data.startsWith(walletUtil_1.sendMultisigTokenMethodId)) {
235
- return decodeTokenTransferData(data);
236
- }
237
- else {
238
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
239
- }
240
- }
241
- exports.decodeTransferData = decodeTransferData;
242
- /**
243
- * Decode the given ABI-encoded transfer data for the sendMultisigToken function and return parsed fields
244
- *
245
- * @param data The data to decode
246
- * @returns parsed token transfer data
247
- */
248
- function decodeTokenTransferData(data) {
249
- if (!data.startsWith(walletUtil_1.sendMultisigTokenMethodId)) {
250
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
251
- }
252
- var _a = getRawDecoded(walletUtil_1.sendMultiSigTokenTypes, getBufferedByteCode(walletUtil_1.sendMultisigTokenMethodId, data)), to = _a[0], amount = _a[1], tokenContractAddress = _a[2], expireTime = _a[3], sequenceId = _a[4], signature = _a[5];
253
- return {
254
- to: ethereumjs_utils_old_1.addHexPrefix(to),
255
- amount: new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(amount)).toFixed(),
256
- expireTime: ethereumjs_utils_old_1.bufferToInt(expireTime),
257
- sequenceId: ethereumjs_utils_old_1.bufferToInt(sequenceId),
258
- signature: ethereumjs_utils_old_1.bufferToHex(signature),
259
- tokenContractAddress: ethereumjs_utils_old_1.addHexPrefix(tokenContractAddress),
260
- };
261
- }
262
- exports.decodeTokenTransferData = decodeTokenTransferData;
263
- function decodeERC721TransferData(data) {
264
- if (!data.startsWith(walletUtil_1.sendMultisigMethodId)) {
265
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
266
- }
267
- var _a = getRawDecoded(walletUtil_1.sendMultiSigTypes, getBufferedByteCode(walletUtil_1.sendMultisigMethodId, data)), to = _a[0], amount = _a[1], internalData = _a[2], expireTime = _a[3], sequenceId = _a[4], signature = _a[5];
268
- var internalDataHex = ethereumjs_utils_old_1.bufferToHex(internalData);
269
- if (!internalDataHex.startsWith(walletUtil_1.ERC721SafeTransferTypeMethodId)) {
270
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
271
- }
272
- var _b = getRawDecoded(walletUtil_1.ERC721SafeTransferTypes, getBufferedByteCode(walletUtil_1.ERC721SafeTransferTypeMethodId, internalDataHex)), from = _b[0], receiver = _b[1], tokenId = _b[2], userSentData = _b[3];
273
- return {
274
- to: ethereumjs_utils_old_1.addHexPrefix(receiver),
275
- from: ethereumjs_utils_old_1.addHexPrefix(from),
276
- expireTime: ethereumjs_utils_old_1.bufferToInt(expireTime),
277
- amount: new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(amount)).toFixed(),
278
- tokenId: new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(tokenId)).toFixed(),
279
- sequenceId: ethereumjs_utils_old_1.bufferToInt(sequenceId),
280
- signature: ethereumjs_utils_old_1.bufferToHex(signature),
281
- tokenContractAddress: ethereumjs_utils_old_1.addHexPrefix(to),
282
- userData: ethereumjs_utils_old_1.bufferToHex(userSentData),
283
- };
284
- }
285
- exports.decodeERC721TransferData = decodeERC721TransferData;
286
- function decodeERC1155TransferData(data) {
287
- var _a, _b;
288
- var from, receiver, userSentData;
289
- var tokenIds;
290
- var values;
291
- if (!data.startsWith(walletUtil_1.sendMultisigMethodId)) {
292
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
293
- }
294
- var _c = getRawDecoded(walletUtil_1.sendMultiSigTypes, getBufferedByteCode(walletUtil_1.sendMultisigMethodId, data)), to = _c[0], amount = _c[1], internalData = _c[2], expireTime = _c[3], sequenceId = _c[4], signature = _c[5];
295
- var internalDataHex = ethereumjs_utils_old_1.bufferToHex(internalData);
296
- if (internalDataHex.startsWith(walletUtil_1.ERC1155SafeTransferTypeMethodId)) {
297
- var tokenId = void 0;
298
- var value = void 0;
299
- _a = getRawDecoded(walletUtil_1.ERC1155SafeTransferTypes, getBufferedByteCode(walletUtil_1.ERC1155SafeTransferTypeMethodId, internalDataHex)), from = _a[0], receiver = _a[1], tokenId = _a[2], value = _a[3], userSentData = _a[4];
300
- tokenIds = [new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(tokenId)).toFixed()];
301
- values = [new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(value)).toFixed()];
302
- }
303
- else if (ethereumjs_utils_old_1.bufferToHex(internalData).startsWith(walletUtil_1.ERC1155BatchTransferTypeMethodId)) {
304
- var tempTokenIds = void 0, tempValues = void 0;
305
- _b = getRawDecoded(walletUtil_1.ERC1155BatchTransferTypes, getBufferedByteCode(walletUtil_1.ERC1155BatchTransferTypeMethodId, internalDataHex)), from = _b[0], receiver = _b[1], tempTokenIds = _b[2], tempValues = _b[3], userSentData = _b[4];
306
- tokenIds = tempTokenIds.map(function (x) { return new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(x)).toFixed(); });
307
- values = tempValues.map(function (x) { return new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(x)).toFixed(); });
308
- }
309
- else {
310
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
311
- }
312
- return {
313
- to: ethereumjs_utils_old_1.addHexPrefix(receiver),
314
- from: ethereumjs_utils_old_1.addHexPrefix(from),
315
- expireTime: ethereumjs_utils_old_1.bufferToInt(expireTime),
316
- amount: new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(amount)).toFixed(),
317
- tokenIds: tokenIds,
318
- values: values,
319
- sequenceId: ethereumjs_utils_old_1.bufferToInt(sequenceId),
320
- signature: ethereumjs_utils_old_1.bufferToHex(signature),
321
- tokenContractAddress: ethereumjs_utils_old_1.addHexPrefix(to),
322
- userData: userSentData,
323
- };
324
- }
325
- exports.decodeERC1155TransferData = decodeERC1155TransferData;
326
- /**
327
- * Decode the given ABI-encoded transfer data for the sendMultisig function and return parsed fields
328
- *
329
- * @param data The data to decode
330
- * @returns parsed transfer data
331
- */
332
- function decodeNativeTransferData(data) {
333
- if (!data.startsWith(walletUtil_1.sendMultisigMethodId)) {
334
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
335
- }
336
- var _a = getRawDecoded(walletUtil_1.sendMultiSigTypes, getBufferedByteCode(walletUtil_1.sendMultisigMethodId, data)), to = _a[0], amount = _a[1], internalData = _a[2], expireTime = _a[3], sequenceId = _a[4], signature = _a[5];
337
- return {
338
- to: ethereumjs_utils_old_1.addHexPrefix(to),
339
- amount: new bignumber_js_1.default(ethereumjs_utils_old_1.bufferToHex(amount)).toFixed(),
340
- expireTime: ethereumjs_utils_old_1.bufferToInt(expireTime),
341
- sequenceId: ethereumjs_utils_old_1.bufferToInt(sequenceId),
342
- signature: ethereumjs_utils_old_1.bufferToHex(signature),
343
- data: ethereumjs_utils_old_1.bufferToHex(internalData),
344
- };
345
- }
346
- exports.decodeNativeTransferData = decodeNativeTransferData;
347
- /**
348
- * Decode the given ABI-encoded flush tokens data and return parsed fields
349
- *
350
- * @param data The data to decode
351
- * @returns parsed transfer data
352
- */
353
- function decodeFlushTokensData(data) {
354
- if (!data.startsWith(walletUtil_1.flushForwarderTokensMethodId)) {
355
- throw new errors_1.BuildTransactionError("Invalid transfer bytecode: " + data);
356
- }
357
- var _a = getRawDecoded(walletUtil_1.flushTokensTypes, getBufferedByteCode(walletUtil_1.flushForwarderTokensMethodId, data)), forwarderAddress = _a[0], tokenAddress = _a[1];
358
- return {
359
- forwarderAddress: ethereumjs_utils_old_1.addHexPrefix(forwarderAddress),
360
- tokenAddress: ethereumjs_utils_old_1.addHexPrefix(tokenAddress),
361
- };
362
- }
363
- exports.decodeFlushTokensData = decodeFlushTokensData;
364
- /**
365
- * Classify the given transaction data based as a transaction type.
366
- * ETH transactions are defined by the first 8 bytes of the transaction data, also known as the method id
367
- *
368
- * @param {string} data The data to classify the transaction with
369
- * @returns {TransactionType} The classified transaction type
370
- */
371
- function classifyTransaction(data) {
372
- if (data.length < 10) {
373
- // contract calls must have at least 4 bytes (method id) and '0x'
374
- // if it doesn't have enough data to be a contract call it must be a single sig send
375
- return baseCoin_1.TransactionType.SingleSigSend;
376
- }
377
- // TODO(STLX-1970): validate if we are going to constraint to some methods allowed
378
- var transactionType = transactionTypesMap[data.slice(0, 10).toLowerCase()];
379
- if (transactionType === undefined) {
380
- transactionType = baseCoin_1.TransactionType.ContractCall;
381
- }
382
- return transactionType;
383
- }
384
- exports.classifyTransaction = classifyTransaction;
385
- /**
386
- * A transaction types map according to the starting part of the encoded data
387
- */
388
- var transactionTypesMap = (_a = {},
389
- _a[walletUtil_1.walletInitializationFirstBytes] = baseCoin_1.TransactionType.WalletInitialization,
390
- _a[walletUtil_1.createForwarderMethodId] = baseCoin_1.TransactionType.AddressInitialization,
391
- _a[walletUtil_1.sendMultisigMethodId] = baseCoin_1.TransactionType.Send,
392
- _a[walletUtil_1.flushForwarderTokensMethodId] = baseCoin_1.TransactionType.FlushTokens,
393
- _a[walletUtil_1.flushCoinsMethodId] = baseCoin_1.TransactionType.FlushCoins,
394
- _a[walletUtil_1.sendMultisigTokenMethodId] = baseCoin_1.TransactionType.Send,
395
- _a[stakingUtils_1.LockMethodId] = baseCoin_1.TransactionType.StakingLock,
396
- _a[stakingUtils_1.VoteMethodId] = baseCoin_1.TransactionType.StakingVote,
397
- _a[stakingUtils_1.ActivateMethodId] = baseCoin_1.TransactionType.StakingActivate,
398
- _a[stakingUtils_1.UnvoteMethodId] = baseCoin_1.TransactionType.StakingUnvote,
399
- _a[stakingUtils_1.UnlockMethodId] = baseCoin_1.TransactionType.StakingUnlock,
400
- _a[stakingUtils_1.WithdrawMethodId] = baseCoin_1.TransactionType.StakingWithdraw,
401
- _a);
402
- /**
403
- *
404
- * @param {number} num number to be converted to hex
405
- * @returns {string} the hex number
406
- */
407
- function numberToHexString(num) {
408
- var hex = num.toString(16);
409
- return hex.length % 2 === 0 ? '0x' + hex : '0x0' + hex;
410
- }
411
- exports.numberToHexString = numberToHexString;
412
- /**
413
- *
414
- * @param {string} hex The hex string to be converted
415
- * @returns {number} the resulting number
416
- */
417
- function hexStringToNumber(hex) {
418
- return parseInt(hex.slice(2), 16);
419
- }
420
- exports.hexStringToNumber = hexStringToNumber;
421
- /**
422
- * Generates an address of the forwarder address to be deployed
423
- *
424
- * @param {string} contractAddress the address which is creating this new address
425
- * @param {number} contractCounter the nonce of the contract address
426
- * @returns {string} the calculated forwarder contract address
427
- */
428
- function calculateForwarderAddress(contractAddress, contractCounter) {
429
- var forwarderAddress = ethereumjs_utils_old_1.generateAddress(contractAddress, contractCounter);
430
- return ethereumjs_utils_old_1.addHexPrefix(forwarderAddress.toString('hex'));
431
- }
432
- exports.calculateForwarderAddress = calculateForwarderAddress;
433
- /**
434
- * Calculate the forwarder v1 address that will be generated if `creatorAddress` creates it with salt `salt`
435
- * and initcode `inicode using the create2 opcode
436
- * @param {string} creatorAddress The address that is sending the tx to create a new address, hex string
437
- * @param {string} salt The salt to create the address with using create2, hex string
438
- * @param {string} initcode The initcode that will be deployed to the address, hex string
439
- * @return {string} The calculated address
440
- */
441
- function calculateForwarderV1Address(creatorAddress, salt, initcode) {
442
- var forwarderV1Address = ethereumjs_util_1.generateAddress2(buffer_1.Buffer.from(ethereumjs_utils_old_1.stripHexPrefix(creatorAddress), 'hex'), buffer_1.Buffer.from(ethereumjs_utils_old_1.stripHexPrefix(salt), 'hex'), buffer_1.Buffer.from(ethereumjs_utils_old_1.stripHexPrefix(initcode), 'hex'));
443
- return ethereumjs_utils_old_1.addHexPrefix(forwarderV1Address.toString('hex'));
444
- }
445
- exports.calculateForwarderV1Address = calculateForwarderV1Address;
446
- /**
447
- * Take the implementation address for the proxy contract, and get the binary initcode for the associated proxy
448
- * @param {string} implementationAddress The address of the implementation contract for the proxy
449
- * @return {string} Binary hex string of the proxy
450
- */
451
- function getProxyInitcode(implementationAddress) {
452
- var target = ethereumjs_utils_old_1.stripHexPrefix(implementationAddress.toLowerCase()).padStart(40, '0');
453
- // bytecode of the proxy, from:
454
- // https://github.com/BitGo/eth-multisig-v4/blob/d546a937f90f93e83b3423a5bf933d1d77c677c3/contracts/CloneFactory.sol#L42-L56
455
- return "0x3d602d80600a3d3981f3363d3d373d3d3d363d73" + target + "5af43d82803e903d91602b57fd5bf3";
456
- }
457
- exports.getProxyInitcode = getProxyInitcode;
458
- /**
459
- * Convert the given signature parts to a string representation
460
- *
461
- * @param {SignatureParts} sig The signature to convert to string
462
- * @returns {string} String representation of the signature
463
- */
464
- function toStringSig(sig) {
465
- return ethereumjs_utils_old_1.bufferToHex(buffer_1.Buffer.concat([ethereumjs_utils_old_1.setLengthLeft(sig.r, 32), ethereumjs_utils_old_1.setLengthLeft(sig.s, 32), ethereumjs_utils_old_1.toBuffer(sig.v)]));
466
- }
467
- exports.toStringSig = toStringSig;
468
- /**
469
- * Return whether or not the given tx data has a signature
470
- *
471
- * @param {TxData} txData The transaction data to check for signature
472
- * @returns {boolean} true if the tx has a signature, else false
473
- */
474
- function hasSignature(txData) {
475
- return (txData.v !== undefined &&
476
- txData.r !== undefined &&
477
- txData.s !== undefined &&
478
- txData.v.length > 0 &&
479
- txData.r.length > 0 &&
480
- txData.s.length > 0);
481
- }
482
- exports.hasSignature = hasSignature;
483
- /**
484
- * Get the raw data decoded for some types
485
- *
486
- * @param {string[]} types ABI types definition
487
- * @param {Buffer} serializedArgs encoded args
488
- * @returns {Buffer[]} the decoded raw
489
- */
490
- function getRawDecoded(types, serializedArgs) {
491
- return ethereumjs_abi_1.default.rawDecode(types, serializedArgs);
492
- }
493
- exports.getRawDecoded = getRawDecoded;
494
- /**
495
- * Get the buffered bytecode from rawData using a methodId as delimiter
496
- *
497
- * @param {string} methodId the hex encoded method Id
498
- * @param {string} rawData the hex encoded raw data
499
- * @returns {Buffer} data buffered bytecode
500
- */
501
- function getBufferedByteCode(methodId, rawData) {
502
- var splitBytecode = rawData.split(methodId);
503
- if (splitBytecode.length !== 2) {
504
- throw new errors_1.BuildTransactionError("Invalid send bytecode: " + rawData);
505
- }
506
- return buffer_1.Buffer.from(splitBytecode[1], 'hex');
507
- }
508
- exports.getBufferedByteCode = getBufferedByteCode;
509
- /**
510
- * Get the statics coin object matching a given contract address if it exists
511
- *
512
- * @param tokenContractAddress The contract address to match against
513
- * @returns statics BaseCoin object for the matching token
514
- */
515
- function getToken(tokenContractAddress, network) {
516
- var tokens = statics_1.coins.filter(function (coin) {
517
- if (coin instanceof statics_1.ContractAddressDefinedToken) {
518
- return (coin.network.type === network.type && coin.contractAddress.toLowerCase() === tokenContractAddress.toLowerCase());
519
- }
520
- return false;
521
- });
522
- // if length of tokens is 1, return the first, else return undefined
523
- // Can't directly index into tokens, or call `length`, so we use map to get an array
524
- var tokensArray = tokens.map(function (token) { return token; });
525
- if (tokensArray.length >= 1) {
526
- // there should never be two tokens with the same contract address, so we assert that here
527
- assert_1.default(tokensArray.length === 1);
528
- return tokensArray[0];
529
- }
530
- return undefined;
531
- }
532
- exports.getToken = getToken;
533
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9ldGgvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUFnQztBQUNoQyxrREFBNEI7QUFDNUIsNkRBUzhCO0FBQzlCLG1EQUFtRDtBQUNuRCwwQ0FBNEc7QUFDNUcsa0VBQXlDO0FBQ3pDLDhEQUFnRDtBQUVoRCw4REFBcUM7QUFDckMsNkNBQXlFO0FBQ3pFLHdDQUE4QztBQUM5QyxxREFPOEI7QUFZOUIsMkNBa0JzQjtBQUN0QixpQ0FBNkM7QUFFN0M7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQUMsT0FBd0I7SUFDaEQsT0FBTyxnQkFBYyxDQUFDLGNBQWM7SUFDbEMsd0VBQXdFO0lBQ3hFLFNBQVMsRUFDVDtRQUNFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDMUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0tBQ3pCLEVBQ0QsUUFBUSxDQUNULENBQUM7QUFDSixDQUFDO0FBWEQsOEJBV0M7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQXNCLFlBQVksQ0FDaEMsZUFBdUIsRUFDdkIsT0FBZ0IsRUFDaEIsWUFBNEI7Ozs7WUFFNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxxQkFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7YUFDL0M7WUFDSyxLQUFLLEdBQUcsMEJBQWtCLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN6RSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BCLHNCQUFPLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBQzs7O0NBQzdCO0FBWEQsb0NBV0M7QUFF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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIGFkZEhleFByZWZpeCxcbiAgYnVmZmVyVG9IZXgsXG4gIGJ1ZmZlclRvSW50LFxuICBnZW5lcmF0ZUFkZHJlc3MsXG4gIGlzVmFsaWRBZGRyZXNzLFxuICBzZXRMZW5ndGhMZWZ0LFxuICBzdHJpcEhleFByZWZpeCxcbiAgdG9CdWZmZXIsXG59IGZyb20gJ2V0aGVyZXVtanMtdXRpbHMtb2xkJztcbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzczIgfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJhc2VOZXR3b3JrLCBjb2lucywgQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuLCBFdGhlcmV1bU5ldHdvcmsgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IEV0aGVyZXVtQ29tbW9uIGZyb20gJ0BldGhlcmV1bWpzL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBCTiBmcm9tICdibi5qcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFNpZ25pbmdFcnJvciB9IGZyb20gJy4uL2Jhc2VDb2luL2Vycm9ycyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQge1xuICBBY3RpdmF0ZU1ldGhvZElkLFxuICBMb2NrTWV0aG9kSWQsXG4gIFVubG9ja01ldGhvZElkLFxuICBVbnZvdGVNZXRob2RJZCxcbiAgVm90ZU1ldGhvZElkLFxuICBXaXRoZHJhd01ldGhvZElkLFxufSBmcm9tICcuLi9jZWxvL3N0YWtpbmdVdGlscyc7XG5pbXBvcnQge1xuICBFUkMxMTU1VHJhbnNmZXJEYXRhLFxuICBFUkM3MjFUcmFuc2ZlckRhdGEsXG4gIEZsdXNoVG9rZW5zRGF0YSxcbiAgTmF0aXZlVHJhbnNmZXJEYXRhLFxuICBTaWduYXR1cmVQYXJ0cyxcbiAgVG9rZW5UcmFuc2ZlckRhdGEsXG4gIFRyYW5zZmVyRGF0YSxcbiAgVHhEYXRhLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlRm9yd2FyZGVyTWV0aG9kSWQsXG4gIEVSQzExNTVCYXRjaFRyYW5zZmVyVHlwZU1ldGhvZElkLFxuICBFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVzLFxuICBFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZU1ldGhvZElkLFxuICBFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZXMsXG4gIEVSQzcyMVNhZmVUcmFuc2ZlclR5cGVNZXRob2RJZCxcbiAgRVJDNzIxU2FmZVRyYW5zZmVyVHlwZXMsXG4gIGZsdXNoQ29pbnNNZXRob2RJZCxcbiAgZmx1c2hDb2luc1R5cGVzLFxuICBmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkLFxuICBmbHVzaFRva2Vuc1R5cGVzLFxuICBzZW5kTXVsdGlzaWdNZXRob2RJZCxcbiAgc2VuZE11bHRpc2lnVG9rZW5NZXRob2RJZCxcbiAgc2VuZE11bHRpU2lnVG9rZW5UeXBlcyxcbiAgc2VuZE11bHRpU2lnVHlwZXMsXG4gIHdhbGxldEluaXRpYWxpemF0aW9uRmlyc3RCeXRlcyxcbiAgd2FsbGV0U2ltcGxlQ29uc3RydWN0b3IsXG59IGZyb20gJy4vd2FsbGV0VXRpbCc7XG5pbXBvcnQgeyBFdGhUcmFuc2FjdGlvbkRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAcGFyYW0gbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbW9uKG5ldHdvcms6IEV0aGVyZXVtTmV0d29yayk6IEV0aGVyZXVtQ29tbW9uIHtcbiAgcmV0dXJuIEV0aGVyZXVtQ29tbW9uLmZvckN1c3RvbUNoYWluKFxuICAgIC8vIHVzZSB0aGUgbWFpbm5ldCBjb25maWcgYXMgYSBiYXNlLCBvdmVycmlkZSBjaGFpbiBpZHMgYW5kIG5ldHdvcmsgbmFtZVxuICAgICdtYWlubmV0JyxcbiAgICB7XG4gICAgICBuYW1lOiBuZXR3b3JrLnR5cGUsXG4gICAgICBuZXR3b3JrSWQ6IG5ldHdvcmsuY2hhaW5JZCxcbiAgICAgIGNoYWluSWQ6IG5ldHdvcmsuY2hhaW5JZCxcbiAgICB9LFxuICAgICdsb25kb24nLFxuICApO1xufVxuXG4vKipcbiAqIFNpZ25zIHRoZSB0cmFuc2FjdGlvbiB1c2luZyB0aGUgYXBwcm9wcmlhdGUgYWxnb3JpdGhtXG4gKiBhbmQgdGhlIHByb3ZpZGVkIGNvbW1vbiBmb3IgdGhlIGJsb2NrY2hhaW5cbiAqXG4gKiBAcGFyYW0ge1R4RGF0YX0gdHJhbnNhY3Rpb25EYXRhIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHRvIHNpZ25cbiAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciB0aGUgc2lnbmVyJ3Mga2V5cGFpclxuICogQHBhcmFtIHtFdGhlcmV1bUNvbW1vbn0gY3VzdG9tQ29tbW9uIHRoZSBuZXR3b3JrJ3MgY3VzdG9tIGNvbW1vblxuICogQHJldHVybnMge3N0cmluZ30gdGhlIHRyYW5zYWN0aW9uIHNpZ25lZCBhbmQgZW5jb2RlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnbkludGVybmFsKFxuICB0cmFuc2FjdGlvbkRhdGE6IFR4RGF0YSxcbiAga2V5UGFpcjogS2V5UGFpcixcbiAgY3VzdG9tQ29tbW9uOiBFdGhlcmV1bUNvbW1vbixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICgha2V5UGFpci5nZXRLZXlzKCkucHJ2KSB7XG4gICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICB9XG4gIGNvbnN0IGV0aFR4ID0gRXRoVHJhbnNhY3Rpb25EYXRhLmZyb21Kc29uKHRyYW5zYWN0aW9uRGF0YSwgY3VzdG9tQ29tbW9uKTtcbiAgZXRoVHguc2lnbihrZXlQYWlyKTtcbiAgcmV0dXJuIGV0aFR4LnRvU2VyaWFsaXplZCgpO1xufVxuXG4vKipcbiAqIFNpZ25zIHRoZSB0cmFuc2FjdGlvbiB1c2luZyB0aGUgYXBwcm9wcmlhdGUgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHtUeERhdGF9IHRyYW5zYWN0aW9uRGF0YSB0aGUgdHJhbnNhY3Rpb24gZGF0YSB0byBzaWduXG4gKiBAcGFyYW0ge0tleVBhaXJ9IGtleVBhaXIgdGhlIHNpZ25lcidzIGtleXBhaXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSB0cmFuc2FjdGlvbiBzaWduZWQgYW5kIGVuY29kZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ24odHJhbnNhY3Rpb25EYXRhOiBUeERhdGEsIGtleVBhaXI6IEtleVBhaXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gc2lnbkludGVybmFsKHRyYW5zYWN0aW9uRGF0YSwga2V5UGFpciwgZ2V0Q29tbW9uKGNvaW5zLmdldCgndGV0aCcpLm5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29udHJhY3QgbWV0aG9kIGVuY29kZWQgZGF0YVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0byBkZXN0aW5hdGlvbiBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgQW1vdW50IHRvIHRyYW5mZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIGFkaXRpb25hbCBtZXRob2QgY2FsbCBkYXRhXG4gKiBAcGFyYW0ge251bWJlcn0gZXhwaXJlVGltZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSB0cmFuc2FjdGlvbiBpbiBzZWNvbmRzXG4gKiBAcGFyYW0ge251bWJlcn0gc2VxdWVuY2VJZCBzZXF1ZW5jZSBpZFxuICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBzaWduYXR1cmUgb2YgdGhlIGNhbGxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0tIHRoZSBjb250cmFjdCBtZXRob2QgZW5jb2RlZCBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kTXVsdGlTaWdEYXRhKFxuICB0bzogc3RyaW5nLFxuICB2YWx1ZTogc3RyaW5nLFxuICBkYXRhOiBzdHJpbmcsXG4gIGV4cGlyZVRpbWU6IG51bWJlcixcbiAgc2VxdWVuY2VJZDogbnVtYmVyLFxuICBzaWduYXR1cmU6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcmFtcyA9IFt0bywgdmFsdWUsIHRvQnVmZmVyKGRhdGEpLCBleHBpcmVUaW1lLCBzZXF1ZW5jZUlkLCB0b0J1ZmZlcihzaWduYXR1cmUpXTtcbiAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQoJ3NlbmRNdWx0aVNpZycsIHNlbmRNdWx0aVNpZ1R5cGVzKTtcbiAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZShzZW5kTXVsdGlTaWdUeXBlcywgcGFyYW1zKTtcbiAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbnRyYWN0IG1ldGhvZCBlbmNvZGVkIGRhdGFcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG8gZGVzdGluYXRpb24gYWRkcmVzc1xuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIEFtb3VudCB0byB0cmFuZmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5Db250cmFjdEFkZHJlc3MgdGhlIGFkZHJlc3Mgb2YgdGhlIGVyYzIwIHRva2VuIGNvbnRyYWN0XG4gKiBAcGFyYW0ge251bWJlcn0gZXhwaXJlVGltZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSB0cmFuc2FjdGlvbiBpbiBzZWNvbmRzXG4gKiBAcGFyYW0ge251bWJlcn0gc2VxdWVuY2VJZCBzZXF1ZW5jZSBpZFxuICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBzaWduYXR1cmUgb2YgdGhlIGNhbGxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0tIHRoZSBjb250cmFjdCBtZXRob2QgZW5jb2RlZCBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kTXVsdGlTaWdUb2tlbkRhdGEoXG4gIHRvOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmcsXG4gIGV4cGlyZVRpbWU6IG51bWJlcixcbiAgc2VxdWVuY2VJZDogbnVtYmVyLFxuICBzaWduYXR1cmU6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcmFtcyA9IFt0bywgdmFsdWUsIHRva2VuQ29udHJhY3RBZGRyZXNzLCBleHBpcmVUaW1lLCBzZXF1ZW5jZUlkLCB0b0J1ZmZlcihzaWduYXR1cmUpXTtcblxuICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnc2VuZE11bHRpU2lnVG9rZW4nLCBzZW5kTXVsdGlTaWdUb2tlblR5cGVzKTtcbiAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZShzZW5kTXVsdGlTaWdUb2tlblR5cGVzLCBwYXJhbXMpO1xuICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkYXRhIHJlcXVpcmVkIHRvIG1ha2UgYSBmbHVzaCB0b2tlbnMgY29udHJhY3QgY2FsbFxuICpcbiAqIEBwYXJhbSBmb3J3YXJkZXJBZGRyZXNzIFRoZSBmb3J3YXJkZXIgYWRkcmVzcyB0byBmbHVzaFxuICogQHBhcmFtIHRva2VuQWRkcmVzcyBUaGUgdG9rZW4gYWRkcmVzcyB0byBmbHVzaCBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbHVzaFRva2Vuc0RhdGEoZm9yd2FyZGVyQWRkcmVzcywgdG9rZW5BZGRyZXNzKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyYW1zID0gW2ZvcndhcmRlckFkZHJlc3MsIHRva2VuQWRkcmVzc107XG4gIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKCdmbHVzaEZvcndhcmRlclRva2VucycsIGZsdXNoVG9rZW5zVHlwZXMpO1xuICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKGZsdXNoVG9rZW5zVHlwZXMsIHBhcmFtcyk7XG4gIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRhdGEgcmVxdWlyZWQgdG8gbWFrZSBhIGZsdXNoIG5hdGl2ZSBjb2lucyBjb250cmFjdCBjYWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbHVzaENvaW5zRGF0YSgpOiBzdHJpbmcge1xuICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQoJ2ZsdXNoJywgZmx1c2hDb2luc1R5cGVzKTtcbiAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZShmbHVzaENvaW5zVHlwZXMsIHBhcmFtcyk7XG4gIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjcmVhdGUgZm9yd2FyZGVyIG1ldGhvZCBjYWxsaW5nIGRhdGFcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjcmVhdGVGb3J3YXJkZXIgbWV0aG9kIGVuY29kZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NJbml0aWFsaXphdGlvbkRhdGEoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUZvcndhcmRlck1ldGhvZElkO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIEV0aCBhZGRyZXNzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSB0aGUgdHggaGFzaCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRXRoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGFtb3VudCBudW1iZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IC0gdGhlIHN0cmluZyB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IC0gdGhlIHZhbGlkYXRpb24gcmVzdWx0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQW1vdW50KGFtb3VudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGJpZ051bWJlckFtb3VudCA9IG5ldyBCaWdOdW1iZXIoYW1vdW50KTtcbiAgcmV0dXJuIGJpZ051bWJlckFtb3VudC5pc0ludGVnZXIoKSAmJiBiaWdOdW1iZXJBbW91bnQuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbygwKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzbWFydCBjb250cmFjdCBlbmNvZGVkIGRhdGFcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBUaGUgd2FsbGV0IGNyZWF0aW9uIGRhdGEgdG8gZGVjb2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGhlIGxpc3Qgb2Ygc2lnbmVyIGFkZHJlc3Nlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlV2FsbGV0Q3JlYXRpb25EYXRhKGRhdGE6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgaWYgKCFkYXRhLnN0YXJ0c1dpdGgod2FsbGV0SW5pdGlhbGl6YXRpb25GaXJzdEJ5dGVzKSkge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgd2FsbGV0IGJ5dGVjb2RlOiAke2RhdGF9YCk7XG4gIH1cblxuICBjb25zdCBkYXRhQnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YS5zbGljZSgyKSwgJ2hleCcpO1xuXG4gIC8vIHRoZSBsYXN0IDE2MCBieXRlcyBjb250YWluIHRoZSBzZXJpYWxpemVkIGFkZHJlc3MgYXJyYXlcbiAgY29uc3Qgc2VyaWFsaXplZFNpZ25lcnMgPSBkYXRhQnVmZmVyLnNsaWNlKC0xNjApO1xuXG4gIGNvbnN0IHJlc3VsdEVuY29kZWRQYXJhbWV0ZXJzID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKHdhbGxldFNpbXBsZUNvbnN0cnVjdG9yLCBzZXJpYWxpemVkU2lnbmVycyk7XG4gIGlmIChyZXN1bHRFbmNvZGVkUGFyYW1ldGVycy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBDb3VsZCBub3QgZGVjb2RlIHdhbGxldCBjb25zdHJ1Y3RvciBieXRlY29kZTogJHtyZXN1bHRFbmNvZGVkUGFyYW1ldGVyc31gKTtcbiAgfVxuXG4gIGNvbnN0IGFkZHJlc3NlczogQk5bXSA9IHJlc3VsdEVuY29kZWRQYXJhbWV0ZXJzWzBdO1xuICBpZiAoYWRkcmVzc2VzLmxlbmd0aCAhPT0gMykge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYGludmFsaWQgbnVtYmVyIG9mIGFkZHJlc3NlcyBpbiBwYXJzZWQgY29uc3RydWN0b3I6ICR7YWRkcmVzc2VzfWApO1xuICB9XG5cbiAgLy8gc29tZXRpbWVzIGV0aGVyZXVtanMtYWJpIHJlbW92ZXMgMCBwYWRkaW5nIGF0IHRoZSBzdGFydCBvZiBhZGRyZXNzZXMsXG4gIC8vIHNvIHdlIHNob3VsZCBwYWQgdW50aWwgdGhleSBhcmUgdGhlIHN0YW5kYXJkIDIwIGJ5dGVzXG4gIGNvbnN0IHBhZGRlZEFkZHJlc3NlcyA9IGFkZHJlc3Nlcy5tYXAoKGFkZHJlc3MpID0+IHN0cmlwSGV4UHJlZml4KGFkZHJlc3MudG9TdHJpbmcoJ2hleCcpKS5wYWRTdGFydCg0MCwgJzAnKSk7XG5cbiAgcmV0dXJuIHBhZGRlZEFkZHJlc3Nlcy5tYXAoKGFkZHJlc3MpID0+IGFkZEhleFByZWZpeChhZGRyZXNzKSk7XG59XG5cbi8qKlxuICogRGVjb2RlIHRoZSBnaXZlbiBBQkktZW5jb2RlZCB0cmFuc2ZlciBkYXRhIGFuZCByZXR1cm4gcGFyc2VkIGZpZWxkc1xuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29kZVxuICogQHJldHVybnMgcGFyc2VkIHRyYW5zZmVyIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRyYW5zZmVyRGF0YShkYXRhOiBzdHJpbmcpOiBUcmFuc2ZlckRhdGEge1xuICBpZiAoZGF0YS5zdGFydHNXaXRoKHNlbmRNdWx0aXNpZ01ldGhvZElkKSkge1xuICAgIHJldHVybiBkZWNvZGVOYXRpdmVUcmFuc2ZlckRhdGEoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZGF0YS5zdGFydHNXaXRoKHNlbmRNdWx0aXNpZ1Rva2VuTWV0aG9kSWQpKSB7XG4gICAgcmV0dXJuIGRlY29kZVRva2VuVHJhbnNmZXJEYXRhKGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNmZXIgYnl0ZWNvZGU6ICR7ZGF0YX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIERlY29kZSB0aGUgZ2l2ZW4gQUJJLWVuY29kZWQgdHJhbnNmZXIgZGF0YSBmb3IgdGhlIHNlbmRNdWx0aXNpZ1Rva2VuIGZ1bmN0aW9uIGFuZCByZXR1cm4gcGFyc2VkIGZpZWxkc1xuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29kZVxuICogQHJldHVybnMgcGFyc2VkIHRva2VuIHRyYW5zZmVyIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVRva2VuVHJhbnNmZXJEYXRhKGRhdGE6IHN0cmluZyk6IFRva2VuVHJhbnNmZXJEYXRhIHtcbiAgaWYgKCFkYXRhLnN0YXJ0c1dpdGgoc2VuZE11bHRpc2lnVG9rZW5NZXRob2RJZCkpIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRyYW5zZmVyIGJ5dGVjb2RlOiAke2RhdGF9YCk7XG4gIH1cblxuICBjb25zdCBbdG8sIGFtb3VudCwgdG9rZW5Db250cmFjdEFkZHJlc3MsIGV4cGlyZVRpbWUsIHNlcXVlbmNlSWQsIHNpZ25hdHVyZV0gPSBnZXRSYXdEZWNvZGVkKFxuICAgIHNlbmRNdWx0aVNpZ1Rva2VuVHlwZXMsXG4gICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShzZW5kTXVsdGlzaWdUb2tlbk1ldGhvZElkLCBkYXRhKSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHRvOiBhZGRIZXhQcmVmaXgodG8pLFxuICAgIGFtb3VudDogbmV3IEJpZ051bWJlcihidWZmZXJUb0hleChhbW91bnQpKS50b0ZpeGVkKCksXG4gICAgZXhwaXJlVGltZTogYnVmZmVyVG9JbnQoZXhwaXJlVGltZSksXG4gICAgc2VxdWVuY2VJZDogYnVmZmVyVG9JbnQoc2VxdWVuY2VJZCksXG4gICAgc2lnbmF0dXJlOiBidWZmZXJUb0hleChzaWduYXR1cmUpLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBhZGRIZXhQcmVmaXgodG9rZW5Db250cmFjdEFkZHJlc3MpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRVJDNzIxVHJhbnNmZXJEYXRhKGRhdGE6IHN0cmluZyk6IEVSQzcyMVRyYW5zZmVyRGF0YSB7XG4gIGlmICghZGF0YS5zdGFydHNXaXRoKHNlbmRNdWx0aXNpZ01ldGhvZElkKSkge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNmZXIgYnl0ZWNvZGU6ICR7ZGF0YX1gKTtcbiAgfVxuXG4gIGNvbnN0IFt0bywgYW1vdW50LCBpbnRlcm5hbERhdGEsIGV4cGlyZVRpbWUsIHNlcXVlbmNlSWQsIHNpZ25hdHVyZV0gPSBnZXRSYXdEZWNvZGVkKFxuICAgIHNlbmRNdWx0aVNpZ1R5cGVzLFxuICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoc2VuZE11bHRpc2lnTWV0aG9kSWQsIGRhdGEpLFxuICApO1xuXG4gIGNvbnN0IGludGVybmFsRGF0YUhleCA9IGJ1ZmZlclRvSGV4KGludGVybmFsRGF0YSk7XG4gIGlmICghaW50ZXJuYWxEYXRhSGV4LnN0YXJ0c1dpdGgoRVJDNzIxU2FmZVRyYW5zZmVyVHlwZU1ldGhvZElkKSkge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNmZXIgYnl0ZWNvZGU6ICR7ZGF0YX1gKTtcbiAgfVxuXG4gIGNvbnN0IFtmcm9tLCByZWNlaXZlciwgdG9rZW5JZCwgdXNlclNlbnREYXRhXSA9IGdldFJhd0RlY29kZWQoXG4gICAgRVJDNzIxU2FmZVRyYW5zZmVyVHlwZXMsXG4gICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShFUkM3MjFTYWZlVHJhbnNmZXJUeXBlTWV0aG9kSWQsIGludGVybmFsRGF0YUhleCksXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB0bzogYWRkSGV4UHJlZml4KHJlY2VpdmVyKSxcbiAgICBmcm9tOiBhZGRIZXhQcmVmaXgoZnJvbSksXG4gICAgZXhwaXJlVGltZTogYnVmZmVyVG9JbnQoZXhwaXJlVGltZSksXG4gICAgYW1vdW50OiBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KGFtb3VudCkpLnRvRml4ZWQoKSxcbiAgICB0b2tlbklkOiBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHRva2VuSWQpKS50b0ZpeGVkKCksXG4gICAgc2VxdWVuY2VJZDogYnVmZmVyVG9JbnQoc2VxdWVuY2VJZCksXG4gICAgc2lnbmF0dXJlOiBidWZmZXJUb0hleChzaWduYXR1cmUpLFxuICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBhZGRIZXhQcmVmaXgodG8pLFxuICAgIHVzZXJEYXRhOiBidWZmZXJUb0hleCh1c2VyU2VudERhdGEpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRVJDMTE1NVRyYW5zZmVyRGF0YShkYXRhOiBzdHJpbmcpOiBFUkMxMTU1VHJhbnNmZXJEYXRhIHtcbiAgbGV0IGZyb20sIHJlY2VpdmVyLCB1c2VyU2VudERhdGE7XG4gIGxldCB0b2tlbklkczogc3RyaW5nW107XG4gIGxldCB2YWx1ZXM6IHN0cmluZ1tdO1xuXG4gIGlmICghZGF0YS5zdGFydHNXaXRoKHNlbmRNdWx0aXNpZ01ldGhvZElkKSkge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNmZXIgYnl0ZWNvZGU6ICR7ZGF0YX1gKTtcbiAgfVxuXG4gIGNvbnN0IFt0bywgYW1vdW50LCBpbnRlcm5hbERhdGEsIGV4cGlyZVRpbWUsIHNlcXVlbmNlSWQsIHNpZ25hdHVyZV0gPSBnZXRSYXdEZWNvZGVkKFxuICAgIHNlbmRNdWx0aVNpZ1R5cGVzLFxuICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoc2VuZE11bHRpc2lnTWV0aG9kSWQsIGRhdGEpLFxuICApO1xuXG4gIGNvbnN0IGludGVybmFsRGF0YUhleCA9IGJ1ZmZlclRvSGV4KGludGVybmFsRGF0YSk7XG4gIGlmIChpbnRlcm5hbERhdGFIZXguc3RhcnRzV2l0aChFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZU1ldGhvZElkKSkge1xuICAgIGxldCB0b2tlbklkO1xuICAgIGxldCB2YWx1ZTtcblxuICAgIFtmcm9tLCByZWNlaXZlciwgdG9rZW5JZCwgdmFsdWUsIHVzZXJTZW50RGF0YV0gPSBnZXRSYXdEZWNvZGVkKFxuICAgICAgRVJDMTE1NVNhZmVUcmFuc2ZlclR5cGVzLFxuICAgICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZU1ldGhvZElkLCBpbnRlcm5hbERhdGFIZXgpLFxuICAgICk7XG5cbiAgICB0b2tlbklkcyA9IFtuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHRva2VuSWQpKS50b0ZpeGVkKCldO1xuICAgIHZhbHVlcyA9IFtuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHZhbHVlKSkudG9GaXhlZCgpXTtcbiAgfSBlbHNlIGlmIChidWZmZXJUb0hleChpbnRlcm5hbERhdGEpLnN0YXJ0c1dpdGgoRVJDMTE1NUJhdGNoVHJhbnNmZXJUeXBlTWV0aG9kSWQpKSB7XG4gICAgbGV0IHRlbXBUb2tlbklkcywgdGVtcFZhbHVlcztcbiAgICBbZnJvbSwgcmVjZWl2ZXIsIHRlbXBUb2tlbklkcywgdGVtcFZhbHVlcywgdXNlclNlbnREYXRhXSA9IGdldFJhd0RlY29kZWQoXG4gICAgICBFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVzLFxuICAgICAgZ2V0QnVmZmVyZWRCeXRlQ29kZShFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVNZXRob2RJZCwgaW50ZXJuYWxEYXRhSGV4KSxcbiAgICApO1xuICAgIHRva2VuSWRzID0gdGVtcFRva2VuSWRzLm1hcCgoeCkgPT4gbmV3IEJpZ051bWJlcihidWZmZXJUb0hleCh4KSkudG9GaXhlZCgpKTtcbiAgICB2YWx1ZXMgPSB0ZW1wVmFsdWVzLm1hcCgoeCkgPT4gbmV3IEJpZ051bWJlcihidWZmZXJUb0hleCh4KSkudG9GaXhlZCgpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRyYW5zZmVyIGJ5dGVjb2RlOiAke2RhdGF9YCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvOiBhZGRIZXhQcmVmaXgocmVjZWl2ZXIpLFxuICAgIGZyb206IGFkZEhleFByZWZpeChmcm9tKSxcbiAgICBleHBpcmVUaW1lOiBidWZmZXJUb0ludChleHBpcmVUaW1lKSxcbiAgICBhbW91bnQ6IG5ldyBCaWdOdW1iZXIoYnVmZmVyVG9IZXgoYW1vdW50KSkudG9GaXhlZCgpLFxuICAgIHRva2VuSWRzLFxuICAgIHZhbHVlcyxcbiAgICBzZXF1ZW5jZUlkOiBidWZmZXJUb0ludChzZXF1ZW5jZUlkKSxcbiAgICBzaWduYXR1cmU6IGJ1ZmZlclRvSGV4KHNpZ25hdHVyZSksXG4gICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGFkZEhleFByZWZpeCh0byksXG4gICAgdXNlckRhdGE6IHVzZXJTZW50RGF0YSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNvZGUgdGhlIGdpdmVuIEFCSS1lbmNvZGVkIHRyYW5zZmVyIGRhdGEgZm9yIHRoZSBzZW5kTXVsdGlzaWcgZnVuY3Rpb24gYW5kIHJldHVybiBwYXJzZWQgZmllbGRzXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdG8gZGVjb2RlXG4gKiBAcmV0dXJucyBwYXJzZWQgdHJhbnNmZXIgZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlTmF0aXZlVHJhbnNmZXJEYXRhKGRhdGE6IHN0cmluZyk6IE5hdGl2ZVRyYW5zZmVyRGF0YSB7XG4gIGlmICghZGF0YS5zdGFydHNXaXRoKHNlbmRNdWx0aXNpZ01ldGhvZElkKSkge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNmZXIgYnl0ZWNvZGU6ICR7ZGF0YX1gKTtcbiAgfVxuXG4gIGNvbnN0IFt0bywgYW1vdW50LCBpbnRlcm5hbERhdGEsIGV4cGlyZVRpbWUsIHNlcXVlbmNlSWQsIHNpZ25hdHVyZV0gPSBnZXRSYXdEZWNvZGVkKFxuICAgIHNlbmRNdWx0aVNpZ1R5cGVzLFxuICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoc2VuZE11bHRpc2lnTWV0aG9kSWQsIGRhdGEpLFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgdG86IGFkZEhleFByZWZpeCh0byksXG4gICAgYW1vdW50OiBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KGFtb3VudCkpLnRvRml4ZWQoKSxcbiAgICBleHBpcmVUaW1lOiBidWZmZXJUb0ludChleHBpcmVUaW1lKSxcbiAgICBzZXF1ZW5jZUlkOiBidWZmZXJUb0ludChzZXF1ZW5jZUlkKSxcbiAgICBzaWduYXR1cmU6IGJ1ZmZlclRvSGV4KHNpZ25hdHVyZSksXG4gICAgZGF0YTogYnVmZmVyVG9IZXgoaW50ZXJuYWxEYXRhKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNvZGUgdGhlIGdpdmVuIEFCSS1lbmNvZGVkIGZsdXNoIHRva2VucyBkYXRhIGFuZCByZXR1cm4gcGFyc2VkIGZpZWxkc1xuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGRlY29kZVxuICogQHJldHVybnMgcGFyc2VkIHRyYW5zZmVyIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZsdXNoVG9rZW5zRGF0YShkYXRhOiBzdHJpbmcpOiBGbHVzaFRva2Vuc0RhdGEge1xuICBpZiAoIWRhdGEuc3RhcnRzV2l0aChmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkKSkge1xuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNmZXIgYnl0ZWNvZGU6ICR7ZGF0YX1gKTtcbiAgfVxuXG4gIGNvbnN0IFtmb3J3YXJkZXJBZGRyZXNzLCB0b2tlbkFkZHJlc3NdID0gZ2V0UmF3RGVjb2RlZChcbiAgICBmbHVzaFRva2Vuc1R5cGVzLFxuICAgIGdldEJ1ZmZlcmVkQnl0ZUNvZGUoZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZCwgZGF0YSksXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb3J3YXJkZXJBZGRyZXNzOiBhZGRIZXhQcmVmaXgoZm9yd2FyZGVyQWRkcmVzcyksXG4gICAgdG9rZW5BZGRyZXNzOiBhZGRIZXhQcmVmaXgodG9rZW5BZGRyZXNzKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDbGFzc2lmeSB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gZGF0YSBiYXNlZCBhcyBhIHRyYW5zYWN0aW9uIHR5cGUuXG4gKiBFVEggdHJhbnNhY3Rpb25zIGFyZSBkZWZpbmVkIGJ5IHRoZSBmaXJzdCA4IGJ5dGVzIG9mIHRoZSB0cmFuc2FjdGlvbiBkYXRhLCBhbHNvIGtub3duIGFzIHRoZSBtZXRob2QgaWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBjbGFzc2lmeSB0aGUgdHJhbnNhY3Rpb24gd2l0aFxuICogQHJldHVybnMge1RyYW5zYWN0aW9uVHlwZX0gVGhlIGNsYXNzaWZpZWQgdHJhbnNhY3Rpb24gdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlUcmFuc2FjdGlvbihkYXRhOiBzdHJpbmcpOiBUcmFuc2FjdGlvblR5cGUge1xuICBpZiAoZGF0YS5sZW5ndGggPCAxMCkge1xuICAgIC8vIGNvbnRyYWN0IGNhbGxzIG11c3QgaGF2ZSBhdCBsZWFzdCA0IGJ5dGVzIChtZXRob2QgaWQpIGFuZCAnMHgnXG4gICAgLy8gaWYgaXQgZG9lc24ndCBoYXZlIGVub3VnaCBkYXRhIHRvIGJlIGEgY29udHJhY3QgY2FsbCBpdCBtdXN0IGJlIGEgc2luZ2xlIHNpZyBzZW5kXG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVTaWdTZW5kO1xuICB9XG5cbiAgLy8gVE9ETyhTVExYLTE5NzApOiB2YWxpZGF0ZSBpZiB3ZSBhcmUgZ29pbmcgdG8gY29uc3RyYWludCB0byBzb21lIG1ldGhvZHMgYWxsb3dlZFxuICBsZXQgdHJhbnNhY3Rpb25UeXBlID0gdHJhbnNhY3Rpb25UeXBlc01hcFtkYXRhLnNsaWNlKDAsIDEwKS50b0xvd2VyQ2FzZSgpXTtcbiAgaWYgKHRyYW5zYWN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNhY3Rpb25UeXBlID0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbDtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2FjdGlvblR5cGU7XG59XG5cbi8qKlxuICogQSB0cmFuc2FjdGlvbiB0eXBlcyBtYXAgYWNjb3JkaW5nIHRvIHRoZSBzdGFydGluZyBwYXJ0IG9mIHRoZSBlbmNvZGVkIGRhdGFcbiAqL1xuY29uc3QgdHJhbnNhY3Rpb25UeXBlc01hcCA9IHtcbiAgW3dhbGxldEluaXRpYWxpemF0aW9uRmlyc3RCeXRlc106IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbixcbiAgW2NyZWF0ZUZvcndhcmRlck1ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbixcbiAgW3NlbmRNdWx0aXNpZ01ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gIFtmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLkZsdXNoVG9rZW5zLFxuICBbZmx1c2hDb2luc01ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLkZsdXNoQ29pbnMsXG4gIFtzZW5kTXVsdGlzaWdUb2tlbk1ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gIFtMb2NrTWV0aG9kSWRdOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2ssXG4gIFtWb3RlTWV0aG9kSWRdOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1ZvdGUsXG4gIFtBY3RpdmF0ZU1ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSxcbiAgW1Vudm90ZU1ldGhvZElkXTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbnZvdGUsXG4gIFtVbmxvY2tNZXRob2RJZF06IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrLFxuICBbV2l0aGRyYXdNZXRob2RJZF06IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcsXG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIG51bWJlciB0byBiZSBjb252ZXJ0ZWQgdG8gaGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgaGV4IG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9IZXhTdHJpbmcobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBudW0udG9TdHJpbmcoMTYpO1xuICByZXR1cm4gaGV4Lmxlbmd0aCAlIDIgPT09IDAgPyAnMHgnICsgaGV4IDogJzB4MCcgKyBoZXg7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZXggVGhlIGhleCBzdHJpbmcgdG8gYmUgY29udmVydGVkXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgcmVzdWx0aW5nIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGV4U3RyaW5nVG9OdW1iZXIoaGV4OiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gcGFyc2VJbnQoaGV4LnNsaWNlKDIpLCAxNik7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGFkZHJlc3Mgb2YgdGhlIGZvcndhcmRlciBhZGRyZXNzIHRvIGJlIGRlcGxveWVkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0QWRkcmVzcyB0aGUgYWRkcmVzcyB3aGljaCBpcyBjcmVhdGluZyB0aGlzIG5ldyBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gY29udHJhY3RDb3VudGVyIHRoZSBub25jZSBvZiB0aGUgY29udHJhY3QgYWRkcmVzc1xuICogQHJldHVybnMge3N0cmluZ30gdGhlIGNhbGN1bGF0ZWQgZm9yd2FyZGVyIGNvbnRyYWN0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUZvcndhcmRlckFkZHJlc3MoY29udHJhY3RBZGRyZXNzOiBzdHJpbmcsIGNvbnRyYWN0Q291bnRlcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhjb250cmFjdEFkZHJlc3MsIGNvbnRyYWN0Q291bnRlcik7XG4gIHJldHVybiBhZGRIZXhQcmVmaXgoZm9yd2FyZGVyQWRkcmVzcy50b1N0cmluZygnaGV4JykpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgZm9yd2FyZGVyIHYxIGFkZHJlc3MgdGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBpZiBgY3JlYXRvckFkZHJlc3NgIGNyZWF0ZXMgaXQgd2l0aCBzYWx0IGBzYWx0YFxuICogYW5kIGluaXRjb2RlIGBpbmljb2RlIHVzaW5nIHRoZSBjcmVhdGUyIG9wY29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGNyZWF0b3JBZGRyZXNzIFRoZSBhZGRyZXNzIHRoYXQgaXMgc2VuZGluZyB0aGUgdHggdG8gY3JlYXRlIGEgbmV3IGFkZHJlc3MsIGhleCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzYWx0IFRoZSBzYWx0IHRvIGNyZWF0ZSB0aGUgYWRkcmVzcyB3aXRoIHVzaW5nIGNyZWF0ZTIsIGhleCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbml0Y29kZSBUaGUgaW5pdGNvZGUgdGhhdCB3aWxsIGJlIGRlcGxveWVkIHRvIHRoZSBhZGRyZXNzLCBoZXggc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjYWxjdWxhdGVkIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUZvcndhcmRlclYxQWRkcmVzcyhjcmVhdG9yQWRkcmVzczogc3RyaW5nLCBzYWx0OiBzdHJpbmcsIGluaXRjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmb3J3YXJkZXJWMUFkZHJlc3MgPSBnZW5lcmF0ZUFkZHJlc3MyKFxuICAgIEJ1ZmZlci5mcm9tKHN0cmlwSGV4UHJlZml4KGNyZWF0b3JBZGRyZXNzKSwgJ2hleCcpLFxuICAgIEJ1ZmZlci5mcm9tKHN0cmlwSGV4UHJlZml4KHNhbHQpLCAnaGV4JyksXG4gICAgQnVmZmVyLmZyb20oc3RyaXBIZXhQcmVmaXgoaW5pdGNvZGUpLCAnaGV4JyksXG4gICk7XG4gIHJldHVybiBhZGRIZXhQcmVmaXgoZm9yd2FyZGVyVjFBZGRyZXNzLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbi8qKlxuICogVGFrZSB0aGUgaW1wbGVtZW50YXRpb24gYWRkcmVzcyBmb3IgdGhlIHByb3h5IGNvbnRyYWN0LCBhbmQgZ2V0IHRoZSBiaW5hcnkgaW5pdGNvZGUgZm9yIHRoZSBhc3NvY2lhdGVkIHByb3h5XG4gKiBAcGFyYW0ge3N0cmluZ30gaW1wbGVtZW50YXRpb25BZGRyZXNzIFRoZSBhZGRyZXNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBjb250cmFjdCBmb3IgdGhlIHByb3h5XG4gKiBAcmV0dXJuIHtzdHJpbmd9IEJpbmFyeSBoZXggc3RyaW5nIG9mIHRoZSBwcm94eVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJveHlJbml0Y29kZShpbXBsZW1lbnRhdGlvbkFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRhcmdldCA9IHN0cmlwSGV4UHJlZml4KGltcGxlbWVudGF0aW9uQWRkcmVzcy50b0xvd2VyQ2FzZSgpKS5wYWRTdGFydCg0MCwgJzAnKTtcblxuICAvLyBieXRlY29kZSBvZiB0aGUgcHJveHksIGZyb206XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9CaXRHby9ldGgtbXVsdGlzaWctdjQvYmxvYi9kNTQ2YTkzN2Y5MGY5M2U4M2IzNDIzYTViZjkzM2QxZDc3YzY3N2MzL2NvbnRyYWN0cy9DbG9uZUZhY3Rvcnkuc29sI0w0Mi1MNTZcbiAgcmV0dXJuIGAweDNkNjAyZDgwNjAwYTNkMzk4MWYzMzYzZDNkMzczZDNkM2QzNjNkNzMke3RhcmdldH01YWY0M2Q4MjgwM2U5MDNkOTE2MDJiNTdmZDViZjNgO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdpdmVuIHNpZ25hdHVyZSBwYXJ0cyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7U2lnbmF0dXJlUGFydHN9IHNpZyBUaGUgc2lnbmF0dXJlIHRvIGNvbnZlcnQgdG8gc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNpZ25hdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmdTaWcoc2lnOiBTaWduYXR1cmVQYXJ0cyk6IHN0cmluZyB7XG4gIHJldHVybiBidWZmZXJUb0hleChCdWZmZXIuY29uY2F0KFtzZXRMZW5ndGhMZWZ0KHNpZy5yLCAzMiksIHNldExlbmd0aExlZnQoc2lnLnMsIDMyKSwgdG9CdWZmZXIoc2lnLnYpXSkpO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gdHggZGF0YSBoYXMgYSBzaWduYXR1cmVcbiAqXG4gKiBAcGFyYW0ge1R4RGF0YX0gdHhEYXRhIFRoZSB0cmFuc2FjdGlvbiBkYXRhIHRvIGNoZWNrIGZvciBzaWduYXR1cmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0eCBoYXMgYSBzaWduYXR1cmUsIGVsc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1NpZ25hdHVyZSh0eERhdGE6IFR4RGF0YSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHR4RGF0YS52ICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eERhdGEuciAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHhEYXRhLnMgIT09IHVuZGVmaW5lZCAmJlxuICAgIHR4RGF0YS52Lmxlbmd0aCA+IDAgJiZcbiAgICB0eERhdGEuci5sZW5ndGggPiAwICYmXG4gICAgdHhEYXRhLnMubGVuZ3RoID4gMFxuICApO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IGRhdGEgZGVjb2RlZCBmb3Igc29tZSB0eXBlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IHR5cGVzIEFCSSB0eXBlcyBkZWZpbml0aW9uXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc2VyaWFsaXplZEFyZ3MgZW5jb2RlZCBhcmdzXG4gKiBAcmV0dXJucyB7QnVmZmVyW119IHRoZSBkZWNvZGVkIHJhd1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmF3RGVjb2RlZCh0eXBlczogc3RyaW5nW10sIHNlcmlhbGl6ZWRBcmdzOiBCdWZmZXIpOiBCdWZmZXJbXSB7XG4gIHJldHVybiBFdGhlcmV1bUFiaS5yYXdEZWNvZGUodHlwZXMsIHNlcmlhbGl6ZWRBcmdzKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGJ1ZmZlcmVkIGJ5dGVjb2RlIGZyb20gcmF3RGF0YSB1c2luZyBhIG1ldGhvZElkIGFzIGRlbGltaXRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RJZCB0aGUgaGV4IGVuY29kZWQgbWV0aG9kIElkXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3RGF0YSB0aGUgaGV4IGVuY29kZWQgcmF3IGRhdGFcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IGRhdGEgYnVmZmVyZWQgYnl0ZWNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1ZmZlcmVkQnl0ZUNvZGUobWV0aG9kSWQ6IHN0cmluZywgcmF3RGF0YTogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3Qgc3BsaXRCeXRlY29kZSA9IHJhd0RhdGEuc3BsaXQobWV0aG9kSWQpO1xuICBpZiAoc3BsaXRCeXRlY29kZS5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHNlbmQgYnl0ZWNvZGU6ICR7cmF3RGF0YX1gKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oc3BsaXRCeXRlY29kZVsxXSwgJ2hleCcpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RhdGljcyBjb2luIG9iamVjdCBtYXRjaGluZyBhIGdpdmVuIGNvbnRyYWN0IGFkZHJlc3MgaWYgaXQgZXhpc3RzXG4gKlxuICogQHBhcmFtIHRva2VuQ29udHJhY3RBZGRyZXNzIFRoZSBjb250cmFjdCBhZGRyZXNzIHRvIG1hdGNoIGFnYWluc3RcbiAqIEByZXR1cm5zIHN0YXRpY3MgQmFzZUNvaW4gb2JqZWN0IGZvciB0aGUgbWF0Y2hpbmcgdG9rZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRva2VuKHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IEJhc2VOZXR3b3JrKTogUmVhZG9ubHk8QmFzZUNvaW4+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW5zID0gY29pbnMuZmlsdGVyKChjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvaW4ubmV0d29yay50eXBlID09PSBuZXR3b3JrLnR5cGUgJiYgY29pbi5jb250cmFjdEFkZHJlc3MudG9Mb3dlckNhc2UoKSA9PT0gdG9rZW5Db250cmFjdEFkZHJlc3MudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcblxuICAvLyBpZiBsZW5ndGggb2YgdG9rZW5zIGlzIDEsIHJldHVybiB0aGUgZmlyc3QsIGVsc2UgcmV0dXJuIHVuZGVmaW5lZFxuICAvLyBDYW4ndCBkaXJlY3RseSBpbmRleCBpbnRvIHRva2Vucywgb3IgY2FsbCBgbGVuZ3RoYCwgc28gd2UgdXNlIG1hcCB0byBnZXQgYW4gYXJyYXlcbiAgY29uc3QgdG9rZW5zQXJyYXkgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4pO1xuICBpZiAodG9rZW5zQXJyYXkubGVuZ3RoID49IDEpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgbmV2ZXIgYmUgdHdvIHRva2VucyB3aXRoIHRoZSBzYW1lIGNvbnRyYWN0IGFkZHJlc3MsIHNvIHdlIGFzc2VydCB0aGF0IGhlcmVcbiAgICBhc3NlcnQodG9rZW5zQXJyYXkubGVuZ3RoID09PSAxKTtcbiAgICByZXR1cm4gdG9rZW5zQXJyYXlbMF07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==