@btc-vision/bitcoin 6.5.5 → 7.0.0-alpha.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 (457) hide show
  1. package/AUDIT/README.md +9 -0
  2. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  3. package/SECURITY.md +27 -0
  4. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  5. package/benchmark/signing.bench.ts +147 -0
  6. package/browser/address.d.ts +56 -9
  7. package/browser/address.d.ts.map +1 -0
  8. package/browser/bech32utils.d.ts +9 -1
  9. package/browser/bech32utils.d.ts.map +1 -0
  10. package/browser/bip66.d.ts +11 -6
  11. package/browser/bip66.d.ts.map +1 -0
  12. package/browser/block.d.ts +117 -11
  13. package/browser/block.d.ts.map +1 -0
  14. package/browser/branded.d.ts +20 -0
  15. package/browser/branded.d.ts.map +1 -0
  16. package/browser/crypto/crypto.d.ts +1 -0
  17. package/browser/crypto/crypto.d.ts.map +1 -0
  18. package/browser/crypto.d.ts +46 -7
  19. package/browser/crypto.d.ts.map +1 -0
  20. package/browser/ecc/context.d.ts +129 -0
  21. package/browser/ecc/context.d.ts.map +1 -0
  22. package/browser/ecc/index.d.ts +11 -0
  23. package/browser/ecc/index.d.ts.map +1 -0
  24. package/browser/ecc/types.d.ts +128 -0
  25. package/browser/ecc/types.d.ts.map +1 -0
  26. package/browser/ecpair.d.ts +99 -0
  27. package/browser/errors.d.ts +124 -0
  28. package/browser/errors.d.ts.map +1 -0
  29. package/browser/index.d.ts +32 -5
  30. package/browser/index.d.ts.map +1 -0
  31. package/browser/index.js +12482 -101
  32. package/browser/io/BinaryReader.d.ts +276 -0
  33. package/browser/io/BinaryReader.d.ts.map +1 -0
  34. package/browser/io/BinaryWriter.d.ts +391 -0
  35. package/browser/io/BinaryWriter.d.ts.map +1 -0
  36. package/browser/io/MemoryPool.d.ts +220 -0
  37. package/browser/io/MemoryPool.d.ts.map +1 -0
  38. package/browser/io/base64.d.ts +13 -0
  39. package/browser/io/base64.d.ts.map +1 -0
  40. package/browser/io/hex.d.ts +67 -0
  41. package/browser/io/hex.d.ts.map +1 -0
  42. package/browser/io/index.d.ts +17 -0
  43. package/browser/io/index.d.ts.map +1 -0
  44. package/browser/io/utils.d.ts +199 -0
  45. package/browser/io/utils.d.ts.map +1 -0
  46. package/browser/merkle.d.ts +10 -1
  47. package/browser/merkle.d.ts.map +1 -0
  48. package/browser/networks.d.ts +70 -9
  49. package/browser/networks.d.ts.map +1 -0
  50. package/browser/opcodes.d.ts +1 -0
  51. package/browser/opcodes.d.ts.map +1 -0
  52. package/browser/payments/bip341.d.ts +35 -9
  53. package/browser/payments/bip341.d.ts.map +1 -0
  54. package/browser/payments/embed.d.ts +112 -1
  55. package/browser/payments/embed.d.ts.map +1 -0
  56. package/browser/payments/index.d.ts +17 -10
  57. package/browser/payments/index.d.ts.map +1 -0
  58. package/browser/payments/p2ms.d.ts +150 -0
  59. package/browser/payments/p2ms.d.ts.map +1 -0
  60. package/browser/payments/p2op.d.ts +150 -24
  61. package/browser/payments/p2op.d.ts.map +1 -0
  62. package/browser/payments/p2pk.d.ts +154 -1
  63. package/browser/payments/p2pk.d.ts.map +1 -0
  64. package/browser/payments/p2pkh.d.ts +176 -1
  65. package/browser/payments/p2pkh.d.ts.map +1 -0
  66. package/browser/payments/p2sh.d.ts +150 -1
  67. package/browser/payments/p2sh.d.ts.map +1 -0
  68. package/browser/payments/p2tr.d.ts +185 -1
  69. package/browser/payments/p2tr.d.ts.map +1 -0
  70. package/browser/payments/p2wpkh.d.ts +161 -1
  71. package/browser/payments/p2wpkh.d.ts.map +1 -0
  72. package/browser/payments/p2wsh.d.ts +146 -1
  73. package/browser/payments/p2wsh.d.ts.map +1 -0
  74. package/browser/payments/types.d.ts +94 -64
  75. package/browser/payments/types.d.ts.map +1 -0
  76. package/browser/psbt/bip371.d.ts +34 -8
  77. package/browser/psbt/bip371.d.ts.map +1 -0
  78. package/browser/psbt/psbtutils.d.ts +56 -16
  79. package/browser/psbt/psbtutils.d.ts.map +1 -0
  80. package/browser/psbt/types.d.ts +245 -0
  81. package/browser/psbt/types.d.ts.map +1 -0
  82. package/browser/psbt/utils.d.ts +64 -0
  83. package/browser/psbt/utils.d.ts.map +1 -0
  84. package/browser/psbt/validation.d.ts +84 -0
  85. package/browser/psbt/validation.d.ts.map +1 -0
  86. package/browser/psbt.d.ts +82 -118
  87. package/browser/psbt.d.ts.map +1 -0
  88. package/browser/pubkey.d.ts +27 -6
  89. package/browser/pubkey.d.ts.map +1 -0
  90. package/browser/push_data.d.ts +24 -2
  91. package/browser/push_data.d.ts.map +1 -0
  92. package/browser/script.d.ts +33 -8
  93. package/browser/script.d.ts.map +1 -0
  94. package/browser/script_number.d.ts +17 -0
  95. package/browser/script_number.d.ts.map +1 -0
  96. package/browser/script_signature.d.ts +23 -5
  97. package/browser/script_signature.d.ts.map +1 -0
  98. package/browser/transaction.d.ts +160 -18
  99. package/browser/transaction.d.ts.map +1 -0
  100. package/browser/types.d.ts +36 -38
  101. package/browser/types.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  103. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  104. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  105. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  106. package/browser/workers/ecc-bundle.d.ts +25 -0
  107. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  108. package/browser/workers/index.d.ts +91 -0
  109. package/browser/workers/index.d.ts.map +1 -0
  110. package/browser/workers/psbt-parallel.d.ts +88 -0
  111. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  112. package/browser/workers/signing-worker.d.ts +37 -0
  113. package/browser/workers/signing-worker.d.ts.map +1 -0
  114. package/browser/workers/types.d.ts +365 -0
  115. package/browser/workers/types.d.ts.map +1 -0
  116. package/build/address.d.ts +57 -10
  117. package/build/address.d.ts.map +1 -0
  118. package/build/address.js +80 -24
  119. package/build/address.js.map +1 -0
  120. package/build/bech32utils.d.ts +9 -1
  121. package/build/bech32utils.d.ts.map +1 -0
  122. package/build/bech32utils.js +10 -2
  123. package/build/bech32utils.js.map +1 -0
  124. package/build/bip66.d.ts +11 -6
  125. package/build/bip66.d.ts.map +1 -0
  126. package/build/bip66.js +32 -3
  127. package/build/bip66.js.map +1 -0
  128. package/build/block.d.ts +117 -11
  129. package/build/block.d.ts.map +1 -0
  130. package/build/block.js +204 -72
  131. package/build/block.js.map +1 -0
  132. package/build/branded.d.ts +20 -0
  133. package/build/branded.d.ts.map +1 -0
  134. package/build/branded.js +7 -0
  135. package/build/branded.js.map +1 -0
  136. package/build/crypto/crypto.d.ts +1 -0
  137. package/build/crypto/crypto.d.ts.map +1 -0
  138. package/build/crypto/crypto.js +1 -0
  139. package/build/crypto/crypto.js.map +1 -0
  140. package/build/crypto.d.ts +46 -7
  141. package/build/crypto.d.ts.map +1 -0
  142. package/build/crypto.js +65 -20
  143. package/build/crypto.js.map +1 -0
  144. package/build/ecc/context.d.ts +135 -0
  145. package/build/ecc/context.d.ts.map +1 -0
  146. package/build/ecc/context.js +232 -0
  147. package/build/ecc/context.js.map +1 -0
  148. package/build/ecc/index.d.ts +11 -0
  149. package/build/ecc/index.d.ts.map +1 -0
  150. package/build/ecc/index.js +11 -0
  151. package/build/ecc/index.js.map +1 -0
  152. package/build/ecc/types.d.ts +134 -0
  153. package/build/ecc/types.d.ts.map +1 -0
  154. package/build/ecc/types.js +8 -0
  155. package/build/ecc/types.js.map +1 -0
  156. package/build/errors.d.ts +124 -0
  157. package/build/errors.d.ts.map +1 -0
  158. package/build/errors.js +155 -0
  159. package/build/errors.js.map +1 -0
  160. package/build/index.d.ts +32 -5
  161. package/build/index.d.ts.map +1 -0
  162. package/build/index.js +26 -3
  163. package/build/index.js.map +1 -0
  164. package/build/io/BinaryReader.d.ts +276 -0
  165. package/build/io/BinaryReader.d.ts.map +1 -0
  166. package/build/io/BinaryReader.js +425 -0
  167. package/build/io/BinaryReader.js.map +1 -0
  168. package/build/io/BinaryWriter.d.ts +391 -0
  169. package/build/io/BinaryWriter.d.ts.map +1 -0
  170. package/build/io/BinaryWriter.js +611 -0
  171. package/build/io/BinaryWriter.js.map +1 -0
  172. package/build/io/MemoryPool.d.ts +220 -0
  173. package/build/io/MemoryPool.d.ts.map +1 -0
  174. package/build/io/MemoryPool.js +309 -0
  175. package/build/io/MemoryPool.js.map +1 -0
  176. package/build/io/base64.d.ts +13 -0
  177. package/build/io/base64.d.ts.map +1 -0
  178. package/build/io/base64.js +20 -0
  179. package/build/io/base64.js.map +1 -0
  180. package/build/io/hex.d.ts +67 -0
  181. package/build/io/hex.d.ts.map +1 -0
  182. package/build/io/hex.js +138 -0
  183. package/build/io/hex.js.map +1 -0
  184. package/build/io/index.d.ts +17 -0
  185. package/build/io/index.d.ts.map +1 -0
  186. package/build/io/index.js +23 -0
  187. package/build/io/index.js.map +1 -0
  188. package/build/io/utils.d.ts +199 -0
  189. package/build/io/utils.d.ts.map +1 -0
  190. package/build/io/utils.js +271 -0
  191. package/build/io/utils.js.map +1 -0
  192. package/build/merkle.d.ts +10 -1
  193. package/build/merkle.d.ts.map +1 -0
  194. package/build/merkle.js +12 -1
  195. package/build/merkle.js.map +1 -0
  196. package/build/networks.d.ts +70 -9
  197. package/build/networks.d.ts.map +1 -0
  198. package/build/networks.js +90 -4
  199. package/build/networks.js.map +1 -0
  200. package/build/opcodes.d.ts +1 -0
  201. package/build/opcodes.d.ts.map +1 -0
  202. package/build/opcodes.js +1 -0
  203. package/build/opcodes.js.map +1 -0
  204. package/build/payments/bip341.d.ts +36 -9
  205. package/build/payments/bip341.d.ts.map +1 -0
  206. package/build/payments/bip341.js +35 -15
  207. package/build/payments/bip341.js.map +1 -0
  208. package/build/payments/embed.d.ts +120 -1
  209. package/build/payments/embed.d.ts.map +1 -0
  210. package/build/payments/embed.js +215 -34
  211. package/build/payments/embed.js.map +1 -0
  212. package/build/payments/index.d.ts +17 -10
  213. package/build/payments/index.d.ts.map +1 -0
  214. package/build/payments/index.js +20 -10
  215. package/build/payments/index.js.map +1 -0
  216. package/build/payments/p2ms.d.ts +159 -1
  217. package/build/payments/p2ms.d.ts.map +1 -0
  218. package/build/payments/p2ms.js +427 -108
  219. package/build/payments/p2ms.js.map +1 -0
  220. package/build/payments/p2op.d.ts +158 -24
  221. package/build/payments/p2op.d.ts.map +1 -0
  222. package/build/payments/p2op.js +379 -93
  223. package/build/payments/p2op.js.map +1 -0
  224. package/build/payments/p2pk.d.ts +162 -1
  225. package/build/payments/p2pk.d.ts.map +1 -0
  226. package/build/payments/p2pk.js +327 -58
  227. package/build/payments/p2pk.js.map +1 -0
  228. package/build/payments/p2pkh.d.ts +185 -1
  229. package/build/payments/p2pkh.d.ts.map +1 -0
  230. package/build/payments/p2pkh.js +467 -114
  231. package/build/payments/p2pkh.js.map +1 -0
  232. package/build/payments/p2sh.d.ts +159 -1
  233. package/build/payments/p2sh.d.ts.map +1 -0
  234. package/build/payments/p2sh.js +500 -152
  235. package/build/payments/p2sh.js.map +1 -0
  236. package/build/payments/p2tr.d.ts +193 -1
  237. package/build/payments/p2tr.d.ts.map +1 -0
  238. package/build/payments/p2tr.js +592 -174
  239. package/build/payments/p2tr.js.map +1 -0
  240. package/build/payments/p2wpkh.d.ts +170 -1
  241. package/build/payments/p2wpkh.d.ts.map +1 -0
  242. package/build/payments/p2wpkh.js +429 -104
  243. package/build/payments/p2wpkh.js.map +1 -0
  244. package/build/payments/p2wsh.d.ts +155 -1
  245. package/build/payments/p2wsh.d.ts.map +1 -0
  246. package/build/payments/p2wsh.js +466 -144
  247. package/build/payments/p2wsh.js.map +1 -0
  248. package/build/payments/types.d.ts +98 -64
  249. package/build/payments/types.d.ts.map +1 -0
  250. package/build/payments/types.js +17 -13
  251. package/build/payments/types.js.map +1 -0
  252. package/build/psbt/bip371.d.ts +35 -9
  253. package/build/psbt/bip371.d.ts.map +1 -0
  254. package/build/psbt/bip371.js +113 -28
  255. package/build/psbt/bip371.js.map +1 -0
  256. package/build/psbt/psbtutils.d.ts +56 -16
  257. package/build/psbt/psbtutils.d.ts.map +1 -0
  258. package/build/psbt/psbtutils.js +71 -16
  259. package/build/psbt/psbtutils.js.map +1 -0
  260. package/build/psbt/types.d.ts +249 -0
  261. package/build/psbt/types.d.ts.map +1 -0
  262. package/build/psbt/types.js +6 -0
  263. package/build/psbt/types.js.map +1 -0
  264. package/build/psbt/utils.d.ts +68 -0
  265. package/build/psbt/utils.d.ts.map +1 -0
  266. package/build/psbt/utils.js +171 -0
  267. package/build/psbt/utils.js.map +1 -0
  268. package/build/psbt/validation.d.ts +88 -0
  269. package/build/psbt/validation.d.ts.map +1 -0
  270. package/build/psbt/validation.js +149 -0
  271. package/build/psbt/validation.js.map +1 -0
  272. package/build/psbt.d.ts +84 -120
  273. package/build/psbt.d.ts.map +1 -0
  274. package/build/psbt.js +411 -412
  275. package/build/psbt.js.map +1 -0
  276. package/build/pubkey.d.ts +27 -6
  277. package/build/pubkey.d.ts.map +1 -0
  278. package/build/pubkey.js +37 -13
  279. package/build/pubkey.js.map +1 -0
  280. package/build/push_data.d.ts +24 -2
  281. package/build/push_data.d.ts.map +1 -0
  282. package/build/push_data.js +44 -12
  283. package/build/push_data.js.map +1 -0
  284. package/build/script.d.ts +33 -8
  285. package/build/script.d.ts.map +1 -0
  286. package/build/script.js +100 -36
  287. package/build/script.js.map +1 -0
  288. package/build/script_number.d.ts +17 -0
  289. package/build/script_number.d.ts.map +1 -0
  290. package/build/script_number.js +19 -0
  291. package/build/script_number.js.map +1 -0
  292. package/build/script_signature.d.ts +23 -5
  293. package/build/script_signature.d.ts.map +1 -0
  294. package/build/script_signature.js +48 -15
  295. package/build/script_signature.js.map +1 -0
  296. package/build/transaction.d.ts +160 -18
  297. package/build/transaction.d.ts.map +1 -0
  298. package/build/transaction.js +443 -176
  299. package/build/transaction.js.map +1 -0
  300. package/build/tsconfig.build.tsbuildinfo +1 -0
  301. package/build/types.d.ts +36 -38
  302. package/build/types.d.ts.map +1 -0
  303. package/build/types.js +175 -57
  304. package/build/types.js.map +1 -0
  305. package/build/workers/WorkerSigningPool.d.ts +174 -0
  306. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  307. package/build/workers/WorkerSigningPool.js +553 -0
  308. package/build/workers/WorkerSigningPool.js.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  310. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  311. package/build/workers/WorkerSigningPool.node.js +753 -0
  312. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  313. package/build/workers/ecc-bundle.d.ts +25 -0
  314. package/build/workers/ecc-bundle.d.ts.map +1 -0
  315. package/build/workers/ecc-bundle.js +25 -0
  316. package/build/workers/ecc-bundle.js.map +1 -0
  317. package/build/workers/index.d.ts +91 -0
  318. package/build/workers/index.d.ts.map +1 -0
  319. package/build/workers/index.js +114 -0
  320. package/build/workers/index.js.map +1 -0
  321. package/build/workers/psbt-parallel.d.ts +117 -0
  322. package/build/workers/psbt-parallel.d.ts.map +1 -0
  323. package/build/workers/psbt-parallel.js +233 -0
  324. package/build/workers/psbt-parallel.js.map +1 -0
  325. package/build/workers/signing-worker.d.ts +37 -0
  326. package/build/workers/signing-worker.d.ts.map +1 -0
  327. package/build/workers/signing-worker.js +350 -0
  328. package/build/workers/signing-worker.js.map +1 -0
  329. package/build/workers/types.d.ts +365 -0
  330. package/build/workers/types.d.ts.map +1 -0
  331. package/build/workers/types.js +60 -0
  332. package/build/workers/types.js.map +1 -0
  333. package/package.json +83 -25
  334. package/scripts/bundle-ecc.ts +111 -0
  335. package/src/address.ts +81 -44
  336. package/src/bech32utils.ts +3 -3
  337. package/src/bip66.ts +34 -24
  338. package/src/block.ts +196 -84
  339. package/src/branded.ts +18 -0
  340. package/src/crypto.ts +64 -26
  341. package/src/ecc/context.ts +277 -0
  342. package/src/ecc/index.ts +14 -0
  343. package/src/ecc/types.ts +154 -0
  344. package/src/ecpair.d.ts +99 -0
  345. package/src/errors.ts +163 -0
  346. package/src/index.ts +113 -9
  347. package/src/io/BinaryReader.ts +461 -0
  348. package/src/io/BinaryWriter.ts +696 -0
  349. package/src/io/MemoryPool.ts +343 -0
  350. package/src/io/base64.ts +20 -0
  351. package/src/io/hex.ts +155 -0
  352. package/src/io/index.ts +41 -0
  353. package/src/io/utils.ts +283 -0
  354. package/src/merkle.ts +14 -9
  355. package/src/networks.ts +9 -9
  356. package/src/payments/bip341.ts +34 -33
  357. package/src/payments/embed.ts +244 -41
  358. package/src/payments/index.ts +12 -10
  359. package/src/payments/p2ms.ts +490 -118
  360. package/src/payments/p2op.ts +431 -133
  361. package/src/payments/p2pk.ts +370 -72
  362. package/src/payments/p2pkh.ts +524 -130
  363. package/src/payments/p2sh.ts +572 -172
  364. package/src/payments/p2tr.ts +686 -194
  365. package/src/payments/p2wpkh.ts +484 -107
  366. package/src/payments/p2wsh.ts +526 -164
  367. package/src/payments/types.ts +80 -66
  368. package/src/psbt/bip371.ts +68 -51
  369. package/src/psbt/psbtutils.ts +39 -40
  370. package/src/psbt/types.ts +331 -0
  371. package/src/psbt/utils.ts +188 -0
  372. package/src/psbt/validation.ts +192 -0
  373. package/src/psbt.ts +566 -809
  374. package/src/pubkey.ts +24 -25
  375. package/src/push_data.ts +18 -16
  376. package/src/script.ts +82 -64
  377. package/src/script_number.ts +6 -6
  378. package/src/script_signature.ts +33 -36
  379. package/src/transaction.ts +458 -238
  380. package/src/types.ts +231 -100
  381. package/src/workers/WorkerSigningPool.node.ts +887 -0
  382. package/src/workers/WorkerSigningPool.ts +670 -0
  383. package/src/workers/ecc-bundle.ts +26 -0
  384. package/src/workers/index.ts +165 -0
  385. package/src/workers/psbt-parallel.ts +332 -0
  386. package/src/workers/signing-worker.ts +353 -0
  387. package/src/workers/types.ts +413 -0
  388. package/test/address.spec.ts +9 -6
  389. package/test/bitcoin.core.spec.ts +16 -17
  390. package/test/block.spec.ts +8 -7
  391. package/test/bufferutils.spec.ts +228 -214
  392. package/test/crypto.spec.ts +19 -11
  393. package/test/fixtures/p2pk.json +0 -8
  394. package/test/fixtures/p2pkh.json +1 -1
  395. package/test/fixtures/p2sh.json +1 -1
  396. package/test/fixtures/script.json +1 -1
  397. package/test/fixtures/transaction.json +2 -2
  398. package/test/integration/_regtest.ts +25 -0
  399. package/test/integration/addresses.spec.ts +4 -3
  400. package/test/integration/bip32.spec.ts +2 -1
  401. package/test/integration/blocks.spec.ts +1 -1
  402. package/test/integration/cltv.spec.ts +18 -16
  403. package/test/integration/csv.spec.ts +37 -64
  404. package/test/integration/payments.spec.ts +5 -3
  405. package/test/integration/taproot.spec.ts +76 -83
  406. package/test/integration/transactions.spec.ts +38 -35
  407. package/test/payments.spec.ts +35 -13
  408. package/test/payments.utils.ts +17 -16
  409. package/test/psbt.spec.ts +111 -100
  410. package/test/script.spec.ts +11 -10
  411. package/test/script_signature.spec.ts +9 -11
  412. package/test/taproot-cache.spec.ts +694 -0
  413. package/test/transaction.spec.ts +32 -40
  414. package/test/types.spec.ts +74 -29
  415. package/test/workers-pool.spec.ts +963 -0
  416. package/test/workers-signing.spec.ts +635 -0
  417. package/test/workers.spec.ts +1390 -0
  418. package/tsconfig.base.json +34 -18
  419. package/tsconfig.browser.json +15 -0
  420. package/tsconfig.build.json +5 -0
  421. package/tsconfig.json +5 -14
  422. package/vite.config.browser.ts +3 -42
  423. package/vitest.config.integration.ts +11 -0
  424. package/browser/bufferutils.d.ts +0 -34
  425. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  426. package/browser/chunks/payments-yjA0Evsv.js +0 -1089
  427. package/browser/chunks/psbt-URK2hBFc.js +0 -4039
  428. package/browser/chunks/script-DyPItFEl.js +0 -318
  429. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  430. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  431. package/browser/ecc_lib.d.ts +0 -3
  432. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  433. package/browser/hooks/HookedSigner.d.ts +0 -4
  434. package/browser/hooks/SignatureManager.d.ts +0 -13
  435. package/browser/payments/lazy.d.ts +0 -2
  436. package/browser/typeforce.d.ts +0 -38
  437. package/build/bufferutils.d.ts +0 -34
  438. package/build/bufferutils.js +0 -141
  439. package/build/ecc_lib.d.ts +0 -3
  440. package/build/ecc_lib.js +0 -61
  441. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  442. package/build/hooks/AdvancedSignatureManager.js +0 -52
  443. package/build/hooks/HookedSigner.d.ts +0 -4
  444. package/build/hooks/HookedSigner.js +0 -64
  445. package/build/hooks/SignatureManager.d.ts +0 -13
  446. package/build/hooks/SignatureManager.js +0 -45
  447. package/build/payments/lazy.d.ts +0 -2
  448. package/build/payments/lazy.js +0 -28
  449. package/build/tsconfig.tsbuildinfo +0 -1
  450. package/src/bufferutils.ts +0 -188
  451. package/src/ecc_lib.ts +0 -94
  452. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  453. package/src/hooks/HookedSigner.ts +0 -108
  454. package/src/hooks/SignatureManager.ts +0 -84
  455. package/src/payments/lazy.ts +0 -28
  456. package/src/typeforce.d.ts +0 -38
  457. package/tsconfig.webpack.json +0 -18
@@ -1,134 +1,459 @@
1
+ /**
2
+ * Pay-to-Witness-Public-Key-Hash (P2WPKH) payment class.
3
+ *
4
+ * P2WPKH is the native SegWit version of P2PKH. The witness program is
5
+ * a 20-byte pubkey hash, and spending requires the signature and public key
6
+ * in the witness stack (not the scriptSig).
7
+ *
8
+ * @packageDocumentation
9
+ */
1
10
  import { bech32 } from 'bech32';
2
11
  import * as bcrypto from '../crypto.js';
3
12
  import { bitcoin as BITCOIN_NETWORK } from '../networks.js';
4
13
  import * as bscript from '../script.js';
5
- import { isPoint, typeforce as typef } from '../types.js';
14
+ import { isPoint } from '../types.js';
15
+ import { equals } from '../io/index.js';
6
16
  import { PaymentType } from './types.js';
7
- import * as lazy from './lazy.js';
8
17
  const OPS = bscript.opcodes;
9
- const EMPTY_BUFFER = Buffer.alloc(0);
10
- export function p2wpkh(a, opts) {
11
- if (!a.address && !a.hash && !a.output && !a.pubkey && !a.witness)
12
- throw new TypeError('Not enough data');
13
- opts = Object.assign({ validate: true }, opts || {});
14
- typef({
15
- address: typef.maybe(typef.String),
16
- hash: typef.maybe(typef.BufferN(20)),
17
- input: typef.maybe(typef.BufferN(0)),
18
- network: typef.maybe(typef.Object),
19
- output: typef.maybe(typef.BufferN(22)),
20
- pubkey: typef.maybe(isPoint),
21
- signature: typef.maybe(bscript.isCanonicalScriptSignature),
22
- witness: typef.maybe(typef.arrayOf(typef.Buffer)),
23
- }, a);
24
- const _address = lazy.value(() => {
25
- const result = bech32.decode(a.address);
26
- const version = result.words.shift();
27
- const data = bech32.fromWords(result.words);
28
- return {
29
- version,
30
- prefix: result.prefix,
31
- data: Buffer.from(data),
18
+ const EMPTY_BUFFER = new Uint8Array(0);
19
+ /**
20
+ * Pay-to-Witness-Public-Key-Hash (P2WPKH) payment class.
21
+ *
22
+ * Creates locking scripts of the form: `OP_0 {hash160(pubkey)}`
23
+ * Spending witness: `[{signature}, {pubkey}]`
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { P2WPKH } from '@btc-vision/bitcoin';
28
+ *
29
+ * // Create from public key
30
+ * const payment = P2WPKH.fromPubkey(pubkey);
31
+ * console.log(payment.address); // bc1q... bech32 address
32
+ * console.log(payment.output); // scriptPubKey
33
+ *
34
+ * // Create from bech32 address
35
+ * const fromAddr = P2WPKH.fromAddress('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4');
36
+ * console.log(fromAddr.hash); // 20-byte witness program
37
+ * ```
38
+ */
39
+ export class P2WPKH {
40
+ // Static public fields
41
+ static NAME = PaymentType.P2WPKH;
42
+ // Private instance fields
43
+ #network;
44
+ #opts;
45
+ // Input data (provided by user)
46
+ #inputAddress;
47
+ #inputHash;
48
+ #inputPubkey;
49
+ #inputSignature;
50
+ #inputOutput;
51
+ #inputWitness;
52
+ // Cached computed values
53
+ #address;
54
+ #hash;
55
+ #pubkey;
56
+ #signature;
57
+ #output;
58
+ #input;
59
+ #witness;
60
+ // Cache flags
61
+ #addressComputed = false;
62
+ #hashComputed = false;
63
+ #pubkeyComputed = false;
64
+ #signatureComputed = false;
65
+ #outputComputed = false;
66
+ #inputComputed = false;
67
+ #witnessComputed = false;
68
+ // Decoded address cache
69
+ #decodedAddress;
70
+ #decodedAddressComputed = false;
71
+ /**
72
+ * Creates a new P2WPKH payment instance.
73
+ *
74
+ * @param params - Payment parameters
75
+ * @param params.address - Bech32 encoded address
76
+ * @param params.hash - 20-byte witness program (pubkey hash)
77
+ * @param params.pubkey - The public key (must be 33 bytes compressed)
78
+ * @param params.signature - DER-encoded signature
79
+ * @param params.output - The scriptPubKey
80
+ * @param params.witness - The witness stack [signature, pubkey]
81
+ * @param params.network - Network parameters (defaults to mainnet)
82
+ * @param opts - Payment options
83
+ * @param opts.validate - Whether to validate inputs (default: true)
84
+ *
85
+ * @throws {TypeError} If validation is enabled and data is invalid
86
+ */
87
+ constructor(params, opts) {
88
+ this.#network = params.network ?? BITCOIN_NETWORK;
89
+ this.#opts = {
90
+ validate: opts?.validate ?? true,
91
+ allowIncomplete: opts?.allowIncomplete ?? false,
32
92
  };
33
- });
34
- const network = a.network || BITCOIN_NETWORK;
35
- const o = {
36
- name: PaymentType.P2WPKH,
37
- network,
38
- };
39
- lazy.prop(o, 'address', () => {
40
- if (!o.hash)
41
- return;
42
- const words = bech32.toWords(o.hash);
93
+ // Store input data
94
+ this.#inputAddress = params.address;
95
+ this.#inputHash = params.hash;
96
+ this.#inputPubkey = params.pubkey;
97
+ this.#inputSignature = params.signature;
98
+ this.#inputOutput = params.output;
99
+ this.#inputWitness = params.witness;
100
+ // Validate if requested
101
+ if (this.#opts.validate) {
102
+ this.#validate();
103
+ }
104
+ }
105
+ // Public getters
106
+ /**
107
+ * Payment type discriminant.
108
+ */
109
+ get name() {
110
+ return PaymentType.P2WPKH;
111
+ }
112
+ /**
113
+ * Network parameters.
114
+ */
115
+ get network() {
116
+ return this.#network;
117
+ }
118
+ /**
119
+ * Bech32 encoded address (bc1q... for mainnet).
120
+ */
121
+ get address() {
122
+ if (!this.#addressComputed) {
123
+ this.#address = this.#computeAddress();
124
+ this.#addressComputed = true;
125
+ }
126
+ return this.#address;
127
+ }
128
+ /**
129
+ * 20-byte witness program (RIPEMD160(SHA256(pubkey))).
130
+ */
131
+ get hash() {
132
+ if (!this.#hashComputed) {
133
+ this.#hash = this.#computeHash();
134
+ this.#hashComputed = true;
135
+ }
136
+ return this.#hash;
137
+ }
138
+ /**
139
+ * The public key (33 bytes compressed).
140
+ */
141
+ get pubkey() {
142
+ if (!this.#pubkeyComputed) {
143
+ this.#pubkey = this.#computePubkey();
144
+ this.#pubkeyComputed = true;
145
+ }
146
+ return this.#pubkey;
147
+ }
148
+ /**
149
+ * The DER-encoded signature.
150
+ */
151
+ get signature() {
152
+ if (!this.#signatureComputed) {
153
+ this.#signature = this.#computeSignature();
154
+ this.#signatureComputed = true;
155
+ }
156
+ return this.#signature;
157
+ }
158
+ /**
159
+ * The scriptPubKey: `OP_0 {20-byte hash}`
160
+ */
161
+ get output() {
162
+ if (!this.#outputComputed) {
163
+ this.#output = this.#computeOutput();
164
+ this.#outputComputed = true;
165
+ }
166
+ return this.#output;
167
+ }
168
+ /**
169
+ * The scriptSig (always empty for native SegWit).
170
+ */
171
+ get input() {
172
+ if (!this.#inputComputed) {
173
+ this.#input = this.#computeInput();
174
+ this.#inputComputed = true;
175
+ }
176
+ return this.#input;
177
+ }
178
+ /**
179
+ * Witness stack: `[signature, pubkey]`
180
+ */
181
+ get witness() {
182
+ if (!this.#witnessComputed) {
183
+ this.#witness = this.#computeWitness();
184
+ this.#witnessComputed = true;
185
+ }
186
+ return this.#witness;
187
+ }
188
+ // Static factory methods
189
+ /**
190
+ * Creates a P2WPKH payment from a compressed public key.
191
+ *
192
+ * @param pubkey - The public key (must be 33 bytes compressed)
193
+ * @param network - Network parameters (defaults to mainnet)
194
+ * @returns A new P2WPKH payment instance
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const payment = P2WPKH.fromPubkey(pubkey);
199
+ * const address = payment.address; // bc1q...
200
+ * ```
201
+ */
202
+ static fromPubkey(pubkey, network) {
203
+ return new P2WPKH({ pubkey, network });
204
+ }
205
+ /**
206
+ * Creates a P2WPKH payment from a bech32 address.
207
+ *
208
+ * @param address - Bech32 encoded address
209
+ * @param network - Network parameters (defaults to mainnet)
210
+ * @returns A new P2WPKH payment instance
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * const payment = P2WPKH.fromAddress('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4');
215
+ * const hash = payment.hash;
216
+ * ```
217
+ */
218
+ static fromAddress(address, network) {
219
+ return new P2WPKH({ address, network });
220
+ }
221
+ /**
222
+ * Creates a P2WPKH payment from a 20-byte witness program.
223
+ *
224
+ * @param hash - 20-byte witness program (pubkey hash)
225
+ * @param network - Network parameters (defaults to mainnet)
226
+ * @returns A new P2WPKH payment instance
227
+ */
228
+ static fromHash(hash, network) {
229
+ return new P2WPKH({ hash, network });
230
+ }
231
+ /**
232
+ * Creates a P2WPKH payment from a scriptPubKey.
233
+ *
234
+ * @param output - The scriptPubKey
235
+ * @param network - Network parameters (defaults to mainnet)
236
+ * @returns A new P2WPKH payment instance
237
+ */
238
+ static fromOutput(output, network) {
239
+ return new P2WPKH({ output, network });
240
+ }
241
+ // Private helper methods
242
+ #getDecodedAddress() {
243
+ if (!this.#decodedAddressComputed) {
244
+ if (this.#inputAddress) {
245
+ const result = bech32.decode(this.#inputAddress);
246
+ const version = result.words.shift();
247
+ const data = bech32.fromWords(result.words);
248
+ this.#decodedAddress = {
249
+ version: version ?? 0,
250
+ prefix: result.prefix,
251
+ data: new Uint8Array(data),
252
+ };
253
+ }
254
+ this.#decodedAddressComputed = true;
255
+ }
256
+ return this.#decodedAddress;
257
+ }
258
+ // Private computation methods
259
+ #computeAddress() {
260
+ if (this.#inputAddress) {
261
+ return this.#inputAddress;
262
+ }
263
+ const h = this.hash;
264
+ if (!h)
265
+ return undefined;
266
+ const words = bech32.toWords(h);
43
267
  words.unshift(0x00);
44
- return bech32.encode(network.bech32, words);
45
- });
46
- lazy.prop(o, 'hash', () => {
47
- if (a.output)
48
- return a.output.subarray(2, 22);
49
- if (a.address)
50
- return _address().data;
51
- if (a.pubkey || o.pubkey)
52
- return bcrypto.hash160(a.pubkey || o.pubkey);
53
- });
54
- lazy.prop(o, 'output', () => {
55
- if (!o.hash)
56
- return;
57
- return bscript.compile([OPS.OP_0, o.hash]);
58
- });
59
- lazy.prop(o, 'pubkey', () => {
60
- if (a.pubkey)
61
- return a.pubkey;
62
- if (!a.witness)
63
- return;
64
- return a.witness[1];
65
- });
66
- lazy.prop(o, 'signature', () => {
67
- if (!a.witness)
68
- return;
69
- return a.witness[0];
70
- });
71
- lazy.prop(o, 'input', () => {
72
- if (!o.witness)
73
- return;
74
- return EMPTY_BUFFER;
75
- });
76
- lazy.prop(o, 'witness', () => {
77
- if (!a.pubkey)
78
- return;
79
- if (!a.signature)
80
- return;
81
- return [a.signature, a.pubkey];
82
- });
83
- if (opts.validate) {
84
- let hash = Buffer.from([]);
85
- if (a.address) {
86
- if (network && network.bech32 !== _address().prefix)
268
+ return bech32.encode(this.#network.bech32, words);
269
+ }
270
+ #computeHash() {
271
+ if (this.#inputHash) {
272
+ return this.#inputHash;
273
+ }
274
+ if (this.#inputOutput) {
275
+ return this.#inputOutput.subarray(2, 22);
276
+ }
277
+ if (this.#inputAddress) {
278
+ return this.#getDecodedAddress()?.data;
279
+ }
280
+ const pk = this.#inputPubkey ?? this.pubkey;
281
+ if (pk) {
282
+ return bcrypto.hash160(pk);
283
+ }
284
+ return undefined;
285
+ }
286
+ #computePubkey() {
287
+ if (this.#inputPubkey) {
288
+ return this.#inputPubkey;
289
+ }
290
+ if (this.#inputWitness && this.#inputWitness.length >= 2) {
291
+ return this.#inputWitness[1];
292
+ }
293
+ return undefined;
294
+ }
295
+ #computeSignature() {
296
+ if (this.#inputSignature) {
297
+ return this.#inputSignature;
298
+ }
299
+ if (this.#inputWitness && this.#inputWitness.length >= 1) {
300
+ return this.#inputWitness[0];
301
+ }
302
+ return undefined;
303
+ }
304
+ #computeOutput() {
305
+ if (this.#inputOutput) {
306
+ return this.#inputOutput;
307
+ }
308
+ const h = this.hash;
309
+ if (!h)
310
+ return undefined;
311
+ return bscript.compile([OPS.OP_0, h]);
312
+ }
313
+ #computeInput() {
314
+ if (this.witness) {
315
+ return EMPTY_BUFFER;
316
+ }
317
+ return undefined;
318
+ }
319
+ #computeWitness() {
320
+ if (this.#inputWitness) {
321
+ return this.#inputWitness;
322
+ }
323
+ if (!this.#inputPubkey || !this.#inputSignature) {
324
+ return undefined;
325
+ }
326
+ return [this.#inputSignature, this.#inputPubkey];
327
+ }
328
+ // Validation
329
+ #validate() {
330
+ let hash = new Uint8Array(0);
331
+ if (this.#inputAddress) {
332
+ const addr = this.#getDecodedAddress();
333
+ if (!addr) {
334
+ throw new TypeError('Invalid address');
335
+ }
336
+ if (this.#network && this.#network.bech32 !== addr.prefix) {
87
337
  throw new TypeError('Invalid prefix or Network mismatch');
88
- if (_address().version !== 0x00)
338
+ }
339
+ if (addr.version !== 0x00) {
89
340
  throw new TypeError('Invalid address version');
90
- if (_address().data.length !== 20)
341
+ }
342
+ if (addr.data.length !== 20) {
91
343
  throw new TypeError('Invalid address data');
92
- hash = _address().data;
344
+ }
345
+ hash = addr.data;
93
346
  }
94
- if (a.hash) {
95
- if (hash.length > 0 && !hash.equals(a.hash))
347
+ if (this.#inputHash) {
348
+ if (hash.length > 0 && !equals(hash, this.#inputHash)) {
96
349
  throw new TypeError('Hash mismatch');
97
- else
98
- hash = a.hash;
350
+ }
351
+ else {
352
+ hash = this.#inputHash;
353
+ }
99
354
  }
100
- if (a.output) {
101
- if (a.output.length !== 22 || a.output[0] !== OPS.OP_0 || a.output[1] !== 0x14)
355
+ if (this.#inputOutput) {
356
+ if (this.#inputOutput.length !== 22 ||
357
+ this.#inputOutput[0] !== OPS.OP_0 ||
358
+ this.#inputOutput[1] !== 0x14) {
102
359
  throw new TypeError('Output is invalid');
103
- if (hash.length > 0 && !hash.equals(a.output.subarray(2)))
360
+ }
361
+ if (hash.length > 0 && !equals(hash, this.#inputOutput.subarray(2))) {
104
362
  throw new TypeError('Hash mismatch');
105
- else
106
- hash = a.output.subarray(2);
363
+ }
364
+ else {
365
+ hash = this.#inputOutput.subarray(2);
366
+ }
107
367
  }
108
- if (a.pubkey) {
109
- const pkh = bcrypto.hash160(a.pubkey);
110
- if (hash.length > 0 && !hash.equals(pkh))
368
+ if (this.#inputPubkey) {
369
+ const pkh = bcrypto.hash160(this.#inputPubkey);
370
+ if (hash.length > 0 && !equals(hash, pkh)) {
111
371
  throw new TypeError('Hash mismatch');
112
- else
372
+ }
373
+ else {
113
374
  hash = pkh;
114
- if (!isPoint(a.pubkey) || a.pubkey.length !== 33)
375
+ }
376
+ if (!isPoint(this.#inputPubkey) || this.#inputPubkey.length !== 33) {
115
377
  throw new TypeError('Invalid pubkey for p2wpkh');
378
+ }
116
379
  }
117
- if (a.witness) {
118
- if (a.witness.length !== 2)
380
+ if (this.#inputWitness) {
381
+ if (this.#inputWitness.length !== 2) {
119
382
  throw new TypeError('Witness is invalid');
120
- if (!bscript.isCanonicalScriptSignature(a.witness[0]))
383
+ }
384
+ if (!bscript.isCanonicalScriptSignature(this.#inputWitness[0])) {
121
385
  throw new TypeError('Witness has invalid signature');
122
- if (!isPoint(a.witness[1]) || a.witness[1].length !== 33)
386
+ }
387
+ if (!isPoint(this.#inputWitness[1]) || this.#inputWitness[1].length !== 33) {
123
388
  throw new TypeError('Witness has invalid pubkey');
124
- if (a.signature && !a.signature.equals(a.witness[0]))
389
+ }
390
+ if (this.#inputSignature && !equals(this.#inputSignature, this.#inputWitness[0])) {
125
391
  throw new TypeError('Signature mismatch');
126
- if (a.pubkey && !a.pubkey.equals(a.witness[1]))
392
+ }
393
+ if (this.#inputPubkey && !equals(this.#inputPubkey, this.#inputWitness[1])) {
127
394
  throw new TypeError('Pubkey mismatch');
128
- const pkh = bcrypto.hash160(a.witness[1]);
129
- if (hash.length > 0 && !hash.equals(pkh))
395
+ }
396
+ const pkh = bcrypto.hash160(this.#inputWitness[1]);
397
+ if (hash.length > 0 && !equals(hash, pkh)) {
130
398
  throw new TypeError('Hash mismatch');
399
+ }
131
400
  }
132
401
  }
133
- return Object.assign(o, a);
402
+ /**
403
+ * Converts to a plain P2WPKHPayment object for backwards compatibility.
404
+ *
405
+ * @returns A P2WPKHPayment object
406
+ */
407
+ toPayment() {
408
+ return {
409
+ name: this.name,
410
+ network: this.network,
411
+ address: this.address,
412
+ hash: this.hash,
413
+ pubkey: this.pubkey,
414
+ signature: this.signature,
415
+ output: this.output,
416
+ input: this.input,
417
+ witness: this.witness,
418
+ };
419
+ }
420
+ }
421
+ /**
422
+ * Creates a Pay-to-Witness-Public-Key-Hash (P2WPKH) payment object.
423
+ *
424
+ * This is the legacy factory function for backwards compatibility.
425
+ * For new code, prefer using the P2WPKH class directly.
426
+ *
427
+ * @param a - The payment object containing the necessary data
428
+ * @param opts - Optional payment options
429
+ * @returns The P2WPKH payment object
430
+ * @throws {TypeError} If the required data is not provided or if the data is invalid
431
+ *
432
+ * @example
433
+ * ```typescript
434
+ * import { p2wpkh } from '@btc-vision/bitcoin';
435
+ *
436
+ * // Create from public key
437
+ * const payment = p2wpkh({ pubkey });
438
+ *
439
+ * // Create from address
440
+ * const fromAddr = p2wpkh({ address: 'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4' });
441
+ * ```
442
+ */
443
+ export function p2wpkh(a, opts) {
444
+ if (!a.address && !a.hash && !a.output && !a.pubkey && !a.witness) {
445
+ throw new TypeError('Not enough data');
446
+ }
447
+ const instance = new P2WPKH({
448
+ address: a.address,
449
+ hash: a.hash,
450
+ pubkey: a.pubkey,
451
+ signature: a.signature,
452
+ output: a.output,
453
+ witness: a.witness,
454
+ network: a.network,
455
+ }, opts);
456
+ // Return a merged object for backwards compatibility
457
+ return Object.assign(instance.toPayment(), a);
134
458
  }
459
+ //# sourceMappingURL=p2wpkh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2wpkh.js","sourceRoot":"","sources":["../../src/payments/p2wpkh.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAgB,MAAM,gBAAgB,CAAC;AAC1E,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAwC,MAAM,YAAY,CAAC;AAE/E,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;AAC5B,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,MAAM;IACf,uBAAuB;IACvB,MAAM,CAAU,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC;IAE1C,0BAA0B;IACjB,QAAQ,CAAU;IAClB,KAAK,CAAwB;IAEtC,gCAAgC;IAChC,aAAa,CAAsB;IACnC,UAAU,CAA0B;IACpC,YAAY,CAA0B;IACtC,eAAe,CAA0B;IACzC,YAAY,CAA0B;IACtC,aAAa,CAA4B;IAEzC,yBAAyB;IACzB,QAAQ,CAAsB;IAC9B,KAAK,CAA0B;IAC/B,OAAO,CAA0B;IACjC,UAAU,CAA0B;IACpC,OAAO,CAA0B;IACjC,MAAM,CAA0B;IAChC,QAAQ,CAA4B;IAEpC,cAAc;IACd,gBAAgB,GAAG,KAAK,CAAC;IACzB,aAAa,GAAG,KAAK,CAAC;IACtB,eAAe,GAAG,KAAK,CAAC;IACxB,kBAAkB,GAAG,KAAK,CAAC;IAC3B,eAAe,GAAG,KAAK,CAAC;IACxB,cAAc,GAAG,KAAK,CAAC;IACvB,gBAAgB,GAAG,KAAK,CAAC;IAEzB,wBAAwB;IACxB,eAAe,CAAqE;IACpF,uBAAuB,GAAG,KAAK,CAAC;IAEhC;;;;;;;;;;;;;;;OAeG;IACH,YACI,MAQC,EACD,IAAkB;QAElB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG;YACT,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI;YAChC,eAAe,EAAE,IAAI,EAAE,eAAe,IAAI,KAAK;SAClD,CAAC;QAEF,mBAAmB;QACnB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;QAEpC,wBAAwB;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAED,iBAAiB;IAEjB;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,WAAW,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACJ,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,KAA4B,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,OAAgC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACT,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,UAAmC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,OAA6B,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,MAA4B,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,yBAAyB;IAEzB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,UAAU,CAAC,MAAiB,EAAE,OAAiB;QAClD,OAAO,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,WAAW,CAAC,OAAe,EAAE,OAAiB;QACjD,OAAO,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAa,EAAE,OAAiB;QAC5C,OAAO,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,MAAkB,EAAE,OAAiB;QACnD,OAAO,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,yBAAyB;IAEzB,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,eAAe,GAAG;oBACnB,OAAO,EAAE,OAAO,IAAI,CAAC;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;iBAC7B,CAAC;YACN,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,8BAA8B;IAE9B,eAAe;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAEzB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,YAAY;QACR,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAY,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAA2B,CAAC;QAClE,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC;QAC5C,IAAI,EAAE,EAAE,CAAC;YACL,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAY,CAAC;QAC1C,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAc,CAAC;QAC9C,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,iBAAiB;QACb,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAc,CAAC;QAC9C,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,cAAc;QACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAEzB,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAW,CAAC;IACpD,CAAC;IAED,aAAa;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,YAAsB,CAAC;QAClC,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,aAAa;IAEb,SAAS;QACL,IAAI,IAAI,GAAe,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACxD,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC1B,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3B,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IACI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,EAAE;gBAC/B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI;gBACjC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,EAC/B,CAAC;gBACC,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,GAAG,CAAC;YACf,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACjE,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACrD,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC3E,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBACjF,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBAC3E,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,SAAS;QACL,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC;IACN,CAAC;;AAGL;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,MAAM,CAAC,CAA8B,EAAE,IAAkB;IACrE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,MAAM,CACvB;QACI,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO;KACrB,EACD,IAAI,CACP,CAAC;IAEF,qDAAqD;IACrD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC"}