@bitgo-beta/utxo-lib 8.0.3-beta.6 → 8.0.3-beta.600

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 (212) hide show
  1. package/README.md +19 -16
  2. package/dist/src/address.d.ts +0 -1
  3. package/dist/src/address.d.ts.map +1 -1
  4. package/dist/src/address.js +10 -10
  5. package/dist/src/addressFormat.d.ts +1 -2
  6. package/dist/src/addressFormat.d.ts.map +1 -1
  7. package/dist/src/addressFormat.js +21 -26
  8. package/dist/src/bitgo/Musig2.d.ts +5 -11
  9. package/dist/src/bitgo/Musig2.d.ts.map +1 -1
  10. package/dist/src/bitgo/Musig2.js +63 -88
  11. package/dist/src/bitgo/PsbtUtil.d.ts +70 -0
  12. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -0
  13. package/dist/src/bitgo/PsbtUtil.js +133 -0
  14. package/dist/src/bitgo/Unspent.d.ts +2 -3
  15. package/dist/src/bitgo/Unspent.d.ts.map +1 -1
  16. package/dist/src/bitgo/Unspent.js +14 -15
  17. package/dist/src/bitgo/UtxoPsbt.d.ts +26 -40
  18. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  19. package/dist/src/bitgo/UtxoPsbt.js +200 -169
  20. package/dist/src/bitgo/UtxoTransaction.d.ts +0 -1
  21. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
  22. package/dist/src/bitgo/UtxoTransaction.js +11 -11
  23. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -1
  24. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -1
  25. package/dist/src/bitgo/UtxoTransactionBuilder.js +1 -1
  26. package/dist/src/bitgo/bitcoincash/address.d.ts +0 -1
  27. package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -1
  28. package/dist/src/bitgo/bitcoincash/address.js +11 -12
  29. package/dist/src/bitgo/bitcoincash/index.js +6 -2
  30. package/dist/src/bitgo/dash/DashPsbt.d.ts +0 -1
  31. package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -1
  32. package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -1
  33. package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -1
  34. package/dist/src/bitgo/dash/DashTransaction.js +3 -3
  35. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -1
  36. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -1
  37. package/dist/src/bitgo/dash/DashTransactionBuilder.js +1 -1
  38. package/dist/src/bitgo/dash/index.js +6 -2
  39. package/dist/src/bitgo/index.d.ts +10 -0
  40. package/dist/src/bitgo/index.d.ts.map +1 -1
  41. package/dist/src/bitgo/index.js +10 -3
  42. package/dist/src/bitgo/keyutil.d.ts +9 -1
  43. package/dist/src/bitgo/keyutil.d.ts.map +1 -1
  44. package/dist/src/bitgo/keyutil.js +25 -4
  45. package/dist/src/bitgo/legacysafe/index.d.ts +14 -0
  46. package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
  47. package/dist/src/bitgo/legacysafe/index.js +60 -0
  48. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +0 -1
  49. package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -1
  50. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -2
  51. package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
  52. package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
  53. package/dist/src/bitgo/litecoin/index.js +6 -2
  54. package/dist/src/bitgo/nonStandardHalfSigned.js +2 -3
  55. package/dist/src/bitgo/outputScripts.d.ts +7 -7
  56. package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
  57. package/dist/src/bitgo/outputScripts.js +46 -31
  58. package/dist/src/bitgo/parseInput.d.ts +11 -8
  59. package/dist/src/bitgo/parseInput.d.ts.map +1 -1
  60. package/dist/src/bitgo/parseInput.js +30 -15
  61. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -1
  62. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
  63. package/dist/src/bitgo/psbt/fromHalfSigned.js +7 -8
  64. package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -1
  65. package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -1
  66. package/dist/src/bitgo/psbt/scriptTypes.js +5 -6
  67. package/dist/src/bitgo/signature.d.ts +4 -5
  68. package/dist/src/bitgo/signature.d.ts.map +1 -1
  69. package/dist/src/bitgo/signature.js +32 -18
  70. package/dist/src/bitgo/tnumber.js +2 -3
  71. package/dist/src/bitgo/transaction.d.ts +31 -4
  72. package/dist/src/bitgo/transaction.d.ts.map +1 -1
  73. package/dist/src/bitgo/transaction.js +55 -27
  74. package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
  75. package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
  76. package/dist/src/bitgo/transactionAmounts.js +32 -0
  77. package/dist/src/bitgo/types.d.ts +8 -2
  78. package/dist/src/bitgo/types.d.ts.map +1 -1
  79. package/dist/src/bitgo/types.js +12 -4
  80. package/dist/src/bitgo/wallet/Psbt.d.ts +90 -27
  81. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  82. package/dist/src/bitgo/wallet/Psbt.js +244 -103
  83. package/dist/src/bitgo/wallet/Unspent.d.ts +43 -10
  84. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
  85. package/dist/src/bitgo/wallet/Unspent.js +173 -79
  86. package/dist/src/bitgo/wallet/WalletKeys.d.ts +1 -2
  87. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
  88. package/dist/src/bitgo/wallet/WalletKeys.js +3 -3
  89. package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
  90. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
  91. package/dist/src/bitgo/wallet/WalletOutput.js +67 -27
  92. package/dist/src/bitgo/wallet/WalletScripts.js +4 -5
  93. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
  94. package/dist/src/bitgo/wallet/chains.d.ts +2 -2
  95. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
  96. package/dist/src/bitgo/wallet/chains.js +10 -10
  97. package/dist/src/bitgo/wallet/index.d.ts +2 -0
  98. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  99. package/dist/src/bitgo/wallet/index.js +8 -2
  100. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
  101. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
  102. package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +86 -0
  103. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
  104. package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
  105. package/dist/src/bitgo/wallet/psbt/RootNodes.js +125 -0
  106. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +1 -2
  107. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -1
  108. package/dist/src/bitgo/zcash/ZcashBufferutils.js +15 -15
  109. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -2
  110. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  111. package/dist/src/bitgo/zcash/ZcashPsbt.js +11 -17
  112. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +3 -2
  113. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
  114. package/dist/src/bitgo/zcash/ZcashTransaction.js +30 -20
  115. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -1
  116. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -1
  117. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +6 -4
  118. package/dist/src/bitgo/zcash/address.d.ts +0 -1
  119. package/dist/src/bitgo/zcash/address.d.ts.map +1 -1
  120. package/dist/src/bitgo/zcash/address.js +7 -8
  121. package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -2
  122. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
  123. package/dist/src/bitgo/zcash/hashZip0244.js +9 -10
  124. package/dist/src/bitgo/zcash/index.js +6 -2
  125. package/dist/src/classify.d.ts +0 -1
  126. package/dist/src/classify.d.ts.map +1 -1
  127. package/dist/src/classify.js +5 -5
  128. package/dist/src/index.js +6 -2
  129. package/dist/src/networks.d.ts +2 -2
  130. package/dist/src/networks.d.ts.map +1 -1
  131. package/dist/src/networks.js +67 -21
  132. package/dist/src/noble_ecc.d.ts +7 -7
  133. package/dist/src/noble_ecc.d.ts.map +1 -1
  134. package/dist/src/noble_ecc.js +4 -4
  135. package/dist/src/payments/p2tr.js +3 -4
  136. package/dist/src/payments/p2tr_ns.js +2 -3
  137. package/dist/src/taproot.d.ts +1 -2
  138. package/dist/src/taproot.d.ts.map +1 -1
  139. package/dist/src/taproot.js +19 -19
  140. package/dist/src/templates/multisig/input.d.ts +0 -1
  141. package/dist/src/templates/multisig/input.d.ts.map +1 -1
  142. package/dist/src/templates/multisig/input.js +2 -3
  143. package/dist/src/templates/multisig/output.d.ts +0 -1
  144. package/dist/src/templates/multisig/output.d.ts.map +1 -1
  145. package/dist/src/templates/multisig/output.js +2 -3
  146. package/dist/src/templates/nulldata.d.ts +0 -1
  147. package/dist/src/templates/nulldata.d.ts.map +1 -1
  148. package/dist/src/templates/nulldata.js +3 -3
  149. package/dist/src/templates/pubkey/input.d.ts +0 -1
  150. package/dist/src/templates/pubkey/input.d.ts.map +1 -1
  151. package/dist/src/templates/pubkey/input.js +2 -3
  152. package/dist/src/templates/pubkey/output.d.ts +0 -1
  153. package/dist/src/templates/pubkey/output.d.ts.map +1 -1
  154. package/dist/src/templates/pubkey/output.js +2 -3
  155. package/dist/src/templates/pubkeyhash/input.d.ts +0 -1
  156. package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -1
  157. package/dist/src/templates/pubkeyhash/input.js +2 -3
  158. package/dist/src/templates/pubkeyhash/output.d.ts +0 -1
  159. package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -1
  160. package/dist/src/templates/pubkeyhash/output.js +2 -3
  161. package/dist/src/templates/scripthash/input.d.ts +0 -1
  162. package/dist/src/templates/scripthash/input.d.ts.map +1 -1
  163. package/dist/src/templates/scripthash/input.js +2 -3
  164. package/dist/src/templates/scripthash/output.d.ts +0 -1
  165. package/dist/src/templates/scripthash/output.d.ts.map +1 -1
  166. package/dist/src/templates/scripthash/output.js +2 -3
  167. package/dist/src/templates/taproot/input.d.ts +0 -1
  168. package/dist/src/templates/taproot/input.d.ts.map +1 -1
  169. package/dist/src/templates/taproot/input.js +2 -3
  170. package/dist/src/templates/taproot/output.d.ts +0 -1
  171. package/dist/src/templates/taproot/output.d.ts.map +1 -1
  172. package/dist/src/templates/taproot/output.js +2 -3
  173. package/dist/src/templates/taprootnofn/input.d.ts +0 -1
  174. package/dist/src/templates/taprootnofn/input.d.ts.map +1 -1
  175. package/dist/src/templates/taprootnofn/input.js +2 -3
  176. package/dist/src/templates/taprootnofn/output.d.ts +0 -1
  177. package/dist/src/templates/taprootnofn/output.d.ts.map +1 -1
  178. package/dist/src/templates/taprootnofn/output.js +2 -3
  179. package/dist/src/templates/witnesscommitment/output.d.ts +0 -1
  180. package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -1
  181. package/dist/src/templates/witnesscommitment/output.js +4 -5
  182. package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -1
  183. package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -1
  184. package/dist/src/templates/witnesspubkeyhash/input.js +2 -3
  185. package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -1
  186. package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -1
  187. package/dist/src/templates/witnesspubkeyhash/output.js +2 -3
  188. package/dist/src/templates/witnessscripthash/input.d.ts +0 -1
  189. package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -1
  190. package/dist/src/templates/witnessscripthash/input.js +2 -3
  191. package/dist/src/templates/witnessscripthash/output.d.ts +0 -1
  192. package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -1
  193. package/dist/src/templates/witnessscripthash/output.js +2 -3
  194. package/dist/src/testutil/index.d.ts +1 -0
  195. package/dist/src/testutil/index.d.ts.map +1 -1
  196. package/dist/src/testutil/index.js +7 -2
  197. package/dist/src/testutil/keys.d.ts +4 -1
  198. package/dist/src/testutil/keys.d.ts.map +1 -1
  199. package/dist/src/testutil/keys.js +22 -8
  200. package/dist/src/testutil/mock.d.ts +2 -3
  201. package/dist/src/testutil/mock.d.ts.map +1 -1
  202. package/dist/src/testutil/mock.js +31 -23
  203. package/dist/src/testutil/psbt.d.ts +40 -16
  204. package/dist/src/testutil/psbt.d.ts.map +1 -1
  205. package/dist/src/testutil/psbt.js +54 -39
  206. package/dist/src/testutil/transaction.d.ts +18 -7
  207. package/dist/src/testutil/transaction.d.ts.map +1 -1
  208. package/dist/src/testutil/transaction.js +33 -26
  209. package/dist/src/transaction_builder.d.ts +0 -1
  210. package/dist/src/transaction_builder.d.ts.map +1 -1
  211. package/dist/src/transaction_builder.js +12 -17
  212. package/package.json +8 -8
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- import { Network } from '../..';
3
1
  import { UtxoTransactionBuilder } from '../UtxoTransactionBuilder';
4
2
  import { WalletUnspentSigner } from './WalletUnspentSigner';
5
3
  import { KeyName, RootWalletKeys } from './WalletKeys';
@@ -8,11 +6,15 @@ import { Triple } from '../types';
8
6
  import { UnspentWithPrevTx, Unspent } from '../Unspent';
9
7
  import { ChainCode } from './chains';
10
8
  import { UtxoPsbt } from '../UtxoPsbt';
9
+ /** Final (non-replaceable) */
10
+ export declare const TX_INPUT_SEQUENCE_NUMBER_FINAL = 4294967295;
11
+ /** Non-Final (Replaceable)
12
+ * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
13
+ * */
14
+ export declare const MAX_BIP125_RBF_SEQUENCE: number;
11
15
  export interface WalletUnspent<TNumber extends number | bigint = number> extends Unspent<TNumber> {
12
16
  chain: ChainCode;
13
17
  index: number;
14
- witnessScript?: string;
15
- valueString?: string;
16
18
  }
17
19
  export interface NonWitnessWalletUnspent<TNumber extends number | bigint = number> extends UnspentWithPrevTx<TNumber>, WalletUnspent<TNumber> {
18
20
  }
@@ -36,14 +38,45 @@ export interface WalletUnspentLegacy<TNumber extends number | bigint = number> e
36
38
  /** @deprecated - obviated by verifyWithUnspent */
37
39
  witnessScript?: string;
38
40
  }
39
- export declare function addReplayProtectionUnspentToPsbt(psbt: UtxoPsbt, u: Unspent<bigint>, redeemScript: Buffer,
40
41
  /**
41
- * @deprecated
42
+ * @param psbt
43
+ * @param inputIndex
44
+ * @param id Unspent ID
45
+ * @returns true iff the unspent ID on the unspent and psbt input match
42
46
  */
43
- network?: Network): void;
44
- export declare function addWalletUnspentToPsbt(psbt: UtxoPsbt, u: WalletUnspent<bigint>, rootWalletKeys: RootWalletKeys, signer: KeyName, cosigner: KeyName,
47
+ export declare function psbtIncludesUnspentAtIndex(psbt: UtxoPsbt, inputIndex: number, id: string): boolean;
45
48
  /**
46
- * @deprecated
49
+ * Update the psbt input at the given index
50
+ * @param psbt
51
+ * @param inputIndex
52
+ * @param u
53
+ * @param redeemScript Only overrides if there is no redeemScript in the input currently
54
+ */
55
+ export declare function updateReplayProtectionUnspentToPsbt(psbt: UtxoPsbt, inputIndex: number, u: Unspent<bigint>, redeemScript?: Buffer, customParams?: {
56
+ skipNonWitnessUtxo?: boolean;
57
+ }): void;
58
+ export declare function addReplayProtectionUnspentToPsbt(psbt: UtxoPsbt, u: Unspent<bigint>, redeemScript: Buffer, customParams?: {
59
+ skipNonWitnessUtxo?: boolean;
60
+ }): void;
61
+ /**
62
+ * Update the PSBT with the unspent data for the input at the given index if the data is not there already.
63
+ *
64
+ * If skipNonWitnessUtxo is true, then the nonWitnessUtxo will not be added for an input that requires it (e.g. non-segwit)
65
+ * and instead the witnessUtxo will be added
66
+ *
67
+ * @param psbt
68
+ * @param inputIndex
69
+ * @param u
70
+ * @param rootWalletKeys
71
+ * @param signer
72
+ * @param cosigner
73
+ * @param customParams
47
74
  */
48
- network?: Network): void;
75
+ export declare function updateWalletUnspentForPsbt(psbt: UtxoPsbt, inputIndex: number, u: WalletUnspent<bigint>, rootWalletKeys: RootWalletKeys, signer: KeyName, cosigner: KeyName, customParams?: {
76
+ skipNonWitnessUtxo?: boolean;
77
+ }): void;
78
+ export declare function addWalletUnspentToPsbt(psbt: UtxoPsbt, u: WalletUnspent<bigint>, rootWalletKeys: RootWalletKeys, signer: KeyName, cosigner: KeyName, customParams?: {
79
+ isReplaceableByFee?: boolean;
80
+ skipNonWitnessUtxo?: boolean;
81
+ }): void;
49
82
  //# sourceMappingURL=Unspent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Unspent.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/Unspent.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,OAAO,EAAY,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAWnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAY,iBAAiB,EAAE,OAAO,EAAqC,MAAM,YAAY,CAAC;AACrG,OAAO,EAAE,SAAS,EAAY,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKvC,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,OAAO,CAAC,OAAO,CAAC;IAC/F,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAC/E,SAAQ,iBAAiB,CAAC,OAAO,CAAC,EAChC,aAAa,CAAC,OAAO,CAAC;CAAG;AAE7B,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAEjH;AAED,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAClE,SAAS,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,aAAa,EAAE,mBAAmB,CAAC,cAAc,CAAC,GACjD,IAAI,CAmBN;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxE,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAC5B,UAAU,EAAE,cAAc,GACzB,MAAM,CAAC,OAAO,CAAC,CAiCjB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,aAAa,CAAC,OAAO,CAAC;IAC3G,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,QAAQ,EACd,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAClB,YAAY,EAAE,MAAM;AACpB;;GAEG;AACH,OAAO,GAAE,OAAsB,GAC9B,IAAI,CAqBN;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,EACd,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EACxB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO;AACjB;;GAEG;AACH,OAAO,GAAE,OAAsB,GAC9B,IAAI,CAkFN"}
1
+ {"version":3,"file":"Unspent.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/Unspent.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addWalletUnspentToPsbt = exports.addReplayProtectionUnspentToPsbt = exports.verifySignatureWithUnspent = exports.signInputWithUnspent = exports.isWalletUnspent = void 0;
3
+ exports.MAX_BIP125_RBF_SEQUENCE = exports.TX_INPUT_SEQUENCE_NUMBER_FINAL = void 0;
4
+ exports.isWalletUnspent = isWalletUnspent;
5
+ exports.signInputWithUnspent = signInputWithUnspent;
6
+ exports.verifySignatureWithUnspent = verifySignatureWithUnspent;
7
+ exports.psbtIncludesUnspentAtIndex = psbtIncludesUnspentAtIndex;
8
+ exports.updateReplayProtectionUnspentToPsbt = updateReplayProtectionUnspentToPsbt;
9
+ exports.addReplayProtectionUnspentToPsbt = addReplayProtectionUnspentToPsbt;
10
+ exports.updateWalletUnspentForPsbt = updateWalletUnspentForPsbt;
11
+ exports.addWalletUnspentToPsbt = addWalletUnspentToPsbt;
4
12
  const __1 = require("../..");
5
13
  const outputScripts_1 = require("../outputScripts");
6
14
  const address_1 = require("../../address");
@@ -10,21 +18,27 @@ const chains_1 = require("./chains");
10
18
  const Musig2_1 = require("../Musig2");
11
19
  const transaction_1 = require("../transaction");
12
20
  const parseInput_1 = require("../parseInput");
21
+ const utils_1 = require("bip174/src/lib/utils");
22
+ const PsbtUtil_1 = require("../PsbtUtil");
23
+ /** Final (non-replaceable) */
24
+ exports.TX_INPUT_SEQUENCE_NUMBER_FINAL = 0xffffffff;
25
+ /** Non-Final (Replaceable)
26
+ * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
27
+ * */
28
+ exports.MAX_BIP125_RBF_SEQUENCE = 0xffffffff - 2;
13
29
  function isWalletUnspent(u) {
14
30
  return u.chain !== undefined;
15
31
  }
16
- exports.isWalletUnspent = isWalletUnspent;
17
32
  function signInputWithUnspent(txBuilder, inputIndex, unspent, unspentSigner) {
18
33
  const { walletKeys, signer, cosigner } = unspentSigner.deriveForChainAndIndex(unspent.chain, unspent.index);
19
- const scriptType = outputScripts_1.scriptTypeForChain(unspent.chain);
20
- const pubScript = outputScripts_1.createOutputScript2of3(walletKeys.publicKeys, scriptType).scriptPubKey;
21
- const pubScriptExpected = address_1.toOutputScript(unspent.address, txBuilder.network);
34
+ const scriptType = (0, outputScripts_1.scriptTypeForChain)(unspent.chain);
35
+ const pubScript = (0, outputScripts_1.createOutputScript2of3)(walletKeys.publicKeys, scriptType).scriptPubKey;
36
+ const pubScriptExpected = (0, address_1.toOutputScript)(unspent.address, txBuilder.network);
22
37
  if (!pubScript.equals(pubScriptExpected)) {
23
38
  throw new Error(`pubscript mismatch: expected ${pubScriptExpected.toString('hex')} got ${pubScript.toString('hex')}`);
24
39
  }
25
- signature_1.signInput2Of3(txBuilder, inputIndex, scriptType, walletKeys.publicKeys, signer, cosigner.publicKey, unspent.value);
40
+ (0, signature_1.signInput2Of3)(txBuilder, inputIndex, scriptType, walletKeys.publicKeys, signer, cosigner.publicKey, unspent.value);
26
41
  }
27
- exports.signInputWithUnspent = signInputWithUnspent;
28
42
  /**
29
43
  * @param tx
30
44
  * @param inputIndex
@@ -46,125 +60,205 @@ function verifySignatureWithUnspent(tx, inputIndex, unspents, walletKeys) {
46
60
  if (!isWalletUnspent(unspent) || (!((_a = input.script) === null || _a === void 0 ? void 0 : _a.length) && !((_b = input.witness) === null || _b === void 0 ? void 0 : _b.length))) {
47
61
  return [false, false, false];
48
62
  }
49
- const parsedInput = parseInput_1.parseSignatureScript(input);
50
- const prevOutputs = unspents.map((u) => Unspent_1.toOutput(u, tx.network));
63
+ const parsedInput = (0, parseInput_1.parseSignatureScript)(input);
64
+ const prevOutputs = unspents.map((u) => (0, Unspent_1.toOutput)(u, tx.network));
51
65
  // If it is a taproot keyPathSpend input, the only valid signature combinations is user-bitgo. We can
52
66
  // only verify that the aggregated signature is valid, not that the individual partial-signature is valid.
53
67
  // Therefore, we can only say that either all partial signatures are valid, or none are.
54
68
  if (parsedInput.scriptType === 'taprootKeyPathSpend') {
55
- const result = signature_1.getSignatureVerifications(tx, inputIndex, unspent.value, undefined, prevOutputs);
69
+ const result = (0, signature_1.getSignatureVerifications)(tx, inputIndex, unspent.value, undefined, prevOutputs);
56
70
  return result.length === 1 && result[0].signature ? [true, false, true] : [false, false, false];
57
71
  }
58
- return signature_1.verifySignatureWithPublicKeys(tx, inputIndex, prevOutputs, walletKeys.deriveForChainAndIndex(unspent.chain, unspent.index).publicKeys);
72
+ return (0, signature_1.verifySignatureWithPublicKeys)(tx, inputIndex, prevOutputs, walletKeys.deriveForChainAndIndex(unspent.chain, unspent.index).publicKeys);
59
73
  }
60
- exports.verifySignatureWithUnspent = verifySignatureWithUnspent;
61
- function addReplayProtectionUnspentToPsbt(psbt, u, redeemScript,
62
74
  /**
63
- * @deprecated
75
+ * @param psbt
76
+ * @param inputIndex
77
+ * @param id Unspent ID
78
+ * @returns true iff the unspent ID on the unspent and psbt input match
64
79
  */
65
- network = psbt.network) {
66
- if (network !== psbt.network) {
67
- throw new Error(`network parameter does not match psbt.network`);
80
+ function psbtIncludesUnspentAtIndex(psbt, inputIndex, id) {
81
+ (0, utils_1.checkForInput)(psbt.data.inputs, inputIndex);
82
+ const { txid, vout } = (0, Unspent_1.parseOutputId)(id);
83
+ const psbtOutPoint = (0, Unspent_1.getOutputIdForInput)(psbt.txInputs[inputIndex]);
84
+ return psbtOutPoint.txid === txid && psbtOutPoint.vout === vout;
85
+ }
86
+ /**
87
+ * Update the psbt input at the given index
88
+ * @param psbt
89
+ * @param inputIndex
90
+ * @param u
91
+ * @param redeemScript Only overrides if there is no redeemScript in the input currently
92
+ */
93
+ function updateReplayProtectionUnspentToPsbt(psbt, inputIndex, u, redeemScript, customParams) {
94
+ if (!psbtIncludesUnspentAtIndex(psbt, inputIndex, u.id)) {
95
+ throw new Error(`unspent does not correspond to psbt input`);
96
+ }
97
+ const input = (0, utils_1.checkForInput)(psbt.data.inputs, inputIndex);
98
+ if (redeemScript && !input.redeemScript) {
99
+ psbt.updateInput(inputIndex, { redeemScript });
68
100
  }
69
- const { txid, vout } = Unspent_1.toPrevOutput(u, psbt.network);
70
- const isZcash = __1.getMainnet(psbt.network) === __1.networks.zcash;
71
101
  // Because Zcash directly hashes the value for non-segwit transactions, we do not need to check indirectly
72
102
  // with the previous transaction. Therefore, we can treat Zcash non-segwit transactions as Bitcoin
73
103
  // segwit transactions
74
- if (!Unspent_1.isUnspentWithPrevTx(u) && !isZcash) {
104
+ const isZcash = (0, __1.getMainnet)(psbt.network) === __1.networks.zcash;
105
+ if (!(0, Unspent_1.isUnspentWithPrevTx)(u) && !isZcash && !(customParams === null || customParams === void 0 ? void 0 : customParams.skipNonWitnessUtxo)) {
75
106
  throw new Error('Error, require previous tx to add to PSBT');
76
107
  }
108
+ if ((isZcash && !input.witnessUtxo) || (customParams === null || customParams === void 0 ? void 0 : customParams.skipNonWitnessUtxo)) {
109
+ const { script, value } = (0, Unspent_1.toPrevOutput)(u, psbt.network);
110
+ psbt.updateInput(inputIndex, { witnessUtxo: { script, value } });
111
+ }
112
+ else if (!isZcash && !input.nonWitnessUtxo) {
113
+ psbt.updateInput(inputIndex, { nonWitnessUtxo: u.prevTx });
114
+ }
115
+ const sighashType = (0, signature_1.getDefaultSigHash)(psbt.network);
116
+ if (psbt.data.inputs[inputIndex].sighashType === undefined) {
117
+ psbt.updateInput(inputIndex, { sighashType });
118
+ }
119
+ }
120
+ function addUnspentToPsbt(psbt, id, { sequenceNumber = exports.TX_INPUT_SEQUENCE_NUMBER_FINAL } = {}) {
121
+ const { txid, vout } = (0, Unspent_1.parseOutputId)(id);
77
122
  psbt.addInput({
78
123
  hash: txid,
79
124
  index: vout,
80
- redeemScript,
125
+ sequence: sequenceNumber,
81
126
  });
82
- if (!isZcash) {
83
- psbt.updateInput(psbt.inputCount - 1, { nonWitnessUtxo: u.prevTx });
84
- }
85
127
  }
86
- exports.addReplayProtectionUnspentToPsbt = addReplayProtectionUnspentToPsbt;
87
- function addWalletUnspentToPsbt(psbt, u, rootWalletKeys, signer, cosigner,
128
+ function addReplayProtectionUnspentToPsbt(psbt, u, redeemScript, customParams) {
129
+ addUnspentToPsbt(psbt, u.id);
130
+ updateReplayProtectionUnspentToPsbt(psbt, psbt.inputCount - 1, u, redeemScript, customParams);
131
+ }
88
132
  /**
89
- * @deprecated
133
+ * Update the PSBT with the unspent data for the input at the given index if the data is not there already.
134
+ *
135
+ * If skipNonWitnessUtxo is true, then the nonWitnessUtxo will not be added for an input that requires it (e.g. non-segwit)
136
+ * and instead the witnessUtxo will be added
137
+ *
138
+ * @param psbt
139
+ * @param inputIndex
140
+ * @param u
141
+ * @param rootWalletKeys
142
+ * @param signer
143
+ * @param cosigner
144
+ * @param customParams
90
145
  */
91
- network = psbt.network) {
92
- if (network !== psbt.network) {
93
- throw new Error(`network parameter does not match psbt.network`);
146
+ function updateWalletUnspentForPsbt(psbt, inputIndex, u, rootWalletKeys, signer, cosigner, customParams) {
147
+ if (!psbtIncludesUnspentAtIndex(psbt, inputIndex, u.id)) {
148
+ throw new Error(`unspent does not correspond to psbt input`);
94
149
  }
95
- const { txid, vout, script, value } = Unspent_1.toPrevOutput(u, psbt.network);
96
- psbt.addInput({ hash: txid, index: vout });
97
- const inputIndex = psbt.inputCount - 1;
150
+ const input = (0, utils_1.checkForInput)(psbt.data.inputs, inputIndex);
98
151
  // Because Zcash directly hashes the value for non-segwit transactions, we do not need to check indirectly
99
152
  // with the previous transaction. Therefore, we can treat Zcash non-segwit transactions as Bitcoin
100
153
  // segwit transactions
101
- if (chains_1.isSegwit(u.chain) || __1.getMainnet(psbt.network) === __1.networks.zcash) {
154
+ const isZcashOrSegwit = (0, chains_1.isSegwit)(u.chain) || (0, __1.getMainnet)(psbt.network) === __1.networks.zcash;
155
+ if ((isZcashOrSegwit || (customParams === null || customParams === void 0 ? void 0 : customParams.skipNonWitnessUtxo)) && !input.witnessUtxo) {
156
+ const { script, value } = (0, Unspent_1.toPrevOutput)(u, psbt.network);
102
157
  psbt.updateInput(inputIndex, { witnessUtxo: { script, value } });
103
158
  }
104
- else {
105
- if (!Unspent_1.isUnspentWithPrevTx(u)) {
159
+ else if (!isZcashOrSegwit) {
160
+ if (!(0, Unspent_1.isUnspentWithPrevTx)(u)) {
106
161
  throw new Error('Error, require previous tx to add to PSBT');
107
162
  }
108
- // Force the litecoin transaction to have no MWEB advanced transaction flag
109
- if (__1.getMainnet(psbt.network) === __1.networks.litecoin) {
110
- u.prevTx = transaction_1.createTransactionFromBuffer(u.prevTx, psbt.network, { amountType: 'bigint' }).toBuffer();
163
+ if (!input.witnessUtxo && !input.nonWitnessUtxo) {
164
+ // Force the litecoin transaction to have no MWEB advanced transaction flag
165
+ if ((0, __1.getMainnet)(psbt.network) === __1.networks.litecoin) {
166
+ u.prevTx = (0, transaction_1.createTransactionFromBuffer)(u.prevTx, psbt.network, { amountType: 'bigint' }).toBuffer();
167
+ }
168
+ psbt.updateInput(inputIndex, { nonWitnessUtxo: u.prevTx });
111
169
  }
112
- psbt.updateInput(inputIndex, { nonWitnessUtxo: u.prevTx });
113
170
  }
114
171
  const walletKeys = rootWalletKeys.deriveForChainAndIndex(u.chain, u.index);
115
- const scriptType = outputScripts_1.scriptTypeForChain(u.chain);
172
+ const scriptType = (0, outputScripts_1.scriptTypeForChain)(u.chain);
173
+ const sighashType = (0, signature_1.getDefaultSigHash)(psbt.network, scriptType);
174
+ if (psbt.data.inputs[inputIndex].sighashType === undefined) {
175
+ psbt.updateInput(inputIndex, { sighashType });
176
+ }
116
177
  const isBackupFlow = signer === 'backup' || cosigner === 'backup';
117
178
  if (scriptType === 'p2tr' || (scriptType === 'p2trMusig2' && isBackupFlow)) {
179
+ if (input.tapLeafScript && input.tapBip32Derivation) {
180
+ return;
181
+ }
118
182
  const createSpendScriptP2trFn = scriptType === 'p2tr' ? outputScripts_1.createSpendScriptP2tr : outputScripts_1.createSpendScriptP2trMusig2;
119
183
  const { controlBlock, witnessScript, leafVersion, leafHash } = createSpendScriptP2trFn(walletKeys.publicKeys, [
120
184
  walletKeys[signer].publicKey,
121
185
  walletKeys[cosigner].publicKey,
122
186
  ]);
123
- psbt.updateInput(inputIndex, {
124
- tapLeafScript: [{ controlBlock, script: witnessScript, leafVersion }],
125
- tapBip32Derivation: [signer, cosigner].map((key) => ({
126
- leafHashes: [leafHash],
127
- pubkey: outputScripts_1.toXOnlyPublicKey(walletKeys[key].publicKey),
128
- path: rootWalletKeys.getDerivationPath(rootWalletKeys[key], u.chain, u.index),
129
- masterFingerprint: rootWalletKeys[key].fingerprint,
130
- })),
131
- });
187
+ if (!input.tapLeafScript) {
188
+ psbt.updateInput(inputIndex, {
189
+ tapLeafScript: [{ controlBlock, script: witnessScript, leafVersion }],
190
+ });
191
+ }
192
+ if (!input.tapBip32Derivation) {
193
+ psbt.updateInput(inputIndex, {
194
+ tapBip32Derivation: [signer, cosigner].map((key) => ({
195
+ leafHashes: [leafHash],
196
+ pubkey: (0, outputScripts_1.toXOnlyPublicKey)(walletKeys[key].publicKey),
197
+ path: rootWalletKeys.getDerivationPath(rootWalletKeys[key], u.chain, u.index),
198
+ masterFingerprint: rootWalletKeys[key].fingerprint,
199
+ })),
200
+ });
201
+ }
132
202
  }
133
203
  else if (scriptType === 'p2trMusig2') {
134
- const { internalPubkey: tapInternalKey, outputPubkey: tapOutputKey, taptreeRoot, } = outputScripts_1.createKeyPathP2trMusig2(walletKeys.publicKeys);
135
- const participantsKeyValData = Musig2_1.encodePsbtMusig2Participants({
136
- tapOutputKey,
137
- tapInternalKey,
138
- participantPubKeys: [walletKeys.user.publicKey, walletKeys.bitgo.publicKey],
139
- });
140
- psbt.addProprietaryKeyValToInput(inputIndex, participantsKeyValData);
141
- psbt.updateInput(inputIndex, {
142
- tapInternalKey: tapInternalKey,
143
- tapMerkleRoot: taptreeRoot,
144
- tapBip32Derivation: [signer, cosigner].map((key) => ({
145
- leafHashes: [],
146
- pubkey: outputScripts_1.toXOnlyPublicKey(walletKeys[key].publicKey),
147
- path: rootWalletKeys.getDerivationPath(rootWalletKeys[key], u.chain, u.index),
148
- masterFingerprint: rootWalletKeys[key].fingerprint,
149
- })),
150
- });
204
+ const { internalPubkey: tapInternalKey, outputPubkey: tapOutputKey, taptreeRoot, } = (0, outputScripts_1.createKeyPathP2trMusig2)(walletKeys.publicKeys);
205
+ if (psbt.getProprietaryKeyVals(inputIndex, {
206
+ identifier: PsbtUtil_1.PSBT_PROPRIETARY_IDENTIFIER,
207
+ subtype: PsbtUtil_1.ProprietaryKeySubtype.MUSIG2_PARTICIPANT_PUB_KEYS,
208
+ }).length === 0) {
209
+ const participantsKeyValData = (0, Musig2_1.encodePsbtMusig2Participants)({
210
+ tapOutputKey,
211
+ tapInternalKey,
212
+ participantPubKeys: [walletKeys.user.publicKey, walletKeys.bitgo.publicKey],
213
+ });
214
+ psbt.addProprietaryKeyValToInput(inputIndex, participantsKeyValData);
215
+ }
216
+ if (!input.tapInternalKey) {
217
+ psbt.updateInput(inputIndex, {
218
+ tapInternalKey: tapInternalKey,
219
+ });
220
+ }
221
+ if (!input.tapMerkleRoot) {
222
+ psbt.updateInput(inputIndex, {
223
+ tapMerkleRoot: taptreeRoot,
224
+ });
225
+ }
226
+ if (!input.tapBip32Derivation) {
227
+ psbt.updateInput(inputIndex, {
228
+ tapBip32Derivation: [signer, cosigner].map((key) => ({
229
+ leafHashes: [],
230
+ pubkey: (0, outputScripts_1.toXOnlyPublicKey)(walletKeys[key].publicKey),
231
+ path: rootWalletKeys.getDerivationPath(rootWalletKeys[key], u.chain, u.index),
232
+ masterFingerprint: rootWalletKeys[key].fingerprint,
233
+ })),
234
+ });
235
+ }
151
236
  }
152
237
  else {
153
- const { witnessScript, redeemScript } = outputScripts_1.createOutputScript2of3(walletKeys.publicKeys, scriptType);
154
- psbt.updateInput(inputIndex, {
155
- bip32Derivation: [0, 1, 2].map((idx) => ({
156
- pubkey: walletKeys.triple[idx].publicKey,
157
- path: walletKeys.paths[idx],
158
- masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
159
- })),
160
- });
161
- if (witnessScript) {
238
+ if (!input.bip32Derivation) {
239
+ psbt.updateInput(inputIndex, {
240
+ bip32Derivation: [0, 1, 2].map((idx) => ({
241
+ pubkey: walletKeys.triple[idx].publicKey,
242
+ path: walletKeys.paths[idx],
243
+ masterFingerprint: rootWalletKeys.triple[idx].fingerprint,
244
+ })),
245
+ });
246
+ }
247
+ const { witnessScript, redeemScript } = (0, outputScripts_1.createOutputScript2of3)(walletKeys.publicKeys, scriptType);
248
+ if (witnessScript && !input.witnessScript) {
162
249
  psbt.updateInput(inputIndex, { witnessScript });
163
250
  }
164
- if (redeemScript) {
251
+ if (redeemScript && !input.redeemScript) {
165
252
  psbt.updateInput(inputIndex, { redeemScript });
166
253
  }
167
254
  }
168
255
  }
169
- exports.addWalletUnspentToPsbt = addWalletUnspentToPsbt;
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvVW5zcGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0Q7QUFFdEQsb0RBTzBCO0FBQzFCLDJDQUErQztBQUMvQyw0Q0FBdUc7QUFLdkcsd0NBQXFHO0FBQ3JHLHFDQUErQztBQUUvQyxzQ0FBeUQ7QUFDekQsZ0RBQTZEO0FBQzdELDhDQUFxRDtBQWFyRCxTQUFnQixlQUFlLENBQWtDLENBQW1CO0lBQ2xGLE9BQVEsQ0FBNEIsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQzNELENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQWdCLG9CQUFvQixDQUNsQyxTQUEwQyxFQUMxQyxVQUFrQixFQUNsQixPQUErQixFQUMvQixhQUFrRDtJQUVsRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxhQUFhLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsTUFBTSxVQUFVLEdBQUcsa0NBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLHNDQUFzQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3pGLE1BQU0saUJBQWlCLEdBQUcsd0JBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFrQixDQUFDLENBQUM7SUFDeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUN4QyxNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNy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QixFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVzthQUMxRCxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDaEQ7S0FDRjtBQUNILENBQUM7QUE1RkQsd0RBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWFpbm5ldCwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMixcbiAgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyxcbiAgY3JlYXRlU3BlbmRTY3JpcHRQMnRyLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzIsXG4gIHNjcmlwdFR5cGVGb3JDaGFpbixcbiAgdG9YT25seVB1YmxpY0tleSxcbn0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4uLy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucywgc2lnbklucHV0Mk9mMywgdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXMgfSBmcm9tICcuLi9zaWduYXR1cmUnO1xuaW1wb3J0IHsgV2FsbGV0VW5zcGVudFNpZ25lciB9IGZyb20gJy4vV2FsbGV0VW5zcGVudFNpZ25lcic7XG5pbXBvcnQgeyBLZXlOYW1lLCBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4vV2FsbGV0S2V5cyc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdG9PdXRwdXQsIFVuc3BlbnRXaXRoUHJldlR4LCBVbnNwZW50LCBpc1Vuc3BlbnRXaXRoUHJldlR4LCB0b1ByZXZPdXRwdXQgfSBmcm9tICcuLi9VbnNwZW50JztcbmltcG9ydCB7IENoYWluQ29kZSwgaXNTZWd3aXQgfSBmcm9tICcuL2NoYWlucyc7XG5pbXBvcnQgeyBVdHhvUHNidCB9IGZyb20gJy4uL1V0eG9Qc2J0JztcbmltcG9ydCB7IGVuY29kZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMgfSBmcm9tICcuLi9NdXNpZzInO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgcGFyc2VTaWduYXR1cmVTY3JpcHQgfSBmcm9tICcuLi9wYXJzZUlucHV0JztcblxuZXhwb3J0IGludGVyZmFjZSBXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgVW5zcGVudDxUTnVtYmVyPiB7XG4gIGNoYWluOiBDaGFpbkNvZGU7XG4gIGluZGV4OiBudW1iZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBzdHJpbmc7XG4gIHZhbHVlU3RyaW5nPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vbldpdG5lc3NXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlcj4sXG4gICAgV2FsbGV0VW5zcGVudDxUTnVtYmVyPiB7fVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHU6IFVuc3BlbnQ8VE51bWJlcj4pOiB1IGlzIFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICByZXR1cm4gKHUgYXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPikuY2hhaW4gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25JbnB1dFdpdGhVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eEJ1aWxkZXI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgdW5zcGVudDogV2FsbGV0VW5zcGVudDxUTnVtYmVyPixcbiAgdW5zcGVudFNpZ25lcjogV2FsbGV0VW5zcGVudFNpZ25lcjxSb290V2FsbGV0S2V5cz5cbik6IHZvaWQge1xuICBjb25zdCB7IHdhbGxldEtleXMsIHNpZ25lciwgY29zaWduZXIgfSA9IHVuc3BlbnRTaWduZXIuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1bnNwZW50LmNoYWluLCB1bnNwZW50LmluZGV4KTtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IHNjcmlwdFR5cGVGb3JDaGFpbih1bnNwZW50LmNoYWluKTtcbiAgY29uc3QgcHViU2NyaXB0ID0gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyh3YWxsZXRLZXlzLnB1YmxpY0tleXMsIHNjcmlwdFR5cGUpLnNjcmlwdFB1YktleTtcbiAgY29uc3QgcHViU2NyaXB0RXhwZWN0ZWQgPSB0b091dHB1dFNjcmlwdCh1bnNwZW50LmFkZHJlc3MsIHR4QnVpbGRlci5uZXR3b3JrIGFzIE5ldHdvcmspO1xuICBpZiAoIXB1YlNjcmlwdC5lcXVhbHMocHViU2NyaXB0RXhwZWN0ZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHB1YnNjcmlwdCBtaXNtYXRjaDogZXhwZWN0ZWQgJHtwdWJTY3JpcHRFeHBlY3RlZC50b1N0cmluZygnaGV4Jyl9IGdvdCAke3B1YlNjcmlwdC50b1N0cmluZygnaGV4Jyl9YFxuICAgICk7XG4gIH1cbiAgc2lnbklucHV0Mk9mMzxUTnVtYmVyPihcbiAgICB0eEJ1aWxkZXIsXG4gICAgaW5wdXRJbmRleCxcbiAgICBzY3JpcHRUeXBlLFxuICAgIHdhbGxldEtleXMucHVibGljS2V5cyxcbiAgICBzaWduZXIsXG4gICAgY29zaWduZXIucHVibGljS2V5LFxuICAgIHVuc3BlbnQudmFsdWVcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHhcbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRLZXlzXG4gKiBAcmV0dXJuIHRyaXBsZSBvZiBib29sZWFucyBpbmRpY2F0aW5nIGEgdmFsaWQgc2lnbmF0dXJlIGZvciBlYWNoIHB1YmtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXNcbik6IFRyaXBsZTxib29sZWFuPiB7XG4gIGlmICh0eC5pbnMubGVuZ3RoICE9PSB1bnNwZW50cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGxlbmd0aCBtdXN0IG1hdGNoIHVuc3BlbnRzIGxlbmd0aGApO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB0eC5pbnNbaW5wdXRJbmRleF07XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghaW5wdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGlucHV0IGF0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxuXG4gIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbnB1dEluZGV4XTtcbiAgaWYgKCFpc1dhbGxldFVuc3BlbnQodW5zcGVudCkgfHwgKCFpbnB1dC5zY3JpcHQ/Lmxlbmd0aCAmJiAhaW5wdXQud2l0bmVzcz8ubGVuZ3RoKSkge1xuICAgIHJldHVybiBbZmFsc2UsIGZhbHNlLCBmYWxzZV07XG4gIH1cblxuICBjb25zdCBwYXJzZWRJbnB1dCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcbiAgY29uc3QgcHJldk91dHB1dHMgPSB1bnNwZW50cy5tYXAoKHUpID0+IHRvT3V0cHV0KHUsIHR4Lm5ldHdvcmspKTtcblxuICAvLyBJZiBpdCBpcyBhIHRhcHJvb3Qga2V5UGF0aFNwZW5kIGlucHV0LCB0aGUgb25seSB2YWxpZCBzaWduYXR1cmUgY29tYmluYXRpb25zIGlzIHVzZXItYml0Z28uIFdlIGNhblxuICAvLyBvbmx5IHZlcmlmeSB0aGF0IHRoZSBhZ2dyZWdhdGVkIHNpZ25hdHVyZSBpcyB2YWxpZCwgbm90IHRoYXQgdGhlIGluZGl2aWR1YWwgcGFydGlhbC1zaWduYXR1cmUgaXMgdmFsaWQuXG4gIC8vIFRoZXJlZm9yZSwgd2UgY2FuIG9ubHkgc2F5IHRoYXQgZWl0aGVyIGFsbCBwYXJ0aWFsIHNpZ25hdHVyZXMgYXJlIHZhbGlkLCBvciBub25lIGFyZS5cbiAgaWYgKHBhcnNlZElucHV0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnModHgsIGlucHV0SW5kZXgsIHVuc3BlbnQudmFsdWUsIHVuZGVmaW5lZCwgcHJldk91dHB1dHMpO1xuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxICYmIHJlc3VsdFswXS5zaWduYXR1cmUgPyBbdHJ1ZSwgZmFsc2UsIHRydWVdIDogW2ZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuICB9XG5cbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzKFxuICAgIHR4LFxuICAgIGlucHV0SW5kZXgsXG4gICAgcHJldk91dHB1dHMsXG4gICAgd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXNcbiAgKSBhcyBUcmlwbGU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZWQgaW4gY2VydGFpbiBsZWdhY3kgc2lnbmluZyBtZXRob2RzIHRoYXQgZG8gbm90IGRlcml2ZSBzaWduaW5nIGRhdGEgZnJvbSBpbmRleC9jaGFpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgc2lnbldpdGhVbnNwZW50ICovXG4gIHJlZGVlbVNjcmlwdD86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgdmVyaWZ5V2l0aFVuc3BlbnQgKi9cbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogVW5zcGVudDxiaWdpbnQ+LFxuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcixcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBuZXR3b3JrOiBOZXR3b3JrID0gcHNidC5uZXR3b3JrXG4pOiB2b2lkIHtcbiAgaWYgKG5ldHdvcmsgIT09IHBzYnQubmV0d29yaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmV0d29yayBwYXJhbWV0ZXIgZG9lcyBub3QgbWF0Y2ggcHNidC5uZXR3b3JrYCk7XG4gIH1cbiAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSB0b1ByZXZPdXRwdXQodSwgcHNidC5uZXR3b3JrKTtcbiAgY29uc3QgaXNaY2FzaCA9IGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MuemNhc2g7XG5cbiAgLy8gQmVjYXVzZSBaY2FzaCBkaXJlY3RseSBoYXNoZXMgdGhlIHZhbHVlIGZvciBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucywgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaW5kaXJlY3RseVxuICAvLyB3aXRoIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB3ZSBjYW4gdHJlYXQgWmNhc2ggbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMgYXMgQml0Y29pblxuICAvLyBzZWd3aXQgdHJhbnNhY3Rpb25zXG4gIGlmICghaXNVbnNwZW50V2l0aFByZXZUeCh1KSAmJiAhaXNaY2FzaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIHJlcXVpcmUgcHJldmlvdXMgdHggdG8gYWRkIHRvIFBTQlQnKTtcbiAgfVxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0eGlkLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgfSk7XG4gIGlmICghaXNaY2FzaCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQocHNidC5pbnB1dENvdW50IC0gMSwgeyBub25XaXRuZXNzVXR4bzogKHUgYXMgVW5zcGVudFdpdGhQcmV2VHg8YmlnaW50PikucHJldlR4IH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogV2FsbGV0VW5zcGVudDxiaWdpbnQ+LFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lcjogS2V5TmFtZSxcbiAgY29zaWduZXI6IEtleU5hbWUsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgbmV0d29yazogTmV0d29yayA9IHBzYnQubmV0d29ya1xuKTogdm9pZCB7XG4gIGlmIChuZXR3b3JrICE9PSBwc2J0Lm5ldHdvcmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5ldHdvcmsgcGFyYW1ldGVyIGRvZXMgbm90IG1hdGNoIHBzYnQubmV0d29ya2ApO1xuICB9XG4gIGNvbnN0IHsgdHhpZCwgdm91dCwgc2NyaXB0LCB2YWx1ZSB9ID0gdG9QcmV2T3V0cHV0KHUsIHBzYnQubmV0d29yayk7XG5cbiAgcHNidC5hZGRJbnB1dCh7IGhhc2g6IHR4aWQsIGluZGV4OiB2b3V0IH0pO1xuICBjb25zdCBpbnB1dEluZGV4ID0gcHNidC5pbnB1dENvdW50IC0gMTtcblxuICAvLyBCZWNhdXNlIFpjYXNoIGRpcmVjdGx5IGhhc2hlcyB0aGUgdmFsdWUgZm9yIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBpbmRpcmVjdGx5XG4gIC8vIHdpdGggdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9uLiBUaGVyZWZvcmUsIHdlIGNhbiB0cmVhdCBaY2FzaCBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucyBhcyBCaXRjb2luXG4gIC8vIHNlZ3dpdCB0cmFuc2FjdGlvbnNcbiAgaWYgKGlzU2Vnd2l0KHUuY2hhaW4pIHx8IGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MuemNhc2gpIHtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgd2l0bmVzc1V0eG86IHsgc2NyaXB0LCB2YWx1ZSB9IH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICghaXNVbnNwZW50V2l0aFByZXZUeCh1KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgcmVxdWlyZSBwcmV2aW91cyB0eCB0byBhZGQgdG8gUFNCVCcpO1xuICAgIH1cbiAgICAvLyBGb3JjZSB0aGUgbGl0ZWNvaW4gdHJhbnNhY3Rpb24gdG8gaGF2ZSBubyBNV0VCIGFkdmFuY2VkIHRyYW5zYWN0aW9uIGZsYWdcbiAgICBpZiAoZ2V0TWFpbm5ldChwc2J0Lm5ldHdvcmspID09PSBuZXR3b3Jrcy5saXRlY29pbikge1xuICAgICAgdS5wcmV2VHggPSBjcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIodS5wcmV2VHgsIHBzYnQubmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KS50b0J1ZmZlcigpO1xuICAgIH1cbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgbm9uV2l0bmVzc1V0eG86IHUucHJldlR4IH0pO1xuICB9XG5cbiAgY29uc3Qgd2FsbGV0S2V5cyA9IHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodS5jaGFpbiwgdS5pbmRleCk7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4odS5jaGFpbik7XG4gIGNvbnN0IGlzQmFja3VwRmxvdyA9IHNpZ25lciA9PT0gJ2JhY2t1cCcgfHwgY29zaWduZXIgPT09ICdiYWNrdXAnO1xuXG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicgfHwgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyAmJiBpc0JhY2t1cEZsb3cpKSB7XG4gICAgY29uc3QgY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4gPSBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBjcmVhdGVTcGVuZFNjcmlwdFAydHIgOiBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzI7XG4gICAgY29uc3QgeyBjb250cm9sQmxvY2ssIHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uLCBsZWFmSGFzaCB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4od2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBbXG4gICAgICB3YWxsZXRLZXlzW3NpZ25lcl0ucHVibGljS2V5LFxuICAgICAgd2FsbGV0S2V5c1tjb3NpZ25lcl0ucHVibGljS2V5LFxuICAgIF0pO1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwge1xuICAgICAgdGFwTGVhZlNjcmlwdDogW3sgY29udHJvbEJsb2NrLCBzY3JpcHQ6IHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uIH1dLFxuICAgICAgdGFwQmlwMzJEZXJpdmF0aW9uOiBbc2lnbmVyLCBjb3NpZ25lcl0ubWFwKChrZXkpID0+ICh7XG4gICAgICAgIGxlYWZIYXNoZXM6IFtsZWFmSGFzaF0sXG4gICAgICAgIHB1YmtleTogdG9YT25seVB1YmxpY0tleSh3YWxsZXRLZXlzW2tleV0ucHVibGljS2V5KSxcbiAgICAgICAgcGF0aDogcm9vdFdhbGxldEtleXMuZ2V0RGVyaXZhdGlvblBhdGgocm9vdFdhbGxldEtleXNba2V5XSwgdS5jaGFpbiwgdS5pbmRleCksXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5c1trZXldLmZpbmdlcnByaW50LFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIGNvbnN0IHtcbiAgICAgIGludGVybmFsUHVia2V5OiB0YXBJbnRlcm5hbEtleSxcbiAgICAgIG91dHB1dFB1YmtleTogdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwdHJlZVJvb3QsXG4gICAgfSA9IGNyZWF0ZUtleVBhdGhQMnRyTXVzaWcyKHdhbGxldEtleXMucHVibGljS2V5cyk7XG4gICAgY29uc3QgcGFydGljaXBhbnRzS2V5VmFsRGF0YSA9IGVuY29kZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMoe1xuICAgICAgdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwSW50ZXJuYWxLZXksXG4gICAgICBwYXJ0aWNpcGFudFB1YktleXM6IFt3YWxsZXRLZXlzLnVzZXIucHVibGljS2V5LCB3YWxsZXRLZXlzLmJpdGdvLnB1YmxpY0tleV0sXG4gICAgfSk7XG4gICAgcHNidC5hZGRQcm9wcmlldGFyeUtleVZhbFRvSW5wdXQoaW5wdXRJbmRleCwgcGFydGljaXBhbnRzS2V5VmFsRGF0YSk7XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBJbnRlcm5hbEtleTogdGFwSW50ZXJuYWxLZXksXG4gICAgICB0YXBNZXJrbGVSb290OiB0YXB0cmVlUm9vdCxcbiAgICAgIHRhcEJpcDMyRGVyaXZhdGlvbjogW3NpZ25lciwgY29zaWduZXJdLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBsZWFmSGFzaGVzOiBbXSxcbiAgICAgICAgcHVia2V5OiB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXNba2V5XS5wdWJsaWNLZXkpLFxuICAgICAgICBwYXRoOiByb290V2FsbGV0S2V5cy5nZXREZXJpdmF0aW9uUGF0aChyb290V2FsbGV0S2V5c1trZXldLCB1LmNoYWluLCB1LmluZGV4KSxcbiAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHJvb3RXYWxsZXRLZXlzW2tleV0uZmluZ2VycHJpbnQsXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB3aXRuZXNzU2NyaXB0LCByZWRlZW1TY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMod2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBzY3JpcHRUeXBlKTtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHtcbiAgICAgIGJpcDMyRGVyaXZhdGlvbjogWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICBwdWJrZXk6IHdhbGxldEtleXMudHJpcGxlW2lkeF0ucHVibGljS2V5LFxuICAgICAgICBwYXRoOiB3YWxsZXRLZXlzLnBhdGhzW2lkeF0sXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5cy50cmlwbGVbaWR4XS5maW5nZXJwcmludCxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBpZiAod2l0bmVzc1NjcmlwdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NTY3JpcHQgfSk7XG4gICAgfVxuICAgIGlmIChyZWRlZW1TY3JpcHQpIHtcbiAgICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyByZWRlZW1TY3JpcHQgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
256
+ function addWalletUnspentToPsbt(psbt, u, rootWalletKeys, signer, cosigner, customParams) {
257
+ let sequenceNumber = exports.TX_INPUT_SEQUENCE_NUMBER_FINAL;
258
+ if (customParams && customParams.isReplaceableByFee) {
259
+ sequenceNumber = exports.MAX_BIP125_RBF_SEQUENCE;
260
+ }
261
+ addUnspentToPsbt(psbt, u.id, { sequenceNumber });
262
+ updateWalletUnspentForPsbt(psbt, psbt.inputCount - 1, u, rootWalletKeys, signer, cosigner, customParams ? { skipNonWitnessUtxo: customParams.skipNonWitnessUtxo } : {});
263
+ }
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvVW5zcGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1REEsMENBRUM7QUFFRCxvREF3QkM7QUFTRCxnRUFzQ0M7QUFtQkQsZ0VBTUM7QUFTRCxrRkFrQ0M7QUFlRCw0RUFRQztBQWdCRCxnRUFrSUM7QUFFRCx3REF1QkM7QUF4WUQsNkJBQXNEO0FBRXRELG9EQU8wQjtBQUMxQiwyQ0FBK0M7QUFDL0MsNENBS3NCO0FBS3RCLHdDQVFvQjtBQUNwQixxQ0FBK0M7QUFFL0Msc0NBQXlEO0FBQ3pELGdEQUE2RDtBQUM3RCw4Q0FBcUQ7QUFDckQsZ0RBQXFEO0FBQ3JELDBDQUFpRjtBQUVqRiw4QkFBOEI7QUFDakIsUUFBQSw4QkFBOEIsR0FBRyxVQUFVLENBQUM7QUFFekQ7O0tBRUs7QUFDUSxRQUFBLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFXdEQsU0FBZ0IsZUFBZSxDQUFrQyxDQUFtQjtJQUNsRixPQUFRLENBQTRCLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLFNBQTBDLEVBQzFDLFVBQWtCLEVBQ2xCLE9BQStCLEVBQy9CLGFBQWtEO0lBRWxELE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RyxNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUFrQixFQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHNDQUFzQixFQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3pGLE1BQU0saUJBQWlCLEdB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QUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNqRCwwQkFBMEIsQ0FDeEIsSUFBSSxFQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUNuQixDQUFDLEVBQ0QsY0FBYyxFQUNkLE1BQU0sRUFDTixRQUFRLEVBQ1IsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWFpbm5ldCwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMixcbiAgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyxcbiAgY3JlYXRlU3BlbmRTY3JpcHRQMnRyLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzIsXG4gIHNjcmlwdFR5cGVGb3JDaGFpbixcbiAgdG9YT25seVB1YmxpY0tleSxcbn0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4uLy4uL2FkZHJlc3MnO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdFNpZ0hhc2gsXG4gIGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMsXG4gIHNpZ25JbnB1dDJPZjMsXG4gIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzLFxufSBmcm9tICcuLi9zaWduYXR1cmUnO1xuaW1wb3J0IHsgV2FsbGV0VW5zcGVudFNpZ25lciB9IGZyb20gJy4vV2FsbGV0VW5zcGVudFNpZ25lcic7XG5pbXBvcnQgeyBLZXlOYW1lLCBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4vV2FsbGV0S2V5cyc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdG9PdXRwdXQsXG4gIFVuc3BlbnRXaXRoUHJldlR4LFxuICBVbnNwZW50LFxuICBpc1Vuc3BlbnRXaXRoUHJldlR4LFxuICB0b1ByZXZPdXRwdXQsXG4gIHBhcnNlT3V0cHV0SWQsXG4gIGdldE91dHB1dElkRm9ySW5wdXQsXG59IGZyb20gJy4uL1Vuc3BlbnQnO1xuaW1wb3J0IHsgQ2hhaW5Db2RlLCBpc1NlZ3dpdCB9IGZyb20gJy4vY2hhaW5zJztcbmltcG9ydCB7IFV0eG9Qc2J0IH0gZnJvbSAnLi4vVXR4b1BzYnQnO1xuaW1wb3J0IHsgZW5jb2RlUHNidE11c2lnMlBhcnRpY2lwYW50cyB9IGZyb20gJy4uL011c2lnMic7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIgfSBmcm9tICcuLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBwYXJzZVNpZ25hdHVyZVNjcmlwdCB9IGZyb20gJy4uL3BhcnNlSW5wdXQnO1xuaW1wb3J0IHsgY2hlY2tGb3JJbnB1dCB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IFByb3ByaWV0YXJ5S2V5U3VidHlwZSwgUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSIH0gZnJvbSAnLi4vUHNidFV0aWwnO1xuXG4vKiogRmluYWwgKG5vbi1yZXBsYWNlYWJsZSkgKi9cbmV4cG9ydCBjb25zdCBUWF9JTlBVVF9TRVFVRU5DRV9OVU1CRVJfRklOQUwgPSAweGZmZmZmZmZmO1xuXG4vKiogTm9uLUZpbmFsIChSZXBsYWNlYWJsZSlcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYml0Y29pbi9ibG9iL3YyNS4xL3NyYy9ycGMvcmF3dHJhbnNhY3Rpb25fdXRpbC5jcHAjTDQ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9CSVAxMjVfUkJGX1NFUVVFTkNFID0gMHhmZmZmZmZmZiAtIDI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2FsbGV0VW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjaGFpbjogQ2hhaW5Db2RlO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vbldpdG5lc3NXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlcj4sXG4gICAgV2FsbGV0VW5zcGVudDxUTnVtYmVyPiB7fVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXYWxsZXRVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHU6IFVuc3BlbnQ8VE51bWJlcj4pOiB1IGlzIFdhbGxldFVuc3BlbnQ8VE51bWJlcj4ge1xuICByZXR1cm4gKHUgYXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPikuY2hhaW4gIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25JbnB1dFdpdGhVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eEJ1aWxkZXI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgdW5zcGVudDogV2FsbGV0VW5zcGVudDxUTnVtYmVyPixcbiAgdW5zcGVudFNpZ25lcjogV2FsbGV0VW5zcGVudFNpZ25lcjxSb290V2FsbGV0S2V5cz5cbik6IHZvaWQge1xuICBjb25zdCB7IHdhbGxldEtleXMsIHNpZ25lciwgY29zaWduZXIgfSA9IHVuc3BlbnRTaWduZXIuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCh1bnNwZW50LmNoYWluLCB1bnNwZW50LmluZGV4KTtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IHNjcmlwdFR5cGVGb3JDaGFpbih1bnNwZW50LmNoYWluKTtcbiAgY29uc3QgcHViU2NyaXB0ID0gY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyh3YWxsZXRLZXlzLnB1YmxpY0tleXMsIHNjcmlwdFR5cGUpLnNjcmlwdFB1YktleTtcbiAgY29uc3QgcHViU2NyaXB0RXhwZWN0ZWQgPSB0b091dHB1dFNjcmlwdCh1bnNwZW50LmFkZHJlc3MsIHR4QnVpbGRlci5uZXR3b3JrIGFzIE5ldHdvcmspO1xuICBpZiAoIXB1YlNjcmlwdC5lcXVhbHMocHViU2NyaXB0RXhwZWN0ZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHB1YnNjcmlwdCBtaXNtYXRjaDogZXhwZWN0ZWQgJHtwdWJTY3JpcHRFeHBlY3RlZC50b1N0cmluZygnaGV4Jyl9IGdvdCAke3B1YlNjcmlwdC50b1N0cmluZygnaGV4Jyl9YFxuICAgICk7XG4gIH1cbiAgc2lnbklucHV0Mk9mMzxUTnVtYmVyPihcbiAgICB0eEJ1aWxkZXIsXG4gICAgaW5wdXRJbmRleCxcbiAgICBzY3JpcHRUeXBlLFxuICAgIHdhbGxldEtleXMucHVibGljS2V5cyxcbiAgICBzaWduZXIsXG4gICAgY29zaWduZXIucHVibGljS2V5LFxuICAgIHVuc3BlbnQudmFsdWVcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHhcbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gdW5zcGVudHNcbiAqIEBwYXJhbSB3YWxsZXRLZXlzXG4gKiBAcmV0dXJuIHRyaXBsZSBvZiBib29sZWFucyBpbmRpY2F0aW5nIGEgdmFsaWQgc2lnbmF0dXJlIGZvciBlYWNoIHB1YmtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgdW5zcGVudHM6IFVuc3BlbnQ8VE51bWJlcj5bXSxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXNcbik6IFRyaXBsZTxib29sZWFuPiB7XG4gIGlmICh0eC5pbnMubGVuZ3RoICE9PSB1bnNwZW50cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGxlbmd0aCBtdXN0IG1hdGNoIHVuc3BlbnRzIGxlbmd0aGApO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB0eC5pbnNbaW5wdXRJbmRleF07XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghaW5wdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGlucHV0IGF0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxuXG4gIGNvbnN0IHVuc3BlbnQgPSB1bnNwZW50c1tpbnB1dEluZGV4XTtcbiAgaWYgKCFpc1dhbGxldFVuc3BlbnQodW5zcGVudCkgfHwgKCFpbnB1dC5zY3JpcHQ/Lmxlbmd0aCAmJiAhaW5wdXQud2l0bmVzcz8ubGVuZ3RoKSkge1xuICAgIHJldHVybiBbZmFsc2UsIGZhbHNlLCBmYWxzZV07XG4gIH1cblxuICBjb25zdCBwYXJzZWRJbnB1dCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0KGlucHV0KTtcbiAgY29uc3QgcHJldk91dHB1dHMgPSB1bnNwZW50cy5tYXAoKHUpID0+IHRvT3V0cHV0KHUsIHR4Lm5ldHdvcmspKTtcblxuICAvLyBJZiBpdCBpcyBhIHRhcHJvb3Qga2V5UGF0aFNwZW5kIGlucHV0LCB0aGUgb25seSB2YWxpZCBzaWduYXR1cmUgY29tYmluYXRpb25zIGlzIHVzZXItYml0Z28uIFdlIGNhblxuICAvLyBvbmx5IHZlcmlmeSB0aGF0IHRoZSBhZ2dyZWdhdGVkIHNpZ25hdHVyZSBpcyB2YWxpZCwgbm90IHRoYXQgdGhlIGluZGl2aWR1YWwgcGFydGlhbC1zaWduYXR1cmUgaXMgdmFsaWQuXG4gIC8vIFRoZXJlZm9yZSwgd2UgY2FuIG9ubHkgc2F5IHRoYXQgZWl0aGVyIGFsbCBwYXJ0aWFsIHNpZ25hdHVyZXMgYXJlIHZhbGlkLCBvciBub25lIGFyZS5cbiAgaWYgKHBhcnNlZElucHV0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnModHgsIGlucHV0SW5kZXgsIHVuc3BlbnQudmFsdWUsIHVuZGVmaW5lZCwgcHJldk91dHB1dHMpO1xuICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxICYmIHJlc3VsdFswXS5zaWduYXR1cmUgPyBbdHJ1ZSwgZmFsc2UsIHRydWVdIDogW2ZhbHNlLCBmYWxzZSwgZmFsc2VdO1xuICB9XG5cbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzKFxuICAgIHR4LFxuICAgIGlucHV0SW5kZXgsXG4gICAgcHJldk91dHB1dHMsXG4gICAgd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXNcbiAgKSBhcyBUcmlwbGU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZWQgaW4gY2VydGFpbiBsZWdhY3kgc2lnbmluZyBtZXRob2RzIHRoYXQgZG8gbm90IGRlcml2ZSBzaWduaW5nIGRhdGEgZnJvbSBpbmRleC9jaGFpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgc2lnbldpdGhVbnNwZW50ICovXG4gIHJlZGVlbVNjcmlwdD86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgdmVyaWZ5V2l0aFVuc3BlbnQgKi9cbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBpZCBVbnNwZW50IElEXG4gKiBAcmV0dXJucyB0cnVlIGlmZiB0aGUgdW5zcGVudCBJRCBvbiB0aGUgdW5zcGVudCBhbmQgcHNidCBpbnB1dCBtYXRjaFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHNidEluY2x1ZGVzVW5zcGVudEF0SW5kZXgocHNidDogVXR4b1BzYnQsIGlucHV0SW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjaGVja0ZvcklucHV0KHBzYnQuZGF0YS5pbnB1dHMsIGlucHV0SW5kZXgpO1xuXG4gIGNvbnN0IHsgdHhpZCwgdm91dCB9ID0gcGFyc2VPdXRwdXRJZChpZCk7XG4gIGNvbnN0IHBzYnRPdXRQb2ludCA9IGdldE91dHB1dElkRm9ySW5wdXQocHNidC50eElucHV0c1tpbnB1dEluZGV4XSk7XG4gIHJldHVybiBwc2J0T3V0UG9pbnQudHhpZCA9PT0gdHhpZCAmJiBwc2J0T3V0UG9pbnQudm91dCA9PT0gdm91dDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHBzYnQgaW5wdXQgYXQgdGhlIGdpdmVuIGluZGV4XG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSB1XG4gKiBAcGFyYW0gcmVkZWVtU2NyaXB0IE9ubHkgb3ZlcnJpZGVzIGlmIHRoZXJlIGlzIG5vIHJlZGVlbVNjcmlwdCBpbiB0aGUgaW5wdXQgY3VycmVudGx5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVSZXBsYXlQcm90ZWN0aW9uVW5zcGVudFRvUHNidChcbiAgcHNidDogVXR4b1BzYnQsXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgdTogVW5zcGVudDxiaWdpbnQ+LFxuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXIsXG4gIGN1c3RvbVBhcmFtcz86IHsgc2tpcE5vbldpdG5lc3NVdHhvPzogYm9vbGVhbiB9XG4pOiB2b2lkIHtcbiAgaWYgKCFwc2J0SW5jbHVkZXNVbnNwZW50QXRJbmRleChwc2J0LCBpbnB1dEluZGV4LCB1LmlkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zcGVudCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHBzYnQgaW5wdXRgKTtcbiAgfVxuICBjb25zdCBpbnB1dCA9IGNoZWNrRm9ySW5wdXQocHNidC5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG5cbiAgaWYgKHJlZGVlbVNjcmlwdCAmJiAhaW5wdXQucmVkZWVtU2NyaXB0KSB7XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHJlZGVlbVNjcmlwdCB9KTtcbiAgfVxuXG4gIC8vIEJlY2F1c2UgWmNhc2ggZGlyZWN0bHkgaGFzaGVzIHRoZSB2YWx1ZSBmb3Igbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMsIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGluZGlyZWN0bHlcbiAgLy8gd2l0aCB0aGUgcHJldmlvdXMgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSwgd2UgY2FuIHRyZWF0IFpjYXNoIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zIGFzIEJpdGNvaW5cbiAgLy8gc2Vnd2l0IHRyYW5zYWN0aW9uc1xuICBjb25zdCBpc1pjYXNoID0gZ2V0TWFpbm5ldChwc2J0Lm5ldHdvcmspID09PSBuZXR3b3Jrcy56Y2FzaDtcbiAgaWYgKCFpc1Vuc3BlbnRXaXRoUHJldlR4KHUpICYmICFpc1pjYXNoICYmICFjdXN0b21QYXJhbXM/LnNraXBOb25XaXRuZXNzVXR4bykge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIHJlcXVpcmUgcHJldmlvdXMgdHggdG8gYWRkIHRvIFBTQlQnKTtcbiAgfVxuICBpZiAoKGlzWmNhc2ggJiYgIWlucHV0LndpdG5lc3NVdHhvKSB8fCBjdXN0b21QYXJhbXM/LnNraXBOb25XaXRuZXNzVXR4bykge1xuICAgIGNvbnN0IHsgc2NyaXB0LCB2YWx1ZSB9ID0gdG9QcmV2T3V0cHV0KHUsIHBzYnQubmV0d29yayk7XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NVdHhvOiB7IHNjcmlwdCwgdmFsdWUgfSB9KTtcbiAgfSBlbHNlIGlmICghaXNaY2FzaCAmJiAhaW5wdXQubm9uV2l0bmVzc1V0eG8pIHtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgbm9uV2l0bmVzc1V0eG86ICh1IGFzIFVuc3BlbnRXaXRoUHJldlR4PGJpZ2ludD4pLnByZXZUeCB9KTtcbiAgfVxuXG4gIGNvbnN0IHNpZ2hhc2hUeXBlID0gZ2V0RGVmYXVsdFNpZ0hhc2gocHNidC5uZXR3b3JrKTtcbiAgaWYgKHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF0uc2lnaGFzaFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyBzaWdoYXNoVHlwZSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRVbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaWQ6IHN0cmluZyxcbiAgeyBzZXF1ZW5jZU51bWJlciA9IFRYX0lOUFVUX1NFUVVFTkNFX05VTUJFUl9GSU5BTCB9OiB7IHNlcXVlbmNlTnVtYmVyPzogbnVtYmVyIH0gPSB7fVxuKTogdm9pZCB7XG4gIGNvbnN0IHsgdHhpZCwgdm91dCB9ID0gcGFyc2VPdXRwdXRJZChpZCk7XG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6IHR4aWQsXG4gICAgaW5kZXg6IHZvdXQsXG4gICAgc2VxdWVuY2U6IHNlcXVlbmNlTnVtYmVyLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogVW5zcGVudDxiaWdpbnQ+LFxuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcixcbiAgY3VzdG9tUGFyYW1zPzogeyBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuIH1cbik6IHZvaWQge1xuICBhZGRVbnNwZW50VG9Qc2J0KHBzYnQsIHUuaWQpO1xuICB1cGRhdGVSZXBsYXlQcm90ZWN0aW9uVW5zcGVudFRvUHNidChwc2J0LCBwc2J0LmlucHV0Q291bnQgLSAxLCB1LCByZWRlZW1TY3JpcHQsIGN1c3RvbVBhcmFtcyk7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSBQU0JUIHdpdGggdGhlIHVuc3BlbnQgZGF0YSBmb3IgdGhlIGlucHV0IGF0IHRoZSBnaXZlbiBpbmRleCBpZiB0aGUgZGF0YSBpcyBub3QgdGhlcmUgYWxyZWFkeS5cbiAqXG4gKiBJZiBza2lwTm9uV2l0bmVzc1V0eG8gaXMgdHJ1ZSwgdGhlbiB0aGUgbm9uV2l0bmVzc1V0eG8gd2lsbCBub3QgYmUgYWRkZWQgZm9yIGFuIGlucHV0IHRoYXQgcmVxdWlyZXMgaXQgKGUuZy4gbm9uLXNlZ3dpdClcbiAqIGFuZCBpbnN0ZWFkIHRoZSB3aXRuZXNzVXR4byB3aWxsIGJlIGFkZGVkXG4gKlxuICogQHBhcmFtIHBzYnRcbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gdVxuICogQHBhcmFtIHJvb3RXYWxsZXRLZXlzXG4gKiBAcGFyYW0gc2lnbmVyXG4gKiBAcGFyYW0gY29zaWduZXJcbiAqIEBwYXJhbSBjdXN0b21QYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVdhbGxldFVuc3BlbnRGb3JQc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICB1OiBXYWxsZXRVbnNwZW50PGJpZ2ludD4sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbmVyOiBLZXlOYW1lLFxuICBjb3NpZ25lcjogS2V5TmFtZSxcbiAgY3VzdG9tUGFyYW1zPzogeyBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuIH1cbik6IHZvaWQge1xuICBpZiAoIXBzYnRJbmNsdWRlc1Vuc3BlbnRBdEluZGV4KHBzYnQsIGlucHV0SW5kZXgsIHUuaWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnNwZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gcHNidCBpbnB1dGApO1xuICB9XG4gIGNvbnN0IGlucHV0ID0gY2hlY2tGb3JJbnB1dChwc2J0LmRhdGEuaW5wdXRzLCBpbnB1dEluZGV4KTtcblxuICAvLyBCZWNhdXNlIFpjYXNoIGRpcmVjdGx5IGhhc2hlcyB0aGUgdmFsdWUgZm9yIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBpbmRpcmVjdGx5XG4gIC8vIHdpdGggdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9uLiBUaGVyZWZvcmUsIHdlIGNhbiB0cmVhdCBaY2FzaCBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucyBhcyBCaXRjb2luXG4gIC8vIHNlZ3dpdCB0cmFuc2FjdGlvbnNcbiAgY29uc3QgaXNaY2FzaE9yU2Vnd2l0ID0gaXNTZWd3aXQodS5jaGFpbikgfHwgZ2V0TWFpbm5ldChwc2J0Lm5ldHdvcmspID09PSBuZXR3b3Jrcy56Y2FzaDtcbiAgaWYgKChpc1pjYXNoT3JTZWd3aXQgfHwgY3VzdG9tUGFyYW1zPy5za2lwTm9uV2l0bmVzc1V0eG8pICYmICFpbnB1dC53aXRuZXNzVXR4bykge1xuICAgIGNvbnN0IHsgc2NyaXB0LCB2YWx1ZSB9ID0gdG9QcmV2T3V0cHV0KHUsIHBzYnQubmV0d29yayk7XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NVdHhvOiB7IHNjcmlwdCwgdmFsdWUgfSB9KTtcbiAgfSBlbHNlIGlmICghaXNaY2FzaE9yU2Vnd2l0KSB7XG4gICAgaWYgKCFpc1Vuc3BlbnRXaXRoUHJldlR4KHUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCByZXF1aXJlIHByZXZpb3VzIHR4IHRvIGFkZCB0byBQU0JUJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC53aXRuZXNzVXR4byAmJiAhaW5wdXQubm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgIC8vIEZvcmNlIHRoZSBsaXRlY29pbiB0cmFuc2FjdGlvbiB0byBoYXZlIG5vIE1XRUIgYWR2YW5jZWQgdHJhbnNhY3Rpb24gZmxhZ1xuICAgICAgaWYgKGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MubGl0ZWNvaW4pIHtcbiAgICAgICAgdS5wcmV2VHggPSBjcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIodS5wcmV2VHgsIHBzYnQubmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KS50b0J1ZmZlcigpO1xuICAgICAgfVxuXG4gICAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgbm9uV2l0bmVzc1V0eG86IHUucHJldlR4IH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHUuY2hhaW4sIHUuaW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKHUuY2hhaW4pO1xuICBjb25zdCBzaWdoYXNoVHlwZSA9IGdldERlZmF1bHRTaWdIYXNoKHBzYnQubmV0d29yaywgc2NyaXB0VHlwZSk7XG4gIGlmIChwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdLnNpZ2hhc2hUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgc2lnaGFzaFR5cGUgfSk7XG4gIH1cbiAgY29uc3QgaXNCYWNrdXBGbG93ID0gc2lnbmVyID09PSAnYmFja3VwJyB8fCBjb3NpZ25lciA9PT0gJ2JhY2t1cCc7XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJyB8fCAoc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInICYmIGlzQmFja3VwRmxvdykpIHtcbiAgICBpZiAoaW5wdXQudGFwTGVhZlNjcmlwdCAmJiBpbnB1dC50YXBCaXAzMkRlcml2YXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4gPSBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBjcmVhdGVTcGVuZFNjcmlwdFAydHIgOiBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzI7XG4gICAgY29uc3QgeyBjb250cm9sQmxvY2ssIHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uLCBsZWFmSGFzaCB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4od2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBbXG4gICAgICB3YWxsZXRLZXlzW3NpZ25lcl0ucHVibGljS2V5LFxuICAgICAgd2FsbGV0S2V5c1tjb3NpZ25lcl0ucHVibGljS2V5LFxuICAgIF0pO1xuICAgIGlmICghaW5wdXQudGFwTGVhZlNjcmlwdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICAgIHRhcExlYWZTY3JpcHQ6IFt7IGNvbnRyb2xCbG9jaywgc2NyaXB0OiB3aXRuZXNzU2NyaXB0LCBsZWFmVmVyc2lvbiB9XSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIWlucHV0LnRhcEJpcDMyRGVyaXZhdGlvbikge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICAgIHRhcEJpcDMyRGVyaXZhdGlvbjogW3NpZ25lciwgY29zaWduZXJdLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgIGxlYWZIYXNoZXM6IFtsZWFmSGFzaF0sXG4gICAgICAgICAgcHVia2V5OiB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXNba2V5XS5wdWJsaWNLZXkpLFxuICAgICAgICAgIHBhdGg6IHJvb3RXYWxsZXRLZXlzLmdldERlcml2YXRpb25QYXRoKHJvb3RXYWxsZXRLZXlzW2tleV0sIHUuY2hhaW4sIHUuaW5kZXgpLFxuICAgICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5c1trZXldLmZpbmdlcnByaW50LFxuICAgICAgICB9KSksXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInKSB7XG4gICAgY29uc3Qge1xuICAgICAgaW50ZXJuYWxQdWJrZXk6IHRhcEludGVybmFsS2V5LFxuICAgICAgb3V0cHV0UHVia2V5OiB0YXBPdXRwdXRLZXksXG4gICAgICB0YXB0cmVlUm9vdCxcbiAgICB9ID0gY3JlYXRlS2V5UGF0aFAydHJNdXNpZzIod2FsbGV0S2V5cy5wdWJsaWNLZXlzKTtcblxuICAgIGlmIChcbiAgICAgIHBzYnQuZ2V0UHJvcHJpZXRhcnlLZXlWYWxzKGlucHV0SW5kZXgsIHtcbiAgICAgICAgaWRlbnRpZmllcjogUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgICAgICBzdWJ0eXBlOiBQcm9wcmlldGFyeUtleVN1YnR5cGUuTVVTSUcyX1BBUlRJQ0lQQU5UX1BVQl9LRVlTLFxuICAgICAgfSkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBjb25zdCBwYXJ0aWNpcGFudHNLZXlWYWxEYXRhID0gZW5jb2RlUHNidE11c2lnMlBhcnRpY2lwYW50cyh7XG4gICAgICAgIHRhcE91dHB1dEtleSxcbiAgICAgICAgdGFwSW50ZXJuYWxLZXksXG4gICAgICAgIHBhcnRpY2lwYW50UHViS2V5czogW3dhbGxldEtleXMudXNlci5wdWJsaWNLZXksIHdhbGxldEtleXMuYml0Z28ucHVibGljS2V5XSxcbiAgICAgIH0pO1xuICAgICAgcHNidC5hZGRQcm9wcmlldGFyeUtleVZhbFRvSW5wdXQoaW5wdXRJbmRleCwgcGFydGljaXBhbnRzS2V5VmFsRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50YXBJbnRlcm5hbEtleSkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICAgIHRhcEludGVybmFsS2V5OiB0YXBJbnRlcm5hbEtleSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghaW5wdXQudGFwTWVya2xlUm9vdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICAgIHRhcE1lcmtsZVJvb3Q6IHRhcHRyZWVSb290LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50YXBCaXAzMkRlcml2YXRpb24pIHtcbiAgICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwge1xuICAgICAgICB0YXBCaXAzMkRlcml2YXRpb246IFtzaWduZXIsIGNvc2lnbmVyXS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICBsZWFmSGFzaGVzOiBbXSxcbiAgICAgICAgICBwdWJrZXk6IHRvWE9ubHlQdWJsaWNLZXkod2FsbGV0S2V5c1trZXldLnB1YmxpY0tleSksXG4gICAgICAgICAgcGF0aDogcm9vdFdhbGxldEtleXMuZ2V0RGVyaXZhdGlvblBhdGgocm9vdFdhbGxldEtleXNba2V5XSwgdS5jaGFpbiwgdS5pbmRleCksXG4gICAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHJvb3RXYWxsZXRLZXlzW2tleV0uZmluZ2VycHJpbnQsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlucHV0LmJpcDMyRGVyaXZhdGlvbikge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICAgIGJpcDMyRGVyaXZhdGlvbjogWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICAgIHB1YmtleTogd2FsbGV0S2V5cy50cmlwbGVbaWR4XS5wdWJsaWNLZXksXG4gICAgICAgICAgcGF0aDogd2FsbGV0S2V5cy5wYXRoc1tpZHhdLFxuICAgICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5cy50cmlwbGVbaWR4XS5maW5nZXJwcmludCxcbiAgICAgICAgfSkpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aXRuZXNzU2NyaXB0LCByZWRlZW1TY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMod2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBzY3JpcHRUeXBlKTtcbiAgICBpZiAod2l0bmVzc1NjcmlwdCAmJiAhaW5wdXQud2l0bmVzc1NjcmlwdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NTY3JpcHQgfSk7XG4gICAgfVxuICAgIGlmIChyZWRlZW1TY3JpcHQgJiYgIWlucHV0LnJlZGVlbVNjcmlwdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHJlZGVlbVNjcmlwdCB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFdhbGxldFVuc3BlbnRUb1BzYnQoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICB1OiBXYWxsZXRVbnNwZW50PGJpZ2ludD4sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbmVyOiBLZXlOYW1lLFxuICBjb3NpZ25lcjogS2V5TmFtZSxcbiAgY3VzdG9tUGFyYW1zPzogeyBpc1JlcGxhY2VhYmxlQnlGZWU/OiBib29sZWFuOyBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuIH1cbik6IHZvaWQge1xuICBsZXQgc2VxdWVuY2VOdW1iZXIgPSBUWF9JTlBVVF9TRVFVRU5DRV9OVU1CRVJfRklOQUw7XG4gIGlmIChjdXN0b21QYXJhbXMgJiYgY3VzdG9tUGFyYW1zLmlzUmVwbGFjZWFibGVCeUZlZSkge1xuICAgIHNlcXVlbmNlTnVtYmVyID0gTUFYX0JJUDEyNV9SQkZfU0VRVUVOQ0U7XG4gIH1cblxuICBhZGRVbnNwZW50VG9Qc2J0KHBzYnQsIHUuaWQsIHsgc2VxdWVuY2VOdW1iZXIgfSk7XG4gIHVwZGF0ZVdhbGxldFVuc3BlbnRGb3JQc2J0KFxuICAgIHBzYnQsXG4gICAgcHNidC5pbnB1dENvdW50IC0gMSxcbiAgICB1LFxuICAgIHJvb3RXYWxsZXRLZXlzLFxuICAgIHNpZ25lcixcbiAgICBjb3NpZ25lcixcbiAgICBjdXN0b21QYXJhbXMgPyB7IHNraXBOb25XaXRuZXNzVXR4bzogY3VzdG9tUGFyYW1zLnNraXBOb25XaXRuZXNzVXR4byB9IDoge31cbiAgKTtcbn1cbiJdfQ==
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  /**
3
2
  * Classes for deriving key triples for wallet addresses.
4
3
  *
@@ -12,7 +11,7 @@
12
11
  */
13
12
  import { BIP32Interface } from 'bip32';
14
13
  import { Triple } from '../types';
15
- export declare type KeyName = 'user' | 'backup' | 'bitgo';
14
+ export type KeyName = 'user' | 'backup' | 'bitgo';
16
15
  export declare function eqPublicKey(a: BIP32Interface, b: BIP32Interface): boolean;
17
16
  /**
18
17
  * Base class for RootWalletKeys and DerivedWalletKeys.
@@ -1 +1 @@
1
- {"version":3,"file":"WalletKeys.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/WalletKeys.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,oBAAY,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD,wBAAgB,WAAW,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,GAAG,OAAO,CAEzE;AAED;;;GAGG;AACH,qBAAa,UAAU;aAMO,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAL1D,SAAgB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3C;;OAEG;gBACyB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAY1D,IAAI,IAAI,IAAI,cAAc,CAEzB;IAED,IAAI,MAAM,IAAI,cAAc,CAE3B;IAED,IAAI,KAAK,IAAI,cAAc,CAE1B;CACF;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAK5B,MAAM,EAAE,cAAc;IAAS,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;IAJvE;;;OAGG;gBACgB,MAAM,EAAE,cAAc,EAAS,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;CAGxE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;aAU1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;IATpD,MAAM,CAAC,QAAQ,CAAC,aAAa,SAAS;IAEtC;;;;OAIG;gBAED,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EACd,kBAAkB,GAAE,MAAM,CAAC,MAAM,CAIhD;IAWH;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAW5E;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;CAMxE"}
1
+ {"version":3,"file":"WalletKeys.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/wallet/WalletKeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD,wBAAgB,WAAW,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,GAAG,OAAO,CAEzE;AAED;;;GAGG;AACH,qBAAa,UAAU;aAMO,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAL1D,SAAgB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3C;;OAEG;gBACyB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAY1D,IAAI,IAAI,IAAI,cAAc,CAEzB;IAED,IAAI,MAAM,IAAI,cAAc,CAE3B;IAED,IAAI,KAAK,IAAI,cAAc,CAE1B;CACF;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU;IAK5B,MAAM,EAAE,cAAc;IAAS,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;IAJvE;;;OAGG;gBACgB,MAAM,EAAE,cAAc,EAAS,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;CAGxE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,UAAU;aAU1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;IATpD,MAAM,CAAC,QAAQ,CAAC,aAAa,SAAS;IAEtC;;;;OAIG;gBAED,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EACd,kBAAkB,GAAE,MAAM,CAAC,MAAM,CAIhD;IAWH;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAW5E;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB;CAMxE"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RootWalletKeys = exports.DerivedWalletKeys = exports.WalletKeys = exports.eqPublicKey = void 0;
3
+ exports.RootWalletKeys = exports.DerivedWalletKeys = exports.WalletKeys = void 0;
4
+ exports.eqPublicKey = eqPublicKey;
4
5
  function eqPublicKey(a, b) {
5
6
  return a.publicKey.equals(b.publicKey);
6
7
  }
7
- exports.eqPublicKey = eqPublicKey;
8
8
  /**
9
9
  * Base class for RootWalletKeys and DerivedWalletKeys.
10
10
  * Keys can be either public keys or private keys.
@@ -101,4 +101,4 @@ class RootWalletKeys extends WalletKeys {
101
101
  }
102
102
  exports.RootWalletKeys = RootWalletKeys;
103
103
  RootWalletKeys.defaultPrefix = '0/0';
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2FsbGV0S2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvV2FsbGV0S2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpQkEsU0FBZ0IsV0FBVyxDQUFDLENBQWlCLEVBQUUsQ0FBaUI7SUFDOUQsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUZELGtDQUVDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxVQUFVO0lBR3JCOztPQUVHO0lBQ0gsWUFBNEIsTUFBOEI7UUFBOUIsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QixJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2lCQUNqRDtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFtQixDQUFDO0lBQzFFLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQTdCRCxnQ0E2QkM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxVQUFVO0lBQy9DOzs7T0FHRztJQUNILFlBQW1CLE1BQXNCLEVBQVMsS0FBcUI7UUFDckUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBMkIsQ0FBQyxDQUFDO1FBRHBFLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQVMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7SUFFdkUsQ0FBQztDQUNGO0FBUkQsOENBUUM7QUFFRDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLFVBQVU7SUFHNUM7Ozs7T0FJRztJQUNILFlBQ0UsTUFBOEIsRUFDZCxxQkFBcUM7UUFDbkQsY0FBYyxDQUFDLGFBQWE7UUFDNUIsY0FBYyxDQUFDLGFBQWE7UUFDNUIsY0FBYyxDQUFDLGFBQWE7S0FDN0I7UUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFORSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBSWpDO1FBSUQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQzthQUN6RTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUMsR0FBbUIsRUFBRSxLQUFhLEVBQUUsS0FBYTtRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMzQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLEdBQUcsTUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ2pELE9BQU8sSUFBSSxpQkFBaUIsQ0FDMUIsSUFBSSxFQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBbUIsQ0FDbEYsQ0FBQztJQUNKLENBQUM7O0FBcERILHdDQXFEQztBQXBEaUIsNEJBQWEsR0FBRyxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENsYXNzZXMgZm9yIGRlcml2aW5nIGtleSB0cmlwbGVzIGZvciB3YWxsZXQgYWRkcmVzc2VzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIEJpdEdvIHdhbGxldHMgY29uc2lzdCBvZiBhIHRyaXBsZSBvZiBiaXAzMiBleHRlbmQga2V5cGFpcnMuXG4gKiBFdmVyeSB3YWxsZXQgYWRkcmVzcyBjYW4gYmUgaWRlbnRpZmllZCBieSBfKGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpXy5cbiAqIFRoZSBrZXkgc2V0IGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcyBjYW4gYmUgb2J0YWluZWQgYnkgZGVyaXZpbmcgd2l0aCB0aGUgcGF0aFxuICogYDAvMC8ke2NoYWlufS8ke2luZGV4fWAuIChJbiByYXJlIGNhc2VzIHRoZSBwcmVmaXggMC8wIGNhbiBiZSBkaWZmZXJlbnQpXG4gKlxuICogU2luY2Ugd2UgbmV2ZXIgdXNlIG90aGVyIGRlcml2YXRpb25zIGZvciB1dHhvIGFkZHJlc3Mgc2NyaXB0cywgdGhlIGNsYXNzZXMgZGVmaW5lZCBoZXJlIG9ubHlcbiAqIGFsbG93IGV4YWN0bHkgb25lIGxldmVsIG9mIGRlcml2YXRpb24uXG4gKi9cbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnYmlwMzInO1xuXG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEtleU5hbWUgPSAndXNlcicgfCAnYmFja3VwJyB8ICdiaXRnbyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcVB1YmxpY0tleShhOiBCSVAzMkludGVyZmFjZSwgYjogQklQMzJJbnRlcmZhY2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIGEucHVibGljS2V5LmVxdWFscyhiLnB1YmxpY0tleSk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgUm9vdFdhbGxldEtleXMgYW5kIERlcml2ZWRXYWxsZXRLZXlzLlxuICogS2V5cyBjYW4gYmUgZWl0aGVyIHB1YmxpYyBrZXlzIG9yIHByaXZhdGUga2V5cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFdhbGxldEtleXMge1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGljS2V5czogVHJpcGxlPEJ1ZmZlcj47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0cmlwbGUgLSBiaXAzMiBrZXkgdHJpcGxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdHJpcGxlOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KSB7XG4gICAgdHJpcGxlLmZvckVhY2goKGEsIGkpID0+IHtcbiAgICAgIHRyaXBsZS5mb3JFYWNoKChiLCBqKSA9PiB7XG4gICAgICAgIGlmIChlcVB1YmxpY0tleShhLCBiKSAmJiBpICE9PSBqKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB3YWxsZXQga2V5cyBtdXN0IGJlIGRpc3RpbmN0YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wdWJsaWNLZXlzID0gdGhpcy50cmlwbGUubWFwKChrKSA9PiBrLnB1YmxpY0tleSkgYXMgVHJpcGxlPEJ1ZmZlcj47XG4gIH1cblxuICBnZXQgdXNlcigpOiBCSVAzMkludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcGxlWzBdO1xuICB9XG5cbiAgZ2V0IGJhY2t1cCgpOiBCSVAzMkludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcGxlWzFdO1xuICB9XG5cbiAgZ2V0IGJpdGdvKCk6IEJJUDMySW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy50cmlwbGVbMl07XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgb2YgV2FsbGV0S2V5cyBkZXJpdmVkIGZyb20gUm9vdFdhbGxldEtleXMuIFN1aXRhYmxlIGZvciBzaWduaW5nIHRyYW5zYWN0aW9uIGlucHV0cy5cbiAqIENvbnRhaW5zIHJlZmVyZW5jZSB0byB0aGUgUm9vdFdhbGxldEtleXMgdGhpcyB3YXMgZGVyaXZlZCBmcm9tIGFzIHdlbGwgYXMgdGhlIHBhdGhzIHVzZWRcbiAqIGZvciBkZXJpdmF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRGVyaXZlZFdhbGxldEtleXMgZXh0ZW5kcyBXYWxsZXRLZXlzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBwYXJlbnQgLSB3YWxsZXQga2V5cyB0byBkZXJpdmUgZnJvbVxuICAgKiBAcGFyYW0gcGF0aHMgLSBwYXRocyB0byBkZXJpdmUgd2l0aFxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHBhcmVudDogUm9vdFdhbGxldEtleXMsIHB1YmxpYyBwYXRoczogVHJpcGxlPHN0cmluZz4pIHtcbiAgICBzdXBlcihwYXJlbnQudHJpcGxlLm1hcCgoaywgaSkgPT4gay5kZXJpdmVQYXRoKHBhdGhzW2ldKSkgYXMgVHJpcGxlPEJJUDMySW50ZXJmYWNlPik7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgb2Ygcm9vdCB3YWxsZXQga2V5cywgdHlwaWNhbGx5IGluc3RhbnRpYXRlZCB1c2luZyB0aGUgd2FsbGV0IHhwdWIgdHJpcGxlLlxuICovXG5leHBvcnQgY2xhc3MgUm9vdFdhbGxldEtleXMgZXh0ZW5kcyBXYWxsZXRLZXlzIHtcbiAgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRQcmVmaXggPSAnMC8wJztcblxuICAvKipcbiAgICogQHBhcmFtIHRyaXBsZSAtIGJpcDMyIGtleSB0cmlwbGVcbiAgICogQHBhcmFtIGRlcml2YXRpb25QcmVmaXhlcyAtIENlcnRhaW4gdjEgd2FsbGV0cyBvciB0aGVpciBtaWdyYXRlZCB2MiBjb3VudGVycGFydHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBoYXZlIGEgbm9uc3RhbmRhcmQgcHJlZml4LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgdHJpcGxlOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+LFxuICAgIHB1YmxpYyByZWFkb25seSBkZXJpdmF0aW9uUHJlZml4ZXM6IFRyaXBsZTxzdHJpbmc+ID0gW1xuICAgICAgUm9vdFdhbGxldEtleXMuZGVmYXVsdFByZWZpeCxcbiAgICAgIFJvb3RXYWxsZXRLZXlzLmRlZmF1bHRQcmVmaXgsXG4gICAgICBSb290V2FsbGV0S2V5cy5kZWZhdWx0UHJlZml4LFxuICAgIF1cbiAgKSB7XG4gICAgc3VwZXIodHJpcGxlKTtcblxuICAgIGRlcml2YXRpb25QcmVmaXhlcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICBpZiAocC5zdGFydHNXaXRoKCcvJykgfHwgcC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGVyaXZhdGlvbiBwcmVmaXggbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggYSBzbGFzaGApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcmV0dXJuIGZ1bGwgZGVyaXZhdGlvbiBwYXRoIGZvciBrZXksIGluY2x1ZGluZyBrZXktc3BlY2lmaWMgcHJlZml4XG4gICAqL1xuICBnZXREZXJpdmF0aW9uUGF0aChrZXk6IEJJUDMySW50ZXJmYWNlLCBjaGFpbjogbnVtYmVyLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZhdGlvblByZWZpeGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGRlcml2YXRpb24gcHJlZml4ZXNgKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZml4ID0gdGhpcy5kZXJpdmF0aW9uUHJlZml4ZXMuZmluZCgocHJlZml4LCBpKSA9PiBlcVB1YmxpY0tleShrZXksIHRoaXMudHJpcGxlW2ldKSk7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGtleSBub3QgaW4gd2FsbGV0S2V5c2ApO1xuICAgIH1cbiAgICByZXR1cm4gYCR7cHJlZml4fS8ke2NoYWlufS8ke2luZGV4fWA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcmV0dXJuIHdhbGxldEtleXMgZm9yIGEgcGFydGljdWxhciBhZGRyZXNzIGlkZW50aWZpZWQgYnkgKGNoYWluLCBpbmRleClcbiAgICovXG4gIGRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IERlcml2ZWRXYWxsZXRLZXlzIHtcbiAgICByZXR1cm4gbmV3IERlcml2ZWRXYWxsZXRLZXlzKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMudHJpcGxlLm1hcCgoaykgPT4gdGhpcy5nZXREZXJpdmF0aW9uUGF0aChrLCBjaGFpbiwgaW5kZXgpKSBhcyBUcmlwbGU8c3RyaW5nPlxuICAgICk7XG4gIH1cbn1cbiJdfQ==
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2FsbGV0S2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvV2FsbGV0S2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpQkEsa0NBRUM7QUFGRCxTQUFnQixXQUFXLENBQUMsQ0FBaUIsRUFBRSxDQUFpQjtJQUM5RCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxVQUFVO0lBR3JCOztPQUVHO0lBQ0gsWUFBNEIsTUFBOEI7UUFBOUIsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QixJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBbUIsQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUE3QkQsZ0NBNkJDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsVUFBVTtJQUMvQzs7O09BR0c7SUFDSCxZQUFtQixNQUFzQixFQUFTLEtBQXFCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQTJCLENBQUMsQ0FBQztRQURwRSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUFTLFVBQUssR0FBTCxLQUFLLENBQWdCO0lBRXZFLENBQUM7Q0FDRjtBQVJELDhDQVFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxVQUFVO0lBRzVDOzs7O09BSUc7SUFDSCxZQUNFLE1BQThCLEVBQ2QscUJBQXFDO1FBQ25ELGNBQWMsQ0FBQyxhQUFhO1FBQzVCLGNBQWMsQ0FBQyxhQUFhO1FBQzVCLGNBQWMsQ0FBQyxhQUFhO0tBQzdCO1FBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBTkUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUlqQztRQUlELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUMxRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUIsQ0FBQyxHQUFtQixFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLE1BQU0sSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNqRCxPQUFPLElBQUksaUJBQWlCLENBQzFCLElBQUksRUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQW1CLENBQ2xGLENBQUM7SUFDSixDQUFDOztBQXBESCx3Q0FxREM7QUFwRGlCLDRCQUFhLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGFzc2VzIGZvciBkZXJpdmluZyBrZXkgdHJpcGxlcyBmb3Igd2FsbGV0IGFkZHJlc3Nlcy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBCaXRHbyB3YWxsZXRzIGNvbnNpc3Qgb2YgYSB0cmlwbGUgb2YgYmlwMzIgZXh0ZW5kIGtleXBhaXJzLlxuICogRXZlcnkgd2FsbGV0IGFkZHJlc3MgY2FuIGJlIGlkZW50aWZpZWQgYnkgXyhjaGFpbjogbnVtYmVyLCBpbmRleDogbnVtYmVyKV8uXG4gKiBUaGUga2V5IHNldCBmb3IgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgY2FuIGJlIG9idGFpbmVkIGJ5IGRlcml2aW5nIHdpdGggdGhlIHBhdGhcbiAqIGAwLzAvJHtjaGFpbn0vJHtpbmRleH1gLiAoSW4gcmFyZSBjYXNlcyB0aGUgcHJlZml4IDAvMCBjYW4gYmUgZGlmZmVyZW50KVxuICpcbiAqIFNpbmNlIHdlIG5ldmVyIHVzZSBvdGhlciBkZXJpdmF0aW9ucyBmb3IgdXR4byBhZGRyZXNzIHNjcmlwdHMsIHRoZSBjbGFzc2VzIGRlZmluZWQgaGVyZSBvbmx5XG4gKiBhbGxvdyBleGFjdGx5IG9uZSBsZXZlbCBvZiBkZXJpdmF0aW9uLlxuICovXG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcblxuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBLZXlOYW1lID0gJ3VzZXInIHwgJ2JhY2t1cCcgfCAnYml0Z28nO1xuXG5leHBvcnQgZnVuY3Rpb24gZXFQdWJsaWNLZXkoYTogQklQMzJJbnRlcmZhY2UsIGI6IEJJUDMySW50ZXJmYWNlKTogYm9vbGVhbiB7XG4gIHJldHVybiBhLnB1YmxpY0tleS5lcXVhbHMoYi5wdWJsaWNLZXkpO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFJvb3RXYWxsZXRLZXlzIGFuZCBEZXJpdmVkV2FsbGV0S2V5cy5cbiAqIEtleXMgY2FuIGJlIGVpdGhlciBwdWJsaWMga2V5cyBvciBwcml2YXRlIGtleXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBXYWxsZXRLZXlzIHtcbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY0tleXM6IFRyaXBsZTxCdWZmZXI+O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gdHJpcGxlIC0gYmlwMzIga2V5IHRyaXBsZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHRyaXBsZTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPikge1xuICAgIHRyaXBsZS5mb3JFYWNoKChhLCBpKSA9PiB7XG4gICAgICB0cmlwbGUuZm9yRWFjaCgoYiwgaikgPT4ge1xuICAgICAgICBpZiAoZXFQdWJsaWNLZXkoYSwgYikgJiYgaSAhPT0gaikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgd2FsbGV0IGtleXMgbXVzdCBiZSBkaXN0aW5jdGApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMucHVibGljS2V5cyA9IHRoaXMudHJpcGxlLm1hcCgoaykgPT4gay5wdWJsaWNLZXkpIGFzIFRyaXBsZTxCdWZmZXI+O1xuICB9XG5cbiAgZ2V0IHVzZXIoKTogQklQMzJJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLnRyaXBsZVswXTtcbiAgfVxuXG4gIGdldCBiYWNrdXAoKTogQklQMzJJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLnRyaXBsZVsxXTtcbiAgfVxuXG4gIGdldCBiaXRnbygpOiBCSVAzMkludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcGxlWzJdO1xuICB9XG59XG5cbi8qKlxuICogU2V0IG9mIFdhbGxldEtleXMgZGVyaXZlZCBmcm9tIFJvb3RXYWxsZXRLZXlzLiBTdWl0YWJsZSBmb3Igc2lnbmluZyB0cmFuc2FjdGlvbiBpbnB1dHMuXG4gKiBDb250YWlucyByZWZlcmVuY2UgdG8gdGhlIFJvb3RXYWxsZXRLZXlzIHRoaXMgd2FzIGRlcml2ZWQgZnJvbSBhcyB3ZWxsIGFzIHRoZSBwYXRocyB1c2VkXG4gKiBmb3IgZGVyaXZhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIERlcml2ZWRXYWxsZXRLZXlzIGV4dGVuZHMgV2FsbGV0S2V5cyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gcGFyZW50IC0gd2FsbGV0IGtleXMgdG8gZGVyaXZlIGZyb21cbiAgICogQHBhcmFtIHBhdGhzIC0gcGF0aHMgdG8gZGVyaXZlIHdpdGhcbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IFJvb3RXYWxsZXRLZXlzLCBwdWJsaWMgcGF0aHM6IFRyaXBsZTxzdHJpbmc+KSB7XG4gICAgc3VwZXIocGFyZW50LnRyaXBsZS5tYXAoKGssIGkpID0+IGsuZGVyaXZlUGF0aChwYXRoc1tpXSkpIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT4pO1xuICB9XG59XG5cbi8qKlxuICogU2V0IG9mIHJvb3Qgd2FsbGV0IGtleXMsIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdXNpbmcgdGhlIHdhbGxldCB4cHViIHRyaXBsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvb3RXYWxsZXRLZXlzIGV4dGVuZHMgV2FsbGV0S2V5cyB7XG4gIHN0YXRpYyByZWFkb25seSBkZWZhdWx0UHJlZml4ID0gJzAvMCc7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0cmlwbGUgLSBiaXAzMiBrZXkgdHJpcGxlXG4gICAqIEBwYXJhbSBkZXJpdmF0aW9uUHJlZml4ZXMgLSBDZXJ0YWluIHYxIHdhbGxldHMgb3IgdGhlaXIgbWlncmF0ZWQgdjIgY291bnRlcnBhcnRzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gaGF2ZSBhIG5vbnN0YW5kYXJkIHByZWZpeC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyaXBsZTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVyaXZhdGlvblByZWZpeGVzOiBUcmlwbGU8c3RyaW5nPiA9IFtcbiAgICAgIFJvb3RXYWxsZXRLZXlzLmRlZmF1bHRQcmVmaXgsXG4gICAgICBSb290V2FsbGV0S2V5cy5kZWZhdWx0UHJlZml4LFxuICAgICAgUm9vdFdhbGxldEtleXMuZGVmYXVsdFByZWZpeCxcbiAgICBdXG4gICkge1xuICAgIHN1cGVyKHRyaXBsZSk7XG5cbiAgICBkZXJpdmF0aW9uUHJlZml4ZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgaWYgKHAuc3RhcnRzV2l0aCgnLycpIHx8IHAuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlcml2YXRpb24gcHJlZml4IG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIGEgc2xhc2hgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybiBmdWxsIGRlcml2YXRpb24gcGF0aCBmb3Iga2V5LCBpbmNsdWRpbmcga2V5LXNwZWNpZmljIHByZWZpeFxuICAgKi9cbiAgZ2V0RGVyaXZhdGlvblBhdGgoa2V5OiBCSVAzMkludGVyZmFjZSwgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmRlcml2YXRpb25QcmVmaXhlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBkZXJpdmF0aW9uIHByZWZpeGVzYCk7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZGVyaXZhdGlvblByZWZpeGVzLmZpbmQoKHByZWZpeCwgaSkgPT4gZXFQdWJsaWNLZXkoa2V5LCB0aGlzLnRyaXBsZVtpXSkpO1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXkgbm90IGluIHdhbGxldEtleXNgKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3ByZWZpeH0vJHtjaGFpbn0vJHtpbmRleH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybiB3YWxsZXRLZXlzIGZvciBhIHBhcnRpY3VsYXIgYWRkcmVzcyBpZGVudGlmaWVkIGJ5IChjaGFpbiwgaW5kZXgpXG4gICAqL1xuICBkZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBEZXJpdmVkV2FsbGV0S2V5cyB7XG4gICAgcmV0dXJuIG5ldyBEZXJpdmVkV2FsbGV0S2V5cyhcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnRyaXBsZS5tYXAoKGspID0+IHRoaXMuZ2V0RGVyaXZhdGlvblBhdGgoaywgY2hhaW4sIGluZGV4KSkgYXMgVHJpcGxlPHN0cmluZz5cbiAgICApO1xuICB9XG59XG4iXX0=