@bitgo/abstract-utxo 10.16.0 → 10.18.0

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 (334) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +9 -13
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +28 -14
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -9
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +18 -50
  7. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +4 -5
  8. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/NamedDescriptor.js +4 -6
  10. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  11. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  12. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -38
  13. package/dist/cjs/src/descriptor/builder/builder.d.ts +2 -3
  14. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -1
  15. package/dist/cjs/src/descriptor/builder/builder.js +1 -1
  16. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -1
  17. package/dist/cjs/src/descriptor/builder/parse.js +3 -3
  18. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +2 -2
  19. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
  20. package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +1 -1
  21. package/dist/cjs/src/descriptor/descriptorWallet.d.ts +1 -1
  22. package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -1
  23. package/dist/cjs/src/descriptor/descriptorWallet.js +1 -1
  24. package/dist/cjs/src/descriptor/index.d.ts +1 -1
  25. package/dist/cjs/src/descriptor/index.d.ts.map +1 -1
  26. package/dist/cjs/src/descriptor/index.js +1 -1
  27. package/dist/cjs/src/descriptor/validatePolicy.d.ts +3 -3
  28. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -1
  29. package/dist/cjs/src/descriptor/validatePolicy.js +3 -3
  30. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  31. package/dist/cjs/src/impl/bch/bch.js +6 -38
  32. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +15 -5
  33. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -1
  34. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +43 -55
  35. package/dist/cjs/src/impl/doge/doge.d.ts +2 -1
  36. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -1
  37. package/dist/cjs/src/impl/doge/doge.js +1 -1
  38. package/dist/cjs/src/impl/ltc/ltc.d.ts +0 -1
  39. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -1
  40. package/dist/cjs/src/impl/ltc/ltc.js +3 -41
  41. package/dist/cjs/src/impl/ltc/tltc.d.ts +0 -1
  42. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -1
  43. package/dist/cjs/src/impl/ltc/tltc.js +3 -40
  44. package/dist/cjs/src/index.d.ts +2 -0
  45. package/dist/cjs/src/index.d.ts.map +1 -1
  46. package/dist/cjs/src/index.js +3 -1
  47. package/dist/cjs/src/keychains.d.ts +5 -0
  48. package/dist/cjs/src/keychains.d.ts.map +1 -1
  49. package/dist/cjs/src/keychains.js +10 -1
  50. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +2 -2
  51. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +3 -2
  52. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -1
  53. package/dist/cjs/src/offlineVault/descriptor/transaction.js +5 -8
  54. package/dist/cjs/src/recovery/RecoveryProvider.d.ts +1 -3
  55. package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -1
  56. package/dist/cjs/src/recovery/RecoveryProvider.js +1 -1
  57. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +73 -4
  58. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  59. package/dist/cjs/src/recovery/backupKeyRecovery.js +163 -129
  60. package/dist/cjs/src/recovery/crossChainRecovery.d.ts +5 -5
  61. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  62. package/dist/cjs/src/recovery/crossChainRecovery.js +22 -121
  63. package/dist/cjs/src/recovery/psbt.d.ts +8 -31
  64. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -1
  65. package/dist/cjs/src/recovery/psbt.js +14 -126
  66. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +3 -3
  67. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  68. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +17 -54
  69. package/dist/cjs/src/transaction/descriptor/index.d.ts +1 -1
  70. package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -1
  71. package/dist/cjs/src/transaction/descriptor/index.js +1 -1
  72. package/dist/cjs/src/transaction/descriptor/parse.d.ts +6 -4
  73. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  74. package/dist/cjs/src/transaction/descriptor/parse.js +24 -50
  75. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +6 -7
  76. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -1
  77. package/dist/cjs/src/transaction/descriptor/signPsbt.js +19 -18
  78. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +4 -4
  79. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  80. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +10 -38
  81. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  82. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  83. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  84. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +5 -3
  85. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -1
  86. package/dist/cjs/src/transaction/fixedScript/SigningError.js +10 -2
  87. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +2 -1
  88. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  89. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +1 -8
  90. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  91. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +8 -12
  92. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -2
  93. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  94. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +36 -11
  95. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
  96. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  97. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +4 -2
  98. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
  99. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
  100. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +1 -1
  101. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
  102. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  103. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +15 -25
  104. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +6 -5
  105. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  106. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +42 -7
  107. package/dist/cjs/src/transaction/outputDifference.d.ts +5 -1
  108. package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -1
  109. package/dist/cjs/src/transaction/outputDifference.js +6 -2
  110. package/dist/cjs/src/transaction/recipient.d.ts +5 -0
  111. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  112. package/dist/cjs/src/transaction/recipient.js +14 -1
  113. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  114. package/dist/cjs/src/transaction/signTransaction.js +10 -10
  115. package/dist/cjs/src/unspent.d.ts +55 -0
  116. package/dist/cjs/src/unspent.d.ts.map +1 -0
  117. package/dist/cjs/src/unspent.js +12 -0
  118. package/dist/cjs/src/wasmUtil.d.ts +29 -0
  119. package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
  120. package/dist/cjs/src/wasmUtil.js +87 -0
  121. package/dist/cjs/test/unit/address.d.ts +1 -1
  122. package/dist/cjs/test/unit/address.d.ts.map +1 -1
  123. package/dist/cjs/test/unit/address.js +107 -137
  124. package/dist/cjs/test/unit/bip322.js +50 -1
  125. package/dist/cjs/test/unit/coins.js +7 -2
  126. package/dist/cjs/test/unit/customSigner.js +5 -4
  127. package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +37 -4
  128. package/dist/cjs/test/unit/descriptor/builder.js +10 -4
  129. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +37 -4
  130. package/dist/cjs/test/unit/descriptor/descriptorWallet.js +40 -6
  131. package/dist/cjs/test/unit/descriptorAddress.d.ts +2 -2
  132. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  133. package/dist/cjs/test/unit/descriptorAddress.js +10 -9
  134. package/dist/cjs/test/unit/explainTransaction.js +26 -3
  135. package/dist/cjs/test/unit/keychains.js +40 -1
  136. package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
  137. package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
  138. package/dist/cjs/test/unit/postProcessPrebuild.js +62 -0
  139. package/dist/cjs/test/unit/prebuildAndSign.d.ts +0 -4
  140. package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -1
  141. package/dist/cjs/test/unit/prebuildAndSign.js +12 -31
  142. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +82 -258
  143. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
  144. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
  145. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
  146. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +41 -37
  147. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
  148. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
  149. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +186 -0
  150. package/dist/cjs/test/unit/recovery/mock.d.ts +15 -8
  151. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  152. package/dist/cjs/test/unit/recovery/mock.js +50 -77
  153. package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
  154. package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
  155. package/dist/cjs/test/unit/signTransaction.js +244 -0
  156. package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
  157. package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
  158. package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
  159. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +46 -12
  160. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -1
  161. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +38 -4
  162. package/dist/cjs/test/unit/transaction/descriptor/parse.js +22 -19
  163. package/dist/cjs/test/unit/transaction/descriptor/sign.js +60 -16
  164. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +43 -10
  165. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -2
  166. package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
  167. package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
  168. package/dist/cjs/test/unit/transaction.js +8 -226
  169. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -1
  170. package/dist/cjs/test/unit/txFormat.js +9 -9
  171. package/dist/cjs/test/unit/util/address.d.ts +13 -0
  172. package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
  173. package/dist/cjs/test/unit/util/address.js +15 -0
  174. package/dist/cjs/test/unit/util/index.d.ts +3 -0
  175. package/dist/cjs/test/unit/util/index.d.ts.map +1 -1
  176. package/dist/cjs/test/unit/util/index.js +4 -1
  177. package/dist/cjs/test/unit/util/keychains.d.ts +29 -0
  178. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -1
  179. package/dist/cjs/test/unit/util/keychains.js +51 -1
  180. package/dist/cjs/test/unit/util/nockBitGo.d.ts +8 -1
  181. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -1
  182. package/dist/cjs/test/unit/util/nockBitGo.js +17 -1
  183. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
  184. package/dist/cjs/test/unit/util/nockIndexerAPI.js +4 -37
  185. package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
  186. package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
  187. package/dist/cjs/test/unit/util/psbt.js +21 -0
  188. package/dist/cjs/test/unit/util/transaction.d.ts +8 -4
  189. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  190. package/dist/cjs/test/unit/util/transaction.js +22 -2
  191. package/dist/cjs/test/unit/util/unspents.d.ts +66 -8
  192. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  193. package/dist/cjs/test/unit/util/unspents.js +130 -15
  194. package/dist/cjs/test/unit/util/utxoCoins.d.ts +13 -0
  195. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  196. package/dist/cjs/test/unit/util/utxoCoins.js +33 -2
  197. package/dist/cjs/test/unit/wallet.js +4 -4
  198. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  199. package/dist/esm/abstractUtxoCoin.d.ts +9 -13
  200. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  201. package/dist/esm/abstractUtxoCoin.js +30 -16
  202. package/dist/esm/address/fixedScript.d.ts +4 -9
  203. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  204. package/dist/esm/address/fixedScript.js +18 -17
  205. package/dist/esm/descriptor/NamedDescriptor.d.ts +4 -5
  206. package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -1
  207. package/dist/esm/descriptor/NamedDescriptor.js +5 -7
  208. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  209. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  210. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -5
  211. package/dist/esm/descriptor/builder/builder.d.ts +2 -3
  212. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -1
  213. package/dist/esm/descriptor/builder/builder.js +1 -1
  214. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -1
  215. package/dist/esm/descriptor/builder/parse.js +3 -3
  216. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +2 -2
  217. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
  218. package/dist/esm/descriptor/createWallet/createDescriptors.js +1 -1
  219. package/dist/esm/descriptor/descriptorWallet.d.ts +1 -1
  220. package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -1
  221. package/dist/esm/descriptor/descriptorWallet.js +1 -1
  222. package/dist/esm/descriptor/index.d.ts +1 -1
  223. package/dist/esm/descriptor/index.d.ts.map +1 -1
  224. package/dist/esm/descriptor/index.js +1 -1
  225. package/dist/esm/descriptor/validatePolicy.d.ts +3 -3
  226. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -1
  227. package/dist/esm/descriptor/validatePolicy.js +3 -3
  228. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  229. package/dist/esm/impl/bch/bch.js +6 -5
  230. package/dist/esm/impl/btc/inscriptionBuilder.d.ts +15 -5
  231. package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -1
  232. package/dist/esm/impl/btc/inscriptionBuilder.js +44 -23
  233. package/dist/esm/impl/doge/doge.d.ts +2 -1
  234. package/dist/esm/impl/doge/doge.d.ts.map +1 -1
  235. package/dist/esm/impl/doge/doge.js +1 -1
  236. package/dist/esm/impl/ltc/ltc.d.ts +0 -1
  237. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -1
  238. package/dist/esm/impl/ltc/ltc.js +3 -8
  239. package/dist/esm/impl/ltc/tltc.d.ts +0 -1
  240. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -1
  241. package/dist/esm/impl/ltc/tltc.js +3 -7
  242. package/dist/esm/index.d.ts +2 -0
  243. package/dist/esm/index.d.ts.map +1 -1
  244. package/dist/esm/index.js +3 -1
  245. package/dist/esm/keychains.d.ts +5 -0
  246. package/dist/esm/keychains.d.ts.map +1 -1
  247. package/dist/esm/keychains.js +9 -1
  248. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +2 -2
  249. package/dist/esm/offlineVault/descriptor/transaction.d.ts +3 -2
  250. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -1
  251. package/dist/esm/offlineVault/descriptor/transaction.js +5 -8
  252. package/dist/esm/recovery/RecoveryProvider.d.ts +1 -3
  253. package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -1
  254. package/dist/esm/recovery/RecoveryProvider.js +1 -1
  255. package/dist/esm/recovery/backupKeyRecovery.d.ts +73 -4
  256. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  257. package/dist/esm/recovery/backupKeyRecovery.js +165 -100
  258. package/dist/esm/recovery/crossChainRecovery.d.ts +5 -5
  259. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  260. package/dist/esm/recovery/crossChainRecovery.js +24 -90
  261. package/dist/esm/recovery/psbt.d.ts +8 -31
  262. package/dist/esm/recovery/psbt.d.ts.map +1 -1
  263. package/dist/esm/recovery/psbt.js +14 -91
  264. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +3 -3
  265. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  266. package/dist/esm/transaction/descriptor/explainPsbt.js +14 -18
  267. package/dist/esm/transaction/descriptor/index.d.ts +1 -1
  268. package/dist/esm/transaction/descriptor/index.d.ts.map +1 -1
  269. package/dist/esm/transaction/descriptor/index.js +1 -1
  270. package/dist/esm/transaction/descriptor/parse.d.ts +6 -4
  271. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  272. package/dist/esm/transaction/descriptor/parse.js +22 -15
  273. package/dist/esm/transaction/descriptor/signPsbt.d.ts +6 -7
  274. package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -1
  275. package/dist/esm/transaction/descriptor/signPsbt.js +19 -18
  276. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +4 -4
  277. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  278. package/dist/esm/transaction/descriptor/verifyTransaction.js +10 -5
  279. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  280. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  281. package/dist/esm/transaction/explainTransaction.js +3 -2
  282. package/dist/esm/transaction/fixedScript/SigningError.d.ts +5 -3
  283. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -1
  284. package/dist/esm/transaction/fixedScript/SigningError.js +8 -1
  285. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +2 -1
  286. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -1
  287. package/dist/esm/transaction/fixedScript/explainTransaction.js +1 -8
  288. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  289. package/dist/esm/transaction/fixedScript/parseOutput.js +8 -12
  290. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -2
  291. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  292. package/dist/esm/transaction/fixedScript/parseTransaction.js +36 -11
  293. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +2 -2
  294. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -1
  295. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +4 -2
  296. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +1 -1
  297. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -1
  298. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +1 -1
  299. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +3 -2
  300. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  301. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +14 -24
  302. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +6 -5
  303. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  304. package/dist/esm/transaction/fixedScript/signTransaction.js +10 -8
  305. package/dist/esm/transaction/outputDifference.d.ts +5 -1
  306. package/dist/esm/transaction/outputDifference.d.ts.map +1 -1
  307. package/dist/esm/transaction/outputDifference.js +5 -2
  308. package/dist/esm/transaction/recipient.d.ts +5 -0
  309. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  310. package/dist/esm/transaction/recipient.js +13 -1
  311. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  312. package/dist/esm/transaction/signTransaction.js +10 -10
  313. package/dist/esm/unspent.d.ts +55 -0
  314. package/dist/esm/unspent.d.ts.map +1 -0
  315. package/dist/esm/unspent.js +8 -0
  316. package/dist/esm/wasmUtil.d.ts +29 -0
  317. package/dist/esm/wasmUtil.d.ts.map +1 -0
  318. package/dist/esm/wasmUtil.js +47 -0
  319. package/package.json +13 -14
  320. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +0 -2
  321. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +0 -1
  322. package/dist/cjs/test/unit/impl/btc/unit/btc.js +0 -220
  323. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +0 -4
  324. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +0 -1
  325. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +0 -10
  326. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +0 -2
  327. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +0 -1
  328. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +0 -18
  329. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +0 -2
  330. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +0 -1
  331. package/dist/cjs/test/unit/impl/ltc/unit/index.js +0 -39
  332. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +0 -1
  333. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +0 -76
  334. /package/dist/cjs/test/unit/transaction/{descriptor/outputDifference.d.ts → outputDifference.d.ts} +0 -0
@@ -0,0 +1,55 @@
1
+ import * as utxolib from '@bitgo/utxo-lib';
2
+ /**
3
+ * Unspent transaction output (UTXO) type definition
4
+ *
5
+ * This type represents an unspent transaction output, independent from utxo-lib.
6
+ * The structure matches utxolib.bitgo.Unspent but is defined locally.
7
+ *
8
+ * @property id - Format: ${txid}:${vout}. Use `parseOutputId(id)` to parse.
9
+ * @property address - The network-specific encoded address. Use `toOutputScript(address, network)` to obtain scriptPubKey.
10
+ * @property value - The amount in satoshi.
11
+ */
12
+ export interface Unspent<TNumber extends number | bigint = number> {
13
+ /**
14
+ * Format: ${txid}:${vout}.
15
+ * Use `parseOutputId(id)` to parse.
16
+ */
17
+ id: string;
18
+ /**
19
+ * The network-specific encoded address.
20
+ * Use `toOutputScript(address, network)` to obtain scriptPubKey.
21
+ */
22
+ address: string;
23
+ /**
24
+ * The amount in satoshi.
25
+ */
26
+ value: TNumber;
27
+ }
28
+ /**
29
+ * Wallet unspent type - extends Unspent with wallet-specific fields
30
+ *
31
+ * This type includes all fields from Unspent plus:
32
+ * - chain: ChainCode (chain code for wallet derivation)
33
+ * - index: number (index for wallet derivation)
34
+ */
35
+ export interface WalletUnspent<TNumber extends number | bigint = number> extends Unspent<TNumber> {
36
+ chain: utxolib.bitgo.ChainCode;
37
+ index: number;
38
+ }
39
+ /**
40
+ * Unspent with previous transaction data
41
+ *
42
+ * Extends Unspent with:
43
+ * - prevTx: Buffer (previous transaction data for legacy transactions)
44
+ */
45
+ export interface UnspentWithPrevTx<TNumber extends number | bigint = number> extends Unspent<TNumber> {
46
+ prevTx: Buffer;
47
+ }
48
+ export declare function parseOutputId(id: string): {
49
+ txid: string;
50
+ vout: number;
51
+ };
52
+ export declare function unspentSum(unspents: {
53
+ value: number | bigint;
54
+ }[]): bigint;
55
+ //# sourceMappingURL=unspent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unspent.d.ts","sourceRoot":"","sources":["../../src/unspent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,WAAW,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM;IAC/D;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,OAAO,CAAC,OAAO,CAAC;IAC/F,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,OAAO,CAAC,OAAO,CAAC;IACnG,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAGxE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,8 @@
1
+ export function parseOutputId(id) {
2
+ const [txid, vout] = id.split(':');
3
+ return { txid, vout: Number(vout) };
4
+ }
5
+ export function unspentSum(unspents) {
6
+ return unspents.reduce((sum, unspent) => sum + BigInt(unspent.value), 0n);
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bnNwZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EQSxNQUFNLFVBQVUsYUFBYSxDQUFDLEVBQVU7SUFDdEMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLFFBQXNDO0lBQy9ELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbi8qKlxuICogVW5zcGVudCB0cmFuc2FjdGlvbiBvdXRwdXQgKFVUWE8pIHR5cGUgZGVmaW5pdGlvblxuICpcbiAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIHVuc3BlbnQgdHJhbnNhY3Rpb24gb3V0cHV0LCBpbmRlcGVuZGVudCBmcm9tIHV0eG8tbGliLlxuICogVGhlIHN0cnVjdHVyZSBtYXRjaGVzIHV0eG9saWIuYml0Z28uVW5zcGVudCBidXQgaXMgZGVmaW5lZCBsb2NhbGx5LlxuICpcbiAqIEBwcm9wZXJ0eSBpZCAtIEZvcm1hdDogJHt0eGlkfToke3ZvdXR9LiBVc2UgYHBhcnNlT3V0cHV0SWQoaWQpYCB0byBwYXJzZS5cbiAqIEBwcm9wZXJ0eSBhZGRyZXNzIC0gVGhlIG5ldHdvcmstc3BlY2lmaWMgZW5jb2RlZCBhZGRyZXNzLiBVc2UgYHRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIG5ldHdvcmspYCB0byBvYnRhaW4gc2NyaXB0UHViS2V5LlxuICogQHByb3BlcnR5IHZhbHVlIC0gVGhlIGFtb3VudCBpbiBzYXRvc2hpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICAvKipcbiAgICogRm9ybWF0OiAke3R4aWR9OiR7dm91dH0uXG4gICAqIFVzZSBgcGFyc2VPdXRwdXRJZChpZClgIHRvIHBhcnNlLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuZXR3b3JrLXNwZWNpZmljIGVuY29kZWQgYWRkcmVzcy5cbiAgICogVXNlIGB0b091dHB1dFNjcmlwdChhZGRyZXNzLCBuZXR3b3JrKWAgdG8gb2J0YWluIHNjcmlwdFB1YktleS5cbiAgICovXG4gIGFkZHJlc3M6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgaW4gc2F0b3NoaS5cbiAgICovXG4gIHZhbHVlOiBUTnVtYmVyO1xufVxuXG4vKipcbiAqIFdhbGxldCB1bnNwZW50IHR5cGUgLSBleHRlbmRzIFVuc3BlbnQgd2l0aCB3YWxsZXQtc3BlY2lmaWMgZmllbGRzXG4gKlxuICogVGhpcyB0eXBlIGluY2x1ZGVzIGFsbCBmaWVsZHMgZnJvbSBVbnNwZW50IHBsdXM6XG4gKiAtIGNoYWluOiBDaGFpbkNvZGUgKGNoYWluIGNvZGUgZm9yIHdhbGxldCBkZXJpdmF0aW9uKVxuICogLSBpbmRleDogbnVtYmVyIChpbmRleCBmb3Igd2FsbGV0IGRlcml2YXRpb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjaGFpbjogdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG4gIGluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogVW5zcGVudCB3aXRoIHByZXZpb3VzIHRyYW5zYWN0aW9uIGRhdGFcbiAqXG4gKiBFeHRlbmRzIFVuc3BlbnQgd2l0aDpcbiAqIC0gcHJldlR4OiBCdWZmZXIgKHByZXZpb3VzIHRyYW5zYWN0aW9uIGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBVbnNwZW50PFROdW1iZXI+IHtcbiAgcHJldlR4OiBCdWZmZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU91dHB1dElkKGlkOiBzdHJpbmcpOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyIH0ge1xuICBjb25zdCBbdHhpZCwgdm91dF0gPSBpZC5zcGxpdCgnOicpO1xuICByZXR1cm4geyB0eGlkLCB2b3V0OiBOdW1iZXIodm91dCkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3BlbnRTdW0odW5zcGVudHM6IHsgdmFsdWU6IG51bWJlciB8IGJpZ2ludCB9W10pOiBiaWdpbnQge1xuICByZXR1cm4gdW5zcGVudHMucmVkdWNlKChzdW0sIHVuc3BlbnQpID0+IHN1bSArIEJpZ0ludCh1bnNwZW50LnZhbHVlKSwgMG4pO1xufVxuIl19
@@ -0,0 +1,29 @@
1
+ import { BIP32, ECPair, Psbt, descriptorWallet } from '@bitgo/wasm-utxo';
2
+ import * as utxolib from '@bitgo/utxo-lib';
3
+ export type BIP32Key = BIP32 | utxolib.BIP32Interface;
4
+ export type ECPairKey = ECPair | utxolib.ECPairInterface | Uint8Array;
5
+ export type UtxoLibPsbt = utxolib.Psbt | utxolib.bitgo.UtxoPsbt;
6
+ /**
7
+ * Map of descriptor name to Descriptor instance.
8
+ * Re-exported from wasm-utxo for consistency.
9
+ */
10
+ export type DescriptorMap = descriptorWallet.DescriptorMap;
11
+ /**
12
+ * Key type accepted by descriptorWallet.signWithKey
13
+ */
14
+ export type SignerKey = Parameters<typeof descriptorWallet.signWithKey>[1];
15
+ /**
16
+ * Convert a utxo-lib BIP32Interface to a wasm-utxo BIP32 instance.
17
+ * Preserves private key by using base58 serialization.
18
+ */
19
+ export declare function toWasmBIP32(key: BIP32Key): BIP32;
20
+ export declare function toWasmECPair(key: ECPairKey): ECPair;
21
+ export declare function isUtxoLibPsbt(psbt: unknown): psbt is UtxoLibPsbt;
22
+ export declare function toWasmPsbt(psbt: Psbt | UtxoLibPsbt | Uint8Array): Psbt;
23
+ /**
24
+ * Sum the `value` property of an array of objects.
25
+ */
26
+ export declare function sumValues(arr: {
27
+ value: bigint;
28
+ }[]): bigint;
29
+ //# sourceMappingURL=wasmUtil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmUtil.d.ts","sourceRoot":"","sources":["../../src/wasmUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,UAAU,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAEhE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAMhD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAWnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAEhE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAWtE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,47 @@
1
+ import { BIP32, ECPair, Psbt } from '@bitgo/wasm-utxo';
2
+ import * as utxolib from '@bitgo/utxo-lib';
3
+ /**
4
+ * Convert a utxo-lib BIP32Interface to a wasm-utxo BIP32 instance.
5
+ * Preserves private key by using base58 serialization.
6
+ */
7
+ export function toWasmBIP32(key) {
8
+ if (key instanceof BIP32) {
9
+ return key;
10
+ }
11
+ // All utxo-lib BIP32Interface instances have toBase58
12
+ return BIP32.fromBase58(key.toBase58());
13
+ }
14
+ export function toWasmECPair(key) {
15
+ if (key instanceof ECPair) {
16
+ return key;
17
+ }
18
+ if (key instanceof Uint8Array) {
19
+ return ECPair.from(key);
20
+ }
21
+ if (key.privateKey) {
22
+ return ECPair.fromPrivateKey(key.privateKey);
23
+ }
24
+ return ECPair.fromPublicKey(key.publicKey);
25
+ }
26
+ export function isUtxoLibPsbt(psbt) {
27
+ return psbt instanceof utxolib.Psbt || psbt instanceof utxolib.bitgo.UtxoPsbt;
28
+ }
29
+ export function toWasmPsbt(psbt) {
30
+ if (psbt instanceof Psbt) {
31
+ return psbt;
32
+ }
33
+ if (psbt instanceof Uint8Array) {
34
+ return Psbt.deserialize(psbt);
35
+ }
36
+ if (isUtxoLibPsbt(psbt)) {
37
+ return Psbt.deserialize(psbt.toBuffer());
38
+ }
39
+ throw new Error('Unsupported PSBT type');
40
+ }
41
+ /**
42
+ * Sum the `value` property of an array of objects.
43
+ */
44
+ export function sumValues(arr) {
45
+ return arr.reduce((sum, e) => sum + e.value, BigInt(0));
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FzbVV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFvQixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFpQjNDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBYTtJQUN2QyxJQUFJLEdBQUcsWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxzREFBc0Q7SUFDdEQsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQWM7SUFDekMsSUFBSSxHQUFHLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxHQUFHLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQWE7SUFDekMsT0FBTyxJQUFJLFlBQVksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBcUM7SUFDOUQsSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBd0I7SUFDaEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMyLCBFQ1BhaXIsIFBzYnQsIGRlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuZXhwb3J0IHR5cGUgQklQMzJLZXkgPSBCSVAzMiB8IHV0eG9saWIuQklQMzJJbnRlcmZhY2U7XG5leHBvcnQgdHlwZSBFQ1BhaXJLZXkgPSBFQ1BhaXIgfCB1dHhvbGliLkVDUGFpckludGVyZmFjZSB8IFVpbnQ4QXJyYXk7XG5leHBvcnQgdHlwZSBVdHhvTGliUHNidCA9IHV0eG9saWIuUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG5cbi8qKlxuICogTWFwIG9mIGRlc2NyaXB0b3IgbmFtZSB0byBEZXNjcmlwdG9yIGluc3RhbmNlLlxuICogUmUtZXhwb3J0ZWQgZnJvbSB3YXNtLXV0eG8gZm9yIGNvbnNpc3RlbmN5LlxuICovXG5leHBvcnQgdHlwZSBEZXNjcmlwdG9yTWFwID0gZGVzY3JpcHRvcldhbGxldC5EZXNjcmlwdG9yTWFwO1xuXG4vKipcbiAqIEtleSB0eXBlIGFjY2VwdGVkIGJ5IGRlc2NyaXB0b3JXYWxsZXQuc2lnbldpdGhLZXlcbiAqL1xuZXhwb3J0IHR5cGUgU2lnbmVyS2V5ID0gUGFyYW1ldGVyczx0eXBlb2YgZGVzY3JpcHRvcldhbGxldC5zaWduV2l0aEtleT5bMV07XG5cbi8qKlxuICogQ29udmVydCBhIHV0eG8tbGliIEJJUDMySW50ZXJmYWNlIHRvIGEgd2FzbS11dHhvIEJJUDMyIGluc3RhbmNlLlxuICogUHJlc2VydmVzIHByaXZhdGUga2V5IGJ5IHVzaW5nIGJhc2U1OCBzZXJpYWxpemF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtQklQMzIoa2V5OiBCSVAzMktleSk6IEJJUDMyIHtcbiAgaWYgKGtleSBpbnN0YW5jZW9mIEJJUDMyKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICAvLyBBbGwgdXR4by1saWIgQklQMzJJbnRlcmZhY2UgaW5zdGFuY2VzIGhhdmUgdG9CYXNlNThcbiAgcmV0dXJuIEJJUDMyLmZyb21CYXNlNTgoa2V5LnRvQmFzZTU4KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtRUNQYWlyKGtleTogRUNQYWlyS2V5KTogRUNQYWlyIHtcbiAgaWYgKGtleSBpbnN0YW5jZW9mIEVDUGFpcikge1xuICAgIHJldHVybiBrZXk7XG4gIH1cbiAgaWYgKGtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gRUNQYWlyLmZyb20oa2V5KTtcbiAgfVxuICBpZiAoa2V5LnByaXZhdGVLZXkpIHtcbiAgICByZXR1cm4gRUNQYWlyLmZyb21Qcml2YXRlS2V5KGtleS5wcml2YXRlS2V5KTtcbiAgfVxuICByZXR1cm4gRUNQYWlyLmZyb21QdWJsaWNLZXkoa2V5LnB1YmxpY0tleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9MaWJQc2J0KHBzYnQ6IHVua25vd24pOiBwc2J0IGlzIFV0eG9MaWJQc2J0IHtcbiAgcmV0dXJuIHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLlBzYnQgfHwgcHNidCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1dhc21Qc2J0KHBzYnQ6IFBzYnQgfCBVdHhvTGliUHNidCB8IFVpbnQ4QXJyYXkpOiBQc2J0IHtcbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBQc2J0KSB7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIFBzYnQuZGVzZXJpYWxpemUocHNidCk7XG4gIH1cbiAgaWYgKGlzVXR4b0xpYlBzYnQocHNidCkpIHtcbiAgICByZXR1cm4gUHNidC5kZXNlcmlhbGl6ZShwc2J0LnRvQnVmZmVyKCkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgUFNCVCB0eXBlJyk7XG59XG5cbi8qKlxuICogU3VtIHRoZSBgdmFsdWVgIHByb3BlcnR5IG9mIGFuIGFycmF5IG9mIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdW1WYWx1ZXMoYXJyOiB7IHZhbHVlOiBiaWdpbnQgfVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGFyci5yZWR1Y2UoKHN1bSwgZSkgPT4gc3VtICsgZS52YWx1ZSwgQmlnSW50KDApKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo/abstract-utxo",
3
- "version": "10.16.0",
3
+ "version": "10.18.0",
4
4
  "description": "BitGo SDK coin library for UTXO base implementation",
5
5
  "main": "./dist/cjs/src/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -27,7 +27,7 @@
27
27
  "build:cjs": "yarn tsc --build --incremental --verbose .",
28
28
  "build:esm": "yarn tsc --project tsconfig.esm.json",
29
29
  "fmt": "prettier --write .",
30
- "check-fmt": "prettier --check '**/*.{ts,js,json}'",
30
+ "check-fmt": "prettier --check '{src,test}/**/*.{ts,js,json}'",
31
31
  "clean": "rm -rf ./dist",
32
32
  "lint": "eslint --quiet .",
33
33
  "prepare": "npm run build",
@@ -38,7 +38,7 @@
38
38
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
39
39
  "license": "MIT",
40
40
  "engines": {
41
- "node": ">=20 <23"
41
+ "node": ">=20 <25"
42
42
  },
43
43
  "repository": {
44
44
  "type": "git",
@@ -60,15 +60,14 @@
60
60
  ]
61
61
  },
62
62
  "dependencies": {
63
- "@bitgo/blockapis": "^1.12.12",
64
- "@bitgo/sdk-api": "^1.73.3",
65
- "@bitgo/sdk-core": "^36.29.0",
66
- "@bitgo/secp256k1": "^1.9.0",
67
- "@bitgo/unspents": "^0.50.14",
68
- "@bitgo/utxo-core": "^1.31.0",
69
- "@bitgo/utxo-lib": "^11.19.1",
70
- "@bitgo/utxo-ord": "^1.24.1",
71
- "@bitgo/wasm-utxo": "^1.27.0",
63
+ "@bitgo/blockapis": "^1.13.0",
64
+ "@bitgo/sdk-api": "^1.74.0",
65
+ "@bitgo/sdk-core": "^36.31.0",
66
+ "@bitgo/secp256k1": "^1.10.0",
67
+ "@bitgo/utxo-core": "^1.33.0",
68
+ "@bitgo/utxo-lib": "^11.21.0",
69
+ "@bitgo/utxo-ord": "^1.26.0",
70
+ "@bitgo/wasm-utxo": "^1.36.0",
72
71
  "@types/lodash": "^4.14.121",
73
72
  "@types/superagent": "4.1.15",
74
73
  "bignumber.js": "^9.0.2",
@@ -79,8 +78,8 @@
79
78
  "superagent": "^9.0.1"
80
79
  },
81
80
  "devDependencies": {
82
- "@bitgo/sdk-test": "^9.1.24",
81
+ "@bitgo/sdk-test": "^9.1.26",
83
82
  "mocha": "^10.2.0"
84
83
  },
85
- "gitHead": "1c417c712dbd94170a6d306a4eb516755176de38"
84
+ "gitHead": "83a7782d1f719c62e132ab63b2fef30d44675226"
86
85
  }
@@ -1,2 +0,0 @@
1
- import 'should';
2
- //# sourceMappingURL=btc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"btc.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/btc/unit/btc.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -1,220 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- require("should");
40
- const assert_1 = __importDefault(require("assert"));
41
- const sdk_test_1 = require("@bitgo/sdk-test");
42
- const sdk_api_1 = require("@bitgo/sdk-api");
43
- const utxolib = __importStar(require("@bitgo/utxo-lib"));
44
- const sdk_core_1 = require("@bitgo/sdk-core");
45
- const btc_1 = require("../../../../../src/impl/btc");
46
- const fixtures_1 = require("./fixtures");
47
- describe('BTC:', () => {
48
- let bitgo;
49
- before(() => {
50
- bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
51
- bitgo.safeRegister('tbtc', btc_1.Tbtc.createInstance);
52
- bitgo.initializeTestVars();
53
- });
54
- describe('Address validation:', () => {
55
- let coin;
56
- before(() => {
57
- coin = bitgo.coin('tbtc');
58
- });
59
- it('should validate a base58 address', () => {
60
- const validBase58Address = '2Mv1fGp8gHSqsiXYG7WqcYmHZdurDGVtUbn';
61
- coin.isValidAddress(validBase58Address).should.be.true();
62
- const invalidBase58Address = '2MV1FGP8GHSQSSXYG7WQCYMHZDURDGVTUBN';
63
- coin.isValidAddress(invalidBase58Address).should.be.false();
64
- });
65
- it('should validate a bech32 address', () => {
66
- const validBech32Address = 'tb1qtxxqmkkdx4n4lcp0nt2cct89uh3h3dlcu940kw9fcqyyq36peh0st94hfp';
67
- coin.isValidAddress(validBech32Address).should.be.true();
68
- coin.isValidAddress(validBech32Address.toUpperCase()).should.be.false();
69
- });
70
- it('should validate a bech32m address', () => {
71
- // https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki#Test_vectors_for_Bech32m
72
- const validBech32mAddress = 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7';
73
- coin.isValidAddress(validBech32mAddress).should.be.true();
74
- coin.isValidAddress(validBech32mAddress.toUpperCase()).should.be.false();
75
- });
76
- });
77
- describe('Post Build Validation', () => {
78
- let coin;
79
- before(() => {
80
- coin = bitgo.coin('tbtc');
81
- });
82
- it('should not modify locktime on postProcessPrebuild', async () => {
83
- const txHex = '0100000001a8ec78f09f7acb0d344622ed3082c1a98e51ba1b1ab65406044f6e0a801609020100000000ffffffff02a0860100000000001976a9149f9a7abd600c0caa03983a77c8c3df8e062cb2fa88acfbf2150000000000220020b922cc1e737e679d24ff2d2b18cfa9fff4e35a733b4fba94282eaa1b7cfe56d200000000';
84
- const blockHeight = 100;
85
- const preBuild = { txHex, blockHeight };
86
- const postProcessBuilt = await coin.postProcessPrebuild(preBuild);
87
- const transaction = utxolib.bitgo.createTransactionFromHex(postProcessBuilt.txHex, utxolib.networks.bitcoin);
88
- transaction.locktime.should.equal(0);
89
- const inputs = transaction.ins;
90
- for (const input of inputs) {
91
- input.sequence.should.equal(0xffffffff);
92
- }
93
- });
94
- });
95
- describe('Audit Key', () => {
96
- const { key } = fixtures_1.btcBackupKey;
97
- let coin;
98
- before(() => {
99
- coin = bitgo.coin('tbtc');
100
- });
101
- it('should return for valid inputs', () => {
102
- coin.assertIsValidKey({
103
- encryptedPrv: key,
104
- walletPassphrase: 'kAm[EFQ6o=SxlcLFDw%,',
105
- });
106
- });
107
- it('should throw error if the walletPassphrase is incorrect', () => {
108
- assert_1.default.throws(() => coin.assertIsValidKey({
109
- encryptedPrv: key,
110
- walletPassphrase: 'foo',
111
- }), { message: "failed to decrypt prv: ccm: tag doesn't match" });
112
- });
113
- it('should return throw if the key is altered', () => {
114
- const alteredKey = key.replace(/[0-9]/g, '0');
115
- assert_1.default.throws(() => coin.assertIsValidKey({
116
- encryptedPrv: alteredKey,
117
- walletPassphrase: 'kAm[EFQ6o=SxlcLFDw%,',
118
- }), { message: 'failed to decrypt prv: json decrypt: invalid parameters' });
119
- });
120
- });
121
- describe('Unspent management spoofability - Consolidation (BUILD_SIGN_SEND)', () => {
122
- let coin;
123
- let bitgoTest;
124
- before(() => {
125
- bitgoTest = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
126
- bitgoTest.safeRegister('tbtc', btc_1.Tbtc.createInstance);
127
- bitgoTest.initializeTestVars();
128
- coin = bitgoTest.coin('tbtc');
129
- });
130
- it('should detect hex spoofing in BUILD_SIGN_SEND', async () => {
131
- const keyTriple = utxolib.testutil.getKeyTriple('default');
132
- const rootWalletKey = new utxolib.bitgo.RootWalletKeys(keyTriple);
133
- const [user] = keyTriple;
134
- const wallet = new sdk_core_1.Wallet(bitgoTest, coin, {
135
- id: '5b34252f1bf349930e34020a',
136
- coin: 'tbtc',
137
- keys: ['user', 'backup', 'bitgo'],
138
- });
139
- const originalPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
140
- utxolib.bitgo.addXpubsToPsbt(originalPsbt, rootWalletKey);
141
- const spoofedPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1pjgg9ty3s2ztp60v6lhgrw76f7hxydzuk9t9mjsndh3p2gf2ah7gs4850kn', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
142
- utxolib.bitgo.addXpubsToPsbt(spoofedPsbt, rootWalletKey);
143
- const spoofedHex = spoofedPsbt.toHex();
144
- const bgUrl = bitgoTest._baseUrl;
145
- const nock = require('nock');
146
- nock(bgUrl)
147
- .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/consolidateUnspents`)
148
- .reply(200, { txHex: spoofedHex, consolidateId: 'test' });
149
- nock(bgUrl)
150
- .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`)
151
- .reply((requestBody) => {
152
- if (requestBody?.txHex === spoofedHex) {
153
- throw new Error('Spoofed transaction was sent: spoofing protection failed');
154
- }
155
- return [200, { txid: 'test-txid-123', status: 'signed' }];
156
- });
157
- const pubs = keyTriple.map((k) => k.neutered().toBase58());
158
- const responses = [
159
- { pub: pubs[0], encryptedPrv: (0, sdk_api_1.encrypt)('pass', user.toBase58()) },
160
- { pub: pubs[1] },
161
- { pub: pubs[2] },
162
- ];
163
- wallet
164
- .keyIds()
165
- .forEach((id, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${id}`).reply(200, responses[i]));
166
- await assert_1.default.rejects(wallet.consolidateUnspents({ walletPassphrase: 'pass' }), (e) => typeof e?.message === 'string' &&
167
- e.message.includes('prebuild attempts to spend to unintended external recipients'));
168
- });
169
- });
170
- describe('Unspent management spoofability - Fanout (BUILD_SIGN_SEND)', () => {
171
- let coin;
172
- let bitgoTest;
173
- before(() => {
174
- bitgoTest = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
175
- bitgoTest.safeRegister('tbtc', btc_1.Tbtc.createInstance);
176
- bitgoTest.initializeTestVars();
177
- coin = bitgoTest.coin('tbtc');
178
- });
179
- it('should detect hex spoofing in fanout BUILD_SIGN_SEND', async () => {
180
- const keyTriple = utxolib.testutil.getKeyTriple('default');
181
- const rootWalletKey = new utxolib.bitgo.RootWalletKeys(keyTriple);
182
- const [user] = keyTriple;
183
- const wallet = new sdk_core_1.Wallet(bitgoTest, coin, {
184
- id: '5b34252f1bf349930e34020a',
185
- coin: 'tbtc',
186
- keys: ['user', 'backup', 'bitgo'],
187
- });
188
- const originalPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
189
- utxolib.bitgo.addXpubsToPsbt(originalPsbt, rootWalletKey);
190
- const spoofedPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(10000) }], [{ address: 'tb1pjgg9ty3s2ztp60v6lhgrw76f7hxydzuk9t9mjsndh3p2gf2ah7gs4850kn', value: BigInt(9000) }], coin.network, rootWalletKey, 'unsigned');
191
- utxolib.bitgo.addXpubsToPsbt(spoofedPsbt, rootWalletKey);
192
- const spoofedHex = spoofedPsbt.toHex();
193
- const bgUrl = bitgoTest._baseUrl;
194
- const nock = require('nock');
195
- nock(bgUrl)
196
- .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/fanoutUnspents`)
197
- .reply(200, { txHex: spoofedHex, fanoutId: 'test' });
198
- nock(bgUrl)
199
- .post(`/api/v2/${wallet.coin()}/wallet/${wallet.id()}/tx/send`)
200
- .reply((requestBody) => {
201
- if (requestBody?.txHex === spoofedHex) {
202
- throw new Error('Spoofed transaction was sent: spoofing protection failed');
203
- }
204
- return [200, { txid: 'test-txid-123', status: 'signed' }];
205
- });
206
- const pubs = keyTriple.map((k) => k.neutered().toBase58());
207
- const responses = [
208
- { pub: pubs[0], encryptedPrv: (0, sdk_api_1.encrypt)('pass', user.toBase58()) },
209
- { pub: pubs[1] },
210
- { pub: pubs[2] },
211
- ];
212
- wallet
213
- .keyIds()
214
- .forEach((id, i) => nock(bgUrl).get(`/api/v2/${wallet.coin()}/key/${id}`).reply(200, responses[i]));
215
- await assert_1.default.rejects(wallet.fanoutUnspents({ walletPassphrase: 'pass' }), (e) => typeof e?.message === 'string' &&
216
- e.message.includes('prebuild attempts to spend to unintended external recipients'));
217
- });
218
- });
219
- });
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvYnRjL3VuaXQvYnRjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0JBQWdCO0FBQ2hCLG9EQUE0QjtBQUU1Qiw4Q0FBK0Q7QUFDL0QsNENBQW1EO0FBQ25ELHlEQUEyQztBQUMzQyw4Q0FBeUM7QUFFekMscURBQW1EO0FBRW5ELHlDQUEwQztBQUUxQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUNwQixJQUFJLEtBQW1CLENBQUM7SUFFeEIsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxJQUFJLElBQVUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQVMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxrQkFBa0IsR0FBRyxxQ0FBcUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxNQUFNLG9CQUFvQixHQUFHLHFDQUFxQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtZQUMxQyxNQUFNLGtCQUFrQixHQUFHLGdFQUFnRSxDQUFDO1lBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUMzQywwRkFBMEY7WUFDMUYsTUFBTSxtQkFBbUIsR0FBRyxnRUFBZ0UsQ0FBQztZQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxJQUFJLElBQVUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQVMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRSxNQUFNLEtBQUssR0FDVCxrUUFBa1EsQ0FBQztZQUNyUSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDeEIsTUFBTSxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUN4RCxnQkFBZ0IsQ0FBQyxLQUFlLEVBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUN6QixDQUFDO1lBRUYsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDL0IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDekIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLHVCQUFZLENBQUM7UUFDN0IsSUFBSSxJQUFVLENBQUM7UUFDZixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDcEIsWUFBWSxFQUFFLEdBQUc7Z0JBQ2pCLGdCQUFnQixFQUFFLHNCQUFzQjthQUN6QyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNwQixZQUFZLEVBQUUsR0FBRztnQkFDakIsZ0JBQWdCLEVBQUUsS0FBSzthQUN4QixDQUFDLEVBQ0osRUFBRSxPQUFPLEVBQUUsK0NBQStDLEVBQUUsQ0FDN0QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtZQUNuRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3BCLFlBQVksRUFBRSxVQUFVO2dCQUN4QixnQkFBZ0IsRUFBRSxzQkFBc0I7YUFDekMsQ0FBQyxFQUNKLEVBQUUsT0FBTyxFQUFFLHlEQUF5RCxFQUFFLENBQ3ZFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtRQUNqRixJQUFJLElBQVUsQ0FBQztRQUNmLElBQUksU0FBdUIsQ0FBQztRQUM1QixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsU0FBUyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMxRCxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSyxJQUFtQixFQUFFO1lBQzVFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUV6QixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRTtnQkFDekMsRUFBRSxFQUFFLDBCQUEwQjtnQkFDOUIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQ2pELENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFDeEQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnRUFBZ0UsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDcEcsSUFBSSxDQUFDLE9BQU8sRUFDWixhQUFhLEVBQ2IsVUFBbUIsQ0FDcEIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMxRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDaEQsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUN4RCxDQUFDLEVBQUUsT0FBTyxFQUFFLGdFQUFnRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUNwRyxJQUFJLENBQUMsT0FBTyxFQUNaLGFBQWEsRUFDYixVQUFtQixDQUNwQixDQUFDO1lBQ0YsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sVUFBVSxHQUFXLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUvQyxNQUFNLEtBQUssR0FBWSxTQUFpQixDQUFDLFFBQVEsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQztpQkFDMUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUM7aUJBQzlELEtBQUssQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxXQUFXLEVBQUUsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7Z0JBQzlFLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFFTCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFBLGlCQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO2dCQUNoRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNqQixDQUFDO1lBQ0YsTUFBTTtpQkFDSCxNQUFNLEVBQUU7aUJBQ1IsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RyxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUN4RCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQ1QsT0FBTyxDQUFDLEVBQUUsT0FBTyxLQUFLLFFBQVE7Z0JBQzlCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLDhEQUE4RCxDQUFDLENBQ3JGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtRQUMxRSxJQUFJLElBQVUsQ0FBQztRQUNmLElBQUksU0FBdUIsQ0FBQztRQUM1QixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsU0FBUyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMxRCxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxVQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSyxJQUFtQixFQUFFO1lBQ25GLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUV6QixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRTtnQkFDekMsRUFBRSxFQUFFLDBCQUEwQjtnQkFDOUIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQ2pELENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFDeEQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnRUFBZ0UsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDcEcsSUFBSSxDQUFDLE9BQU8sRUFDWixhQUFhLEVBQ2IsVUFBbUIsQ0FDcEIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztZQUUxRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDaEQsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUN4RCxDQUFDLEVBQUUsT0FBTyxFQUFFLGdFQUFnRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUNwRyxJQUFJLENBQUMsT0FBTyxFQUNaLGFBQWEsRUFDYixVQUFtQixDQUNwQixDQUFDO1lBQ0YsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sVUFBVSxHQUFXLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUvQyxNQUFNLEtBQUssR0FBWSxTQUFpQixDQUFDLFFBQVEsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0IsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQztpQkFDckUsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDUixJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUM7aUJBQzlELEtBQUssQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxXQUFXLEVBQUUsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7Z0JBQzlFLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFFTCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRCxNQUFNLFNBQVMsR0FBRztnQkFDaEIsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFBLGlCQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO2dCQUNoRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNqQixDQUFDO1lBQ0YsTUFBTTtpQkFDSCxNQUFNLEVBQUU7aUJBQ1IsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RyxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFDbkQsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNULE9BQU8sQ0FBQyxFQUFFLE9BQU8sS0FBSyxRQUFRO2dCQUM5QixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyw4REFBOEQsQ0FBQyxDQUNyRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyB0eXBlIFRlc3RCaXRHb0FQSSwgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJLCBlbmNyeXB0IH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgVGJ0YyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL2J0Yyc7XG5cbmltcG9ydCB7IGJ0Y0JhY2t1cEtleSB9IGZyb20gJy4vZml4dHVyZXMnO1xuXG5kZXNjcmliZSgnQlRDOicsICgpID0+IHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG5cbiAgYmVmb3JlKCgpID0+IHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RidGMnLCBUYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgdmFsaWRhdGlvbjonLCAoKSA9PiB7XG4gICAgbGV0IGNvaW46IFRidGM7XG4gICAgYmVmb3JlKCgpID0+IHtcbiAgICAgIGNvaW4gPSBiaXRnby5jb2luKCd0YnRjJykgYXMgVGJ0YztcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBiYXNlNTggYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkQmFzZTU4QWRkcmVzcyA9ICcyTXYxZkdwOGdIU3FzaVhZRzdXcWNZbUhaZHVyREdWdFVibic7XG4gICAgICBjb2luLmlzVmFsaWRBZGRyZXNzKHZhbGlkQmFzZTU4QWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvbnN0IGludmFsaWRCYXNlNThBZGRyZXNzID0gJzJNVjFGR1A4R0hTUVNTWFlHN1dRQ1lNSFpEVVJER1ZUVUJOJztcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3MoaW52YWxpZEJhc2U1OEFkZHJlc3MpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIGJlY2gzMiBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRCZWNoMzJBZGRyZXNzID0gJ3RiMXF0eHhxbWtrZHg0bjRsY3AwbnQyY2N0ODl1aDNoM2RsY3U5NDBrdzlmY3F5eXEzNnBlaDBzdDk0aGZwJztcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRCZWNoMzJBZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgY29pbi5pc1ZhbGlkQWRkcmVzcyh2YWxpZEJlY2gzMkFkZHJlc3MudG9VcHBlckNhc2UoKSkuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgYmVjaDMybSBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM1MC5tZWRpYXdpa2kjVGVzdF92ZWN0b3JzX2Zvcl9CZWNoMzJtXG4gICAgICBjb25zdCB2YWxpZEJlY2gzMm1BZGRyZXNzID0gJ3RiMXFycDMzZzBxNWM1dHhzcDlhcnlzcng0azZ6ZGtmczRuY2U0eGowZ2RjY2NlZnZweXN4ZjNxMHNsNWs3JztcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRCZWNoMzJtQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGNvaW4uaXNWYWxpZEFkZHJlc3ModmFsaWRCZWNoMzJtQWRkcmVzcy50b1VwcGVyQ2FzZSgpKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Bvc3QgQnVpbGQgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBsZXQgY29pbjogVGJ0YztcbiAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKSBhcyBUYnRjO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbW9kaWZ5IGxvY2t0aW1lIG9uIHBvc3RQcm9jZXNzUHJlYnVpbGQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICcwMTAwMDAwMDAxYThlYzc4ZjA5ZjdhY2IwZDM0NDYyMmVkMzA4MmMxYTk4ZTUxYmExYjFhYjY1NDA2MDQ0ZjZlMGE4MDE2MDkwMjAxMDAwMDAwMDBmZmZmZmZmZjAyYTA4NjAxMDAwMDAwMDAwMDE5NzZhOTE0OWY5YTdhYmQ2MDBjMGNhYTAzOTgzYTc3YzhjM2RmOGUwNjJjYjJmYTg4YWNmYmYyMTUwMDAwMDAwMDAwMjIwMDIwYjkyMmNjMWU3MzdlNjc5ZDI0ZmYyZDJiMThjZmE5ZmZmNGUzNWE3MzNiNGZiYTk0MjgyZWFhMWI3Y2ZlNTZkMjAwMDAwMDAwJztcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gMTAwO1xuICAgICAgY29uc3QgcHJlQnVpbGQgPSB7IHR4SGV4LCBibG9ja0hlaWdodCB9O1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NCdWlsdCA9IGF3YWl0IGNvaW4ucG9zdFByb2Nlc3NQcmVidWlsZChwcmVCdWlsZCk7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4KFxuICAgICAgICBwb3N0UHJvY2Vzc0J1aWx0LnR4SGV4IGFzIHN0cmluZyxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuXG4gICAgICB0cmFuc2FjdGlvbi5sb2NrdGltZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICBjb25zdCBpbnB1dHMgPSB0cmFuc2FjdGlvbi5pbnM7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuICAgICAgICBpbnB1dC5zZXF1ZW5jZS5zaG91bGQuZXF1YWwoMHhmZmZmZmZmZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBdWRpdCBLZXknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGJ0Y0JhY2t1cEtleTtcbiAgICBsZXQgY29pbjogVGJ0YztcbiAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgY29pbiA9IGJpdGdvLmNvaW4oJ3RidGMnKSBhcyBUYnRjO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZm9yIHZhbGlkIGlucHV0cycsICgpID0+IHtcbiAgICAgIGNvaW4uYXNzZXJ0SXNWYWxpZEtleSh7XG4gICAgICAgIGVuY3J5cHRlZFBydjoga2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiAna0FtW0VGUTZvPVN4bGNMRkR3JSwnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGlmIHRoZSB3YWxsZXRQYXNzcGhyYXNlIGlzIGluY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgY29pbi5hc3NlcnRJc1ZhbGlkS2V5KHtcbiAgICAgICAgICAgIGVuY3J5cHRlZFBydjoga2V5LFxuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2ZvbycsXG4gICAgICAgICAgfSksXG4gICAgICAgIHsgbWVzc2FnZTogXCJmYWlsZWQgdG8gZGVjcnlwdCBwcnY6IGNjbTogdGFnIGRvZXNuJ3QgbWF0Y2hcIiB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhyb3cgaWYgdGhlIGtleSBpcyBhbHRlcmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWx0ZXJlZEtleSA9IGtleS5yZXBsYWNlKC9bMC05XS9nLCAnMCcpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBjb2luLmFzc2VydElzVmFsaWRLZXkoe1xuICAgICAgICAgICAgZW5jcnlwdGVkUHJ2OiBhbHRlcmVkS2V5LFxuICAgICAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogJ2tBbVtFRlE2bz1TeGxjTEZEdyUsJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgeyBtZXNzYWdlOiAnZmFpbGVkIHRvIGRlY3J5cHQgcHJ2OiBqc29uIGRlY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVycycgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Vuc3BlbnQgbWFuYWdlbWVudCBzcG9vZmFiaWxpdHkgLSBDb25zb2xpZGF0aW9uIChCVUlMRF9TSUdOX1NFTkQpJywgKCkgPT4ge1xuICAgIGxldCBjb2luOiBUYnRjO1xuICAgIGxldCBiaXRnb1Rlc3Q6IFRlc3RCaXRHb0FQSTtcbiAgICBiZWZvcmUoKCkgPT4ge1xuICAgICAgYml0Z29UZXN0ID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgICAgYml0Z29UZXN0LnNhZmVSZWdpc3RlcigndGJ0YycsIFRidGMuY3JlYXRlSW5zdGFuY2UpO1xuICAgICAgYml0Z29UZXN0LmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgICAgY29pbiA9IGJpdGdvVGVzdC5jb2luKCd0YnRjJykgYXMgVGJ0YztcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhleCBzcG9vZmluZyBpbiBCVUlMRF9TSUdOX1NFTkQnLCBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBrZXlUcmlwbGUgPSB1dHhvbGliLnRlc3R1dGlsLmdldEtleVRyaXBsZSgnZGVmYXVsdCcpO1xuICAgICAgY29uc3Qgcm9vdFdhbGxldEtleSA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleVRyaXBsZSk7XG4gICAgICBjb25zdCBbdXNlcl0gPSBrZXlUcmlwbGU7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z29UZXN0LCBjb2luLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxQc2J0ID0gdXR4b2xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnIGFzIGNvbnN0LCB2YWx1ZTogQmlnSW50KDEwMDAwKSB9XSxcbiAgICAgICAgW3sgYWRkcmVzczogJ3RiMXFycDMzZzBxNWM1dHhzcDlhcnlzcng0azZ6ZGtmczRuY2U0eGowZ2RjY2NlZnZweXN4ZjNxMHNsNWs3JywgdmFsdWU6IEJpZ0ludCg5MDAwKSB9XSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICByb290V2FsbGV0S2V5LFxuICAgICAgICAndW5zaWduZWQnIGFzIGNvbnN0XG4gICAgICApO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChvcmlnaW5hbFBzYnQsIHJvb3RXYWxsZXRLZXkpO1xuICAgICAgY29uc3Qgc3Bvb2ZlZFBzYnQgPSB1dHhvbGliLnRlc3R1dGlsLmNvbnN0cnVjdFBzYnQoXG4gICAgICAgIFt7IHNjcmlwdFR5cGU6ICdwMndzaCcgYXMgY29uc3QsIHZhbHVlOiBCaWdJbnQoMTAwMDApIH1dLFxuICAgICAgICBbeyBhZGRyZXNzOiAndGIxcGpnZzl0eTNzMnp0cDYwdjZsaGdydzc2ZjdoeHlkenVrOXQ5bWpzbmRoM3AyZ2YyYWg3Z3M0ODUwa24nLCB2YWx1ZTogQmlnSW50KDkwMDApIH1dLFxuICAgICAgICBjb2luLm5ldHdvcmssXG4gICAgICAgIHJvb3RXYWxsZXRLZXksXG4gICAgICAgICd1bnNpZ25lZCcgYXMgY29uc3RcbiAgICAgICk7XG4gICAgICB1dHhvbGliLmJpdGdvLmFkZFhwdWJzVG9Qc2J0KHNwb29mZWRQc2J0LCByb290V2FsbGV0S2V5KTtcbiAgICAgIGNvbnN0IHNwb29mZWRIZXg6IHN0cmluZyA9IHNwb29mZWRQc2J0LnRvSGV4KCk7XG5cbiAgICAgIGNvbnN0IGJnVXJsOiBzdHJpbmcgPSAoYml0Z29UZXN0IGFzIGFueSkuX2Jhc2VVcmw7XG4gICAgICBjb25zdCBub2NrID0gcmVxdWlyZSgnbm9jaycpO1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS9jb25zb2xpZGF0ZVVuc3BlbnRzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0eEhleDogc3Bvb2ZlZEhleCwgY29uc29saWRhdGVJZDogJ3Rlc3QnIH0pO1xuXG4gICAgICBub2NrKGJnVXJsKVxuICAgICAgICAucG9zdChgL2FwaS92Mi8ke3dhbGxldC5jb2luKCl9L3dhbGxldC8ke3dhbGxldC5pZCgpfS90eC9zZW5kYClcbiAgICAgICAgLnJlcGx5KChyZXF1ZXN0Qm9keTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcXVlc3RCb2R5Py50eEhleCA9PT0gc3Bvb2ZlZEhleCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcG9vZmVkIHRyYW5zYWN0aW9uIHdhcyBzZW50OiBzcG9vZmluZyBwcm90ZWN0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gWzIwMCwgeyB0eGlkOiAndGVzdC10eGlkLTEyMycsIHN0YXR1czogJ3NpZ25lZCcgfV07XG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwdWJzID0ga2V5VHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgY29uc3QgcmVzcG9uc2VzID0gW1xuICAgICAgICB7IHB1YjogcHVic1swXSwgZW5jcnlwdGVkUHJ2OiBlbmNyeXB0KCdwYXNzJywgdXNlci50b0Jhc2U1OCgpKSB9LFxuICAgICAgICB7IHB1YjogcHVic1sxXSB9LFxuICAgICAgICB7IHB1YjogcHVic1syXSB9LFxuICAgICAgXTtcbiAgICAgIHdhbGxldFxuICAgICAgICAua2V5SWRzKClcbiAgICAgICAgLmZvckVhY2goKGlkLCBpKSA9PiBub2NrKGJnVXJsKS5nZXQoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS9rZXkvJHtpZH1gKS5yZXBseSgyMDAsIHJlc3BvbnNlc1tpXSkpO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgd2FsbGV0LmNvbnNvbGlkYXRlVW5zcGVudHMoeyB3YWxsZXRQYXNzcGhyYXNlOiAncGFzcycgfSksXG4gICAgICAgIChlOiBhbnkpID0+XG4gICAgICAgICAgdHlwZW9mIGU/Lm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZS5tZXNzYWdlLmluY2x1ZGVzKCdwcmVidWlsZCBhdHRlbXB0cyB0byBzcGVuZCB0byB1bmludGVuZGVkIGV4dGVybmFsIHJlY2lwaWVudHMnKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Vuc3BlbnQgbWFuYWdlbWVudCBzcG9vZmFiaWxpdHkgLSBGYW5vdXQgKEJVSUxEX1NJR05fU0VORCknLCAoKSA9PiB7XG4gICAgbGV0IGNvaW46IFRidGM7XG4gICAgbGV0IGJpdGdvVGVzdDogVGVzdEJpdEdvQVBJO1xuICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICBiaXRnb1Rlc3QgPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgICBiaXRnb1Rlc3Quc2FmZVJlZ2lzdGVyKCd0YnRjJywgVGJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgICBiaXRnb1Rlc3QuaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgICBjb2luID0gYml0Z29UZXN0LmNvaW4oJ3RidGMnKSBhcyBUYnRjO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgaGV4IHNwb29maW5nIGluIGZhbm91dCBCVUlMRF9TSUdOX1NFTkQnLCBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBrZXlUcmlwbGUgPSB1dHhvbGliLnRlc3R1dGlsLmdldEtleVRyaXBsZSgnZGVmYXVsdCcpO1xuICAgICAgY29uc3Qgcm9vdFdhbGxldEtleSA9IG5ldyB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKGtleVRyaXBsZSk7XG4gICAgICBjb25zdCBbdXNlcl0gPSBrZXlUcmlwbGU7XG5cbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z29UZXN0LCBjb2luLCB7XG4gICAgICAgIGlkOiAnNWIzNDI1MmYxYmYzNDk5MzBlMzQwMjBhJyxcbiAgICAgICAgY29pbjogJ3RidGMnLFxuICAgICAgICBrZXlzOiBbJ3VzZXInLCAnYmFja3VwJywgJ2JpdGdvJ10sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxQc2J0ID0gdXR4b2xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KFxuICAgICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnIGFzIGNvbnN0LCB2YWx1ZTogQmlnSW50KDEwMDAwKSB9XSxcbiAgICAgICAgW3sgYWRkcmVzczogJ3RiMXFycDMzZzBxNWM1dHhzcDlhcnlzcng0azZ6ZGtmczRuY2U0eGowZ2RjY2NlZnZweXN4ZjNxMHNsNWs3JywgdmFsdWU6IEJpZ0ludCg5MDAwKSB9XSxcbiAgICAgICAgY29pbi5uZXR3b3JrLFxuICAgICAgICByb290V2FsbGV0S2V5LFxuICAgICAgICAndW5zaWduZWQnIGFzIGNvbnN0XG4gICAgICApO1xuICAgICAgdXR4b2xpYi5iaXRnby5hZGRYcHVic1RvUHNidChvcmlnaW5hbFBzYnQsIHJvb3RXYWxsZXRLZXkpO1xuXG4gICAgICBjb25zdCBzcG9vZmVkUHNidCA9IHV0eG9saWIudGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgICAgW3sgc2NyaXB0VHlwZTogJ3Ayd3NoJyBhcyBjb25zdCwgdmFsdWU6IEJpZ0ludCgxMDAwMCkgfV0sXG4gICAgICAgIFt7IGFkZHJlc3M6ICd0YjFwamdnOXR5M3MyenRwNjB2NmxoZ3J3NzZmN2h4eWR6dWs5dDltanNuZGgzcDJnZjJhaDdnczQ4NTBrbicsIHZhbHVlOiBCaWdJbnQoOTAwMCkgfV0sXG4gICAgICAgIGNvaW4ubmV0d29yayxcbiAgICAgICAgcm9vdFdhbGxldEtleSxcbiAgICAgICAgJ3Vuc2lnbmVkJyBhcyBjb25zdFxuICAgICAgKTtcbiAgICAgIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQoc3Bvb2ZlZFBzYnQsIHJvb3RXYWxsZXRLZXkpO1xuICAgICAgY29uc3Qgc3Bvb2ZlZEhleDogc3RyaW5nID0gc3Bvb2ZlZFBzYnQudG9IZXgoKTtcblxuICAgICAgY29uc3QgYmdVcmw6IHN0cmluZyA9IChiaXRnb1Rlc3QgYXMgYW55KS5fYmFzZVVybDtcbiAgICAgIGNvbnN0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5cbiAgICAgIG5vY2soYmdVcmwpXG4gICAgICAgIC5wb3N0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0vd2FsbGV0LyR7d2FsbGV0LmlkKCl9L2Zhbm91dFVuc3BlbnRzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgeyB0eEhleDogc3Bvb2ZlZEhleCwgZmFub3V0SWQ6ICd0ZXN0JyB9KTtcblxuICAgICAgbm9jayhiZ1VybClcbiAgICAgICAgLnBvc3QoYC9hcGkvdjIvJHt3YWxsZXQuY29pbigpfS93YWxsZXQvJHt3YWxsZXQuaWQoKX0vdHgvc2VuZGApXG4gICAgICAgIC5yZXBseSgocmVxdWVzdEJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXF1ZXN0Qm9keT8udHhIZXggPT09IHNwb29mZWRIZXgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3Bvb2ZlZCB0cmFuc2FjdGlvbiB3YXMgc2VudDogc3Bvb2ZpbmcgcHJvdGVjdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFsyMDAsIHsgdHhpZDogJ3Rlc3QtdHhpZC0xMjMnLCBzdGF0dXM6ICdzaWduZWQnIH1dO1xuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgcHVicyA9IGtleVRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtcbiAgICAgICAgeyBwdWI6IHB1YnNbMF0sIGVuY3J5cHRlZFBydjogZW5jcnlwdCgncGFzcycsIHVzZXIudG9CYXNlNTgoKSkgfSxcbiAgICAgICAgeyBwdWI6IHB1YnNbMV0gfSxcbiAgICAgICAgeyBwdWI6IHB1YnNbMl0gfSxcbiAgICAgIF07XG4gICAgICB3YWxsZXRcbiAgICAgICAgLmtleUlkcygpXG4gICAgICAgIC5mb3JFYWNoKChpZCwgaSkgPT4gbm9jayhiZ1VybCkuZ2V0KGAvYXBpL3YyLyR7d2FsbGV0LmNvaW4oKX0va2V5LyR7aWR9YCkucmVwbHkoMjAwLCByZXNwb25zZXNbaV0pKTtcblxuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIHdhbGxldC5mYW5vdXRVbnNwZW50cyh7IHdhbGxldFBhc3NwaHJhc2U6ICdwYXNzJyB9KSxcbiAgICAgICAgKGU6IGFueSkgPT5cbiAgICAgICAgICB0eXBlb2YgZT8ubWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3ByZWJ1aWxkIGF0dGVtcHRzIHRvIHNwZW5kIHRvIHVuaW50ZW5kZWQgZXh0ZXJuYWwgcmVjaXBpZW50cycpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,4 +0,0 @@
1
- export declare const btcBackupKey: {
2
- key: string;
3
- };
4
- //# sourceMappingURL=btcBackupKey.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"btcBackupKey.d.ts","sourceRoot":"","sources":["../../../../../../../../test/unit/impl/btc/unit/fixtures/btcBackupKey.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;CAMxB,CAAC"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.btcBackupKey = void 0;
4
- exports.btcBackupKey = {
5
- key: '{"iv":"JgqqE4W45/tKBSMSYqD+qg==","v":1,"iter":10000,"ks":256,"ts":64,"mode"' +
6
- ':"ccm","adata":"","cipher":"aes","salt":"kiLPf8VSdI0=","ct":"zUh4Oko/06g02E' +
7
- 'wnqOfzJbTwtE2p3b19jDk8Tum07Jv3N/RP7Bo0w/ObLBO1uIJFossO3nJ1JS+7t/vPQhdCtN8oD' +
8
- '6YrZnEZYrRwN6JQkL1uYPnZ1PoWbYI9navK5CLU1KQwDTO9YEN46++OrzFH+CjpQVLblaw="}',
9
- };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRjQmFja3VwS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvYnRjL3VuaXQvZml4dHVyZXMvYnRjQmFja3VwS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsWUFBWSxHQUFHO0lBQzFCLEdBQUcsRUFDRCw2RUFBNkU7UUFDN0UsNkVBQTZFO1FBQzdFLDZFQUE2RTtRQUM3RSwyRUFBMkU7Q0FDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBidGNCYWNrdXBLZXkgPSB7XG4gIGtleTpcbiAgICAne1wiaXZcIjpcIkpncXFFNFc0NS90S0JTTVNZcUQrcWc9PVwiLFwidlwiOjEsXCJpdGVyXCI6MTAwMDAsXCJrc1wiOjI1NixcInRzXCI6NjQsXCJtb2RlXCInICtcbiAgICAnOlwiY2NtXCIsXCJhZGF0YVwiOlwiXCIsXCJjaXBoZXJcIjpcImFlc1wiLFwic2FsdFwiOlwia2lMUGY4VlNkSTA9XCIsXCJjdFwiOlwielVoNE9rby8wNmcwMkUnICtcbiAgICAnd25xT2Z6SmJUd3RFMnAzYjE5akRrOFR1bTA3SnYzTi9SUDdCbzB3L09iTEJPMXVJSkZvc3NPM25KMUpTKzd0L3ZQUWhkQ3ROOG9EJyArXG4gICAgJzZZclpuRVpZclJ3TjZKUWtMMXVZUG5aMVBvV2JZSTluYXZLNUNMVTFLUXdEVE85WUVONDYrK09yekZIK0NqcFFWTGJsYXc9XCJ9Jyxcbn07XG4iXX0=
@@ -1,2 +0,0 @@
1
- export * from './btcBackupKey';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../test/unit/impl/btc/unit/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./btcBackupKey"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC9idGMvdW5pdC9maXh0dXJlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idGNCYWNrdXBLZXknO1xuIl19
@@ -1,2 +0,0 @@
1
- import 'should';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/ltc/unit/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- require("should");
4
- const sdk_test_1 = require("@bitgo/sdk-test");
5
- const sdk_api_1 = require("@bitgo/sdk-api");
6
- const ltc_1 = require("../../../../../src/impl/ltc");
7
- describe('Litecoin:', function () {
8
- const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
9
- bitgo.initializeTestVars();
10
- bitgo.safeRegister('ltc', ltc_1.Ltc.createInstance);
11
- bitgo.safeRegister('tltc', ltc_1.Tltc.createInstance);
12
- const ltc = bitgo.coin('ltc');
13
- const tltc = bitgo.coin('tltc');
14
- describe('should validate addresses', () => {
15
- it('should validate base58 addresses', () => {
16
- // known valid main and testnet base58 address are valid
17
- ltc.isValidAddress('MH6J1PzpsAfapZek7QGHv2mheUxnP8Kdek').should.be.true();
18
- tltc.isValidAddress('QWC1miKKHFikbwg2iyt8KZBGsTSEBKr21i').should.be.true();
19
- // malformed base58 addresses are invalid
20
- ltc.isValidAddress('MH6J1PzpsAfapZek7QGHv2mheUxnP8Kder').should.be.false();
21
- tltc.isValidAddress('QWC1miKKHFikbwg2iyt8KZBGsTSEBKr21l').should.be.false();
22
- });
23
- it('should validate bech32 addresses', () => {
24
- // all lower case is valid
25
- ltc.isValidAddress('ltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3wspfryg7').should.be.true();
26
- tltc.isValidAddress('tltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3ws2x86ht').should.be.true();
27
- // all upper case is valid
28
- ltc.isValidAddress('LTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WSPFRYG7').should.be.false();
29
- tltc.isValidAddress('TLTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WS2X86HT').should.be.false();
30
- // mixed case is invalid
31
- ltc.isValidAddress('LTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WSPFRYg7').should.be.false();
32
- tltc.isValidAddress('TLTC1QQ7FZT3EK5EGE3V92WH0Q6WZCJR39PQSWLPE36MU28F6YUFARK3WS2X86Ht').should.be.false();
33
- // malformed addresses are invalid
34
- ltc.isValidAddress('ltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3wspfryg9').should.be.false();
35
- tltc.isValidAddress('tltc1qq7fzt3ek5ege3v92wh0q6wzcjr39pqswlpe36mu28f6yufark3ws2x86hl').should.be.false();
36
- });
37
- });
38
- });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC9sdGMvdW5pdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQiw4Q0FBMEQ7QUFDMUQsNENBQTBDO0FBRTFDLHFEQUF3RDtBQUV4RCxRQUFRLENBQUMsV0FBVyxFQUFFO0lBQ3BCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVoRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBUSxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFTLENBQUM7SUFFeEMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtRQUN6QyxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLHdEQUF3RDtZQUN4RCxHQUFHLENBQUMsY0FBYyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRSxJQUFJLENBQUMsY0FBYyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRSx5Q0FBeUM7WUFDekMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLDBCQUEwQjtZQUMxQixHQUFHLENBQUMsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2RyxJQUFJLENBQUMsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RywwQkFBMEI7WUFDMUIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUcsd0JBQXdCO1lBQ3hCLEdBQUcsQ0FBQyxjQUFjLENBQUMsaUVBQWlFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxjQUFjLENBQUMsa0VBQWtFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFHLGtDQUFrQztZQUNsQyxHQUFHLENBQUMsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4RyxJQUFJLENBQUMsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1RyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRlc3RCaXRHb0FQSSwgVGVzdEJpdEdvIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuXG5pbXBvcnQgeyBMdGMsIFRsdGMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC9sdGMnO1xuXG5kZXNjcmliZSgnTGl0ZWNvaW46JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBiaXRnbzogVGVzdEJpdEdvQVBJID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgYml0Z28uc2FmZVJlZ2lzdGVyKCdsdGMnLCBMdGMuY3JlYXRlSW5zdGFuY2UpO1xuICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RsdGMnLCBUbHRjLmNyZWF0ZUluc3RhbmNlKTtcblxuICBjb25zdCBsdGMgPSBiaXRnby5jb2luKCdsdGMnKSBhcyBMdGM7XG4gIGNvbnN0IHRsdGMgPSBiaXRnby5jb2luKCd0bHRjJykgYXMgVGx0YztcblxuICBkZXNjcmliZSgnc2hvdWxkIHZhbGlkYXRlIGFkZHJlc3NlcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGJhc2U1OCBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICAvLyBrbm93biB2YWxpZCBtYWluIGFuZCB0ZXN0bmV0IGJhc2U1OCBhZGRyZXNzIGFyZSB2YWxpZFxuICAgICAgbHRjLmlzVmFsaWRBZGRyZXNzKCdNSDZKMVB6cHNBZmFwWmVrN1FHSHYybWhlVXhuUDhLZGVrJykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHRsdGMuaXNWYWxpZEFkZHJlc3MoJ1FXQzFtaUtLSEZpa2J3ZzJpeXQ4S1pCR3NUU0VCS3IyMWknKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgLy8gbWFsZm9ybWVkIGJhc2U1OCBhZGRyZXNzZXMgYXJlIGludmFsaWRcbiAgICAgIGx0Yy5pc1ZhbGlkQWRkcmVzcygnTUg2SjFQenBzQWZhcFplazdRR0h2Mm1oZVV4blA4S2RlcicpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgdGx0Yy5pc1ZhbGlkQWRkcmVzcygnUVdDMW1pS0tIRmlrYndnMml5dDhLWkJHc1RTRUJLcjIxbCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYmVjaDMyIGFkZHJlc3NlcycsICgpID0+IHtcbiAgICAgIC8vIGFsbCBsb3dlciBjYXNlIGlzIHZhbGlkXG4gICAgICBsdGMuaXNWYWxpZEFkZHJlc3MoJ2x0YzFxcTdmenQzZWs1ZWdlM3Y5MndoMHE2d3pjanIzOXBxc3dscGUzNm11MjhmNnl1ZmFyazN3c3BmcnlnNycpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICB0bHRjLmlzVmFsaWRBZGRyZXNzKCd0bHRjMXFxN2Z6dDNlazVlZ2Uzdjkyd2gwcTZ3emNqcjM5cHFzd2xwZTM2bXUyOGY2eXVmYXJrM3dzMng4Nmh0Jykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIC8vIGFsbCB1cHBlciBjYXNlIGlzIHZhbGlkXG4gICAgICBsdGMuaXNWYWxpZEFkZHJlc3MoJ0xUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXU1BGUllHNycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgdGx0Yy5pc1ZhbGlkQWRkcmVzcygnVExUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXUzJYODZIVCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgLy8gbWl4ZWQgY2FzZSBpcyBpbnZhbGlkXG4gICAgICBsdGMuaXNWYWxpZEFkZHJlc3MoJ0xUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXU1BGUllnNycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgdGx0Yy5pc1ZhbGlkQWRkcmVzcygnVExUQzFRUTdGWlQzRUs1RUdFM1Y5MldIMFE2V1pDSlIzOVBRU1dMUEUzNk1VMjhGNllVRkFSSzNXUzJYODZIdCcpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgLy8gbWFsZm9ybWVkIGFkZHJlc3NlcyBhcmUgaW52YWxpZFxuICAgICAgbHRjLmlzVmFsaWRBZGRyZXNzKCdsdGMxcXE3Znp0M2VrNWVnZTN2OTJ3aDBxNnd6Y2pyMzlwcXN3bHBlMzZtdTI4ZjZ5dWZhcmszd3NwZnJ5ZzknKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIHRsdGMuaXNWYWxpZEFkZHJlc3MoJ3RsdGMxcXE3Znp0M2VrNWVnZTN2OTJ3aDBxNnd6Y2pyMzlwcXN3bHBlMzZtdTI4ZjZ5dWZhcmszd3MyeDg2aGwnKS5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"outputDifference.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/descriptor/outputDifference.ts"],"names":[],"mappings":""}