utxo-lib 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/src/address.d.ts +11 -0
  4. package/dist/src/address.d.ts.map +1 -0
  5. package/dist/src/address.js +37 -0
  6. package/dist/src/addressFormat.d.ts +53 -0
  7. package/dist/src/addressFormat.d.ts.map +1 -0
  8. package/dist/src/addressFormat.js +110 -0
  9. package/dist/src/bitgo/Musig2.d.ts +51 -0
  10. package/dist/src/bitgo/Musig2.d.ts.map +1 -0
  11. package/dist/src/bitgo/Musig2.js +175 -0
  12. package/dist/src/bitgo/Unspent.d.ts +95 -0
  13. package/dist/src/bitgo/Unspent.d.ts.map +1 -0
  14. package/dist/src/bitgo/Unspent.js +138 -0
  15. package/dist/src/bitgo/UtxoPsbt.d.ts +132 -0
  16. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -0
  17. package/dist/src/bitgo/UtxoPsbt.js +469 -0
  18. package/dist/src/bitgo/UtxoTransaction.d.ts +22 -0
  19. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -0
  20. package/dist/src/bitgo/UtxoTransaction.js +97 -0
  21. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +26 -0
  22. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -0
  23. package/dist/src/bitgo/UtxoTransactionBuilder.js +67 -0
  24. package/dist/src/bitgo/bbc/DashPsbt.d.ts +12 -0
  25. package/dist/src/bitgo/bbc/DashPsbt.d.ts.map +1 -0
  26. package/dist/src/bitgo/bbc/DashPsbt.js +27 -0
  27. package/dist/src/bitgo/bbc/DashTransaction.d.ts +39 -0
  28. package/dist/src/bitgo/bbc/DashTransaction.d.ts.map +1 -0
  29. package/dist/src/bitgo/bbc/DashTransaction.js +109 -0
  30. package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts +14 -0
  31. package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts.map +1 -0
  32. package/dist/src/bitgo/bbc/DashTransactionBuilder.js +28 -0
  33. package/dist/src/bitgo/bbc/index.d.ts +4 -0
  34. package/dist/src/bitgo/bbc/index.d.ts.map +1 -0
  35. package/dist/src/bitgo/bbc/index.js +16 -0
  36. package/dist/src/bitgo/bitcoincash/address.d.ts +35 -0
  37. package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -0
  38. package/dist/src/bitgo/bitcoincash/address.js +151 -0
  39. package/dist/src/bitgo/bitcoincash/index.d.ts +2 -0
  40. package/dist/src/bitgo/bitcoincash/index.d.ts.map +1 -0
  41. package/dist/src/bitgo/bitcoincash/index.js +14 -0
  42. package/dist/src/bitgo/dash/DashPsbt.d.ts +12 -0
  43. package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -0
  44. package/dist/src/bitgo/dash/DashPsbt.js +27 -0
  45. package/dist/src/bitgo/dash/DashTransaction.d.ts +39 -0
  46. package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -0
  47. package/dist/src/bitgo/dash/DashTransaction.js +109 -0
  48. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +14 -0
  49. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -0
  50. package/dist/src/bitgo/dash/DashTransactionBuilder.js +28 -0
  51. package/dist/src/bitgo/dash/index.d.ts +4 -0
  52. package/dist/src/bitgo/dash/index.d.ts.map +1 -0
  53. package/dist/src/bitgo/dash/index.js +16 -0
  54. package/dist/src/bitgo/index.d.ts +17 -0
  55. package/dist/src/bitgo/index.d.ts.map +1 -0
  56. package/dist/src/bitgo/index.js +30 -0
  57. package/dist/src/bitgo/keyutil.d.ts +17 -0
  58. package/dist/src/bitgo/keyutil.d.ts.map +1 -0
  59. package/dist/src/bitgo/keyutil.js +37 -0
  60. package/dist/src/bitgo/nonStandardHalfSigned.d.ts +7 -0
  61. package/dist/src/bitgo/nonStandardHalfSigned.d.ts.map +1 -0
  62. package/dist/src/bitgo/nonStandardHalfSigned.js +56 -0
  63. package/dist/src/bitgo/outputScripts.d.ts +84 -0
  64. package/dist/src/bitgo/outputScripts.d.ts.map +1 -0
  65. package/dist/src/bitgo/outputScripts.js +297 -0
  66. package/dist/src/bitgo/parseInput.d.ts +92 -0
  67. package/dist/src/bitgo/parseInput.d.ts.map +1 -0
  68. package/dist/src/bitgo/parseInput.js +344 -0
  69. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +24 -0
  70. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -0
  71. package/dist/src/bitgo/psbt/fromHalfSigned.js +91 -0
  72. package/dist/src/bitgo/psbt/scriptTypes.d.ts +6 -0
  73. package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -0
  74. package/dist/src/bitgo/psbt/scriptTypes.js +23 -0
  75. package/dist/src/bitgo/signature.d.ts +84 -0
  76. package/dist/src/bitgo/signature.d.ts.map +1 -0
  77. package/dist/src/bitgo/signature.js +222 -0
  78. package/dist/src/bitgo/tnumber.d.ts +9 -0
  79. package/dist/src/bitgo/tnumber.d.ts.map +1 -0
  80. package/dist/src/bitgo/tnumber.js +31 -0
  81. package/dist/src/bitgo/transaction.d.ts +29 -0
  82. package/dist/src/bitgo/transaction.d.ts.map +1 -0
  83. package/dist/src/bitgo/transaction.js +247 -0
  84. package/dist/src/bitgo/types.d.ts +5 -0
  85. package/dist/src/bitgo/types.d.ts.map +1 -0
  86. package/dist/src/bitgo/types.js +12 -0
  87. package/dist/src/bitgo/wallet/Psbt.d.ts +47 -0
  88. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -0
  89. package/dist/src/bitgo/wallet/Psbt.js +232 -0
  90. package/dist/src/bitgo/wallet/Unspent.d.ts +47 -0
  91. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -0
  92. package/dist/src/bitgo/wallet/Unspent.js +154 -0
  93. package/dist/src/bitgo/wallet/WalletKeys.d.ts +72 -0
  94. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -0
  95. package/dist/src/bitgo/wallet/WalletKeys.js +104 -0
  96. package/dist/src/bitgo/wallet/WalletOutput.d.ts +18 -0
  97. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -0
  98. package/dist/src/bitgo/wallet/WalletOutput.js +69 -0
  99. package/dist/src/bitgo/wallet/WalletScripts.d.ts +7 -0
  100. package/dist/src/bitgo/wallet/WalletScripts.d.ts.map +1 -0
  101. package/dist/src/bitgo/wallet/WalletScripts.js +15 -0
  102. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +19 -0
  103. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +1 -0
  104. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +47 -0
  105. package/dist/src/bitgo/wallet/chains.d.ts +57 -0
  106. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -0
  107. package/dist/src/bitgo/wallet/chains.js +106 -0
  108. package/dist/src/bitgo/wallet/index.d.ts +8 -0
  109. package/dist/src/bitgo/wallet/index.d.ts.map +1 -0
  110. package/dist/src/bitgo/wallet/index.js +20 -0
  111. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +26 -0
  112. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -0
  113. package/dist/src/bitgo/zcash/ZcashBufferutils.js +157 -0
  114. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +36 -0
  115. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -0
  116. package/dist/src/bitgo/zcash/ZcashPsbt.js +146 -0
  117. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +61 -0
  118. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -0
  119. package/dist/src/bitgo/zcash/ZcashTransaction.js +341 -0
  120. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +21 -0
  121. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -0
  122. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +105 -0
  123. package/dist/src/bitgo/zcash/address.d.ts +8 -0
  124. package/dist/src/bitgo/zcash/address.d.ts.map +1 -0
  125. package/dist/src/bitgo/zcash/address.js +57 -0
  126. package/dist/src/bitgo/zcash/hashZip0244.d.ts +27 -0
  127. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -0
  128. package/dist/src/bitgo/zcash/hashZip0244.js +184 -0
  129. package/dist/src/bitgo/zcash/index.d.ts +4 -0
  130. package/dist/src/bitgo/zcash/index.d.ts.map +1 -0
  131. package/dist/src/bitgo/zcash/index.js +16 -0
  132. package/dist/src/classify.d.ts +19 -0
  133. package/dist/src/classify.d.ts.map +1 -0
  134. package/dist/src/classify.js +89 -0
  135. package/dist/src/index.d.ts +13 -0
  136. package/dist/src/index.d.ts.map +1 -0
  137. package/dist/src/index.js +36 -0
  138. package/dist/src/networks.d.ts +119 -0
  139. package/dist/src/networks.d.ts.map +1 -0
  140. package/dist/src/networks.js +477 -0
  141. package/dist/src/noble_ecc.d.ts +28 -0
  142. package/dist/src/noble_ecc.d.ts.map +1 -0
  143. package/dist/src/noble_ecc.js +168 -0
  144. package/dist/src/payments/index.d.ts +4 -0
  145. package/dist/src/payments/index.d.ts.map +1 -0
  146. package/dist/src/payments/index.js +8 -0
  147. package/dist/src/payments/p2tr.d.ts +3 -0
  148. package/dist/src/payments/p2tr.d.ts.map +1 -0
  149. package/dist/src/payments/p2tr.js +348 -0
  150. package/dist/src/payments/p2tr_ns.d.ts +3 -0
  151. package/dist/src/payments/p2tr_ns.d.ts.map +1 -0
  152. package/dist/src/payments/p2tr_ns.js +134 -0
  153. package/dist/src/taproot.d.ts +141 -0
  154. package/dist/src/taproot.d.ts.map +1 -0
  155. package/dist/src/taproot.js +384 -0
  156. package/dist/src/templates/multisig/index.d.ts +4 -0
  157. package/dist/src/templates/multisig/index.d.ts.map +1 -0
  158. package/dist/src/templates/multisig/index.js +8 -0
  159. package/dist/src/templates/multisig/input.d.ts +7 -0
  160. package/dist/src/templates/multisig/input.d.ts.map +1 -0
  161. package/dist/src/templates/multisig/input.js +25 -0
  162. package/dist/src/templates/multisig/output.d.ts +7 -0
  163. package/dist/src/templates/multisig/output.d.ts.map +1 -0
  164. package/dist/src/templates/multisig/output.js +38 -0
  165. package/dist/src/templates/nulldata.d.ts +10 -0
  166. package/dist/src/templates/nulldata.d.ts.map +1 -0
  167. package/dist/src/templates/nulldata.js +17 -0
  168. package/dist/src/templates/pubkey/index.d.ts +4 -0
  169. package/dist/src/templates/pubkey/index.d.ts.map +1 -0
  170. package/dist/src/templates/pubkey/index.js +8 -0
  171. package/dist/src/templates/pubkey/input.d.ts +7 -0
  172. package/dist/src/templates/pubkey/input.d.ts.map +1 -0
  173. package/dist/src/templates/pubkey/input.js +14 -0
  174. package/dist/src/templates/pubkey/output.d.ts +7 -0
  175. package/dist/src/templates/pubkey/output.d.ts.map +1 -0
  176. package/dist/src/templates/pubkey/output.js +15 -0
  177. package/dist/src/templates/pubkeyhash/index.d.ts +4 -0
  178. package/dist/src/templates/pubkeyhash/index.d.ts.map +1 -0
  179. package/dist/src/templates/pubkeyhash/index.js +8 -0
  180. package/dist/src/templates/pubkeyhash/input.d.ts +7 -0
  181. package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -0
  182. package/dist/src/templates/pubkeyhash/input.js +16 -0
  183. package/dist/src/templates/pubkeyhash/output.d.ts +6 -0
  184. package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -0
  185. package/dist/src/templates/pubkeyhash/output.js +20 -0
  186. package/dist/src/templates/scripthash/index.d.ts +4 -0
  187. package/dist/src/templates/scripthash/index.d.ts.map +1 -0
  188. package/dist/src/templates/scripthash/index.js +8 -0
  189. package/dist/src/templates/scripthash/input.d.ts +6 -0
  190. package/dist/src/templates/scripthash/input.d.ts.map +1 -0
  191. package/dist/src/templates/scripthash/input.js +43 -0
  192. package/dist/src/templates/scripthash/output.d.ts +6 -0
  193. package/dist/src/templates/scripthash/output.d.ts.map +1 -0
  194. package/dist/src/templates/scripthash/output.js +15 -0
  195. package/dist/src/templates/taproot/index.d.ts +4 -0
  196. package/dist/src/templates/taproot/index.d.ts.map +1 -0
  197. package/dist/src/templates/taproot/index.js +8 -0
  198. package/dist/src/templates/taproot/input.d.ts +6 -0
  199. package/dist/src/templates/taproot/input.d.ts.map +1 -0
  200. package/dist/src/templates/taproot/input.js +23 -0
  201. package/dist/src/templates/taproot/output.d.ts +6 -0
  202. package/dist/src/templates/taproot/output.d.ts.map +1 -0
  203. package/dist/src/templates/taproot/output.js +15 -0
  204. package/dist/src/templates/taprootnofn/index.d.ts +4 -0
  205. package/dist/src/templates/taprootnofn/index.d.ts.map +1 -0
  206. package/dist/src/templates/taprootnofn/index.js +8 -0
  207. package/dist/src/templates/taprootnofn/input.d.ts +7 -0
  208. package/dist/src/templates/taprootnofn/input.d.ts.map +1 -0
  209. package/dist/src/templates/taprootnofn/input.js +24 -0
  210. package/dist/src/templates/taprootnofn/output.d.ts +7 -0
  211. package/dist/src/templates/taprootnofn/output.d.ts.map +1 -0
  212. package/dist/src/templates/taprootnofn/output.js +28 -0
  213. package/dist/src/templates/witnesscommitment/index.d.ts +3 -0
  214. package/dist/src/templates/witnesscommitment/index.d.ts.map +1 -0
  215. package/dist/src/templates/witnesscommitment/index.js +6 -0
  216. package/dist/src/templates/witnesscommitment/output.d.ts +8 -0
  217. package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -0
  218. package/dist/src/templates/witnesscommitment/output.js +31 -0
  219. package/dist/src/templates/witnesspubkeyhash/index.d.ts +4 -0
  220. package/dist/src/templates/witnesspubkeyhash/index.d.ts.map +1 -0
  221. package/dist/src/templates/witnesspubkeyhash/index.js +8 -0
  222. package/dist/src/templates/witnesspubkeyhash/input.d.ts +7 -0
  223. package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -0
  224. package/dist/src/templates/witnesspubkeyhash/input.js +19 -0
  225. package/dist/src/templates/witnesspubkeyhash/output.d.ts +6 -0
  226. package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -0
  227. package/dist/src/templates/witnesspubkeyhash/output.js +15 -0
  228. package/dist/src/templates/witnessscripthash/index.d.ts +4 -0
  229. package/dist/src/templates/witnessscripthash/index.d.ts.map +1 -0
  230. package/dist/src/templates/witnessscripthash/index.js +8 -0
  231. package/dist/src/templates/witnessscripthash/input.d.ts +6 -0
  232. package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -0
  233. package/dist/src/templates/witnessscripthash/input.js +35 -0
  234. package/dist/src/templates/witnessscripthash/output.d.ts +6 -0
  235. package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -0
  236. package/dist/src/templates/witnessscripthash/output.js +15 -0
  237. package/dist/src/testutil/index.d.ts +3 -0
  238. package/dist/src/testutil/index.d.ts.map +1 -0
  239. package/dist/src/testutil/index.js +15 -0
  240. package/dist/src/testutil/keys.d.ts +10 -0
  241. package/dist/src/testutil/keys.d.ts.map +1 -0
  242. package/dist/src/testutil/keys.js +40 -0
  243. package/dist/src/testutil/mock.d.ts +21 -0
  244. package/dist/src/testutil/mock.d.ts.map +1 -0
  245. package/dist/src/testutil/mock.js +86 -0
  246. package/dist/src/transaction_builder.d.ts +47 -0
  247. package/dist/src/transaction_builder.d.ts.map +1 -0
  248. package/dist/src/transaction_builder.js +1084 -0
  249. package/package.json +87 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.musig = exports.bip32 = exports.ECPair = exports.ecc = void 0;
4
+ const createHash = require("create-hash");
5
+ const createHmac = require("create-hmac");
6
+ const ecpair_1 = require("ecpair");
7
+ const necc = require("@noble/secp256k1");
8
+ const bip32_1 = require("bip32");
9
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
10
+ // @ts-ignore base_crypto is exported as a subPath export, ignoring since compiler complains about importing like this
11
+ const baseCrypto = require("@brandonblack/musig/base_crypto");
12
+ const musig_1 = require("@brandonblack/musig");
13
+ necc.utils.sha256Sync = (...messages) => {
14
+ const sha256 = createHash('sha256');
15
+ for (const message of messages)
16
+ sha256.update(message);
17
+ return sha256.digest();
18
+ };
19
+ necc.utils.hmacSha256Sync = (key, ...messages) => {
20
+ const hash = createHmac('sha256', Buffer.from(key));
21
+ messages.forEach((m) => hash.update(m));
22
+ return Uint8Array.from(hash.digest());
23
+ };
24
+ const defaultTrue = (param) => param !== false;
25
+ function throwToNull(fn) {
26
+ try {
27
+ return fn();
28
+ }
29
+ catch (e) {
30
+ return null;
31
+ }
32
+ }
33
+ function isPoint(p, xOnly) {
34
+ if ((p.length === 32) !== xOnly)
35
+ return false;
36
+ try {
37
+ return !!necc.Point.fromHex(p);
38
+ }
39
+ catch (e) {
40
+ return false;
41
+ }
42
+ }
43
+ function toBigInt(b) {
44
+ return Buffer.from(b).readBigUint64BE();
45
+ }
46
+ const ecc = {
47
+ isPoint: (p) => isPoint(p, false),
48
+ isPrivate: (d) => necc.utils.isValidPrivateKey(d),
49
+ isXOnlyPoint: (p) => isPoint(p, true),
50
+ xOnlyPointAddTweak: (p, tweak) => throwToNull(() => {
51
+ const P = necc.utils.pointAddScalar(p, tweak, true);
52
+ const parity = P[0] % 2 === 1 ? 1 : 0;
53
+ return { parity, xOnlyPubkey: P.slice(1) };
54
+ }),
55
+ pointFromScalar: (sk, compressed) => throwToNull(() => necc.getPublicKey(sk, defaultTrue(compressed))),
56
+ pointCompress: (p, compressed) => {
57
+ return necc.Point.fromHex(p).toRawBytes(defaultTrue(compressed));
58
+ },
59
+ pointMultiply: (a, tweak, compressed) => throwToNull(() => necc.utils.pointMultiply(a, tweak, defaultTrue(compressed))),
60
+ pointAdd: (a, b, compressed) => throwToNull(() => {
61
+ const A = necc.Point.fromHex(a);
62
+ const B = necc.Point.fromHex(b);
63
+ return A.add(B).toRawBytes(defaultTrue(compressed));
64
+ }),
65
+ pointAddScalar: (p, tweak, compressed) => throwToNull(() => necc.utils.pointAddScalar(p, tweak, defaultTrue(compressed))),
66
+ privateAdd: (d, tweak) => throwToNull(() => {
67
+ const res = necc.utils.privateAdd(d, tweak);
68
+ // tiny-secp256k1 returns null rather than allowing a 0 private key to be returned
69
+ // ECPair.testEcc() requires that behavior.
70
+ if (res === null || res === void 0 ? void 0 : res.every((i) => i === 0))
71
+ return null;
72
+ return res;
73
+ }),
74
+ privateNegate: (d) => necc.utils.privateNegate(d),
75
+ sign: (h, d, e) => {
76
+ return necc.signSync(h, d, { der: false, extraEntropy: e });
77
+ },
78
+ signSchnorr: (h, d, e = Buffer.alloc(32, 0x00)) => {
79
+ return necc.schnorr.signSync(h, d, e);
80
+ },
81
+ verify: (h, Q, signature, strict) => {
82
+ return necc.verify(signature, h, Q, { strict });
83
+ },
84
+ verifySchnorr: (h, Q, signature) => {
85
+ return necc.schnorr.verifySync(signature, h, Q);
86
+ },
87
+ };
88
+ exports.ecc = ecc;
89
+ const crypto = {
90
+ ...baseCrypto,
91
+ pointMultiplyUnsafe(p, a, compress) {
92
+ try {
93
+ const product = necc.Point.fromHex(p).multiplyAndAddUnsafe(necc.Point.ZERO, toBigInt(a), BigInt(1));
94
+ if (!product)
95
+ return null;
96
+ return product.toRawBytes(compress);
97
+ }
98
+ catch {
99
+ return null;
100
+ }
101
+ },
102
+ pointMultiplyAndAddUnsafe(p1, a, p2, compress) {
103
+ try {
104
+ const p2p = necc.Point.fromHex(p2);
105
+ const p = necc.Point.fromHex(p1).multiplyAndAddUnsafe(p2p, toBigInt(a), BigInt(1));
106
+ if (!p)
107
+ return null;
108
+ return p.toRawBytes(compress);
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ },
114
+ pointAdd(a, b, compress) {
115
+ try {
116
+ return necc.Point.fromHex(a).add(necc.Point.fromHex(b)).toRawBytes(compress);
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ },
122
+ pointAddTweak(p, tweak, compress) {
123
+ try {
124
+ const P = necc.Point.fromHex(p);
125
+ const t = baseCrypto.readSecret(tweak);
126
+ const Q = necc.Point.BASE.multiplyAndAddUnsafe(P, t, BigInt(1));
127
+ if (!Q)
128
+ throw new Error('Tweaked point at infinity');
129
+ return Q.toRawBytes(compress);
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ },
135
+ pointCompress(p, compress = true) {
136
+ return necc.Point.fromHex(p).toRawBytes(compress);
137
+ },
138
+ liftX(p) {
139
+ try {
140
+ return necc.Point.fromHex(p).toRawBytes(false);
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ },
146
+ getPublicKey(s, compress) {
147
+ try {
148
+ return necc.getPublicKey(s, compress);
149
+ }
150
+ catch {
151
+ return null;
152
+ }
153
+ },
154
+ taggedHash: necc.utils.taggedHashSync,
155
+ sha256(...messages) {
156
+ const sha256 = createHash('sha256');
157
+ for (const message of messages)
158
+ sha256.update(message);
159
+ return sha256.digest();
160
+ },
161
+ };
162
+ const ECPair = ecpair_1.ECPairFactory(ecc);
163
+ exports.ECPair = ECPair;
164
+ const bip32 = bip32_1.BIP32Factory(ecc);
165
+ exports.bip32 = bip32;
166
+ const musig = musig_1.MuSigFactory(crypto);
167
+ exports.musig = musig;
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ibGVfZWNjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vYmxlX2VjYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBMEM7QUFDMUMsMENBQTBDO0FBQzFDLG1DQUFtRTtBQUNuRSx5Q0FBeUM7QUFDekMsaUNBQStEO0FBQy9ELDZEQUE2RDtBQUM3RCxzSEFBc0g7QUFDdEgsOERBQThEO0FBQzlELCtDQUEwRDtBQUUxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsUUFBc0IsRUFBYyxFQUFFO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVE7UUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBZSxFQUFFLEdBQUcsUUFBc0IsRUFBYyxFQUFFO0lBQ3JGLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFlLEVBQVcsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7QUFFbEUsU0FBUyxXQUFXLENBQU8sRUFBYztJQUN2QyxJQUFJO1FBQ0YsT0FBTyxFQUFFLEVB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QyxzQkFBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyZWF0ZUhhc2ggZnJvbSAnY3JlYXRlLWhhc2gnO1xuaW1wb3J0ICogYXMgY3JlYXRlSG1hYyBmcm9tICdjcmVhdGUtaG1hYyc7XG5pbXBvcnQgeyBFQ1BhaXJBUEksIEVDUGFpckZhY3RvcnksIEVDUGFpckludGVyZmFjZSB9IGZyb20gJ2VjcGFpcic7XG5pbXBvcnQgKiBhcyBuZWNjIGZyb20gJ0Bub2JsZS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgQklQMzJBUEksIEJJUDMyRmFjdG9yeSwgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdiaXAzMic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlIGJhc2VfY3J5cHRvIGlzIGV4cG9ydGVkIGFzIGEgc3ViUGF0aCBleHBvcnQsIGlnbm9yaW5nIHNpbmNlIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBpbXBvcnRpbmcgbGlrZSB0aGlzXG5pbXBvcnQgKiBhcyBiYXNlQ3J5cHRvIGZyb20gJ0BicmFuZG9uYmxhY2svbXVzaWcvYmFzZV9jcnlwdG8nO1xuaW1wb3J0IHsgTXVTaWcsIE11U2lnRmFjdG9yeSB9IGZyb20gJ0BicmFuZG9uYmxhY2svbXVzaWcnO1xuXG5uZWNjLnV0aWxzLnNoYTI1NlN5bmMgPSAoLi4ubWVzc2FnZXM6IFVpbnQ4QXJyYXlbXSk6IFVpbnQ4QXJyYXkgPT4ge1xuICBjb25zdCBzaGEyNTYgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSBzaGEyNTYudXBkYXRlKG1lc3NhZ2UpO1xuICByZXR1cm4gc2hhMjU2LmRpZ2VzdCgpO1xufTtcblxubmVjYy51dGlscy5obWFjU2hhMjU2U3luYyA9IChrZXk6IFVpbnQ4QXJyYXksIC4uLm1lc3NhZ2VzOiBVaW50OEFycmF5W10pOiBVaW50OEFycmF5ID0+IHtcbiAgY29uc3QgaGFzaCA9IGNyZWF0ZUhtYWMoJ3NoYTI1NicsIEJ1ZmZlci5mcm9tKGtleSkpO1xuICBtZXNzYWdlcy5mb3JFYWNoKChtKSA9PiBoYXNoLnVwZGF0ZShtKSk7XG4gIHJldHVybiBVaW50OEFycmF5LmZyb20oaGFzaC5kaWdlc3QoKSk7XG59O1xuXG5jb25zdCBkZWZhdWx0VHJ1ZSA9IChwYXJhbT86IGJvb2xlYW4pOiBib29sZWFuID0+IHBhcmFtICE9PSBmYWxzZTtcblxuZnVuY3Rpb24gdGhyb3dUb051bGw8VHlwZT4oZm46ICgpID0+IFR5cGUpOiBUeXBlIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BvaW50KHA6IFVpbnQ4QXJyYXksIHhPbmx5OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGlmICgocC5sZW5ndGggPT09IDMyKSAhPT0geE9ubHkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFuZWNjLlBvaW50LmZyb21IZXgocCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9CaWdJbnQoYjogVWludDhBcnJheSB8IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShiKS5yZWFkQmlnVWludDY0QkUoKTtcbn1cblxuY29uc3QgZWNjID0ge1xuICBpc1BvaW50OiAocDogVWludDhBcnJheSk6IGJvb2xlYW4gPT4gaXNQb2ludChwLCBmYWxzZSksXG4gIGlzUHJpdmF0ZTogKGQ6IFVpbnQ4QXJyYXkpOiBib29sZWFuID0+IG5lY2MudXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoZCksXG4gIGlzWE9ubHlQb2ludDogKHA6IFVpbnQ4QXJyYXkpOiBib29sZWFuID0+IGlzUG9pbnQocCwgdHJ1ZSksXG5cbiAgeE9ubHlQb2ludEFkZFR3ZWFrOiAocDogVWludDhBcnJheSwgdHdlYWs6IFVpbnQ4QXJyYXkpOiB7IHBhcml0eTogMCB8IDE7IHhPbmx5UHVia2V5OiBVaW50OEFycmF5IH0gfCBudWxsID0+XG4gICAgdGhyb3dUb051bGwoKCkgPT4ge1xuICAgICAgY29uc3QgUCA9IG5lY2MudXRpbHMucG9pbnRBZGRTY2FsYXIocCwgdHdlYWssIHRydWUpO1xuICAgICAgY29uc3QgcGFyaXR5ID0gUFswXSAlIDIgPT09IDEgPyAxIDogMDtcbiAgICAgIHJldHVybiB7IHBhcml0eSwgeE9ubHlQdWJrZXk6IFAuc2xpY2UoMSkgfTtcbiAgICB9KSxcblxuICBwb2ludEZyb21TY2FsYXI6IChzazogVWludDhBcnJheSwgY29tcHJlc3NlZD86IGJvb2xlYW4pOiBVaW50OEFycmF5IHwgbnVsbCA9PlxuICAgIHRocm93VG9OdWxsKCgpID0+IG5lY2MuZ2V0UHVibGljS2V5KHNrLCBkZWZhdWx0VHJ1ZShjb21wcmVzc2VkKSkpLFxuXG4gIHBvaW50Q29tcHJlc3M6IChwOiBVaW50OEFycmF5LCBjb21wcmVzc2VkPzogYm9vbGVhbik6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBuZWNjLlBvaW50LmZyb21IZXgocCkudG9SYXdCeXRlcyhkZWZhdWx0VHJ1ZShjb21wcmVzc2VkKSk7XG4gIH0sXG5cbiAgcG9pbnRNdWx0aXBseTogKGE6IFVpbnQ4QXJyYXksIHR3ZWFrOiBVaW50OEFycmF5LCBjb21wcmVzc2VkPzogYm9vbGVhbik6IFVpbnQ4QXJyYXkgfCBudWxsID0+XG4gICAgdGhyb3dUb051bGwoKCkgPT4gbmVjYy51dGlscy5wb2ludE11bHRpcGx5KGEsIHR3ZWFrLCBkZWZhdWx0VHJ1ZShjb21wcmVzc2VkKSkpLFxuXG4gIHBvaW50QWRkOiAoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSwgY29tcHJlc3NlZD86IGJvb2xlYW4pOiBVaW50OEFycmF5IHwgbnVsbCA9PlxuICAgIHRocm93VG9OdWxsKCgpID0+IHtcbiAgICAgIGNvbnN0IEEgPSBuZWNjLlBvaW50LmZyb21IZXgoYSk7XG4gICAgICBjb25zdCBCID0gbmVjYy5Qb2ludC5mcm9tSGV4KGIpO1xuICAgICAgcmV0dXJuIEEuYWRkKEIpLnRvUmF3Qnl0ZXMoZGVmYXVsdFRydWUoY29tcHJlc3NlZCkpO1xuICAgIH0pLFxuXG4gIHBvaW50QWRkU2NhbGFyOiAocDogVWludDhBcnJheSwgdHdlYWs6IFVpbnQ4QXJyYXksIGNvbXByZXNzZWQ/OiBib29sZWFuKTogVWludDhBcnJheSB8IG51bGwgPT5cbiAgICB0aHJvd1RvTnVsbCgoKSA9PiBuZWNjLnV0aWxzLnBvaW50QWRkU2NhbGFyKHAsIHR3ZWFrLCBkZWZhdWx0VHJ1ZShjb21wcmVzc2VkKSkpLFxuXG4gIHByaXZhdGVBZGQ6IChkOiBVaW50OEFycmF5LCB0d2VhazogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgfCBudWxsID0+XG4gICAgdGhyb3dUb051bGwoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gbmVjYy51dGlscy5wcml2YXRlQWRkKGQsIHR3ZWFrKTtcbiAgICAgIC8vIHRpbnktc2VjcDI1NmsxIHJldHVybnMgbnVsbCByYXRoZXIgdGhhbiBhbGxvd2luZyBhIDAgcHJpdmF0ZSBrZXkgdG8gYmUgcmV0dXJuZWRcbiAgICAgIC8vIEVDUGFpci50ZXN0RWNjKCkgcmVxdWlyZXMgdGhhdCBiZWhhdmlvci5cbiAgICAgIGlmIChyZXM/LmV2ZXJ5KChpKSA9PiBpID09PSAwKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pLFxuXG4gIHByaXZhdGVOZWdhdGU6IChkOiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiBuZWNjLnV0aWxzLnByaXZhdGVOZWdhdGUoZCksXG5cbiAgc2lnbjogKGg6IFVpbnQ4QXJyYXksIGQ6IFVpbnQ4QXJyYXksIGU/OiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgcmV0dXJuIG5lY2Muc2lnblN5bmMoaCwgZCwgeyBkZXI6IGZhbHNlLCBleHRyYUVudHJvcHk6IGUgfSk7XG4gIH0sXG5cbiAgc2lnblNjaG5vcnI6IChoOiBVaW50OEFycmF5LCBkOiBVaW50OEFycmF5LCBlOiBVaW50OEFycmF5ID0gQnVmZmVyLmFsbG9jKDMyLCAweDAwKSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBuZWNjLnNjaG5vcnIuc2lnblN5bmMoaCwgZCwgZSk7XG4gIH0sXG5cbiAgdmVyaWZ5OiAoaDogVWludDhBcnJheSwgUTogVWludDhBcnJheSwgc2lnbmF0dXJlOiBVaW50OEFycmF5LCBzdHJpY3Q/OiBib29sZWFuKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIG5lY2MudmVyaWZ5KHNpZ25hdHVyZSwgaCwgUSwgeyBzdHJpY3QgfSk7XG4gIH0sXG5cbiAgdmVyaWZ5U2Nobm9ycjogKGg6IFVpbnQ4QXJyYXksIFE6IFVpbnQ4QXJyYXksIHNpZ25hdHVyZTogVWludDhBcnJheSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBuZWNjLnNjaG5vcnIudmVyaWZ5U3luYyhzaWduYXR1cmUsIGgsIFEpO1xuICB9LFxufTtcblxuY29uc3QgY3J5cHRvID0ge1xuICAuLi5iYXNlQ3J5cHRvLFxuICBwb2ludE11bHRpcGx5VW5zYWZlKHA6IFVpbnQ4QXJyYXksIGE6IFVpbnQ4QXJyYXksIGNvbXByZXNzOiBib29sZWFuKTogVWludDhBcnJheSB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm9kdWN0ID0gbmVjYy5Qb2ludC5mcm9tSGV4KHApLm11bHRpcGx5QW5kQWRkVW5zYWZlKG5lY2MuUG9pbnQuWkVSTywgdG9CaWdJbnQoYSksIEJpZ0ludCgxKSk7XG4gICAgICBpZiAoIXByb2R1Y3QpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHByb2R1Y3QudG9SYXdCeXRlcyhjb21wcmVzcyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sXG4gIHBvaW50TXVsdGlwbHlBbmRBZGRVbnNhZmUocDE6IFVpbnQ4QXJyYXksIGE6IFVpbnQ4QXJyYXksIHAyOiBVaW50OEFycmF5LCBjb21wcmVzczogYm9vbGVhbik6IFVpbnQ4QXJyYXkgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcDJwID0gbmVjYy5Qb2ludC5mcm9tSGV4KHAyKTtcbiAgICAgIGNvbnN0IHAgPSBuZWNjLlBvaW50LmZyb21IZXgocDEpLm11bHRpcGx5QW5kQWRkVW5zYWZlKHAycCwgdG9CaWdJbnQoYSksIEJpZ0ludCgxKSk7XG4gICAgICBpZiAoIXApIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHAudG9SYXdCeXRlcyhjb21wcmVzcyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sXG4gIHBvaW50QWRkKGE6IFVpbnQ4QXJyYXksIGI6IFVpbnQ4QXJyYXksIGNvbXByZXNzOiBib29sZWFuKTogVWludDhBcnJheSB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmVjYy5Qb2ludC5mcm9tSGV4KGEpLmFkZChuZWNjLlBvaW50LmZyb21IZXgoYikpLnRvUmF3Qnl0ZXMoY29tcHJlc3MpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuICBwb2ludEFkZFR3ZWFrKHA6IFVpbnQ4QXJyYXksIHR3ZWFrOiBVaW50OEFycmF5LCBjb21wcmVzczogYm9vbGVhbik6IFVpbnQ4QXJyYXkgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgUCA9IG5lY2MuUG9pbnQuZnJvbUhleChwKTtcbiAgICAgIGNvbnN0IHQgPSBiYXNlQ3J5cHRvLnJlYWRTZWNyZXQodHdlYWspO1xuICAgICAgY29uc3QgUSA9IG5lY2MuUG9pbnQuQkFTRS5tdWx0aXBseUFuZEFkZFVuc2FmZShQLCB0LCBCaWdJbnQoMSkpO1xuICAgICAgaWYgKCFRKSB0aHJvdyBuZXcgRXJyb3IoJ1R3ZWFrZWQgcG9pbnQgYXQgaW5maW5pdHknKTtcbiAgICAgIHJldHVybiBRLnRvUmF3Qnl0ZXMoY29tcHJlc3MpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuICBwb2ludENvbXByZXNzKHA6IFVpbnQ4QXJyYXksIGNvbXByZXNzID0gdHJ1ZSk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBuZWNjLlBvaW50LmZyb21IZXgocCkudG9SYXdCeXRlcyhjb21wcmVzcyk7XG4gIH0sXG4gIGxpZnRYKHA6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZWNjLlBvaW50LmZyb21IZXgocCkudG9SYXdCeXRlcyhmYWxzZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sXG4gIGdldFB1YmxpY0tleShzOiBVaW50OEFycmF5LCBjb21wcmVzczogYm9vbGVhbik6IFVpbnQ4QXJyYXkgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5lY2MuZ2V0UHVibGljS2V5KHMsIGNvbXByZXNzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSxcbiAgdGFnZ2VkSGFzaDogbmVjYy51dGlscy50YWdnZWRIYXNoU3luYyxcbiAgc2hhMjU2KC4uLm1lc3NhZ2VzOiBVaW50OEFycmF5W10pOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCBzaGEyNTYgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHNoYTI1Ni51cGRhdGUobWVzc2FnZSk7XG4gICAgcmV0dXJuIHNoYTI1Ni5kaWdlc3QoKTtcbiAgfSxcbn07XG5cbmNvbnN0IEVDUGFpcjogRUNQYWlyQVBJID0gRUNQYWlyRmFjdG9yeShlY2MpO1xuY29uc3QgYmlwMzI6IEJJUDMyQVBJID0gQklQMzJGYWN0b3J5KGVjYyk7XG5jb25zdCBtdXNpZzogTXVTaWcgPSBNdVNpZ0ZhY3RvcnkoY3J5cHRvKTtcblxuZXhwb3J0IHsgZWNjLCBFQ1BhaXIsIEVDUGFpckFQSSwgRUNQYWlySW50ZXJmYWNlLCBiaXAzMiwgQklQMzJBUEksIEJJUDMySW50ZXJmYWNlLCBtdXNpZywgTXVTaWcgfTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { p2tr_ns } from './p2tr_ns';
2
+ import { p2tr } from './p2tr';
3
+ export { p2tr_ns, p2tr };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/payments/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.p2tr = exports.p2tr_ns = void 0;
4
+ const p2tr_ns_1 = require("./p2tr_ns");
5
+ Object.defineProperty(exports, "p2tr_ns", { enumerable: true, get: function () { return p2tr_ns_1.p2tr_ns; } });
6
+ const p2tr_1 = require("./p2tr");
7
+ Object.defineProperty(exports, "p2tr", { enumerable: true, get: function () { return p2tr_1.p2tr; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGF5bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW9DO0FBRzNCLHdGQUhBLGlCQUFPLE9BR0E7QUFGaEIsaUNBQThCO0FBRVoscUZBRlQsV0FBSSxPQUVTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcDJ0cl9ucyB9IGZyb20gJy4vcDJ0cl9ucyc7XG5pbXBvcnQgeyBwMnRyIH0gZnJvbSAnLi9wMnRyJztcblxuZXhwb3J0IHsgcDJ0cl9ucywgcDJ0ciB9O1xuIl19
@@ -0,0 +1,3 @@
1
+ import { Payment, PaymentOpts } from 'bitcoinjs-lib';
2
+ export declare function p2tr(a: Payment, opts?: PaymentOpts): Payment;
3
+ //# sourceMappingURL=p2tr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2tr.d.ts","sourceRoot":"","sources":["../../../src/payments/p2tr.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,OAAO,EAAE,WAAW,EAAQ,MAAM,eAAe,CAAC;AAgC9E,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAwU5D"}
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ // SegWit version 1 P2TR output type for Taproot defined in
3
+ // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.p2tr = void 0;
6
+ const networks_1 = require("../networks");
7
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
8
+ const taproot = require("../taproot");
9
+ const noble_ecc_1 = require("../noble_ecc");
10
+ const necc = require("@noble/secp256k1");
11
+ const typef = require('typeforce');
12
+ const OPS = bitcoinjs_lib_1.script.OPS;
13
+ const { bech32m } = require('bech32');
14
+ const BITCOIN_NETWORK = networks_1.networks.bitcoin;
15
+ /**
16
+ * A secp256k1 x coordinate with unknown discrete logarithm used for eliminating
17
+ * keypath spends, equal to SHA256(uncompressedDER(SECP256K1_GENERATOR_POINT)).
18
+ */
19
+ const H = Buffer.from('50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0', 'hex');
20
+ const EMPTY_BUFFER = Buffer.alloc(0);
21
+ function isPlainPubkey(pubKey) {
22
+ if (pubKey.length !== 33)
23
+ return false;
24
+ try {
25
+ return !!necc.Point.fromHex(pubKey);
26
+ }
27
+ catch (e) {
28
+ return false;
29
+ }
30
+ }
31
+ function isPlainPubkeys(pubkeys) {
32
+ return pubkeys.every(isPlainPubkey);
33
+ }
34
+ // output: OP_1 {witnessProgram}
35
+ function p2tr(a, opts) {
36
+ var _a, _b, _c, _d;
37
+ if (!a.address && !a.pubkey && !a.pubkeys && !(a.redeems && a.redeems.length) && !a.output && !a.witness) {
38
+ throw new TypeError('Not enough data');
39
+ }
40
+ opts = Object.assign({ validate: true }, opts || {});
41
+ if (!opts.eccLib)
42
+ throw new Error('ECC Library is required for p2tr.');
43
+ const ecc = opts.eccLib;
44
+ typef({
45
+ network: typef.maybe(typef.Object),
46
+ address: typef.maybe(typef.String),
47
+ // the output script should be a fixed 34 bytes.
48
+ // 1 byte for OP_1 indicating segwit version 1, one byte for 0x20 to push
49
+ // the next 32 bytes, followed by the 32 byte witness program
50
+ output: typef.maybe(typef.BufferN(34)),
51
+ // a single pubkey
52
+ pubkey: typef.maybe(ecc.isXOnlyPoint),
53
+ // the pub key(s) used for keypath signing.
54
+ // aggregated with MuSig2* if > 1
55
+ pubkeys: typef.maybe(typef.anyOf(typef.arrayOf(ecc.isXOnlyPoint), typef.arrayOf(isPlainPubkey))),
56
+ redeems: typef.maybe(typef.arrayOf({
57
+ network: typef.maybe(typef.Object),
58
+ output: typef.maybe(typef.Buffer),
59
+ weight: typef.maybe(typef.Number),
60
+ depth: typef.maybe(typef.Number),
61
+ witness: typef.maybe(typef.arrayOf(typef.Buffer)),
62
+ })),
63
+ redeemIndex: typef.maybe(typef.Number),
64
+ signature: typef.maybe(bitcoinjs_lib_1.script.isCanonicalSchnorrSignature),
65
+ controlBlock: typef.maybe(typef.Buffer),
66
+ annex: typef.maybe(typef.Buffer),
67
+ }, a);
68
+ const _address = bitcoinjs_lib_1.lazy.value(() => {
69
+ if (!a.address)
70
+ return undefined;
71
+ const result = bech32m.decode(a.address);
72
+ const version = result.words.shift();
73
+ const data = bech32m.fromWords(result.words);
74
+ return {
75
+ version,
76
+ prefix: result.prefix,
77
+ data: Buffer.from(data),
78
+ };
79
+ });
80
+ const _outputPubkey = bitcoinjs_lib_1.lazy.value(() => {
81
+ // we remove the first two bytes (OP_1 0x20) from the output script to
82
+ // extract the 32 byte taproot pubkey (aka witness program)
83
+ return a.output && a.output.slice(2);
84
+ });
85
+ const network = a.network || BITCOIN_NETWORK;
86
+ const o = { network };
87
+ const _taprootPaths = bitcoinjs_lib_1.lazy.value(() => {
88
+ if (!a.redeems)
89
+ return;
90
+ if (o.tapTree) {
91
+ return taproot.getDepthFirstTaptree(o.tapTree);
92
+ }
93
+ const outputs = a.redeems.map(({ output }) => output);
94
+ if (!outputs.every((output) => output))
95
+ return;
96
+ return taproot.getHuffmanTaptree(outputs, a.redeems.map(({ weight }) => weight));
97
+ });
98
+ const _parsedWitness = bitcoinjs_lib_1.lazy.value(() => {
99
+ if (!a.witness)
100
+ return;
101
+ return taproot.parseTaprootWitness(a.witness);
102
+ });
103
+ const _parsedControlBlock = bitcoinjs_lib_1.lazy.value(() => {
104
+ // Can't use o.controlBlock, because it could be circular
105
+ if (a.controlBlock)
106
+ return taproot.parseControlBlock(ecc, a.controlBlock);
107
+ const parsedWitness = _parsedWitness();
108
+ if (parsedWitness && parsedWitness.spendType === 'Script') {
109
+ return taproot.parseControlBlock(ecc, parsedWitness.controlBlock);
110
+ }
111
+ });
112
+ bitcoinjs_lib_1.lazy.prop(o, 'internalPubkey', () => {
113
+ var _a;
114
+ if (a.pubkey) {
115
+ // single pubkey
116
+ return a.pubkey;
117
+ }
118
+ else if (a.pubkeys && a.pubkeys.length === 1) {
119
+ return a.pubkeys[0];
120
+ }
121
+ else if (a.pubkeys && a.pubkeys.length > 1) {
122
+ // multiple pubkeys
123
+ if (isPlainPubkeys(a.pubkeys)) {
124
+ return Buffer.from(noble_ecc_1.musig.getXOnlyPubkey(noble_ecc_1.musig.keyAgg(noble_ecc_1.musig.keySort(a.pubkeys))));
125
+ }
126
+ return Buffer.from(taproot.aggregateMuSigPubkeys(ecc, a.pubkeys));
127
+ }
128
+ else if (_parsedControlBlock()) {
129
+ return (_a = _parsedControlBlock()) === null || _a === void 0 ? void 0 : _a.internalPubkey;
130
+ }
131
+ else {
132
+ // If there is no key path spending condition, we use an internal key with unknown secret key.
133
+ // TODO: In order to avoid leaking the information that key path spending is not possible it
134
+ // is recommended to pick a fresh integer r in the range 0...n-1 uniformly at random and use
135
+ // H + rG as internal key. It is possible to prove that this internal key does not have a
136
+ // known discrete logarithm with respect to G by revealing r to a verifier who can then
137
+ // reconstruct how the internal key was created.
138
+ return H;
139
+ }
140
+ });
141
+ const _taprootPubkey = bitcoinjs_lib_1.lazy.value(() => {
142
+ var _a;
143
+ const parsedControlBlock = _parsedControlBlock();
144
+ const parsedWitness = _parsedWitness();
145
+ // Refuse to create an unspendable key
146
+ if (!a.pubkey && !(a.pubkeys && a.pubkeys.length) && !a.redeems && !parsedControlBlock) {
147
+ return;
148
+ }
149
+ let taptreeRoot;
150
+ // Prefer to get the root via the control block because not all redeems may
151
+ // be available
152
+ if (parsedControlBlock) {
153
+ let tapscript;
154
+ if (parsedWitness && parsedWitness.spendType === 'Script') {
155
+ tapscript = parsedWitness.tapscript;
156
+ }
157
+ else if (o.redeem && o.redeem.output) {
158
+ tapscript = o.redeem.output;
159
+ }
160
+ if (tapscript)
161
+ taptreeRoot = taproot.getTaptreeRoot(ecc, parsedControlBlock, tapscript);
162
+ }
163
+ if (!taptreeRoot && _taprootPaths())
164
+ taptreeRoot = (_a = _taprootPaths()) === null || _a === void 0 ? void 0 : _a.root;
165
+ return taproot.tapTweakPubkey(ecc, o === null || o === void 0 ? void 0 : o.internalPubkey, taptreeRoot);
166
+ });
167
+ bitcoinjs_lib_1.lazy.prop(o, 'tapTree', () => {
168
+ if (!a.redeems)
169
+ return;
170
+ if (a.redeems.find(({ depth }) => depth === undefined)) {
171
+ console.warn('Deprecation Warning: Weight-based tap tree construction will be removed in the future. ' +
172
+ 'Please use depth-first coding as specified in BIP-0371.');
173
+ return;
174
+ }
175
+ if (!a.redeems.every(({ output }) => output))
176
+ return;
177
+ return {
178
+ leaves: a.redeems.map(({ output, depth }) => {
179
+ return {
180
+ script: output,
181
+ leafVersion: taproot.INITIAL_TAPSCRIPT_VERSION,
182
+ depth,
183
+ };
184
+ }),
185
+ };
186
+ });
187
+ bitcoinjs_lib_1.lazy.prop(o, 'address', () => {
188
+ var _a;
189
+ const pubkey = _outputPubkey() || (_taprootPubkey() && ((_a = _taprootPubkey()) === null || _a === void 0 ? void 0 : _a.xOnlyPubkey));
190
+ // only encode the 32 byte witness program as bech32m
191
+ const words = bech32m.toWords(pubkey);
192
+ words.unshift(0x01);
193
+ return bech32m.encode(network.bech32, words);
194
+ });
195
+ bitcoinjs_lib_1.lazy.prop(o, 'controlBlock', () => {
196
+ const parsedWitness = _parsedWitness();
197
+ if (parsedWitness && parsedWitness.spendType === 'Script') {
198
+ return parsedWitness.controlBlock;
199
+ }
200
+ const taprootPubkey = _taprootPubkey();
201
+ const taprootPaths = _taprootPaths();
202
+ if (!taprootPaths || !taprootPubkey || a.redeemIndex === undefined)
203
+ return;
204
+ return taproot.getControlBlock(taprootPubkey.parity, o.internalPubkey, taprootPaths.paths[a.redeemIndex]);
205
+ });
206
+ bitcoinjs_lib_1.lazy.prop(o, 'signature', () => {
207
+ const parsedWitness = _parsedWitness();
208
+ if (parsedWitness && parsedWitness.spendType === 'Key') {
209
+ return parsedWitness.signature;
210
+ }
211
+ });
212
+ bitcoinjs_lib_1.lazy.prop(o, 'annex', () => {
213
+ if (!_parsedWitness())
214
+ return;
215
+ return _parsedWitness().annex;
216
+ });
217
+ bitcoinjs_lib_1.lazy.prop(o, 'output', () => {
218
+ if (a.address) {
219
+ const { data } = _address();
220
+ return bitcoinjs_lib_1.script.compile([OPS.OP_1, data]);
221
+ }
222
+ const taprootPubkey = _taprootPubkey();
223
+ if (!taprootPubkey)
224
+ return;
225
+ // OP_1 indicates segwit version 1
226
+ return bitcoinjs_lib_1.script.compile([OPS.OP_1, Buffer.from(taprootPubkey.xOnlyPubkey)]);
227
+ });
228
+ bitcoinjs_lib_1.lazy.prop(o, 'witness', () => {
229
+ if (!a.redeems) {
230
+ if (a.signature)
231
+ return [a.signature]; // Keypath spend
232
+ return;
233
+ }
234
+ else if (!o.redeem) {
235
+ return; // No chosen redeem script, can't make witness
236
+ }
237
+ else if (!o.controlBlock) {
238
+ return;
239
+ }
240
+ let redeemWitness;
241
+ // some callers may provide witness elements in the input script
242
+ if (o.redeem.input && o.redeem.input.length > 0 && o.redeem.output && o.redeem.output.length > 0) {
243
+ // transform redeem input to witness stack
244
+ redeemWitness = bitcoinjs_lib_1.script.toStack(bitcoinjs_lib_1.script.decompile(o.redeem.input));
245
+ // assigns a new object to o.redeem
246
+ o.redeems[a.redeemIndex] = Object.assign({ witness: redeemWitness }, o.redeem);
247
+ o.redeem.input = EMPTY_BUFFER;
248
+ }
249
+ else if (o.redeem.output && o.redeem.output.length > 0 && o.redeem.witness && o.redeem.witness.length > 0) {
250
+ redeemWitness = o.redeem.witness;
251
+ }
252
+ else {
253
+ return;
254
+ }
255
+ const witness = [...redeemWitness, o.redeem.output, o.controlBlock];
256
+ if (a.annex) {
257
+ witness.push(a.annex);
258
+ }
259
+ return witness;
260
+ });
261
+ bitcoinjs_lib_1.lazy.prop(o, 'name', () => {
262
+ const nameParts = ['p2tr'];
263
+ return nameParts.join('-');
264
+ });
265
+ bitcoinjs_lib_1.lazy.prop(o, 'redeem', () => {
266
+ if (a.redeems) {
267
+ if (a.redeemIndex === undefined)
268
+ return;
269
+ return a.redeems[a.redeemIndex];
270
+ }
271
+ const parsedWitness = _parsedWitness();
272
+ if (parsedWitness && parsedWitness.spendType === 'Script') {
273
+ return {
274
+ witness: parsedWitness.scriptSig,
275
+ output: parsedWitness.tapscript,
276
+ };
277
+ }
278
+ });
279
+ // extended validation
280
+ if (opts.validate) {
281
+ const taprootPubkey = _taprootPubkey();
282
+ if (a.output) {
283
+ if (a.output[0] !== OPS.OP_1 || a.output[1] !== 0x20) {
284
+ throw new TypeError('Output is invalid');
285
+ }
286
+ // if we're passed both an output script and an address, ensure they match
287
+ if (a.address && _outputPubkey && !((_a = _outputPubkey()) === null || _a === void 0 ? void 0 : _a.equals((_b = _address()) === null || _b === void 0 ? void 0 : _b.data))) {
288
+ throw new TypeError('mismatch between address & output');
289
+ }
290
+ if (taprootPubkey && _outputPubkey && !((_c = _outputPubkey()) === null || _c === void 0 ? void 0 : _c.equals(taprootPubkey.xOnlyPubkey))) {
291
+ throw new TypeError('mismatch between output and taproot pubkey');
292
+ }
293
+ }
294
+ if (a.address) {
295
+ if (taprootPubkey && !((_d = _address()) === null || _d === void 0 ? void 0 : _d.data.equals(taprootPubkey.xOnlyPubkey))) {
296
+ throw new TypeError('mismatch between address and taproot pubkey');
297
+ }
298
+ }
299
+ const parsedControlBlock = _parsedControlBlock();
300
+ if (parsedControlBlock) {
301
+ if (!parsedControlBlock.internalPubkey.equals(o === null || o === void 0 ? void 0 : o.internalPubkey)) {
302
+ throw new TypeError('Internal pubkey mismatch');
303
+ }
304
+ if (taprootPubkey && parsedControlBlock.parity !== taprootPubkey.parity) {
305
+ throw new TypeError('Parity mismatch');
306
+ }
307
+ }
308
+ if (a.redeems) {
309
+ if (!a.redeems.length)
310
+ throw new TypeError('Empty redeems');
311
+ if (a.redeemIndex !== undefined && (a.redeemIndex < 0 || a.redeemIndex >= a.redeems.length)) {
312
+ throw new TypeError('invalid redeem index');
313
+ }
314
+ a.redeems.forEach((redeem) => {
315
+ if (redeem.network && redeem.network !== network) {
316
+ throw new TypeError('Network mismatch');
317
+ }
318
+ });
319
+ }
320
+ const chosenRedeem = a.redeems && a.redeemIndex !== undefined && a.redeems[a.redeemIndex];
321
+ const parsedWitness = _parsedWitness();
322
+ if (parsedWitness && parsedWitness.spendType === 'Key') {
323
+ if (a.controlBlock) {
324
+ throw new TypeError('unexpected control block for key path');
325
+ }
326
+ if (a.signature && !a.signature.equals(parsedWitness.signature)) {
327
+ throw new TypeError('mismatch between witness & signature');
328
+ }
329
+ }
330
+ if (parsedWitness && parsedWitness.spendType === 'Script') {
331
+ if (a.signature) {
332
+ throw new TypeError('unexpected signature with script path witness');
333
+ }
334
+ if (a.controlBlock && !a.controlBlock.equals(parsedWitness.controlBlock)) {
335
+ throw new TypeError('control block mismatch');
336
+ }
337
+ if (a.annex && parsedWitness.annex && !a.annex.equals(parsedWitness.annex)) {
338
+ throw new TypeError('annex mismatch');
339
+ }
340
+ if (chosenRedeem && chosenRedeem.output && !chosenRedeem.output.equals(parsedWitness.tapscript)) {
341
+ throw new TypeError('tapscript mismatch');
342
+ }
343
+ }
344
+ }
345
+ return Object.assign(o, a);
346
+ }
347
+ exports.p2tr = p2tr;
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJ0ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXltZW50cy9wMnRyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwyREFBMkQ7QUFDM0QsaUVBQWlFOzs7QUFFakUsMENBQXVDO0FBQ3ZDLGlEQUE4RTtBQUM5RSxzQ0FBc0M7QUFDdEMsNENBQXFDO0FBQ3JDLHlDQUF5QztBQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbkMsTUFBTSxHQUFHLEdBQUcsc0JBQU8sQ0FBQyxHQUFHLENBQUM7QUFFeEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUV0QyxNQUFNLGVBQWUsR0FBRyxtQkFBUSxDQUFDLE9BQU8sQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pHLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFckMsU0FBUyxhQUFhLENBQUMsTUFBa0I7SUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJO1FBQ0YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsT0FBaUI7SUFDdkMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxnQ0FBZ0M7QUFDaEMsU0FBZ0IsSUFBSSxDQUFDLENBQVUsRUFBRSxJQUFrQjs7SUFDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7UUFDeEcsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXJELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUN2RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBRXhCLEtBQUssQ0FDSDtRQUNFLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFbEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxnREFBZ0Q7UUFDaEQseUVBQXlFO1FBQ3pFLDZEQUE2RDtRQUM3RCxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLGtCQUFrQjtRQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQ3JDLDJDQUEyQztRQUMzQyxpQ0FBaUM7UUFDakMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFaEcsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQ2xCLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDWixPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xELENBQUMsQ0FDSDtRQUNELFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFdEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsc0JBQU8sQ0FBQywyQkFBMkIsQ0FBQztRQUMzRCxZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7S0FDakMsRUFDRCxDQUFDLENBQ0YsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLG9CQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVqQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE9BQU87WUFDTCxPQUFPO1lBQ1AsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN4QixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLGFBQWEsR0FBRyxvQkFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDcEMsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQztJQUU3QyxNQUFNLENBQUMsR0FBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBRS9CLE1BQU0sYUFBYSxHQUFHLG9CQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNwQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUNiLE9BQU8sT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoRDtRQUNELE1BQU0sT0FBTyxHQUE4QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBQy9DLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixDQUM5QixPQUFtQixFQUNuQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsR0FBRyxvQkFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDckMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN2QixPQUFPLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLG1CQUFtQixHQUFHLG9CQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUMxQyx5REFBeUQ7UUFDekQsSUFBSSxDQUFDLENBQUMsWUFBWTtZQUFFLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUUsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDdkMsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDekQsT0FBTyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsb0JBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRTs7UUFDbEMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ1osZ0JBQWdCO1lBQ2hCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNqQjthQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JCO2FBQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QyxtQkFBbUI7WUFDbkIsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxjQUFjLENBQUMsaUJBQUssQ0FBQyxNQUFNLENBQUMsaUJBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xGO1lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLG1CQUFtQixFQUFFLEVBQUU7WUFDaEMsT0FBTyxNQUFBLG1CQUFtQixFQUFFLDBDQUFFLGNBQWMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsOEZBQThGO1lBQzlGLDRGQUE0RjtZQUM1Riw0RkFBNEY7WUFDNUYseUZBQXlGO1lBQ3pGLHVGQUF1RjtZQUN2RixnREFBZ0Q7WUFDaEQsT0FBTyxDQUFDLENBQUM7U0FDVjtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxjQUFjLEdBQUcsb0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFOztRQUNyQyxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFDakQsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDdkMsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdEYsT0FBTztTQUNSO1FBQ0QsSUFBSSxXQUFXLENBQUM7UUFDaEIsMkVBQTJFO1FBQzNFLGVBQWU7UUFDZixJQUFJLGtCQUFrQixFQUFFO1lBQ3RCLElBQUksU0FBUyxDQUFDO1lBQ2QsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pELFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO2FBQ3JDO2lCQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDdEMsU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxTQUFTO2dCQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN6RjtRQUNELElBQUksQ0FBQyxXQUFXLElBQUksYUFBYSxFQUFFO1lBQUUsV0FBVyxHQUFHLE1BQUEsYUFBYSxFQUFFLDBDQUFFLElBQUksQ0FBQztRQUV6RSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxjQUE0QixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25GLENBQUMsQ0FBQyxDQUFDO0lBRUgsb0JBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxFQUFFO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQ1YseUZBQXlGO2dCQUN2Rix5REFBeUQsQ0FDNUQsQ0FBQztZQUNGLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDckQsT0FBTztZQUNMLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQzFDLE9BQU87b0JBQ0wsTUFBTSxFQUFFLE1BQU07b0JBQ2QsV0FBVyxFQUFFLE9BQU8sQ0FBQyx5QkFBeUI7b0JBQzlDLEtBQUs7aUJBQ04sQ0FBQztZQUNKLENBQUMsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUNILG9CQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFOztRQUMzQixNQUFNLE1BQU0sR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFJLE1BQUEsY0FBYyxFQUFFLDBDQUFFLFdBQVcsQ0FBQSxDQUFDLENBQUM7UUFDdEYscURBQXFEO1FBQ3JELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNILG9CQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3pELE9BQU8sYUFBYSxDQUFDLFlBQVksQ0FBQztTQUNuQztRQUNELE1BQU0sYUFBYSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQUUsT0FBTztRQUMzRSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsY0FBZSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQyxDQUFDLENBQUM7SUFDSCxvQkFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUM3QixNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUN0RCxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUM7U0FDaEM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILG9CQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFBRSxPQUFPO1FBQzlCLE9BQU8sY0FBYyxFQUFHLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsb0JBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDMUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBRyxDQUFDO1lBQzdCLE9BQU8sc0JBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFM0Isa0NBQWtDO1FBQ2xDLE9BQU8sc0JBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDLENBQUMsQ0FBQztJQUNILG9CQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUztnQkFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1lBQ3ZELE9BQU87U0FDUjthQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyw4Q0FBOEM7U0FDdkQ7YUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFFRCxJQUFJLGFBQWEsQ0FBQztRQUNsQixnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEcsMENBQTBDO1lBQzFDLGFBQWEsR0FBRyxzQkFBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7WUFFcEUsbUNBQW1DO1lBQ25DLENBQUMsQ0FBQyxPQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztTQUMvQjthQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNHLGFBQWEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNsQzthQUFNO1lBQ0wsT0FBTztTQUNSO1FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkI7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztJQUNILG9CQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsb0JBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDMUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ2IsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVM7Z0JBQUUsT0FBTztZQUN4QyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDdkMsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDekQsT0FBTztnQkFDTCxPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVM7Z0JBQ2hDLE1BQU0sRUFBRSxhQUFhLENBQUMsU0FBUzthQUNoQyxDQUFDO1NBQ0g7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILHNCQUFzQjtJQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDakIsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFFdkMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ1osSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3BELE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUMxQztZQUVELDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksYUFBYSxJQUFJLENBQUMsQ0FBQSxNQUFBLGFBQWEsRUFBRSwwQ0FBRSxNQUFNLENBQUMsTUFBQSxRQUFRLEVBQUUsMENBQUUsSUFBYyxDQUFDLENBQUEsRUFBRTtnQkFDdEYsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2FBQzFEO1lBRUQsSUFBSSxhQUFhLElBQUksYUFBYSxJQUFJLENBQUMsQ0FBQSxNQUFBLGFBQWEsRUFBRSwwQ0FBRSxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBLEVBQUU7Z0JBQ3pGLE1BQU0sSUFBSSxTQUFTLENBQUMsNENBQTRDLENBQUMsQ0FBQzthQUNuRTtTQUNGO1FBRUQsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ2IsSUFBSSxhQUFhLElBQUksQ0FBQyxDQUFBLE1BQUEsUUFBUSxFQUFFLDBDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBLEVBQUU7Z0JBQ3hFLE1BQU0sSUFBSSxTQUFTLENBQUMsNkNBQTZDLENBQUMsQ0FBQzthQUNwRTtTQUNGO1FBRUQsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2pELElBQUksa0JBQWtCLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLGNBQTRCLENBQUMsRUFBRTtnQkFDOUUsTUFBTSxJQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsSUFBSSxhQUFhLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN4QztTQUNGO1FBRUQsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFBRSxNQUFNLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzNGLE1BQU0sSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUM3QztZQUNELENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRTtvQkFDaEQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUN6QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFGLE1BQU0sYUFBYSxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO1lBQ3RELElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTtnQkFDbEIsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2FBQzlEO1lBRUQsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMvRCxNQUFNLElBQUksU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7YUFDN0Q7U0FDRjtRQUNELElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3pELElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDZixNQUFNLElBQUksU0FBUyxDQUFDLCtDQUErQyxDQUFDLENBQUM7YUFDdEU7WUFFRCxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3hFLE1BQU0sSUFBSSxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUMvQztZQUVELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxRSxNQUFNLElBQUksU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdkM7WUFFRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMvRixNQUFNLElBQUksU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDM0M7U0FDRjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBeFVELG9CQXdVQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNlZ1dpdCB2ZXJzaW9uIDEgUDJUUiBvdXRwdXQgdHlwZSBmb3IgVGFwcm9vdCBkZWZpbmVkIGluXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQxLm1lZGlhd2lraVxuXG5pbXBvcnQgeyBuZXR3b3JrcyB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IHNjcmlwdCBhcyBic2NyaXB0LCBQYXltZW50LCBQYXltZW50T3B0cywgbGF6eSB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0ICogYXMgdGFwcm9vdCBmcm9tICcuLi90YXByb290JztcbmltcG9ydCB7IG11c2lnIH0gZnJvbSAnLi4vbm9ibGVfZWNjJztcbmltcG9ydCAqIGFzIG5lY2MgZnJvbSAnQG5vYmxlL3NlY3AyNTZrMSc7XG5jb25zdCB0eXBlZiA9IHJlcXVpcmUoJ3R5cGVmb3JjZScpO1xuY29uc3QgT1BTID0gYnNjcmlwdC5PUFM7XG5cbmNvbnN0IHsgYmVjaDMybSB9ID0gcmVxdWlyZSgnYmVjaDMyJyk7XG5cbmNvbnN0IEJJVENPSU5fTkVUV09SSyA9IG5ldHdvcmtzLmJpdGNvaW47XG5cbi8qKlxuICogQSBzZWNwMjU2azEgeCBjb29yZGluYXRlIHdpdGggdW5rbm93biBkaXNjcmV0ZSBsb2dhcml0aG0gdXNlZCBmb3IgZWxpbWluYXRpbmdcbiAqIGtleXBhdGggc3BlbmRzLCBlcXVhbCB0byBTSEEyNTYodW5jb21wcmVzc2VkREVSKFNFQ1AyNTZLMV9HRU5FUkFUT1JfUE9JTlQpKS5cbiAqL1xuY29uc3QgSCA9IEJ1ZmZlci5mcm9tKCc1MDkyOWI3NGMxYTA0OTU0Yjc4YjRiNjAzNWU5N2E1ZTA3OGE1YTBmMjhlYzk2ZDU0N2JmZWU5YWNlODAzYWMwJywgJ2hleCcpO1xuY29uc3QgRU1QVFlfQlVGRkVSID0gQnVmZmVyLmFsbG9jKDApO1xuXG5mdW5jdGlvbiBpc1BsYWluUHVia2V5KHB1YktleTogVWludDhBcnJheSk6IGJvb2xlYW4ge1xuICBpZiAocHViS2V5Lmxlbmd0aCAhPT0gMzMpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFuZWNjLlBvaW50LmZyb21IZXgocHViS2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BsYWluUHVia2V5cyhwdWJrZXlzOiBCdWZmZXJbXSkge1xuICByZXR1cm4gcHVia2V5cy5ldmVyeShpc1BsYWluUHVia2V5KTtcbn1cblxuLy8gb3V0cHV0OiBPUF8xIHt3aXRuZXNzUHJvZ3JhbX1cbmV4cG9ydCBmdW5jdGlvbiBwMnRyKGE6IFBheW1lbnQsIG9wdHM/OiBQYXltZW50T3B0cyk6IFBheW1lbnQge1xuICBpZiAoIWEuYWRkcmVzcyAmJiAhYS5wdWJrZXkgJiYgIWEucHVia2V5cyAmJiAhKGEucmVkZWVtcyAmJiBhLnJlZGVlbXMubGVuZ3RoKSAmJiAhYS5vdXRwdXQgJiYgIWEud2l0bmVzcykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggZGF0YScpO1xuICB9XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHsgdmFsaWRhdGU6IHRydWUgfSwgb3B0cyB8fCB7fSk7XG5cbiAgaWYgKCFvcHRzLmVjY0xpYikgdGhyb3cgbmV3IEVycm9yKCdFQ0MgTGlicmFyeSBpcyByZXF1aXJlZCBmb3IgcDJ0ci4nKTtcbiAgY29uc3QgZWNjID0gb3B0cy5lY2NMaWI7XG5cbiAgdHlwZWYoXG4gICAge1xuICAgICAgbmV0d29yazogdHlwZWYubWF5YmUodHlwZWYuT2JqZWN0KSxcblxuICAgICAgYWRkcmVzczogdHlwZWYubWF5YmUodHlwZWYuU3RyaW5nKSxcbiAgICAgIC8vIHRoZSBvdXRwdXQgc2NyaXB0IHNob3VsZCBiZSBhIGZpeGVkIDM0IGJ5dGVzLlxuICAgICAgLy8gMSBieXRlIGZvciBPUF8xIGluZGljYXRpbmcgc2Vnd2l0IHZlcnNpb24gMSwgb25lIGJ5dGUgZm9yIDB4MjAgdG8gcHVzaFxuICAgICAgLy8gdGhlIG5leHQgMzIgYnl0ZXMsIGZvbGxvd2VkIGJ5IHRoZSAzMiBieXRlIHdpdG5lc3MgcHJvZ3JhbVxuICAgICAgb3V0cHV0OiB0eXBlZi5tYXliZSh0eXBlZi5CdWZmZXJOKDM0KSksXG4gICAgICAvLyBhIHNpbmdsZSBwdWJrZXlcbiAgICAgIHB1YmtleTogdHlwZWYubWF5YmUoZWNjLmlzWE9ubHlQb2ludCksXG4gICAgICAvLyB0aGUgcHViIGtleShzKSB1c2VkIGZvciBrZXlwYXRoIHNpZ25pbmcuXG4gICAgICAvLyBhZ2dyZWdhdGVkIHdpdGggTXVTaWcyKiBpZiA+IDFcbiAgICAgIHB1YmtleXM6IHR5cGVmLm1heWJlKHR5cGVmLmFueU9mKHR5cGVmLmFycmF5T2YoZWNjLmlzWE9ubHlQb2ludCksIHR5cGVmLmFycmF5T2YoaXNQbGFpblB1YmtleSkpKSxcblxuICAgICAgcmVkZWVtczogdHlwZWYubWF5YmUoXG4gICAgICAgIHR5cGVmLmFycmF5T2Yoe1xuICAgICAgICAgIG5ldHdvcms6IHR5cGVmLm1heWJlKHR5cGVmLk9iamVjdCksXG4gICAgICAgICAgb3V0cHV0OiB0eXBlZi5tYXliZSh0eXBlZi5CdWZmZXIpLFxuICAgICAgICAgIHdlaWdodDogdHlwZWYubWF5YmUodHlwZWYuTnVtYmVyKSxcbiAgICAgICAgICBkZXB0aDogdHlwZWYubWF5YmUodHlwZWYuTnVtYmVyKSxcbiAgICAgICAgICB3aXRuZXNzOiB0eXBlZi5tYXliZSh0eXBlZi5hcnJheU9mKHR5cGVmLkJ1ZmZlcikpLFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHJlZGVlbUluZGV4OiB0eXBlZi5tYXliZSh0eXBlZi5OdW1iZXIpLCAvLyBTZWxlY3RzIHRoZSByZWRlZW0gdG8gc3BlbmRcblxuICAgICAgc2lnbmF0dXJlOiB0eXBlZi5tYXliZShic2NyaXB0LmlzQ2Fub25pY2FsU2Nobm9yclNpZ25hdHVyZSksXG4gICAgICBjb250cm9sQmxvY2s6IHR5cGVmLm1heWJlKHR5cGVmLkJ1ZmZlciksXG4gICAgICBhbm5leDogdHlwZWYubWF5YmUodHlwZWYuQnVmZmVyKSxcbiAgICB9LFxuICAgIGFcbiAgKTtcblxuICBjb25zdCBfYWRkcmVzcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGlmICghYS5hZGRyZXNzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYmVjaDMybS5kZWNvZGUoYS5hZGRyZXNzKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gcmVzdWx0LndvcmRzLnNoaWZ0KCk7XG4gICAgY29uc3QgZGF0YSA9IGJlY2gzMm0uZnJvbVdvcmRzKHJlc3VsdC53b3Jkcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb24sXG4gICAgICBwcmVmaXg6IHJlc3VsdC5wcmVmaXgsXG4gICAgICBkYXRhOiBCdWZmZXIuZnJvbShkYXRhKSxcbiAgICB9O1xuICB9KTtcbiAgY29uc3QgX291dHB1dFB1YmtleSA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIC8vIHdlIHJlbW92ZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIChPUF8xIDB4MjApIGZyb20gdGhlIG91dHB1dCBzY3JpcHQgdG9cbiAgICAvLyBleHRyYWN0IHRoZSAzMiBieXRlIHRhcHJvb3QgcHVia2V5IChha2Egd2l0bmVzcyBwcm9ncmFtKVxuICAgIHJldHVybiBhLm91dHB1dCAmJiBhLm91dHB1dC5zbGljZSgyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV0d29yayA9IGEubmV0d29yayB8fCBCSVRDT0lOX05FVFdPUks7XG5cbiAgY29uc3QgbzogUGF5bWVudCA9IHsgbmV0d29yayB9O1xuXG4gIGNvbnN0IF90YXByb290UGF0aHMgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBpZiAoIWEucmVkZWVtcykgcmV0dXJuO1xuICAgIGlmIChvLnRhcFRyZWUpIHtcbiAgICAgIHJldHVybiB0YXByb290LmdldERlcHRoRmlyc3RUYXB0cmVlKG8udGFwVHJlZSk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dHM6IEFycmF5PEJ1ZmZlciB8IHVuZGVmaW5lZD4gPSBhLnJlZGVlbXMubWFwKCh7IG91dHB1dCB9KSA9PiBvdXRwdXQpO1xuICAgIGlmICghb3V0cHV0cy5ldmVyeSgob3V0cHV0KSA9PiBvdXRwdXQpKSByZXR1cm47XG4gICAgcmV0dXJuIHRhcHJvb3QuZ2V0SHVmZm1hblRhcHRyZWUoXG4gICAgICBvdXRwdXRzIGFzIEJ1ZmZlcltdLFxuICAgICAgYS5yZWRlZW1zLm1hcCgoeyB3ZWlnaHQgfSkgPT4gd2VpZ2h0KVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBfcGFyc2VkV2l0bmVzcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGlmICghYS53aXRuZXNzKSByZXR1cm47XG4gICAgcmV0dXJuIHRhcHJvb3QucGFyc2VUYXByb290V2l0bmVzcyhhLndpdG5lc3MpO1xuICB9KTtcbiAgY29uc3QgX3BhcnNlZENvbnRyb2xCbG9jayA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIC8vIENhbid0IHVzZSBvLmNvbnRyb2xCbG9jaywgYmVjYXVzZSBpdCBjb3VsZCBiZSBjaXJjdWxhclxuICAgIGlmIChhLmNvbnRyb2xCbG9jaykgcmV0dXJuIHRhcHJvb3QucGFyc2VDb250cm9sQmxvY2soZWNjLCBhLmNvbnRyb2xCbG9jayk7XG4gICAgY29uc3QgcGFyc2VkV2l0bmVzcyA9IF9wYXJzZWRXaXRuZXNzKCk7XG4gICAgaWYgKHBhcnNlZFdpdG5lc3MgJiYgcGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdTY3JpcHQnKSB7XG4gICAgICByZXR1cm4gdGFwcm9vdC5wYXJzZUNvbnRyb2xCbG9jayhlY2MsIHBhcnNlZFdpdG5lc3MuY29udHJvbEJsb2NrKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxhenkucHJvcChvLCAnaW50ZXJuYWxQdWJrZXknLCAoKSA9PiB7XG4gICAgaWYgKGEucHVia2V5KSB7XG4gICAgICAvLyBzaW5nbGUgcHVia2V5XG4gICAgICByZXR1cm4gYS5wdWJrZXk7XG4gICAgfSBlbHNlIGlmIChhLnB1YmtleXMgJiYgYS5wdWJrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGEucHVia2V5c1swXTtcbiAgICB9IGVsc2UgaWYgKGEucHVia2V5cyAmJiBhLnB1YmtleXMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gbXVsdGlwbGUgcHVia2V5c1xuICAgICAgaWYgKGlzUGxhaW5QdWJrZXlzKGEucHVia2V5cykpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKG11c2lnLmdldFhPbmx5UHVia2V5KG11c2lnLmtleUFnZyhtdXNpZy5rZXlTb3J0KGEucHVia2V5cykpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0YXByb290LmFnZ3JlZ2F0ZU11U2lnUHVia2V5cyhlY2MsIGEucHVia2V5cykpO1xuICAgIH0gZWxzZSBpZiAoX3BhcnNlZENvbnRyb2xCbG9jaygpKSB7XG4gICAgICByZXR1cm4gX3BhcnNlZENvbnRyb2xCbG9jaygpPy5pbnRlcm5hbFB1YmtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8ga2V5IHBhdGggc3BlbmRpbmcgY29uZGl0aW9uLCB3ZSB1c2UgYW4gaW50ZXJuYWwga2V5IHdpdGggdW5rbm93biBzZWNyZXQga2V5LlxuICAgICAgLy8gVE9ETzogSW4gb3JkZXIgdG8gYXZvaWQgbGVha2luZyB0aGUgaW5mb3JtYXRpb24gdGhhdCBrZXkgcGF0aCBzcGVuZGluZyBpcyBub3QgcG9zc2libGUgaXRcbiAgICAgIC8vIGlzIHJlY29tbWVuZGVkIHRvIHBpY2sgYSBmcmVzaCBpbnRlZ2VyIHIgaW4gdGhlIHJhbmdlIDAuLi5uLTEgdW5pZm9ybWx5IGF0IHJhbmRvbSBhbmQgdXNlXG4gICAgICAvLyBIICsgckcgYXMgaW50ZXJuYWwga2V5LiBJdCBpcyBwb3NzaWJsZSB0byBwcm92ZSB0aGF0IHRoaXMgaW50ZXJuYWwga2V5IGRvZXMgbm90IGhhdmUgYVxuICAgICAgLy8ga25vd24gZGlzY3JldGUgbG9nYXJpdGhtIHdpdGggcmVzcGVjdCB0byBHIGJ5IHJldmVhbGluZyByIHRvIGEgdmVyaWZpZXIgd2hvIGNhbiB0aGVuXG4gICAgICAvLyByZWNvbnN0cnVjdCBob3cgdGhlIGludGVybmFsIGtleSB3YXMgY3JlYXRlZC5cbiAgICAgIHJldHVybiBIO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgX3RhcHJvb3RQdWJrZXkgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSBfcGFyc2VkQ29udHJvbEJsb2NrKCk7XG4gICAgY29uc3QgcGFyc2VkV2l0bmVzcyA9IF9wYXJzZWRXaXRuZXNzKCk7XG4gICAgLy8gUmVmdXNlIHRvIGNyZWF0ZSBhbiB1bnNwZW5kYWJsZSBrZXlcbiAgICBpZiAoIWEucHVia2V5ICYmICEoYS5wdWJrZXlzICYmIGEucHVia2V5cy5sZW5ndGgpICYmICFhLnJlZGVlbXMgJiYgIXBhcnNlZENvbnRyb2xCbG9jaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFwdHJlZVJvb3Q7XG4gICAgLy8gUHJlZmVyIHRvIGdldCB0aGUgcm9vdCB2aWEgdGhlIGNvbnRyb2wgYmxvY2sgYmVjYXVzZSBub3QgYWxsIHJlZGVlbXMgbWF5XG4gICAgLy8gYmUgYXZhaWxhYmxlXG4gICAgaWYgKHBhcnNlZENvbnRyb2xCbG9jaykge1xuICAgICAgbGV0IHRhcHNjcmlwdDtcbiAgICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnU2NyaXB0Jykge1xuICAgICAgICB0YXBzY3JpcHQgPSBwYXJzZWRXaXRuZXNzLnRhcHNjcmlwdDtcbiAgICAgIH0gZWxzZSBpZiAoby5yZWRlZW0gJiYgby5yZWRlZW0ub3V0cHV0KSB7XG4gICAgICAgIHRhcHNjcmlwdCA9IG8ucmVkZWVtLm91dHB1dDtcbiAgICAgIH1cbiAgICAgIGlmICh0YXBzY3JpcHQpIHRhcHRyZWVSb290ID0gdGFwcm9vdC5nZXRUYXB0cmVlUm9vdChlY2MsIHBhcnNlZENvbnRyb2xCbG9jaywgdGFwc2NyaXB0KTtcbiAgICB9XG4gICAgaWYgKCF0YXB0cmVlUm9vdCAmJiBfdGFwcm9vdFBhdGhzKCkpIHRhcHRyZWVSb290ID0gX3RhcHJvb3RQYXRocygpPy5yb290O1xuXG4gICAgcmV0dXJuIHRhcHJvb3QudGFwVHdlYWtQdWJrZXkoZWNjLCBvPy5pbnRlcm5hbFB1YmtleSBhcyBVaW50OEFycmF5LCB0YXB0cmVlUm9vdCk7XG4gIH0pO1xuXG4gIGxhenkucHJvcChvLCAndGFwVHJlZScsICgpID0+IHtcbiAgICBpZiAoIWEucmVkZWVtcykgcmV0dXJuO1xuICAgIGlmIChhLnJlZGVlbXMuZmluZCgoeyBkZXB0aCB9KSA9PiBkZXB0aCA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnRGVwcmVjYXRpb24gV2FybmluZzogV2VpZ2h0LWJhc2VkIHRhcCB0cmVlIGNvbnN0cnVjdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gJyArXG4gICAgICAgICAgJ1BsZWFzZSB1c2UgZGVwdGgtZmlyc3QgY29kaW5nIGFzIHNwZWNpZmllZCBpbiBCSVAtMDM3MS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWEucmVkZWVtcy5ldmVyeSgoeyBvdXRwdXQgfSkgPT4gb3V0cHV0KSkgcmV0dXJuO1xuICAgIHJldHVybiB7XG4gICAgICBsZWF2ZXM6IGEucmVkZWVtcy5tYXAoKHsgb3V0cHV0LCBkZXB0aCB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2NyaXB0OiBvdXRwdXQsXG4gICAgICAgICAgbGVhZlZlcnNpb246IHRhcHJvb3QuSU5JVElBTF9UQVBTQ1JJUFRfVkVSU0lPTixcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2FkZHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgcHVia2V5ID0gX291dHB1dFB1YmtleSgpIHx8IChfdGFwcm9vdFB1YmtleSgpICYmIF90YXByb290UHVia2V5KCk/LnhPbmx5UHVia2V5KTtcbiAgICAvLyBvbmx5IGVuY29kZSB0aGUgMzIgYnl0ZSB3aXRuZXNzIHByb2dyYW0gYXMgYmVjaDMybVxuICAgIGNvbnN0IHdvcmRzID0gYmVjaDMybS50b1dvcmRzKHB1YmtleSk7XG4gICAgd29yZHMudW5zaGlmdCgweDAxKTtcbiAgICByZXR1cm4gYmVjaDMybS5lbmNvZGUobmV0d29yay5iZWNoMzIsIHdvcmRzKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnY29udHJvbEJsb2NrJywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnU2NyaXB0Jykge1xuICAgICAgcmV0dXJuIHBhcnNlZFdpdG5lc3MuY29udHJvbEJsb2NrO1xuICAgIH1cbiAgICBjb25zdCB0YXByb290UHVia2V5ID0gX3RhcHJvb3RQdWJrZXkoKTtcbiAgICBjb25zdCB0YXByb290UGF0aHMgPSBfdGFwcm9vdFBhdGhzKCk7XG4gICAgaWYgKCF0YXByb290UGF0aHMgfHwgIXRhcHJvb3RQdWJrZXkgfHwgYS5yZWRlZW1JbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgcmV0dXJuIHRhcHJvb3QuZ2V0Q29udHJvbEJsb2NrKHRhcHJvb3RQdWJrZXkucGFyaXR5LCBvLmludGVybmFsUHVia2V5ISwgdGFwcm9vdFBhdGhzLnBhdGhzW2EucmVkZWVtSW5kZXhdKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnS2V5Jykge1xuICAgICAgcmV0dXJuIHBhcnNlZFdpdG5lc3Muc2lnbmF0dXJlO1xuICAgIH1cbiAgfSk7XG4gIGxhenkucHJvcChvLCAnYW5uZXgnLCAoKSA9PiB7XG4gICAgaWYgKCFfcGFyc2VkV2l0bmVzcygpKSByZXR1cm47XG4gICAgcmV0dXJuIF9wYXJzZWRXaXRuZXNzKCkhLmFubmV4O1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdvdXRwdXQnLCAoKSA9PiB7XG4gICAgaWYgKGEuYWRkcmVzcykge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBfYWRkcmVzcygpITtcbiAgICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW09QUy5PUF8xLCBkYXRhXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFwcm9vdFB1YmtleSA9IF90YXByb290UHVia2V5KCk7XG4gICAgaWYgKCF0YXByb290UHVia2V5KSByZXR1cm47XG5cbiAgICAvLyBPUF8xIGluZGljYXRlcyBzZWd3aXQgdmVyc2lvbiAxXG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbT1BTLk9QXzEsIEJ1ZmZlci5mcm9tKHRhcHJvb3RQdWJrZXkueE9ubHlQdWJrZXkpXSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3dpdG5lc3MnLCAoKSA9PiB7XG4gICAgaWYgKCFhLnJlZGVlbXMpIHtcbiAgICAgIGlmIChhLnNpZ25hdHVyZSkgcmV0dXJuIFthLnNpZ25hdHVyZV07IC8vIEtleXBhdGggc3BlbmRcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFvLnJlZGVlbSkge1xuICAgICAgcmV0dXJuOyAvLyBObyBjaG9zZW4gcmVkZWVtIHNjcmlwdCwgY2FuJ3QgbWFrZSB3aXRuZXNzXG4gICAgfSBlbHNlIGlmICghby5jb250cm9sQmxvY2spIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVkZWVtV2l0bmVzcztcbiAgICAvLyBzb21lIGNhbGxlcnMgbWF5IHByb3ZpZGUgd2l0bmVzcyBlbGVtZW50cyBpbiB0aGUgaW5wdXQgc2NyaXB0XG4gICAgaWYgKG8ucmVkZWVtLmlucHV0ICYmIG8ucmVkZWVtLmlucHV0Lmxlbmd0aCA+IDAgJiYgby5yZWRlZW0ub3V0cHV0ICYmIG8ucmVkZWVtLm91dHB1dC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB0cmFuc2Zvcm0gcmVkZWVtIGlucHV0IHRvIHdpdG5lc3Mgc3RhY2tcbiAgICAgIHJlZGVlbVdpdG5lc3MgPSBic2NyaXB0LnRvU3RhY2soYnNjcmlwdC5kZWNvbXBpbGUoby5yZWRlZW0uaW5wdXQpISk7XG5cbiAgICAgIC8vIGFzc2lnbnMgYSBuZXcgb2JqZWN0IHRvIG8ucmVkZWVtXG4gICAgICBvLnJlZGVlbXMhW2EucmVkZWVtSW5kZXghXSA9IE9iamVjdC5hc3NpZ24oeyB3aXRuZXNzOiByZWRlZW1XaXRuZXNzIH0sIG8ucmVkZWVtKTtcbiAgICAgIG8ucmVkZWVtLmlucHV0ID0gRU1QVFlfQlVGRkVSO1xuICAgIH0gZWxzZSBpZiAoby5yZWRlZW0ub3V0cHV0ICYmIG8ucmVkZWVtLm91dHB1dC5sZW5ndGggPiAwICYmIG8ucmVkZWVtLndpdG5lc3MgJiYgby5yZWRlZW0ud2l0bmVzcy5sZW5ndGggPiAwKSB7XG4gICAgICByZWRlZW1XaXRuZXNzID0gby5yZWRlZW0ud2l0bmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdpdG5lc3MgPSBbLi4ucmVkZWVtV2l0bmVzcywgby5yZWRlZW0ub3V0cHV0LCBvLmNvbnRyb2xCbG9ja107XG5cbiAgICBpZiAoYS5hbm5leCkge1xuICAgICAgd2l0bmVzcy5wdXNoKGEuYW5uZXgpO1xuICAgIH1cblxuICAgIHJldHVybiB3aXRuZXNzO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICduYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IFsncDJ0ciddO1xuICAgIHJldHVybiBuYW1lUGFydHMuam9pbignLScpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdyZWRlZW0nLCAoKSA9PiB7XG4gICAgaWYgKGEucmVkZWVtcykge1xuICAgICAgaWYgKGEucmVkZWVtSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgcmV0dXJuIGEucmVkZWVtc1thLnJlZGVlbUluZGV4XTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkV2l0bmVzcyA9IF9wYXJzZWRXaXRuZXNzKCk7XG4gICAgaWYgKHBhcnNlZFdpdG5lc3MgJiYgcGFyc2VkV2l0bmVzcy5zcGVuZFR5cGUgPT09ICdTY3JpcHQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aXRuZXNzOiBwYXJzZWRXaXRuZXNzLnNjcmlwdFNpZyxcbiAgICAgICAgb3V0cHV0OiBwYXJzZWRXaXRuZXNzLnRhcHNjcmlwdCxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBleHRlbmRlZCB2YWxpZGF0aW9uXG4gIGlmIChvcHRzLnZhbGlkYXRlKSB7XG4gICAgY29uc3QgdGFwcm9vdFB1YmtleSA9IF90YXByb290UHVia2V5KCk7XG5cbiAgICBpZiAoYS5vdXRwdXQpIHtcbiAgICAgIGlmIChhLm91dHB1dFswXSAhPT0gT1BTLk9QXzEgfHwgYS5vdXRwdXRbMV0gIT09IDB4MjApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UncmUgcGFzc2VkIGJvdGggYW4gb3V0cHV0IHNjcmlwdCBhbmQgYW4gYWRkcmVzcywgZW5zdXJlIHRoZXkgbWF0Y2hcbiAgICAgIGlmIChhLmFkZHJlc3MgJiYgX291dHB1dFB1YmtleSAmJiAhX291dHB1dFB1YmtleSgpPy5lcXVhbHMoX2FkZHJlc3MoKT8uZGF0YSBhcyBCdWZmZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gYWRkcmVzcyAmIG91dHB1dCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFwcm9vdFB1YmtleSAmJiBfb3V0cHV0UHVia2V5ICYmICFfb3V0cHV0UHVia2V5KCk/LmVxdWFscyh0YXByb290UHVia2V5LnhPbmx5UHVia2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNtYXRjaCBiZXR3ZWVuIG91dHB1dCBhbmQgdGFwcm9vdCBwdWJrZXknKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5hZGRyZXNzKSB7XG4gICAgICBpZiAodGFwcm9vdFB1YmtleSAmJiAhX2FkZHJlc3MoKT8uZGF0YS5lcXVhbHModGFwcm9vdFB1YmtleS54T25seVB1YmtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2ggYmV0d2VlbiBhZGRyZXNzIGFuZCB0YXByb290IHB1YmtleScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZENvbnRyb2xCbG9jayA9IF9wYXJzZWRDb250cm9sQmxvY2soKTtcbiAgICBpZiAocGFyc2VkQ29udHJvbEJsb2NrKSB7XG4gICAgICBpZiAoIXBhcnNlZENvbnRyb2xCbG9jay5pbnRlcm5hbFB1YmtleS5lcXVhbHMobz8uaW50ZXJuYWxQdWJrZXkgYXMgVWludDhBcnJheSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZXJuYWwgcHVia2V5IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICBpZiAodGFwcm9vdFB1YmtleSAmJiBwYXJzZWRDb250cm9sQmxvY2sucGFyaXR5ICE9PSB0YXByb290UHVia2V5LnBhcml0eSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJpdHkgbWlzbWF0Y2gnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5yZWRlZW1zKSB7XG4gICAgICBpZiAoIWEucmVkZWVtcy5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VtcHR5IHJlZGVlbXMnKTtcbiAgICAgIGlmIChhLnJlZGVlbUluZGV4ICE9PSB1bmRlZmluZWQgJiYgKGEucmVkZWVtSW5kZXggPCAwIHx8IGEucmVkZWVtSW5kZXggPj0gYS5yZWRlZW1zLmxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCByZWRlZW0gaW5kZXgnKTtcbiAgICAgIH1cbiAgICAgIGEucmVkZWVtcy5mb3JFYWNoKChyZWRlZW0pID0+IHtcbiAgICAgICAgaWYgKHJlZGVlbS5uZXR3b3JrICYmIHJlZGVlbS5uZXR3b3JrICE9PSBuZXR3b3JrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTmV0d29yayBtaXNtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaG9zZW5SZWRlZW0gPSBhLnJlZGVlbXMgJiYgYS5yZWRlZW1JbmRleCAhPT0gdW5kZWZpbmVkICYmIGEucmVkZWVtc1thLnJlZGVlbUluZGV4XTtcblxuICAgIGNvbnN0IHBhcnNlZFdpdG5lc3MgPSBfcGFyc2VkV2l0bmVzcygpO1xuICAgIGlmIChwYXJzZWRXaXRuZXNzICYmIHBhcnNlZFdpdG5lc3Muc3BlbmRUeXBlID09PSAnS2V5Jykge1xuICAgICAgaWYgKGEuY29udHJvbEJsb2NrKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgY29udHJvbCBibG9jayBmb3Iga2V5IHBhdGgnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEuc2lnbmF0dXJlICYmICFhLnNpZ25hdHVyZS5lcXVhbHMocGFyc2VkV2l0bmVzcy5zaWduYXR1cmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gd2l0bmVzcyAmIHNpZ25hdHVyZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyc2VkV2l0bmVzcyAmJiBwYXJzZWRXaXRuZXNzLnNwZW5kVHlwZSA9PT0gJ1NjcmlwdCcpIHtcbiAgICAgIGlmIChhLnNpZ25hdHVyZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIHNpZ25hdHVyZSB3aXRoIHNjcmlwdCBwYXRoIHdpdG5lc3MnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEuY29udHJvbEJsb2NrICYmICFhLmNvbnRyb2xCbG9jay5lcXVhbHMocGFyc2VkV2l0bmVzcy5jb250cm9sQmxvY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NvbnRyb2wgYmxvY2sgbWlzbWF0Y2gnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEuYW5uZXggJiYgcGFyc2VkV2l0bmVzcy5hbm5leCAmJiAhYS5hbm5leC5lcXVhbHMocGFyc2VkV2l0bmVzcy5hbm5leCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYW5uZXggbWlzbWF0Y2gnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNob3NlblJlZGVlbSAmJiBjaG9zZW5SZWRlZW0ub3V0cHV0ICYmICFjaG9zZW5SZWRlZW0ub3V0cHV0LmVxdWFscyhwYXJzZWRXaXRuZXNzLnRhcHNjcmlwdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFwc2NyaXB0IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obywgYSk7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { Payment, PaymentOpts } from 'bitcoinjs-lib';
2
+ export declare function p2tr_ns(a: Payment, opts?: PaymentOpts): Payment;
3
+ //# sourceMappingURL=p2tr_ns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p2tr_ns.d.ts","sourceRoot":"","sources":["../../../src/payments/p2tr_ns.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,OAAO,EAAE,WAAW,EAAe,MAAM,eAAe,CAAC;AAiBrF,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAgI/D"}