@bitgo/account-lib 2.20.0-rc.2 → 2.20.0-rc.22

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 (481) hide show
  1. package/CHANGELOG.md +195 -0
  2. package/dist/resources/README.md +8 -2
  3. package/dist/resources/trx/protobuf/tron.js +5 -1
  4. package/dist/src/coin/avaxc/index.js +3 -3
  5. package/dist/src/coin/avaxc/keyPair.d.ts +1 -2
  6. package/dist/src/coin/avaxc/keyPair.d.ts.map +1 -1
  7. package/dist/src/coin/avaxc/keyPair.js +25 -44
  8. package/dist/src/coin/avaxc/resources.js +3 -3
  9. package/dist/src/coin/avaxc/transactionBuilder.d.ts.map +1 -1
  10. package/dist/src/coin/avaxc/transactionBuilder.js +22 -41
  11. package/dist/src/coin/avaxc/transferBuilder.js +8 -28
  12. package/dist/src/coin/avaxc/utils.js +14 -54
  13. package/dist/src/coin/celo/index.js +3 -3
  14. package/dist/src/coin/celo/resources.js +3 -3
  15. package/dist/src/coin/celo/stakingBuilder.d.ts +1 -1
  16. package/dist/src/coin/celo/stakingBuilder.d.ts.map +1 -1
  17. package/dist/src/coin/celo/stakingBuilder.js +102 -104
  18. package/dist/src/coin/celo/stakingCall.js +8 -26
  19. package/dist/src/coin/celo/stakingUtils.d.ts +1 -1
  20. package/dist/src/coin/celo/stakingUtils.d.ts.map +1 -1
  21. package/dist/src/coin/celo/stakingUtils.js +33 -34
  22. package/dist/src/coin/celo/transaction.js +10 -30
  23. package/dist/src/coin/celo/transactionBuilder.d.ts +1 -1
  24. package/dist/src/coin/celo/transactionBuilder.d.ts.map +1 -1
  25. package/dist/src/coin/celo/transactionBuilder.js +96 -115
  26. package/dist/src/coin/celo/transferBuilder.js +8 -28
  27. package/dist/src/coin/celo/types.js +71 -125
  28. package/dist/src/coin/celo/utils.js +25 -25
  29. package/dist/src/coin/dot/addressInitializationBuilder.d.ts +1 -2
  30. package/dist/src/coin/dot/addressInitializationBuilder.d.ts.map +1 -1
  31. package/dist/src/coin/dot/addressInitializationBuilder.js +60 -83
  32. package/dist/src/coin/dot/batchTransactionBuilder.d.ts +1 -1
  33. package/dist/src/coin/dot/batchTransactionBuilder.d.ts.map +1 -1
  34. package/dist/src/coin/dot/batchTransactionBuilder.js +55 -78
  35. package/dist/src/coin/dot/claimBuilder.d.ts +1 -2
  36. package/dist/src/coin/dot/claimBuilder.d.ts.map +1 -1
  37. package/dist/src/coin/dot/claimBuilder.js +46 -68
  38. package/dist/src/coin/dot/errors.d.ts +1 -1
  39. package/dist/src/coin/dot/errors.d.ts.map +1 -1
  40. package/dist/src/coin/dot/errors.js +12 -33
  41. package/dist/src/coin/dot/iface.d.ts +1 -2
  42. package/dist/src/coin/dot/iface.d.ts.map +1 -1
  43. package/dist/src/coin/dot/iface.js +1 -1
  44. package/dist/src/coin/dot/index.js +3 -3
  45. package/dist/src/coin/dot/keyPair.d.ts +1 -2
  46. package/dist/src/coin/dot/keyPair.d.ts.map +1 -1
  47. package/dist/src/coin/dot/keyPair.js +34 -52
  48. package/dist/src/coin/dot/singletonRegistry.js +6 -9
  49. package/dist/src/coin/dot/stakingBuilder.d.ts +1 -2
  50. package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -1
  51. package/dist/src/coin/dot/stakingBuilder.js +49 -71
  52. package/dist/src/coin/dot/transaction.d.ts +1 -2
  53. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  54. package/dist/src/coin/dot/transaction.js +146 -162
  55. package/dist/src/coin/dot/transactionBuilder.d.ts +2 -3
  56. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  57. package/dist/src/coin/dot/transactionBuilder.js +132 -204
  58. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +1 -1
  59. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +1 -1
  60. package/dist/src/coin/dot/transactionBuilderFactory.js +46 -65
  61. package/dist/src/coin/dot/transferBuilder.d.ts +1 -2
  62. package/dist/src/coin/dot/transferBuilder.d.ts.map +1 -1
  63. package/dist/src/coin/dot/transferBuilder.js +62 -85
  64. package/dist/src/coin/dot/txnSchema.js +17 -15
  65. package/dist/src/coin/dot/unnominateBuilder.d.ts +1 -1
  66. package/dist/src/coin/dot/unnominateBuilder.d.ts.map +1 -1
  67. package/dist/src/coin/dot/unnominateBuilder.js +24 -46
  68. package/dist/src/coin/dot/unstakeBuilder.d.ts +1 -1
  69. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -1
  70. package/dist/src/coin/dot/unstakeBuilder.js +38 -60
  71. package/dist/src/coin/dot/utils.d.ts +1 -2
  72. package/dist/src/coin/dot/utils.d.ts.map +1 -1
  73. package/dist/src/coin/dot/utils.js +97 -101
  74. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts +1 -1
  75. package/dist/src/coin/dot/withdrawUnstakedBuilder.d.ts.map +1 -1
  76. package/dist/src/coin/dot/withdrawUnstakedBuilder.js +38 -60
  77. package/dist/src/coin/etc/index.js +3 -3
  78. package/dist/src/coin/etc/resources.js +3 -3
  79. package/dist/src/coin/etc/transactionBuilder.d.ts.map +1 -1
  80. package/dist/src/coin/etc/transactionBuilder.js +22 -41
  81. package/dist/src/coin/etc/transferBuilder.js +8 -28
  82. package/dist/src/coin/etc/utils.js +10 -50
  83. package/dist/src/coin/eth/contractCall.js +8 -9
  84. package/dist/src/coin/eth/iface.d.ts +1 -1
  85. package/dist/src/coin/eth/iface.d.ts.map +1 -1
  86. package/dist/src/coin/eth/iface.js +1 -1
  87. package/dist/src/coin/eth/index.js +3 -3
  88. package/dist/src/coin/eth/keyPair.d.ts +1 -2
  89. package/dist/src/coin/eth/keyPair.d.ts.map +1 -1
  90. package/dist/src/coin/eth/keyPair.js +25 -44
  91. package/dist/src/coin/eth/transaction.d.ts +1 -2
  92. package/dist/src/coin/eth/transaction.d.ts.map +1 -1
  93. package/dist/src/coin/eth/transaction.js +48 -114
  94. package/dist/src/coin/eth/transactionBuilder.d.ts +1 -2
  95. package/dist/src/coin/eth/transactionBuilder.d.ts.map +1 -1
  96. package/dist/src/coin/eth/transactionBuilder.js +232 -303
  97. package/dist/src/coin/eth/transferBuilder/baseNFTTransferBuilder.js +37 -38
  98. package/dist/src/coin/eth/transferBuilder/transferBuilderERC1155.js +36 -53
  99. package/dist/src/coin/eth/transferBuilder/transferBuilderERC721.js +32 -49
  100. package/dist/src/coin/eth/transferBuilder.js +58 -59
  101. package/dist/src/coin/eth/types.js +52 -56
  102. package/dist/src/coin/eth/utils.d.ts +1 -1
  103. package/dist/src/coin/eth/utils.d.ts.map +1 -1
  104. package/dist/src/coin/eth/utils.js +100 -147
  105. package/dist/src/coin/eth/walletUtil.d.ts +2 -0
  106. package/dist/src/coin/eth/walletUtil.d.ts.map +1 -1
  107. package/dist/src/coin/eth/walletUtil.js +4 -2
  108. package/dist/src/coin/eth2/keyPair.d.ts +1 -2
  109. package/dist/src/coin/eth2/keyPair.d.ts.map +1 -1
  110. package/dist/src/coin/eth2/keyPair.js +19 -37
  111. package/dist/src/coin/hbar/index.js +2 -2
  112. package/dist/src/coin/hbar/keyPair.d.ts +1 -2
  113. package/dist/src/coin/hbar/keyPair.d.ts.map +1 -1
  114. package/dist/src/coin/hbar/keyPair.js +30 -49
  115. package/dist/src/coin/hbar/transaction.d.ts +1 -2
  116. package/dist/src/coin/hbar/transaction.d.ts.map +1 -1
  117. package/dist/src/coin/hbar/transaction.js +77 -146
  118. package/dist/src/coin/hbar/transactionBuilder.d.ts +1 -2
  119. package/dist/src/coin/hbar/transactionBuilder.d.ts.map +1 -1
  120. package/dist/src/coin/hbar/transactionBuilder.js +110 -193
  121. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts +1 -1
  122. package/dist/src/coin/hbar/transactionBuilderFactory.d.ts.map +1 -1
  123. package/dist/src/coin/hbar/transactionBuilderFactory.js +27 -45
  124. package/dist/src/coin/hbar/transferBuilder.d.ts +1 -1
  125. package/dist/src/coin/hbar/transferBuilder.d.ts.map +1 -1
  126. package/dist/src/coin/hbar/transferBuilder.js +49 -113
  127. package/dist/src/coin/hbar/utils.d.ts +2 -15
  128. package/dist/src/coin/hbar/utils.d.ts.map +1 -1
  129. package/dist/src/coin/hbar/utils.js +38 -57
  130. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts.map +1 -1
  131. package/dist/src/coin/hbar/walletInitializationBuilder.js +42 -107
  132. package/dist/src/coin/near/contractCallWrapper.js +46 -65
  133. package/dist/src/coin/near/errors.d.ts +1 -1
  134. package/dist/src/coin/near/errors.d.ts.map +1 -1
  135. package/dist/src/coin/near/errors.js +7 -25
  136. package/dist/src/coin/near/iface.d.ts +1 -2
  137. package/dist/src/coin/near/iface.d.ts.map +1 -1
  138. package/dist/src/coin/near/iface.js +1 -1
  139. package/dist/src/coin/near/index.d.ts +3 -0
  140. package/dist/src/coin/near/index.d.ts.map +1 -1
  141. package/dist/src/coin/near/index.js +9 -3
  142. package/dist/src/coin/near/keyPair.d.ts +1 -2
  143. package/dist/src/coin/near/keyPair.d.ts.map +1 -1
  144. package/dist/src/coin/near/keyPair.js +23 -40
  145. package/dist/src/coin/near/stakingActivateBuilder.d.ts +1 -1
  146. package/dist/src/coin/near/stakingActivateBuilder.d.ts.map +1 -1
  147. package/dist/src/coin/near/stakingActivateBuilder.js +36 -105
  148. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts +1 -1
  149. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts.map +1 -1
  150. package/dist/src/coin/near/stakingDeactivateBuilder.js +36 -105
  151. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts +1 -1
  152. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts.map +1 -1
  153. package/dist/src/coin/near/stakingWithdrawBuilder.js +36 -105
  154. package/dist/src/coin/near/transaction.d.ts +1 -2
  155. package/dist/src/coin/near/transaction.d.ts.map +1 -1
  156. package/dist/src/coin/near/transaction.js +125 -154
  157. package/dist/src/coin/near/transactionBuilder.d.ts +1 -2
  158. package/dist/src/coin/near/transactionBuilder.d.ts.map +1 -1
  159. package/dist/src/coin/near/transactionBuilder.js +81 -144
  160. package/dist/src/coin/near/transactionBuilderFactory.d.ts +1 -1
  161. package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +1 -1
  162. package/dist/src/coin/near/transactionBuilderFactory.js +33 -51
  163. package/dist/src/coin/near/transferBuilder.d.ts +1 -1
  164. package/dist/src/coin/near/transferBuilder.d.ts.map +1 -1
  165. package/dist/src/coin/near/transferBuilder.js +27 -91
  166. package/dist/src/coin/near/utils.d.ts +1 -1
  167. package/dist/src/coin/near/utils.d.ts.map +1 -1
  168. package/dist/src/coin/near/utils.js +35 -45
  169. package/dist/src/coin/near/walletInitializationBuilder.d.ts +1 -1
  170. package/dist/src/coin/near/walletInitializationBuilder.d.ts.map +1 -1
  171. package/dist/src/coin/near/walletInitializationBuilder.js +13 -70
  172. package/dist/src/coin/polygon/index.d.ts +8 -0
  173. package/dist/src/coin/polygon/index.d.ts.map +1 -0
  174. package/dist/src/coin/polygon/index.js +35 -0
  175. package/dist/src/coin/polygon/resources.d.ts +10 -0
  176. package/dist/src/coin/polygon/resources.d.ts.map +1 -0
  177. package/dist/src/coin/polygon/resources.js +25 -0
  178. package/dist/src/coin/polygon/transactionBuilder.d.ts +17 -0
  179. package/dist/src/coin/polygon/transactionBuilder.d.ts.map +1 -0
  180. package/dist/src/coin/polygon/transactionBuilder.js +44 -0
  181. package/dist/src/coin/polygon/transferBuilder.d.ts +19 -0
  182. package/dist/src/coin/polygon/transferBuilder.d.ts.map +1 -0
  183. package/dist/src/coin/polygon/transferBuilder.js +27 -0
  184. package/dist/src/coin/polygon/utils.d.ts +18 -0
  185. package/dist/src/coin/polygon/utils.d.ts.map +1 -0
  186. package/dist/src/coin/polygon/utils.js +42 -0
  187. package/dist/src/coin/polygon/walletUtil.d.ts +48 -0
  188. package/dist/src/coin/polygon/walletUtil.d.ts.map +1 -0
  189. package/dist/src/coin/polygon/walletUtil.js +632 -0
  190. package/dist/src/coin/rbtc/index.js +3 -3
  191. package/dist/src/coin/rbtc/resources.js +3 -3
  192. package/dist/src/coin/rbtc/transactionBuilder.d.ts.map +1 -1
  193. package/dist/src/coin/rbtc/transactionBuilder.js +21 -40
  194. package/dist/src/coin/rbtc/transferBuilder.js +8 -28
  195. package/dist/src/coin/rbtc/utils.js +10 -50
  196. package/dist/src/coin/sol/ataInitializationBuilder.d.ts +1 -1
  197. package/dist/src/coin/sol/ataInitializationBuilder.d.ts.map +1 -1
  198. package/dist/src/coin/sol/ataInitializationBuilder.js +52 -123
  199. package/dist/src/coin/sol/ataInitializationTransaction.d.ts.map +1 -1
  200. package/dist/src/coin/sol/ataInitializationTransaction.js +34 -57
  201. package/dist/src/coin/sol/iface.d.ts +1 -1
  202. package/dist/src/coin/sol/iface.d.ts.map +1 -1
  203. package/dist/src/coin/sol/iface.js +1 -1
  204. package/dist/src/coin/sol/index.js +3 -3
  205. package/dist/src/coin/sol/instructionParamsFactory.d.ts +1 -1
  206. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -1
  207. package/dist/src/coin/sol/instructionParamsFactory.js +62 -67
  208. package/dist/src/coin/sol/keyPair.d.ts +1 -2
  209. package/dist/src/coin/sol/keyPair.d.ts.map +1 -1
  210. package/dist/src/coin/sol/keyPair.js +24 -42
  211. package/dist/src/coin/sol/solInstructionFactory.js +33 -33
  212. package/dist/src/coin/sol/stakingActivateBuilder.d.ts +1 -1
  213. package/dist/src/coin/sol/stakingActivateBuilder.d.ts.map +1 -1
  214. package/dist/src/coin/sol/stakingActivateBuilder.js +45 -113
  215. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts +1 -1
  216. package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts.map +1 -1
  217. package/dist/src/coin/sol/stakingDeactivateBuilder.js +36 -104
  218. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts +1 -1
  219. package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts.map +1 -1
  220. package/dist/src/coin/sol/stakingWithdrawBuilder.js +41 -109
  221. package/dist/src/coin/sol/tokenEncodeDecode.js +46 -75
  222. package/dist/src/coin/sol/tokenTransferBuilder.d.ts +1 -1
  223. package/dist/src/coin/sol/tokenTransferBuilder.d.ts.map +1 -1
  224. package/dist/src/coin/sol/tokenTransferBuilder.js +42 -115
  225. package/dist/src/coin/sol/transaction.d.ts +1 -2
  226. package/dist/src/coin/sol/transaction.d.ts.map +1 -1
  227. package/dist/src/coin/sol/transaction.js +130 -221
  228. package/dist/src/coin/sol/transactionBuilder.d.ts +1 -2
  229. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -1
  230. package/dist/src/coin/sol/transactionBuilder.js +104 -171
  231. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +1 -1
  232. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -1
  233. package/dist/src/coin/sol/transactionBuilderFactory.js +46 -64
  234. package/dist/src/coin/sol/transferBuilder.d.ts +1 -1
  235. package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -1
  236. package/dist/src/coin/sol/transferBuilder.js +37 -108
  237. package/dist/src/coin/sol/utils.d.ts +1 -1
  238. package/dist/src/coin/sol/utils.d.ts.map +1 -1
  239. package/dist/src/coin/sol/utils.js +49 -117
  240. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +1 -1
  241. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -1
  242. package/dist/src/coin/sol/walletInitializationBuilder.js +39 -107
  243. package/dist/src/coin/stx/abstractContractBuilder.d.ts.map +1 -1
  244. package/dist/src/coin/stx/abstractContractBuilder.js +34 -104
  245. package/dist/src/coin/stx/contractBuilder.js +38 -57
  246. package/dist/src/coin/stx/index.js +2 -2
  247. package/dist/src/coin/stx/keyPair.d.ts +1 -2
  248. package/dist/src/coin/stx/keyPair.d.ts.map +1 -1
  249. package/dist/src/coin/stx/keyPair.js +39 -62
  250. package/dist/src/coin/stx/sendmanyBuilder.js +43 -108
  251. package/dist/src/coin/stx/transaction.d.ts +1 -2
  252. package/dist/src/coin/stx/transaction.d.ts.map +1 -1
  253. package/dist/src/coin/stx/transaction.js +102 -183
  254. package/dist/src/coin/stx/transactionBuilder.d.ts +1 -2
  255. package/dist/src/coin/stx/transactionBuilder.d.ts.map +1 -1
  256. package/dist/src/coin/stx/transactionBuilder.js +121 -218
  257. package/dist/src/coin/stx/transactionBuilderFactory.d.ts +1 -1
  258. package/dist/src/coin/stx/transactionBuilderFactory.d.ts.map +1 -1
  259. package/dist/src/coin/stx/transactionBuilderFactory.js +36 -54
  260. package/dist/src/coin/stx/transferBuilder.d.ts.map +1 -1
  261. package/dist/src/coin/stx/transferBuilder.js +41 -111
  262. package/dist/src/coin/stx/utils.d.ts.map +1 -1
  263. package/dist/src/coin/stx/utils.js +58 -65
  264. package/dist/src/coin/trx/address.d.ts +1 -1
  265. package/dist/src/coin/trx/address.d.ts.map +1 -1
  266. package/dist/src/coin/trx/address.js +3 -6
  267. package/dist/src/coin/trx/contractCallBuilder.d.ts +1 -1
  268. package/dist/src/coin/trx/contractCallBuilder.d.ts.map +1 -1
  269. package/dist/src/coin/trx/contractCallBuilder.js +100 -160
  270. package/dist/src/coin/trx/iface.d.ts +1 -1
  271. package/dist/src/coin/trx/iface.d.ts.map +1 -1
  272. package/dist/src/coin/trx/iface.js +1 -1
  273. package/dist/src/coin/trx/index.js +4 -4
  274. package/dist/src/coin/trx/keyPair.d.ts +1 -3
  275. package/dist/src/coin/trx/keyPair.d.ts.map +1 -1
  276. package/dist/src/coin/trx/keyPair.js +37 -57
  277. package/dist/src/coin/trx/transaction.d.ts +1 -3
  278. package/dist/src/coin/trx/transaction.d.ts.map +1 -1
  279. package/dist/src/coin/trx/transaction.js +84 -124
  280. package/dist/src/coin/trx/transactionBuilder.d.ts +1 -2
  281. package/dist/src/coin/trx/transactionBuilder.d.ts.map +1 -1
  282. package/dist/src/coin/trx/transactionBuilder.js +72 -134
  283. package/dist/src/coin/trx/utils.js +57 -59
  284. package/dist/src/coin/trx/wrappedBuilder.d.ts +1 -2
  285. package/dist/src/coin/trx/wrappedBuilder.d.ts.map +1 -1
  286. package/dist/src/coin/trx/wrappedBuilder.js +43 -101
  287. package/dist/src/coin/xrp/index.js +2 -2
  288. package/dist/src/coin/xrp/keyPair.d.ts +1 -2
  289. package/dist/src/coin/xrp/keyPair.d.ts.map +1 -1
  290. package/dist/src/coin/xrp/keyPair.js +6 -23
  291. package/dist/src/coin/xrp/transaction.d.ts +1 -2
  292. package/dist/src/coin/xrp/transaction.d.ts.map +1 -1
  293. package/dist/src/coin/xrp/transaction.js +13 -34
  294. package/dist/src/coin/xrp/transactionBuilder.d.ts +1 -2
  295. package/dist/src/coin/xrp/transactionBuilder.d.ts.map +1 -1
  296. package/dist/src/coin/xrp/transactionBuilder.js +29 -51
  297. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts +1 -1
  298. package/dist/src/coin/xrp/transactionBuilderFactory.d.ts.map +1 -1
  299. package/dist/src/coin/xrp/transactionBuilderFactory.js +17 -35
  300. package/dist/src/coin/xrp/transferBuilder.d.ts +1 -1
  301. package/dist/src/coin/xrp/transferBuilder.d.ts.map +1 -1
  302. package/dist/src/coin/xrp/transferBuilder.js +16 -73
  303. package/dist/src/coin/xrp/utils.d.ts +1 -1
  304. package/dist/src/coin/xrp/utils.d.ts.map +1 -1
  305. package/dist/src/coin/xrp/utils.js +22 -25
  306. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts +1 -1
  307. package/dist/src/coin/xrp/walletInitializationBuilder.d.ts.map +1 -1
  308. package/dist/src/coin/xrp/walletInitializationBuilder.js +16 -73
  309. package/dist/src/coin/xtz/address.d.ts +1 -1
  310. package/dist/src/coin/xtz/address.d.ts.map +1 -1
  311. package/dist/src/coin/xtz/address.js +3 -6
  312. package/dist/src/coin/xtz/iface.d.ts +1 -1
  313. package/dist/src/coin/xtz/iface.d.ts.map +1 -1
  314. package/dist/src/coin/xtz/iface.js +1 -1
  315. package/dist/src/coin/xtz/index.js +4 -4
  316. package/dist/src/coin/xtz/keyPair.d.ts +1 -2
  317. package/dist/src/coin/xtz/keyPair.d.ts.map +1 -1
  318. package/dist/src/coin/xtz/keyPair.js +39 -59
  319. package/dist/src/coin/xtz/multisigUtils.js +64 -77
  320. package/dist/src/coin/xtz/transaction.d.ts +1 -2
  321. package/dist/src/coin/xtz/transaction.d.ts.map +1 -1
  322. package/dist/src/coin/xtz/transaction.js +175 -345
  323. package/dist/src/coin/xtz/transactionBuilder.d.ts +1 -2
  324. package/dist/src/coin/xtz/transactionBuilder.d.ts.map +1 -1
  325. package/dist/src/coin/xtz/transactionBuilder.js +212 -347
  326. package/dist/src/coin/xtz/transferBuilder.js +25 -28
  327. package/dist/src/coin/xtz/utils.d.ts.map +1 -1
  328. package/dist/src/coin/xtz/utils.js +54 -125
  329. package/dist/src/index.d.ts +7 -11
  330. package/dist/src/index.d.ts.map +1 -1
  331. package/dist/src/index.js +38 -44
  332. package/dist/src/keyPair/index.d.ts +1 -2
  333. package/dist/src/keyPair/index.d.ts.map +1 -1
  334. package/dist/src/keyPair/index.js +9 -9
  335. package/dist/src/utils/index.d.ts +1 -1
  336. package/dist/src/utils/index.d.ts.map +1 -1
  337. package/dist/src/utils/index.js +9 -9
  338. package/dist/tsconfig.tsbuildinfo +21131 -16701
  339. package/package.json +21 -43
  340. package/resources/README.md +8 -2
  341. package/resources/trx/protobuf/tron.js +5 -1
  342. package/dist/browser/bitgo-account-lib.js +0 -2
  343. package/dist/browser/bitgo-account-lib.js.LICENSE.txt +0 -335
  344. package/dist/src/coin/algo/assetTransferBuilder.d.ts +0 -43
  345. package/dist/src/coin/algo/assetTransferBuilder.d.ts.map +0 -1
  346. package/dist/src/coin/algo/assetTransferBuilder.js +0 -127
  347. package/dist/src/coin/algo/errors.d.ts +0 -11
  348. package/dist/src/coin/algo/errors.d.ts.map +0 -1
  349. package/dist/src/coin/algo/errors.js +0 -51
  350. package/dist/src/coin/algo/ifaces.d.ts +0 -46
  351. package/dist/src/coin/algo/ifaces.d.ts.map +0 -1
  352. package/dist/src/coin/algo/ifaces.js +0 -3
  353. package/dist/src/coin/algo/index.d.ts +0 -13
  354. package/dist/src/coin/algo/index.d.ts.map +0 -1
  355. package/dist/src/coin/algo/index.js +0 -47
  356. package/dist/src/coin/algo/keyPair.d.ts +0 -26
  357. package/dist/src/coin/algo/keyPair.d.ts.map +0 -1
  358. package/dist/src/coin/algo/keyPair.js +0 -95
  359. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts +0 -104
  360. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts.map +0 -1
  361. package/dist/src/coin/algo/keyRegistrationBuilder.js +0 -262
  362. package/dist/src/coin/algo/seedEncoding.d.ts +0 -25
  363. package/dist/src/coin/algo/seedEncoding.d.ts.map +0 -1
  364. package/dist/src/coin/algo/seedEncoding.js +0 -100
  365. package/dist/src/coin/algo/transaction.d.ts +0 -76
  366. package/dist/src/coin/algo/transaction.d.ts.map +0 -1
  367. package/dist/src/coin/algo/transaction.js +0 -287
  368. package/dist/src/coin/algo/transactionBuilder.d.ts +0 -205
  369. package/dist/src/coin/algo/transactionBuilder.d.ts.map +0 -1
  370. package/dist/src/coin/algo/transactionBuilder.js +0 -445
  371. package/dist/src/coin/algo/transactionBuilderFactory.d.ts +0 -16
  372. package/dist/src/coin/algo/transactionBuilderFactory.d.ts.map +0 -1
  373. package/dist/src/coin/algo/transactionBuilderFactory.js +0 -70
  374. package/dist/src/coin/algo/transferBuilder.d.ts +0 -41
  375. package/dist/src/coin/algo/transferBuilder.d.ts.map +0 -1
  376. package/dist/src/coin/algo/transferBuilder.js +0 -111
  377. package/dist/src/coin/algo/txnSchema.d.ts +0 -7
  378. package/dist/src/coin/algo/txnSchema.d.ts.map +0 -1
  379. package/dist/src/coin/algo/txnSchema.js +0 -68
  380. package/dist/src/coin/algo/utils.d.ts +0 -249
  381. package/dist/src/coin/algo/utils.d.ts.map +0 -1
  382. package/dist/src/coin/algo/utils.js +0 -544
  383. package/dist/src/coin/baseCoin/baseKeyPair.d.ts +0 -27
  384. package/dist/src/coin/baseCoin/baseKeyPair.d.ts.map +0 -1
  385. package/dist/src/coin/baseCoin/baseKeyPair.js +0 -3
  386. package/dist/src/coin/baseCoin/baseTransaction.d.ts +0 -71
  387. package/dist/src/coin/baseCoin/baseTransaction.d.ts.map +0 -1
  388. package/dist/src/coin/baseCoin/baseTransaction.js +0 -94
  389. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts +0 -128
  390. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +0 -1
  391. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +0 -179
  392. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts +0 -30
  393. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.d.ts.map +0 -1
  394. package/dist/src/coin/baseCoin/baseTransactionBuilderFactory.js +0 -20
  395. package/dist/src/coin/baseCoin/baseUtils.d.ts +0 -45
  396. package/dist/src/coin/baseCoin/baseUtils.d.ts.map +0 -1
  397. package/dist/src/coin/baseCoin/baseUtils.js +0 -3
  398. package/dist/src/coin/baseCoin/blsKeyPair.d.ts +0 -75
  399. package/dist/src/coin/baseCoin/blsKeyPair.d.ts.map +0 -1
  400. package/dist/src/coin/baseCoin/blsKeyPair.js +0 -232
  401. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts +0 -50
  402. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts.map +0 -1
  403. package/dist/src/coin/baseCoin/ed25519KeyPair.js +0 -141
  404. package/dist/src/coin/baseCoin/enum.d.ts +0 -43
  405. package/dist/src/coin/baseCoin/enum.d.ts.map +0 -1
  406. package/dist/src/coin/baseCoin/enum.js +0 -70
  407. package/dist/src/coin/baseCoin/errors.d.ts +0 -65
  408. package/dist/src/coin/baseCoin/errors.d.ts.map +0 -1
  409. package/dist/src/coin/baseCoin/errors.js +0 -156
  410. package/dist/src/coin/baseCoin/iface.d.ts +0 -162
  411. package/dist/src/coin/baseCoin/iface.d.ts.map +0 -1
  412. package/dist/src/coin/baseCoin/iface.js +0 -38
  413. package/dist/src/coin/baseCoin/index.d.ts +0 -12
  414. package/dist/src/coin/baseCoin/index.d.ts.map +0 -1
  415. package/dist/src/coin/baseCoin/index.js +0 -41
  416. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts +0 -55
  417. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +0 -1
  418. package/dist/src/coin/baseCoin/secp256k1ExtendedKeyPair.js +0 -124
  419. package/dist/src/coin/cspr/constants.d.ts +0 -19
  420. package/dist/src/coin/cspr/constants.d.ts.map +0 -1
  421. package/dist/src/coin/cspr/constants.js +0 -28
  422. package/dist/src/coin/cspr/delegateBuilder.d.ts +0 -49
  423. package/dist/src/coin/cspr/delegateBuilder.d.ts.map +0 -1
  424. package/dist/src/coin/cspr/delegateBuilder.js +0 -175
  425. package/dist/src/coin/cspr/ifaces.d.ts +0 -69
  426. package/dist/src/coin/cspr/ifaces.d.ts.map +0 -1
  427. package/dist/src/coin/cspr/ifaces.js +0 -3
  428. package/dist/src/coin/cspr/index.d.ts +0 -5
  429. package/dist/src/coin/cspr/index.d.ts.map +0 -1
  430. package/dist/src/coin/cspr/index.js +0 -29
  431. package/dist/src/coin/cspr/keyPair.d.ts +0 -19
  432. package/dist/src/coin/cspr/keyPair.d.ts.map +0 -1
  433. package/dist/src/coin/cspr/keyPair.js +0 -94
  434. package/dist/src/coin/cspr/transaction.d.ts +0 -56
  435. package/dist/src/coin/cspr/transaction.d.ts.map +0 -1
  436. package/dist/src/coin/cspr/transaction.js +0 -251
  437. package/dist/src/coin/cspr/transactionBuilder.d.ts +0 -125
  438. package/dist/src/coin/cspr/transactionBuilder.d.ts.map +0 -1
  439. package/dist/src/coin/cspr/transactionBuilder.js +0 -383
  440. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts +0 -46
  441. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts.map +0 -1
  442. package/dist/src/coin/cspr/transactionBuilderFactory.js +0 -116
  443. package/dist/src/coin/cspr/transferBuilder.d.ts +0 -39
  444. package/dist/src/coin/cspr/transferBuilder.d.ts.map +0 -1
  445. package/dist/src/coin/cspr/transferBuilder.js +0 -169
  446. package/dist/src/coin/cspr/undelegateBuilder.d.ts +0 -49
  447. package/dist/src/coin/cspr/undelegateBuilder.d.ts.map +0 -1
  448. package/dist/src/coin/cspr/undelegateBuilder.js +0 -175
  449. package/dist/src/coin/cspr/utils.d.ts +0 -189
  450. package/dist/src/coin/cspr/utils.d.ts.map +0 -1
  451. package/dist/src/coin/cspr/utils.js +0 -483
  452. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts +0 -27
  453. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts.map +0 -1
  454. package/dist/src/coin/cspr/walletInitializationBuilder.js +0 -160
  455. package/dist/src/mpc/curves/baseCurve.d.ts +0 -18
  456. package/dist/src/mpc/curves/baseCurve.d.ts.map +0 -1
  457. package/dist/src/mpc/curves/baseCurve.js +0 -6
  458. package/dist/src/mpc/curves/ed25519.d.ts +0 -17
  459. package/dist/src/mpc/curves/ed25519.d.ts.map +0 -1
  460. package/dist/src/mpc/curves/ed25519.js +0 -96
  461. package/dist/src/mpc/curves/index.d.ts +0 -5
  462. package/dist/src/mpc/curves/index.d.ts.map +0 -1
  463. package/dist/src/mpc/curves/index.js +0 -6
  464. package/dist/src/mpc/hdTree.d.ts +0 -24
  465. package/dist/src/mpc/hdTree.d.ts.map +0 -1
  466. package/dist/src/mpc/hdTree.js +0 -143
  467. package/dist/src/mpc/shamir.d.ts +0 -26
  468. package/dist/src/mpc/shamir.d.ts.map +0 -1
  469. package/dist/src/mpc/shamir.js +0 -87
  470. package/dist/src/mpc/tss.d.ts +0 -98
  471. package/dist/src/mpc/tss.d.ts.map +0 -1
  472. package/dist/src/mpc/tss.js +0 -346
  473. package/dist/src/mpc/util.d.ts +0 -7
  474. package/dist/src/mpc/util.d.ts.map +0 -1
  475. package/dist/src/mpc/util.js +0 -38
  476. package/dist/src/utils/crypto.d.ts +0 -99
  477. package/dist/src/utils/crypto.d.ts.map +0 -1
  478. package/dist/src/utils/crypto.js +0 -260
  479. package/dist/src/utils/ed25519KeyDeriver.d.ts +0 -49
  480. package/dist/src/utils/ed25519KeyDeriver.d.ts.map +0 -1
  481. package/dist/src/utils/ed25519KeyDeriver.js +0 -92
@@ -1,19 +1,4 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
3
  if (k2 === undefined) k2 = k;
19
4
  Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
@@ -33,181 +18,99 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
18
  __setModuleDefault(result, mod);
34
19
  return result;
35
20
  };
36
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
- return new (P || (P = Promise))(function (resolve, reject) {
39
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
- step((generator = generator.apply(thisArg, _arguments || [])).next());
43
- });
44
- };
45
- var __generator = (this && this.__generator) || function (thisArg, body) {
46
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
- function verb(n) { return function (v) { return step([n, v]); }; }
49
- function step(op) {
50
- if (f) throw new TypeError("Generator is already executing.");
51
- while (_) try {
52
- 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;
53
- if (y = 0, t) op = [op[0] & 2, t.value];
54
- switch (op[0]) {
55
- case 0: case 1: t = op; break;
56
- case 4: _.label++; return { value: op[1], done: false };
57
- case 5: _.label++; y = op[1]; op = [0]; continue;
58
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
- default:
60
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
- if (t[2]) _.ops.pop();
65
- _.trys.pop(); continue;
66
- }
67
- op = body.call(thisArg, _);
68
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
- }
71
- };
72
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
73
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
74
23
  };
75
24
  Object.defineProperty(exports, "__esModule", { value: true });
76
25
  exports.Transaction = void 0;
77
- var local_forging_1 = require("@taquito/local-forging");
78
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
79
- var baseCoin_1 = require("../baseCoin");
80
- var errors_1 = require("../baseCoin/errors");
81
- var multisigUtils_1 = require("./multisigUtils");
82
- var Utils = __importStar(require("./utils"));
26
+ const local_forging_1 = require("@taquito/local-forging");
27
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
28
+ const sdk_core_1 = require("@bitgo/sdk-core");
29
+ const multisigUtils_1 = require("./multisigUtils");
30
+ const Utils = __importStar(require("./utils"));
83
31
  /**
84
32
  * Tezos transaction model.
85
33
  */
86
- var Transaction = /** @class */ (function (_super) {
87
- __extends(Transaction, _super);
34
+ class Transaction extends sdk_core_1.BaseTransaction {
88
35
  /**
89
36
  * Public constructor.
90
37
  *
91
38
  * @param {Readonly<CoinConfig>} coinConfig
92
39
  */
93
- function Transaction(coinConfig) {
94
- var _this = _super.call(this, coinConfig) || this;
95
- _this._owners = [];
96
- return _this;
40
+ constructor(coinConfig) {
41
+ super(coinConfig);
42
+ this._owners = [];
97
43
  }
98
44
  /**
99
45
  * Initialize the transaction fields based on another serialized transaction.
100
46
  *
101
47
  * @param serializedTransaction Transaction in broadcast format.
102
48
  */
103
- Transaction.prototype.initFromSerializedTransaction = function (serializedTransaction) {
104
- return __awaiter(this, void 0, void 0, function () {
105
- var parsedTransaction, e_1, unsignedSerializedTransaction, signature, parsedTransaction, transactionId;
106
- return __generator(this, function (_a) {
107
- switch (_a.label) {
108
- case 0:
109
- this._encodedTransaction = serializedTransaction;
110
- _a.label = 1;
111
- case 1:
112
- _a.trys.push([1, 4, , 8]);
113
- return [4 /*yield*/, local_forging_1.localForger.parse(serializedTransaction)];
114
- case 2:
115
- parsedTransaction = _a.sent();
116
- return [4 /*yield*/, this.initFromParsedTransaction(parsedTransaction)];
117
- case 3:
118
- _a.sent();
119
- return [3 /*break*/, 8];
120
- case 4:
121
- e_1 = _a.sent();
122
- unsignedSerializedTransaction = serializedTransaction.slice(0, -128);
123
- signature = serializedTransaction.slice(-128);
124
- if (Utils.isValidSignature(signature)) {
125
- throw new errors_1.ParseTransactionError('Invalid transaction');
126
- }
127
- return [4 /*yield*/, local_forging_1.localForger.parse(unsignedSerializedTransaction)];
128
- case 5:
129
- parsedTransaction = _a.sent();
130
- return [4 /*yield*/, Utils.calculateTransactionId(serializedTransaction)];
131
- case 6:
132
- transactionId = _a.sent();
133
- return [4 /*yield*/, this.initFromParsedTransaction(parsedTransaction, transactionId)];
134
- case 7:
135
- _a.sent();
136
- return [3 /*break*/, 8];
137
- case 8: return [2 /*return*/];
138
- }
139
- });
140
- });
141
- };
49
+ async initFromSerializedTransaction(serializedTransaction) {
50
+ this._encodedTransaction = serializedTransaction;
51
+ try {
52
+ const parsedTransaction = await local_forging_1.localForger.parse(serializedTransaction);
53
+ await this.initFromParsedTransaction(parsedTransaction);
54
+ }
55
+ catch (e) {
56
+ // If it throws, it is possible the serialized transaction is signed, which is not supported
57
+ // by local-forging. Try extracting the last 64 bytes and parse it again.
58
+ const unsignedSerializedTransaction = serializedTransaction.slice(0, -128);
59
+ const signature = serializedTransaction.slice(-128);
60
+ if (Utils.isValidSignature(signature)) {
61
+ throw new sdk_core_1.ParseTransactionError('Invalid transaction');
62
+ }
63
+ // TODO: encode the signature and save it in _signature
64
+ const parsedTransaction = await local_forging_1.localForger.parse(unsignedSerializedTransaction);
65
+ const transactionId = await Utils.calculateTransactionId(serializedTransaction);
66
+ await this.initFromParsedTransaction(parsedTransaction, transactionId);
67
+ }
68
+ }
142
69
  /**
143
70
  * Initialize the transaction fields based on another parsed transaction.
144
71
  *
145
72
  * @param {ParsedTransaction} parsedTransaction A Tezos transaction object
146
73
  * @param {string} transactionId The transaction id of the parsedTransaction if it is signed
147
74
  */
148
- Transaction.prototype.initFromParsedTransaction = function (parsedTransaction, transactionId) {
149
- return __awaiter(this, void 0, void 0, function () {
150
- var _a, operationIndex, _i, _b, operation, _c;
151
- return __generator(this, function (_d) {
152
- switch (_d.label) {
153
- case 0:
154
- if (!!this._encodedTransaction) return [3 /*break*/, 2];
155
- _a = this;
156
- return [4 /*yield*/, local_forging_1.localForger.forge(parsedTransaction)];
157
- case 1:
158
- _a._encodedTransaction = _d.sent();
159
- _d.label = 2;
160
- case 2:
161
- if (transactionId) {
162
- // If the transaction id is passed, save it and clean up the entries since they will be
163
- // recalculated
164
- this._id = transactionId;
165
- this._inputs = [];
166
- this._outputs = [];
167
- }
168
- else {
169
- this._id = '';
170
- }
171
- this._parsedTransaction = parsedTransaction;
172
- operationIndex = 0;
173
- _i = 0, _b = parsedTransaction.contents;
174
- _d.label = 3;
175
- case 3:
176
- if (!(_i < _b.length)) return [3 /*break*/, 10];
177
- operation = _b[_i];
178
- if (this._source && this._source !== operation.source) {
179
- throw new errors_1.InvalidTransactionError('Source must be the same for every operation but it changed from ' + this._source + ' to ' + operation.source);
180
- }
181
- else {
182
- this._source = operation.source;
183
- }
184
- _c = operation.kind;
185
- switch (_c) {
186
- case local_forging_1.CODEC.OP_ORIGINATION: return [3 /*break*/, 4];
187
- case local_forging_1.CODEC.OP_REVEAL: return [3 /*break*/, 6];
188
- case local_forging_1.CODEC.OP_TRANSACTION: return [3 /*break*/, 7];
189
- }
190
- return [3 /*break*/, 8];
191
- case 4: return [4 /*yield*/, this.recordOriginationOpFields(operation, operationIndex)];
192
- case 5:
193
- _d.sent();
194
- operationIndex++;
195
- return [3 /*break*/, 9];
196
- case 6:
197
- this.recordRevealOpFields(operation);
198
- return [3 /*break*/, 9];
199
- case 7:
200
- this.recordTransactionOpFields(operation);
201
- return [3 /*break*/, 9];
202
- case 8: return [3 /*break*/, 9];
203
- case 9:
204
- _i++;
205
- return [3 /*break*/, 3];
206
- case 10: return [2 /*return*/];
207
- }
208
- });
209
- });
210
- };
75
+ async initFromParsedTransaction(parsedTransaction, transactionId) {
76
+ if (!this._encodedTransaction) {
77
+ this._encodedTransaction = await local_forging_1.localForger.forge(parsedTransaction);
78
+ }
79
+ if (transactionId) {
80
+ // If the transaction id is passed, save it and clean up the entries since they will be
81
+ // recalculated
82
+ this._id = transactionId;
83
+ this._inputs = [];
84
+ this._outputs = [];
85
+ }
86
+ else {
87
+ this._id = '';
88
+ }
89
+ this._parsedTransaction = parsedTransaction;
90
+ let operationIndex = 0;
91
+ for (const operation of parsedTransaction.contents) {
92
+ if (this._source && this._source !== operation.source) {
93
+ throw new sdk_core_1.InvalidTransactionError('Source must be the same for every operation but it changed from ' + this._source + ' to ' + operation.source);
94
+ }
95
+ else {
96
+ this._source = operation.source;
97
+ }
98
+ switch (operation.kind) {
99
+ case local_forging_1.CODEC.OP_ORIGINATION:
100
+ await this.recordOriginationOpFields(operation, operationIndex);
101
+ operationIndex++;
102
+ break;
103
+ case local_forging_1.CODEC.OP_REVEAL:
104
+ this.recordRevealOpFields(operation);
105
+ break;
106
+ case local_forging_1.CODEC.OP_TRANSACTION:
107
+ this.recordTransactionOpFields(operation);
108
+ break;
109
+ default:
110
+ break;
111
+ }
112
+ }
113
+ }
211
114
  /**
212
115
  * Record the most important fields from an origination operation.
213
116
  *
@@ -215,77 +118,56 @@ var Transaction = /** @class */ (function (_super) {
215
118
  * @param {number} index The origination operation index in the transaction. Used to calculate the
216
119
  * originated address
217
120
  */
218
- Transaction.prototype.recordOriginationOpFields = function (operation, index) {
219
- return __awaiter(this, void 0, void 0, function () {
220
- var originationData, _a, _b, _c;
221
- var _d;
222
- return __generator(this, function (_e) {
223
- switch (_e.label) {
224
- case 0:
225
- originationData = multisigUtils_1.getOriginationDataFromOperation(operation);
226
- if (originationData.forwarderDestination) {
227
- this._type = baseCoin_1.TransactionType.AddressInitialization;
228
- this._forwarderDestination = originationData.forwarderDestination;
229
- }
230
- else {
231
- this._type = baseCoin_1.TransactionType.WalletInitialization;
232
- this._owners = multisigUtils_1.getOwnersPublicKeys(operation);
233
- }
234
- this._delegate = operation.delegate;
235
- _b = (_a = this._outputs).push;
236
- _d = {};
237
- if (!this._id) return [3 /*break*/, 2];
238
- return [4 /*yield*/, Utils.calculateOriginatedAddress(this._id, index)];
239
- case 1:
240
- _c = _e.sent();
241
- return [3 /*break*/, 3];
242
- case 2:
243
- _c = '';
244
- _e.label = 3;
245
- case 3:
246
- _b.apply(_a, [(
247
- // Kt addresses can only be calculated for signed transactions with an id
248
- _d.address = _c,
249
- // Balance
250
- _d.value = operation.balance,
251
- _d)]);
252
- this._inputs.push({
253
- address: operation.source,
254
- // Balance + fees + max gas + max storage are paid by the source account
255
- value: new bignumber_js_1.default(operation.balance).plus(operation.fee).toString(),
256
- });
257
- return [2 /*return*/];
258
- }
259
- });
121
+ async recordOriginationOpFields(operation, index) {
122
+ const originationData = multisigUtils_1.getOriginationDataFromOperation(operation);
123
+ if (originationData.forwarderDestination) {
124
+ this._type = sdk_core_1.TransactionType.AddressInitialization;
125
+ this._forwarderDestination = originationData.forwarderDestination;
126
+ }
127
+ else {
128
+ this._type = sdk_core_1.TransactionType.WalletInitialization;
129
+ this._owners = multisigUtils_1.getOwnersPublicKeys(operation);
130
+ }
131
+ this._delegate = operation.delegate;
132
+ this._outputs.push({
133
+ // Kt addresses can only be calculated for signed transactions with an id
134
+ address: this._id ? await Utils.calculateOriginatedAddress(this._id, index) : '',
135
+ // Balance
136
+ value: operation.balance,
137
+ });
138
+ this._inputs.push({
139
+ address: operation.source,
140
+ // Balance + fees + max gas + max storage are paid by the source account
141
+ value: new bignumber_js_1.default(operation.balance).plus(operation.fee).toString(),
260
142
  });
261
- };
143
+ }
262
144
  /**
263
145
  * Record the most important fields from a reveal operation.
264
146
  *
265
147
  * @param {RevealOp} operation A reveal operation object from a Tezos transaction
266
148
  */
267
- Transaction.prototype.recordRevealOpFields = function (operation) {
268
- this._type = baseCoin_1.TransactionType.AccountUpdate;
149
+ recordRevealOpFields(operation) {
150
+ this._type = sdk_core_1.TransactionType.AccountUpdate;
269
151
  this._publicKeyToReveal = operation.public_key;
270
152
  this._inputs.push({
271
153
  address: operation.source,
272
154
  // Balance + fees + max gas + max storage are paid by the source account
273
155
  value: operation.fee,
274
156
  });
275
- };
157
+ }
276
158
  /**
277
159
  * Record the most important fields for a Transaction operation.
278
160
  *
279
161
  * @param {TransactionOp} operation A transaction object from a Tezos operation
280
162
  */
281
- Transaction.prototype.recordTransactionOpFields = function (operation) {
163
+ recordTransactionOpFields(operation) {
282
164
  if (operation.parameters) {
283
- this._type = baseCoin_1.TransactionType.Send;
165
+ this._type = sdk_core_1.TransactionType.Send;
284
166
  }
285
167
  else {
286
- this._type = baseCoin_1.TransactionType.SingleSigSend;
168
+ this._type = sdk_core_1.TransactionType.SingleSigSend;
287
169
  }
288
- var transferData = multisigUtils_1.getMultisigTransferDataFromOperation(operation);
170
+ const transferData = multisigUtils_1.getMultisigTransferDataFromOperation(operation);
289
171
  // Fees are paid by the source account, along with the amount in the transaction
290
172
  this._inputs.push({
291
173
  address: operation.source,
@@ -305,46 +187,28 @@ var Transaction = /** @class */ (function (_super) {
305
187
  value: transferData.amount,
306
188
  });
307
189
  }
308
- };
190
+ }
309
191
  /**
310
192
  * Sign the transaction with the provided key. It does not check if the signer is allowed to sign
311
193
  * it or not.
312
194
  *
313
195
  * @param {KeyPair} keyPair The key to sign the transaction with
314
196
  */
315
- Transaction.prototype.sign = function (keyPair) {
316
- return __awaiter(this, void 0, void 0, function () {
317
- var encodedTransaction, signedTransaction, _a;
318
- return __generator(this, function (_b) {
319
- switch (_b.label) {
320
- case 0:
321
- // TODO: fail if the transaction is already signed
322
- // Check if there is a transaction to sign
323
- if (!this._parsedTransaction) {
324
- throw new errors_1.InvalidTransactionError('Empty transaction');
325
- }
326
- return [4 /*yield*/, local_forging_1.localForger.forge(this._parsedTransaction)];
327
- case 1:
328
- encodedTransaction = _b.sent();
329
- return [4 /*yield*/, Utils.sign(keyPair, encodedTransaction)];
330
- case 2:
331
- signedTransaction = _b.sent();
332
- this._encodedTransaction = signedTransaction.sbytes;
333
- // The transaction id can only be calculated for signed transactions
334
- _a = this;
335
- return [4 /*yield*/, Utils.calculateTransactionId(this._encodedTransaction)];
336
- case 3:
337
- // The transaction id can only be calculated for signed transactions
338
- _a._id = _b.sent();
339
- return [4 /*yield*/, this.initFromParsedTransaction(this._parsedTransaction, this._id)];
340
- case 4:
341
- _b.sent();
342
- this._signatures.push(signedTransaction.sig);
343
- return [2 /*return*/];
344
- }
345
- });
346
- });
347
- };
197
+ async sign(keyPair) {
198
+ // TODO: fail if the transaction is already signed
199
+ // Check if there is a transaction to sign
200
+ if (!this._parsedTransaction) {
201
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
202
+ }
203
+ // Get the transaction body to sign
204
+ const encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
205
+ const signedTransaction = await Utils.sign(keyPair, encodedTransaction);
206
+ this._encodedTransaction = signedTransaction.sbytes;
207
+ // The transaction id can only be calculated for signed transactions
208
+ this._id = await Utils.calculateTransactionId(this._encodedTransaction);
209
+ await this.initFromParsedTransaction(this._parsedTransaction, this._id);
210
+ this._signatures.push(signedTransaction.sig);
211
+ }
348
212
  /**
349
213
  * Update the list of signatures for a multisig transaction operation.
350
214
  *
@@ -352,102 +216,70 @@ var Transaction = /** @class */ (function (_super) {
352
216
  * in the multisig transfer
353
217
  * @param {number} index The transfer index to add the signatures to
354
218
  */
355
- Transaction.prototype.addTransferSignature = function (signatures, index) {
356
- return __awaiter(this, void 0, void 0, function () {
357
- var _a;
358
- return __generator(this, function (_b) {
359
- switch (_b.label) {
360
- case 0:
361
- if (!this._parsedTransaction) {
362
- throw new errors_1.InvalidTransactionError('Empty transaction');
363
- }
364
- multisigUtils_1.updateMultisigTransferSignatures(this._parsedTransaction.contents[index], signatures);
365
- _a = this;
366
- return [4 /*yield*/, local_forging_1.localForger.forge(this._parsedTransaction)];
367
- case 1:
368
- _a._encodedTransaction = _b.sent();
369
- return [2 /*return*/];
370
- }
371
- });
372
- });
373
- };
219
+ async addTransferSignature(signatures, index) {
220
+ if (!this._parsedTransaction) {
221
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
222
+ }
223
+ multisigUtils_1.updateMultisigTransferSignatures(this._parsedTransaction.contents[index], signatures);
224
+ this._encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
225
+ }
374
226
  /** @inheritdoc */
375
- Transaction.prototype.canSign = function (key) {
227
+ canSign(key) {
376
228
  // TODO: check the key belongs to the _source account in _parsedTransaction
377
229
  return true;
378
- };
230
+ }
379
231
  /** @inheritdoc */
380
- Transaction.prototype.toJson = function () {
232
+ toJson() {
381
233
  if (!this._parsedTransaction) {
382
- throw new errors_1.InvalidTransactionError('Empty transaction');
234
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
383
235
  }
384
236
  return this._parsedTransaction;
385
- };
237
+ }
386
238
  /** @inheritdoc */
387
- Transaction.prototype.toBroadcastFormat = function () {
239
+ toBroadcastFormat() {
388
240
  if (!this._encodedTransaction) {
389
- throw new errors_1.InvalidTransactionError('Missing encoded transaction');
241
+ throw new sdk_core_1.InvalidTransactionError('Missing encoded transaction');
390
242
  }
391
243
  return this._encodedTransaction;
392
- };
393
- Object.defineProperty(Transaction.prototype, "source", {
394
- /**
395
- * Get the transaction source if it is available.
396
- *
397
- * @returns {string} Source of the transaction
398
- */
399
- get: function () {
400
- if (!this._source) {
401
- throw new errors_1.InvalidTransactionError('Transaction not initialized');
402
- }
403
- return this._source;
404
- },
405
- enumerable: false,
406
- configurable: true
407
- });
408
- Object.defineProperty(Transaction.prototype, "delegate", {
409
- /**
410
- * Get the transaction delegation address if it is available.
411
- *
412
- * @returns {string} transaction delegation address
413
- */
414
- get: function () {
415
- return this._delegate;
416
- },
417
- enumerable: false,
418
- configurable: true
419
- });
420
- Object.defineProperty(Transaction.prototype, "publicKeyToReveal", {
421
- /**
422
- * Get the public key revealed by the transaction if it exists
423
- *
424
- * @returns {string} public key
425
- */
426
- get: function () {
427
- return this._publicKeyToReveal;
428
- },
429
- enumerable: false,
430
- configurable: true
431
- });
432
- Object.defineProperty(Transaction.prototype, "forwarderDestination", {
433
- /**
434
- * Get the destination of an address initialization transaction if it exists
435
- *
436
- * @returns {string} forwarder destination
437
- */
438
- get: function () {
439
- return this._forwarderDestination;
440
- },
441
- enumerable: false,
442
- configurable: true
443
- });
444
- Object.defineProperty(Transaction.prototype, "owners", {
445
- get: function () {
446
- return this._owners;
447
- },
448
- enumerable: false,
449
- configurable: true
450
- });
244
+ }
245
+ /**
246
+ * Get the transaction source if it is available.
247
+ *
248
+ * @returns {string} Source of the transaction
249
+ */
250
+ get source() {
251
+ if (!this._source) {
252
+ throw new sdk_core_1.InvalidTransactionError('Transaction not initialized');
253
+ }
254
+ return this._source;
255
+ }
256
+ /**
257
+ * Get the transaction delegation address if it is available.
258
+ *
259
+ * @returns {string} transaction delegation address
260
+ */
261
+ get delegate() {
262
+ return this._delegate;
263
+ }
264
+ /**
265
+ * Get the public key revealed by the transaction if it exists
266
+ *
267
+ * @returns {string} public key
268
+ */
269
+ get publicKeyToReveal() {
270
+ return this._publicKeyToReveal;
271
+ }
272
+ /**
273
+ * Get the destination of an address initialization transaction if it exists
274
+ *
275
+ * @returns {string} forwarder destination
276
+ */
277
+ get forwarderDestination() {
278
+ return this._forwarderDestination;
279
+ }
280
+ get owners() {
281
+ return this._owners;
282
+ }
451
283
  /**
452
284
  * Get the signatures for the given multisig transfer,
453
285
  *
@@ -455,31 +287,29 @@ var Transaction = /** @class */ (function (_super) {
455
287
  * @returns {IndexedSignature[]} A list of signatures with their index inside the multisig transfer
456
288
  * script
457
289
  */
458
- Transaction.prototype.getTransferSignatures = function (transferIndex) {
459
- if (transferIndex === void 0) { transferIndex = 0; }
290
+ getTransferSignatures(transferIndex = 0) {
460
291
  if (!this._parsedTransaction) {
461
292
  return [];
462
293
  }
463
294
  return multisigUtils_1.getMultisigTransferSignatures(this._parsedTransaction.contents[transferIndex]);
464
- };
295
+ }
465
296
  /**
466
297
  * Get the list of index per tezos transaction type. This is useful to locate specific operations
467
298
  * within the transaction and verify or sign them.
468
299
  *
469
300
  * @returns {{[p: string]: number[]}} List of indexes where the key is the transaction kind
470
301
  */
471
- Transaction.prototype.getIndexesByTransactionType = function () {
302
+ getIndexesByTransactionType() {
472
303
  if (!this._parsedTransaction) {
473
304
  return {};
474
305
  }
475
- var indexes = {};
476
- for (var i = 0; i < this._parsedTransaction.contents.length; i++) {
477
- var kind = this._parsedTransaction.contents[i].kind;
306
+ const indexes = {};
307
+ for (let i = 0; i < this._parsedTransaction.contents.length; i++) {
308
+ const kind = this._parsedTransaction.contents[i].kind;
478
309
  indexes[kind] = indexes[kind] ? indexes[kind].concat([i]) : [i];
479
310
  }
480
311
  return indexes;
481
- };
482
- return Transaction;
483
- }(baseCoin_1.BaseTransaction));
312
+ }
313
+ }
484
314
  exports.Transaction = Transaction;
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi94dHovdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdEQUE0RDtBQUM1RCw4REFBcUM7QUFFckMsd0NBQStEO0FBQy9ELDZDQUFvRjtBQUVwRixpREFNeUI7QUFHekIsNkNBQWlDO0FBRWpDOztHQUVHO0FBQ0g7SUFBaUMsK0JBQWU7SUFTOUM7Ozs7T0FJRztJQUNILHFCQUFZLFVBQWdDO1FBQTVDLFlBQ0Usa0JBQU0sVUFBVSxDQUFDLFNBRWxCO1FBREMsS0FBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7O0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0csbURBQTZCLEdBQW5DLFVBQW9DLHFCQUE2Qjs7Ozs7O3dCQUMvRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7Ozs7d0JBRXJCLHFCQUFNLDJCQUFXLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUE7O3dCQUFsRSxpQkFBaUIsR0FBRyxTQUE4Qzt3QkFDeEUscUJBQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLEVBQUE7O3dCQUF2RCxTQUF1RCxDQUFDOzs7O3dCQUlsRCw2QkFBNkIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3JFLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7NEJBQ3JDLE1BQU0sSUFBSSw4QkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3lCQUN4RDt3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Ozs7OztPQU1HO0lBQ0gsMkNBQXFCLEdBQXJCLFVBQXNCLGFBQWlCO1FBQWpCLDhCQUFBLEVBQUEsaUJBQWlCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sNkNBQTZCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQWtCLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpREFBMkIsR0FBM0I7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hFLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FBQyxBQWxURCxDQUFpQywwQkFBZSxHQWtUL0M7QUFsVFksa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT0RFQywgbG9jYWxGb3JnZXIgfSBmcm9tICdAdGFxdWl0by9sb2NhbC1mb3JnaW5nJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBQYXJzZVRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICcuLi9iYXNlQ29pbi9lcnJvcnMnO1xuaW1wb3J0IHsgQmFzZUtleSB9IGZyb20gJy4uL2Jhc2VDb2luL2lmYWNlJztcbmltcG9ydCB7XG4gIGdldE11bHRpc2lnVHJhbnNmZXJEYXRhRnJvbU9wZXJhdGlvbixcbiAgZ2V0TXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXMsXG4gIGdldE9yaWdpbmF0aW9uRGF0YUZyb21PcGVyYXRpb24sXG4gIGdldE93bmVyc1B1YmxpY0tleXMsXG4gIHVwZGF0ZU11bHRpc2lnVHJhbnNmZXJTaWduYXR1cmVzLFxufSBmcm9tICcuL211bHRpc2lnVXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBJbmRleGVkU2lnbmF0dXJlLCBPcmlnaW5hdGlvbk9wLCBQYXJzZWRUcmFuc2FjdGlvbiwgUmV2ZWFsT3AsIFRyYW5zYWN0aW9uT3AgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFRlem9zIHRyYW5zYWN0aW9uIG1vZGVsLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9wYXJzZWRUcmFuc2FjdGlvbj86IFBhcnNlZFRyYW5zYWN0aW9uOyAvLyB0cmFuc2FjdGlvbiBpbiBKU09OIGZvcm1hdFxuICBwcml2YXRlIF9lbmNvZGVkVHJhbnNhY3Rpb24/OiBzdHJpbmc7IC8vIHRyYW5zYWN0aW9uIGluIGhleCBmb3JtYXRcbiAgcHJpdmF0ZSBfc291cmNlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlbGVnYXRlPzogc3RyaW5nO1xuICBwcml2YXRlIF9mb3J3YXJkZXJEZXN0aW5hdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZSBfcHVibGljS2V5VG9SZXZlYWw/OiBzdHJpbmc7XG4gIHByaXZhdGUgX293bmVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFkb25seTxDb2luQ29uZmlnPn0gY29pbkNvbmZpZ1xuICAgKi9cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9vd25lcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBmaWVsZHMgYmFzZWQgb24gYW5vdGhlciBzZXJpYWxpemVkIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2VyaWFsaXplZFRyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIGluIGJyb2FkY2FzdCBmb3JtYXQuXG4gICAqL1xuICBhc3luYyBpbml0RnJvbVNlcmlhbGl6ZWRUcmFuc2FjdGlvbihzZXJpYWxpemVkVHJhbnNhY3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBsb2NhbEZvcmdlci5wYXJzZShzZXJpYWxpemVkVHJhbnNhY3Rpb24pO1xuICAgICAgYXdhaXQgdGhpcy5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHBhcnNlZFRyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZiBpdCB0aHJvd3MsIGl0IGlzIHBvc3NpYmxlIHRoZSBzZXJpYWxpemVkIHRyYW5zYWN0aW9uIGlzIHNpZ25lZCwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZFxuICAgICAgLy8gYnkgbG9jYWwtZm9yZ2luZy4gVHJ5IGV4dHJhY3RpbmcgdGhlIGxhc3QgNjQgYnl0ZXMgYW5kIHBhcnNlIGl0IGFnYWluLlxuICAgICAgY29uc3QgdW5zaWduZWRTZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoMCwgLTEyOCk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBzZXJpYWxpemVkVHJhbnNhY3Rpb24uc2xpY2UoLTEyOCk7XG4gICAgICBpZiAoVXRpbHMuaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IGVuY29kZSB0aGUgc2lnbmF0dXJlIGFuZCBzYXZlIGl0IGluIF9zaWduYXR1cmVcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIucGFyc2UodW5zaWduZWRTZXJpYWxpemVkVHJhbnNhY3Rpb24pO1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IGF3YWl0IFV0aWxzLmNhbGN1bGF0ZVRyYW5zYWN0aW9uSWQoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdEZyb21QYXJzZWRUcmFuc2FjdGlvbihwYXJzZWRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGZpZWxkcyBiYXNlZCBvbiBhbm90aGVyIHBhcnNlZCB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJzZWRUcmFuc2FjdGlvbn0gcGFyc2VkVHJhbnNhY3Rpb24gQSBUZXpvcyB0cmFuc2FjdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zYWN0aW9uSWQgVGhlIHRyYW5zYWN0aW9uIGlkIG9mIHRoZSBwYXJzZWRUcmFuc2FjdGlvbiBpZiBpdCBpcyBzaWduZWRcbiAgICovXG4gIGFzeW5jIGluaXRGcm9tUGFyc2VkVHJhbnNhY3Rpb24ocGFyc2VkVHJhbnNhY3Rpb246IFBhcnNlZFRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHBhcnNlZFRyYW5zYWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKHRyYW5zYWN0aW9uSWQpIHtcbiAgICAgIC8vIElmIHRoZSB0cmFuc2FjdGlvbiBpZCBpcyBwYXNzZWQsIHNhdmUgaXQgYW5kIGNsZWFuIHVwIHRoZSBlbnRyaWVzIHNpbmNlIHRoZXkgd2lsbCBiZVxuICAgICAgLy8gcmVjYWxjdWxhdGVkXG4gICAgICB0aGlzLl9pZCA9IHRyYW5zYWN0aW9uSWQ7XG4gICAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgICAgIHRoaXMuX291dHB1dHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faWQgPSAnJztcbiAgICB9XG4gICAgdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24gPSBwYXJzZWRUcmFuc2FjdGlvbjtcbiAgICBsZXQgb3BlcmF0aW9uSW5kZXggPSAwO1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIHBhcnNlZFRyYW5zYWN0aW9uLmNvbnRlbnRzKSB7XG4gICAgICBpZiAodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZSAhPT0gb3BlcmF0aW9uLnNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZSBtdXN0IGJlIHRoZSBzYW1lIGZvciBldmVyeSBvcGVyYXRpb24gYnV0IGl0IGNoYW5nZWQgZnJvbSAnICsgdGhpcy5fc291cmNlICsgJyB0byAnICsgb3BlcmF0aW9uLnNvdXJjZSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IG9wZXJhdGlvbi5zb3VyY2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgQ09ERUMuT1BfT1JJR0lOQVRJT046XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWNvcmRPcmlnaW5hdGlvbk9wRmllbGRzKG9wZXJhdGlvbiBhcyBPcmlnaW5hdGlvbk9wLCBvcGVyYXRpb25JbmRleCk7XG4gICAgICAgICAgb3BlcmF0aW9uSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDT0RFQy5PUF9SRVZFQUw6XG4gICAgICAgICAgdGhpcy5yZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb24gYXMgUmV2ZWFsT3ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENPREVDLk9QX1RSQU5TQUNUSU9OOlxuICAgICAgICAgIHRoaXMucmVjb3JkVHJhbnNhY3Rpb25PcEZpZWxkcyhvcGVyYXRpb24gYXMgVHJhbnNhY3Rpb25PcCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzIGZyb20gYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wZXJhdGlvbn0gb3BlcmF0aW9uIEFuIG9wZXJhdGlvbiBvYmplY3QgZnJvbSBhIFRlem9zIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgb3JpZ2luYXRpb24gb3BlcmF0aW9uIGluZGV4IGluIHRoZSB0cmFuc2FjdGlvbi4gVXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICAqICAgICAgb3JpZ2luYXRlZCBhZGRyZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlY29yZE9yaWdpbmF0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBPcmlnaW5hdGlvbk9wLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb25EYXRhID0gZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgIGlmIChvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb24pIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uO1xuICAgICAgdGhpcy5fZm9yd2FyZGVyRGVzdGluYXRpb24gPSBvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gICAgICB0aGlzLl9vd25lcnMgPSBnZXRPd25lcnNQdWJsaWNLZXlzKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsZWdhdGUgPSBvcGVyYXRpb24uZGVsZWdhdGU7XG4gICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgIGFkZHJlc3M6IHRoaXMuX2lkID8gYXdhaXQgVXRpbHMuY2FsY3VsYXRlT3JpZ2luYXRlZEFkZHJlc3ModGhpcy5faWQsIGluZGV4KSA6ICcnLFxuICAgICAgLy8gQmFsYW5jZVxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5iYWxhbmNlLFxuICAgIH0pO1xuICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IG9wZXJhdGlvbi5zb3VyY2UsXG4gICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgIHZhbHVlOiBuZXcgQmlnTnVtYmVyKG9wZXJhdGlvbi5iYWxhbmNlKS5wbHVzKG9wZXJhdGlvbi5mZWUpLnRvU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZnJvbSBhIHJldmVhbCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UmV2ZWFsT3B9IG9wZXJhdGlvbiBBIHJldmVhbCBvcGVyYXRpb24gb2JqZWN0IGZyb20gYSBUZXpvcyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb246IFJldmVhbE9wKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5BY2NvdW50VXBkYXRlO1xuICAgIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsID0gb3BlcmF0aW9uLnB1YmxpY19rZXk7XG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogb3BlcmF0aW9uLnNvdXJjZSxcbiAgICAgIC8vIEJhbGFuY2UgKyBmZWVzICsgbWF4IGdhcyArIG1heCBzdG9yYWdlIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5mZWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZm9yIGEgVHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uT3B9IG9wZXJhdGlvbiBBIHRyYW5zYWN0aW9uIG9iamVjdCBmcm9tIGEgVGV6b3Mgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFRyYW5zYWN0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBUcmFuc2FjdGlvbk9wKTogdm9pZCB7XG4gICAgaWYgKG9wZXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZDtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNmZXJEYXRhID0gZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgLy8gRmVlcyBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnQsIGFsb25nIHdpdGggdGhlIGFtb3VudCBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBvcGVyYXRpb24uc291cmNlLFxuICAgICAgdmFsdWU6IG5ldyBCaWdOdW1iZXIodHJhbnNmZXJEYXRhLmZlZS5mZWUpLnRvRml4ZWQoMCksXG4gICAgfSk7XG5cbiAgICBpZiAodHJhbnNmZXJEYXRhLmNvaW4gPT09ICdtdXRleicpIHtcbiAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XG4gICAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgICAgYWRkcmVzczogdHJhbnNmZXJEYXRhLnRvLFxuICAgICAgICAvLyBCYWxhbmNlXG4gICAgICAgIHZhbHVlOiB0cmFuc2ZlckRhdGEuYW1vdW50LFxuICAgICAgfSk7XG4gICAgICAvLyBUaGUgZnVuZHMgYmVpbmcgdHJhbnNmZXJyZWQgZnJvbSB0aGUgd2FsbGV0XG4gICAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHRyYW5zZmVyRGF0YS5mcm9tLFxuICAgICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgICAgdmFsdWU6IHRyYW5zZmVyRGF0YS5hbW91bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQga2V5LiBJdCBkb2VzIG5vdCBjaGVjayBpZiB0aGUgc2lnbmVyIGlzIGFsbG93ZWQgdG8gc2lnblxuICAgKiBpdCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciBUaGUga2V5IHRvIHNpZ24gdGhlIHRyYW5zYWN0aW9uIHdpdGhcbiAgICovXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IGZhaWwgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgc2lnbmVkXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB0byBzaWduXG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHRyYW5zYWN0aW9uIGJvZHkgdG8gc2lnblxuICAgIGNvbnN0IGVuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgVXRpbHMuc2lnbihrZXlQYWlyLCBlbmNvZGVkVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IHNpZ25lZFRyYW5zYWN0aW9uLnNieXRlcztcblxuICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBpZCBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zXG4gICAgdGhpcy5faWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbik7XG4gICAgYXdhaXQgdGhpcy5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLCB0aGlzLl9pZCk7XG5cbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmVkVHJhbnNhY3Rpb24uc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxpc3Qgb2Ygc2lnbmF0dXJlcyBmb3IgYSBtdWx0aXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2Ygc2lnbmF0dXJlcyBhbmQgdGhlIGluZGV4IHRoZXkgc2hvdWxkIGJlIHB1dCBvblxuICAgKiAgICBpbiB0aGUgbXVsdGlzaWcgdHJhbnNmZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB0cmFuc2ZlciBpbmRleCB0byBhZGQgdGhlIHNpZ25hdHVyZXMgdG9cbiAgICovXG4gIGFzeW5jIGFkZFRyYW5zZmVyU2lnbmF0dXJlKHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHNbaW5kZXhdIGFzIFRyYW5zYWN0aW9uT3AsIHNpZ25hdHVyZXMpO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE86IGNoZWNrIHRoZSBrZXkgYmVsb25ncyB0byB0aGUgX3NvdXJjZSBhY2NvdW50IGluIF9wYXJzZWRUcmFuc2FjdGlvblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBQYXJzZWRUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGVuY29kZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIHNvdXJjZSBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzcyBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzc1xuICAgKi9cbiAgZ2V0IGRlbGVnYXRlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHVibGljIGtleSByZXZlYWxlZCBieSB0aGUgdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHB1YmxpYyBrZXlcbiAgICovXG4gIGdldCBwdWJsaWNLZXlUb1JldmVhbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wdWJsaWNLZXlUb1JldmVhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc3RpbmF0aW9uIG9mIGFuIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IGZvcndhcmRlciBkZXN0aW5hdGlvblxuICAgKi9cbiAgZ2V0IGZvcndhcmRlckRlc3RpbmF0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcndhcmRlckRlc3RpbmF0aW9uO1xuICB9XG5cbiAgZ2V0IG93bmVycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX293bmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hdHVyZXMgZm9yIHRoZSBnaXZlbiBtdWx0aXNpZyB0cmFuc2ZlcixcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zZmVySW5kZXggVGhlIHRyYW5zZmVyIHNjcmlwdCBpbmRleCBpbiB0aGUgVGV6b3MgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge0luZGV4ZWRTaWduYXR1cmVbXX0gQSBsaXN0IG9mIHNpZ25hdHVyZXMgd2l0aCB0aGVpciBpbmRleCBpbnNpZGUgdGhlIG11bHRpc2lnIHRyYW5zZmVyXG4gICAqICAgICAgc2NyaXB0XG4gICAqL1xuICBnZXRUcmFuc2ZlclNpZ25hdHVyZXModHJhbnNmZXJJbmRleCA9IDApOiBJbmRleGVkU2lnbmF0dXJlW10ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGdldE11bHRpc2lnVHJhbnNmZXJTaWduYXR1cmVzKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLmNvbnRlbnRzW3RyYW5zZmVySW5kZXhdIGFzIFRyYW5zYWN0aW9uT3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBpbmRleCBwZXIgdGV6b3MgdHJhbnNhY3Rpb24gdHlwZS4gVGhpcyBpcyB1c2VmdWwgdG8gbG9jYXRlIHNwZWNpZmljIG9wZXJhdGlvbnNcbiAgICogd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBhbmQgdmVyaWZ5IG9yIHNpZ24gdGhlbS5cbiAgICpcbiAgICogQHJldHVybnMge3tbcDogc3RyaW5nXTogbnVtYmVyW119fSBMaXN0IG9mIGluZGV4ZXMgd2hlcmUgdGhlIGtleSBpcyB0aGUgdHJhbnNhY3Rpb24ga2luZFxuICAgKi9cbiAgZ2V0SW5kZXhlc0J5VHJhbnNhY3Rpb25UeXBlKCk6IHsgW2tpbmQ6IHN0cmluZ106IG51bWJlcltdIH0ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtpbmQgPSB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50c1tpXS5raW5kO1xuICAgICAgaW5kZXhlc1traW5kXSA9IGluZGV4ZXNba2luZF0gPyBpbmRleGVzW2tpbmRdLmNvbmNhdChbaV0pIDogW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhlcztcbiAgfVxufVxuIl19
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi94dHovdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUE0RDtBQUM1RCxnRUFBcUM7QUFFckMsOENBTXlCO0FBQ3pCLG1EQU15QjtBQUd6QiwrQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQVM5Qzs7OztPQUlHO0lBQ0gsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsNkJBQTZCLENBQUMscUJBQTZCO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNqRCxJQUFJO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLDJCQUFXLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekUsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN6RDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsNEZBQTRGO1lBQzVGLHlFQUF5RTtZQUN6RSxNQUFNLDZCQUE2QixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRSxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDckMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFCQUFxQixDQUFDLENBQUM7YUFDeEQ7WUFDRCx1REFBdUQ7WUFDdkQsTUFBTSxpQkFBaUIsR0FB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RyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBbFRELGtDQWtUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPREVDLCBsb2NhbEZvcmdlciB9IGZyb20gJ0B0YXF1aXRvL2xvY2FsLWZvcmdpbmcnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uLFxuICBnZXRNdWx0aXNpZ1RyYW5zZmVyU2lnbmF0dXJlcyxcbiAgZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbixcbiAgZ2V0T3duZXJzUHVibGljS2V5cyxcbiAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXMsXG59IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IEluZGV4ZWRTaWduYXR1cmUsIE9yaWdpbmF0aW9uT3AsIFBhcnNlZFRyYW5zYWN0aW9uLCBSZXZlYWxPcCwgVHJhbnNhY3Rpb25PcCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogVGV6b3MgdHJhbnNhY3Rpb24gbW9kZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX3BhcnNlZFRyYW5zYWN0aW9uPzogUGFyc2VkVHJhbnNhY3Rpb247IC8vIHRyYW5zYWN0aW9uIGluIEpTT04gZm9ybWF0XG4gIHByaXZhdGUgX2VuY29kZWRUcmFuc2FjdGlvbj86IHN0cmluZzsgLy8gdHJhbnNhY3Rpb24gaW4gaGV4IGZvcm1hdFxuICBwcml2YXRlIF9zb3VyY2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVsZWdhdGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2ZvcndhcmRlckRlc3RpbmF0aW9uPzogc3RyaW5nO1xuICBwcml2YXRlIF9wdWJsaWNLZXlUb1JldmVhbD86IHN0cmluZztcbiAgcHJpdmF0ZSBfb3duZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWRvbmx5PENvaW5Db25maWc+fSBjb2luQ29uZmlnXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX293bmVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGZpZWxkcyBiYXNlZCBvbiBhbm90aGVyIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzZXJpYWxpemVkVHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYnJvYWRjYXN0IGZvcm1hdC5cbiAgICovXG4gIGFzeW5jIGluaXRGcm9tU2VyaWFsaXplZFRyYW5zYWN0aW9uKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLnBhcnNlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgICBhd2FpdCB0aGlzLmluaXRGcm9tUGFyc2VkVHJhbnNhY3Rpb24ocGFyc2VkVHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIGl0IHRocm93cywgaXQgaXMgcG9zc2libGUgdGhlIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24gaXMgc2lnbmVkLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkXG4gICAgICAvLyBieSBsb2NhbC1mb3JnaW5nLiBUcnkgZXh0cmFjdGluZyB0aGUgbGFzdCA2NCBieXRlcyBhbmQgcGFyc2UgaXQgYWdhaW4uXG4gICAgICBjb25zdCB1bnNpZ25lZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbiA9IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbi5zbGljZSgwLCAtMTI4KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbi5zbGljZSgtMTI4KTtcbiAgICAgIGlmIChVdGlscy5pc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogZW5jb2RlIHRoZSBzaWduYXR1cmUgYW5kIHNhdmUgaXQgaW4gX3NpZ25hdHVyZVxuICAgICAgY29uc3QgcGFyc2VkVHJhbnNhY3Rpb24gPSBhd2FpdCBsb2NhbEZvcmdlci5wYXJzZSh1bnNpZ25lZFNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gYXdhaXQgVXRpbHMuY2FsY3VsYXRlVHJhbnNhY3Rpb25JZChzZXJpYWxpemVkVHJhbnNhY3Rpb24pO1xuICAgICAgYXdhaXQgdGhpcy5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHBhcnNlZFRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gZmllbGRzIGJhc2VkIG9uIGFub3RoZXIgcGFyc2VkIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnNlZFRyYW5zYWN0aW9ufSBwYXJzZWRUcmFuc2FjdGlvbiBBIFRlem9zIHRyYW5zYWN0aW9uIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb25JZCBUaGUgdHJhbnNhY3Rpb24gaWQgb2YgdGhlIHBhcnNlZFRyYW5zYWN0aW9uIGlmIGl0IGlzIHNpZ25lZFxuICAgKi9cbiAgYXN5bmMgaW5pdEZyb21QYXJzZWRUcmFuc2FjdGlvbihwYXJzZWRUcmFuc2FjdGlvbjogUGFyc2VkVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIuZm9yZ2UocGFyc2VkVHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICBpZiAodHJhbnNhY3Rpb25JZCkge1xuICAgICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGlkIGlzIHBhc3NlZCwgc2F2ZSBpdCBhbmQgY2xlYW4gdXAgdGhlIGVudHJpZXMgc2luY2UgdGhleSB3aWxsIGJlXG4gICAgICAvLyByZWNhbGN1bGF0ZWRcbiAgICAgIHRoaXMuX2lkID0gdHJhbnNhY3Rpb25JZDtcbiAgICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pZCA9ICcnO1xuICAgIH1cbiAgICB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbiA9IHBhcnNlZFRyYW5zYWN0aW9uO1xuICAgIGxldCBvcGVyYXRpb25JbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHMpIHtcbiAgICAgIGlmICh0aGlzLl9zb3VyY2UgJiYgdGhpcy5fc291cmNlICE9PSBvcGVyYXRpb24uc291cmNlKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICAnU291cmNlIG11c3QgYmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IG9wZXJhdGlvbiBidXQgaXQgY2hhbmdlZCBmcm9tICcgKyB0aGlzLl9zb3VyY2UgKyAnIHRvICcgKyBvcGVyYXRpb24uc291cmNlLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc291cmNlID0gb3BlcmF0aW9uLnNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAob3BlcmF0aW9uLmtpbmQpIHtcbiAgICAgICAgY2FzZSBDT0RFQy5PUF9PUklHSU5BVElPTjpcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlY29yZE9yaWdpbmF0aW9uT3BGaWVsZHMob3BlcmF0aW9uIGFzIE9yaWdpbmF0aW9uT3AsIG9wZXJhdGlvbkluZGV4KTtcbiAgICAgICAgICBvcGVyYXRpb25JbmRleCsrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENPREVDLk9QX1JFVkVBTDpcbiAgICAgICAgICB0aGlzLnJlY29yZFJldmVhbE9wRmllbGRzKG9wZXJhdGlvbiBhcyBSZXZlYWxPcCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ09ERUMuT1BfVFJBTlNBQ1RJT046XG4gICAgICAgICAgdGhpcy5yZWNvcmRUcmFuc2FjdGlvbk9wRmllbGRzKG9wZXJhdGlvbiBhcyBUcmFuc2FjdGlvbk9wKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZnJvbSBhbiBvcmlnaW5hdGlvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9ufSBvcGVyYXRpb24gQW4gb3BlcmF0aW9uIG9iamVjdCBmcm9tIGEgVGV6b3MgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBvcmlnaW5hdGlvbiBvcGVyYXRpb24gaW5kZXggaW4gdGhlIHRyYW5zYWN0aW9uLiBVc2VkIHRvIGNhbGN1bGF0ZSB0aGVcbiAgICogICAgICBvcmlnaW5hdGVkIGFkZHJlc3NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVjb3JkT3JpZ2luYXRpb25PcEZpZWxkcyhvcGVyYXRpb246IE9yaWdpbmF0aW9uT3AsIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbkRhdGEgPSBnZXRPcmlnaW5hdGlvbkRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgaWYgKG9yaWdpbmF0aW9uRGF0YS5mb3J3YXJkZXJEZXN0aW5hdGlvbikge1xuICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb247XG4gICAgICB0aGlzLl9mb3J3YXJkZXJEZXN0aW5hdGlvbiA9IG9yaWdpbmF0aW9uRGF0YS5mb3J3YXJkZXJEZXN0aW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjtcbiAgICAgIHRoaXMuX293bmVycyA9IGdldE93bmVyc1B1YmxpY0tleXMob3BlcmF0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWxlZ2F0ZSA9IG9wZXJhdGlvbi5kZWxlZ2F0ZTtcbiAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xuICAgICAgLy8gS3QgYWRkcmVzc2VzIGNhbiBvbmx5IGJlIGNhbGN1bGF0ZWQgZm9yIHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBhbiBpZFxuICAgICAgYWRkcmVzczogdGhpcy5faWQgPyBhd2FpdCBVdGlscy5jYWxjdWxhdGVPcmlnaW5hdGVkQWRkcmVzcyh0aGlzLl9pZCwgaW5kZXgpIDogJycsXG4gICAgICAvLyBCYWxhbmNlXG4gICAgICB2YWx1ZTogb3BlcmF0aW9uLmJhbGFuY2UsXG4gICAgfSk7XG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogb3BlcmF0aW9uLnNvdXJjZSxcbiAgICAgIC8vIEJhbGFuY2UgKyBmZWVzICsgbWF4IGdhcyArIG1heCBzdG9yYWdlIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICAgICAgdmFsdWU6IG5ldyBCaWdOdW1iZXIob3BlcmF0aW9uLmJhbGFuY2UpLnBsdXMob3BlcmF0aW9uLmZlZSkudG9TdHJpbmcoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgdGhlIG1vc3QgaW1wb3J0YW50IGZpZWxkcyBmcm9tIGEgcmV2ZWFsIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZXZlYWxPcH0gb3BlcmF0aW9uIEEgcmV2ZWFsIG9wZXJhdGlvbiBvYmplY3QgZnJvbSBhIFRlem9zIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFJldmVhbE9wRmllbGRzKG9wZXJhdGlvbjogUmV2ZWFsT3ApOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLkFjY291bnRVcGRhdGU7XG4gICAgdGhpcy5fcHVibGljS2V5VG9SZXZlYWwgPSBvcGVyYXRpb24ucHVibGljX2tleTtcbiAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBvcGVyYXRpb24uc291cmNlLFxuICAgICAgLy8gQmFsYW5jZSArIGZlZXMgKyBtYXggZ2FzICsgbWF4IHN0b3JhZ2UgYXJlIHBhaWQgYnkgdGhlIHNvdXJjZSBhY2NvdW50XG4gICAgICB2YWx1ZTogb3BlcmF0aW9uLmZlZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgdGhlIG1vc3QgaW1wb3J0YW50IGZpZWxkcyBmb3IgYSBUcmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25PcH0gb3BlcmF0aW9uIEEgdHJhbnNhY3Rpb24gb2JqZWN0IGZyb20gYSBUZXpvcyBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVjb3JkVHJhbnNhY3Rpb25PcEZpZWxkcyhvcGVyYXRpb246IFRyYW5zYWN0aW9uT3ApOiB2b2lkIHtcbiAgICBpZiAob3BlcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVTaWdTZW5kO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2ZlckRhdGEgPSBnZXRNdWx0aXNpZ1RyYW5zZmVyRGF0YUZyb21PcGVyYXRpb24ob3BlcmF0aW9uKTtcbiAgICAvLyBGZWVzIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudCwgYWxvbmcgd2l0aCB0aGUgYW1vdW50IGluIHRoZSB0cmFuc2FjdGlvblxuICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IG9wZXJhdGlvbi5zb3VyY2UsXG4gICAgICB2YWx1ZTogbmV3IEJpZ051bWJlcih0cmFuc2ZlckRhdGEuZmVlLmZlZSkudG9GaXhlZCgwKSxcbiAgICB9KTtcblxuICAgIGlmICh0cmFuc2ZlckRhdGEuY29pbiA9PT0gJ211dGV6Jykge1xuICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgLy8gS3QgYWRkcmVzc2VzIGNhbiBvbmx5IGJlIGNhbGN1bGF0ZWQgZm9yIHNpZ25lZCB0cmFuc2FjdGlvbnMgd2l0aCBhbiBpZFxuICAgICAgICBhZGRyZXNzOiB0cmFuc2ZlckRhdGEudG8sXG4gICAgICAgIC8vIEJhbGFuY2VcbiAgICAgICAgdmFsdWU6IHRyYW5zZmVyRGF0YS5hbW91bnQsXG4gICAgICB9KTtcbiAgICAgIC8vIFRoZSBmdW5kcyBiZWluZyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSB3YWxsZXRcbiAgICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogdHJhbnNmZXJEYXRhLmZyb20sXG4gICAgICAgIC8vIEJhbGFuY2UgKyBmZWVzICsgbWF4IGdhcyArIG1heCBzdG9yYWdlIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICAgICAgICB2YWx1ZTogdHJhbnNmZXJEYXRhLmFtb3VudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHRoZSB0cmFuc2FjdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBrZXkuIEl0IGRvZXMgbm90IGNoZWNrIGlmIHRoZSBzaWduZXIgaXMgYWxsb3dlZCB0byBzaWduXG4gICAqIGl0IG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIFRoZSBrZXkgdG8gc2lnbiB0aGUgdHJhbnNhY3Rpb24gd2l0aFxuICAgKi9cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVE9ETzogZmFpbCBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBzaWduZWRcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHRyYW5zYWN0aW9uIHRvIHNpZ25cbiAgICBpZiAoIXRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgdHJhbnNhY3Rpb24gYm9keSB0byBzaWduXG4gICAgY29uc3QgZW5jb2RlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIuZm9yZ2UodGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pO1xuXG4gICAgY29uc3Qgc2lnbmVkVHJhbnNhY3Rpb24gPSBhd2FpdCBVdGlscy5zaWduKGtleVBhaXIsIGVuY29kZWRUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uID0gc2lnbmVkVHJhbnNhY3Rpb24uc2J5dGVzO1xuXG4gICAgLy8gVGhlIHRyYW5zYWN0aW9uIGlkIGNhbiBvbmx5IGJlIGNhbGN1bGF0ZWQgZm9yIHNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgICB0aGlzLl9pZCA9IGF3YWl0IFV0aWxzLmNhbGN1bGF0ZVRyYW5zYWN0aW9uSWQodGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uKTtcbiAgICBhd2FpdCB0aGlzLmluaXRGcm9tUGFyc2VkVHJhbnNhY3Rpb24odGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24sIHRoaXMuX2lkKTtcblxuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduZWRUcmFuc2FjdGlvbi5zaWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgbGlzdCBvZiBzaWduYXR1cmVzIGZvciBhIG11bHRpc2lnIHRyYW5zYWN0aW9uIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJbmRleGVkU2lnbmF0dXJlW119IHNpZ25hdHVyZXMgTGlzdCBvZiBzaWduYXR1cmVzIGFuZCB0aGUgaW5kZXggdGhleSBzaG91bGQgYmUgcHV0IG9uXG4gICAqICAgIGluIHRoZSBtdWx0aXNpZyB0cmFuc2ZlclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIHRyYW5zZmVyIGluZGV4IHRvIGFkZCB0aGUgc2lnbmF0dXJlcyB0b1xuICAgKi9cbiAgYXN5bmMgYWRkVHJhbnNmZXJTaWduYXR1cmUoc2lnbmF0dXJlczogSW5kZXhlZFNpZ25hdHVyZVtdLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICB1cGRhdGVNdWx0aXNpZ1RyYW5zZmVyU2lnbmF0dXJlcyh0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50c1tpbmRleF0gYXMgVHJhbnNhY3Rpb25PcCwgc2lnbmF0dXJlcyk7XG4gICAgdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIuZm9yZ2UodGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETzogY2hlY2sgdGhlIGtleSBiZWxvbmdzIHRvIHRoZSBfc291cmNlIGFjY291bnQgaW4gX3BhcnNlZFRyYW5zYWN0aW9uXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFBhcnNlZFRyYW5zYWN0aW9uIHtcbiAgICBpZiAoIXRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgZW5jb2RlZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gc291cmNlIGlmIGl0IGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gU291cmNlIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0IHNvdXJjZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gZGVsZWdhdGlvbiBhZGRyZXNzIGlmIGl0IGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdHJhbnNhY3Rpb24gZGVsZWdhdGlvbiBhZGRyZXNzXG4gICAqL1xuICBnZXQgZGVsZWdhdGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwdWJsaWMga2V5IHJldmVhbGVkIGJ5IHRoZSB0cmFuc2FjdGlvbiBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gcHVibGljIGtleVxuICAgKi9cbiAgZ2V0IHB1YmxpY0tleVRvUmV2ZWFsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzdGluYXRpb24gb2YgYW4gYWRkcmVzcyBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbiBpZiBpdCBleGlzdHNcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gZm9yd2FyZGVyIGRlc3RpbmF0aW9uXG4gICAqL1xuICBnZXQgZm9yd2FyZGVyRGVzdGluYXRpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yd2FyZGVyRGVzdGluYXRpb247XG4gIH1cblxuICBnZXQgb3duZXJzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fb3duZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2lnbmF0dXJlcyBmb3IgdGhlIGdpdmVuIG11bHRpc2lnIHRyYW5zZmVyLFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNmZXJJbmRleCBUaGUgdHJhbnNmZXIgc2NyaXB0IGluZGV4IGluIHRoZSBUZXpvcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7SW5kZXhlZFNpZ25hdHVyZVtdfSBBIGxpc3Qgb2Ygc2lnbmF0dXJlcyB3aXRoIHRoZWlyIGluZGV4IGluc2lkZSB0aGUgbXVsdGlzaWcgdHJhbnNmZXJcbiAgICogICAgICBzY3JpcHRcbiAgICovXG4gIGdldFRyYW5zZmVyU2lnbmF0dXJlcyh0cmFuc2ZlckluZGV4ID0gMCk6IEluZGV4ZWRTaWduYXR1cmVbXSB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHNbdHJhbnNmZXJJbmRleF0gYXMgVHJhbnNhY3Rpb25PcCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIGluZGV4IHBlciB0ZXpvcyB0cmFuc2FjdGlvbiB0eXBlLiBUaGlzIGlzIHVzZWZ1bCB0byBsb2NhdGUgc3BlY2lmaWMgb3BlcmF0aW9uc1xuICAgKiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgb3Igc2lnbiB0aGVtLlxuICAgKlxuICAgKiBAcmV0dXJucyB7e1twOiBzdHJpbmddOiBudW1iZXJbXX19IExpc3Qgb2YgaW5kZXhlcyB3aGVyZSB0aGUga2V5IGlzIHRoZSB0cmFuc2FjdGlvbiBraW5kXG4gICAqL1xuICBnZXRJbmRleGVzQnlUcmFuc2FjdGlvblR5cGUoKTogeyBba2luZDogc3RyaW5nXTogbnVtYmVyW10gfSB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2luZCA9IHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLmNvbnRlbnRzW2ldLmtpbmQ7XG4gICAgICBpbmRleGVzW2tpbmRdID0gaW5kZXhlc1traW5kXSA/IGluZGV4ZXNba2luZF0uY29uY2F0KFtpXSkgOiBbaV07XG4gICAgfVxuICAgIHJldHVybiBpbmRleGVzO1xuICB9XG59XG4iXX0=