@bitgo-beta/sdk-core 8.2.1-beta.21 → 8.2.1-beta.2100

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 (892) hide show
  1. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
  2. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
  3. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +3 -3
  4. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  5. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +4 -3
  6. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
  7. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
  8. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +43 -31
  9. package/dist/src/account-lib/baseCoin/enum.d.ts +61 -2
  10. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
  11. package/dist/src/account-lib/baseCoin/enum.js +118 -6
  12. package/dist/src/account-lib/baseCoin/errors.d.ts +3 -0
  13. package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
  14. package/dist/src/account-lib/baseCoin/errors.js +8 -2
  15. package/dist/src/account-lib/baseCoin/iface.d.ts +19 -35
  16. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  17. package/dist/src/account-lib/baseCoin/iface.js +26 -18
  18. package/dist/src/account-lib/baseCoin/index.d.ts +1 -1
  19. package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -1
  20. package/dist/src/account-lib/baseCoin/index.js +8 -5
  21. package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts +88 -0
  22. package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
  23. package/dist/src/account-lib/baseCoin/messages/baseMessage.js +154 -0
  24. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +67 -0
  25. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
  26. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.js +144 -0
  27. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +33 -0
  28. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
  29. package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +45 -0
  30. package/dist/src/account-lib/baseCoin/messages/iface.d.ts +164 -0
  31. package/dist/src/account-lib/baseCoin/messages/iface.d.ts.map +1 -0
  32. package/dist/src/account-lib/baseCoin/messages/iface.js +3 -0
  33. package/dist/src/account-lib/baseCoin/messages/index.d.ts +6 -0
  34. package/dist/src/account-lib/baseCoin/messages/index.d.ts.map +1 -0
  35. package/dist/src/account-lib/baseCoin/messages/index.js +22 -0
  36. package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts +3 -0
  37. package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts.map +1 -0
  38. package/dist/src/account-lib/baseCoin/messages/simple/index.js +19 -0
  39. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts +13 -0
  40. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts.map +1 -0
  41. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.js +28 -0
  42. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts +21 -0
  43. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts.map +1 -0
  44. package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.js +28 -0
  45. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +1 -2
  46. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
  47. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +38 -26
  48. package/dist/src/account-lib/index.d.ts +0 -1
  49. package/dist/src/account-lib/index.d.ts.map +1 -1
  50. package/dist/src/account-lib/index.js +23 -10
  51. package/dist/src/account-lib/mpc/curves/ed25519.d.ts +4 -18
  52. package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -1
  53. package/dist/src/account-lib/mpc/curves/ed25519.js +6 -60
  54. package/dist/src/account-lib/mpc/index.d.ts +4 -4
  55. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  56. package/dist/src/account-lib/mpc/index.js +11 -7
  57. package/dist/src/account-lib/mpc/shamir.d.ts +5 -37
  58. package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -1
  59. package/dist/src/account-lib/mpc/shamir.js +6 -130
  60. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +40 -11
  61. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  62. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +521 -378
  63. package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
  64. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
  65. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
  66. package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
  67. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +73 -52
  68. package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
  69. package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
  70. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +1 -2
  71. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
  72. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +66 -69
  73. package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
  74. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -4
  75. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
  76. package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
  77. package/dist/src/account-lib/mpc/tss/index.js +23 -9
  78. package/dist/src/account-lib/mpc/util.d.ts +7 -1
  79. package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
  80. package/dist/src/account-lib/mpc/util.js +24 -1
  81. package/dist/src/account-lib/staking/index.js +6 -2
  82. package/dist/src/account-lib/staking/utils.js +3 -3
  83. package/dist/src/account-lib/util/crypto.d.ts +8 -2
  84. package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
  85. package/dist/src/account-lib/util/crypto.js +69 -38
  86. package/dist/src/api/bip32path.js +2 -3
  87. package/dist/src/api/index.js +6 -2
  88. package/dist/src/api/types.d.ts +37 -0
  89. package/dist/src/api/types.d.ts.map +1 -1
  90. package/dist/src/api/types.js +8 -1
  91. package/dist/src/bitgo/address-book/address-book.d.ts +61 -0
  92. package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -0
  93. package/dist/src/bitgo/address-book/address-book.js +150 -0
  94. package/dist/src/bitgo/address-book/index.d.ts +3 -0
  95. package/dist/src/bitgo/address-book/index.d.ts.map +1 -0
  96. package/dist/src/{openssl → bitgo/address-book}/index.js +8 -3
  97. package/dist/src/bitgo/address-book/types.d.ts +170 -0
  98. package/dist/src/bitgo/address-book/types.d.ts.map +1 -0
  99. package/dist/src/bitgo/address-book/types.js +3 -0
  100. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +139 -12
  101. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  102. package/dist/src/bitgo/baseCoin/baseCoin.js +217 -16
  103. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +366 -29
  104. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  105. package/dist/src/bitgo/baseCoin/iBaseCoin.js +14 -3
  106. package/dist/src/bitgo/baseCoin/index.js +6 -2
  107. package/dist/src/bitgo/bip32util.d.ts +3 -16
  108. package/dist/src/bitgo/bip32util.d.ts.map +1 -1
  109. package/dist/src/bitgo/bip32util.js +4 -56
  110. package/dist/src/bitgo/bitcoin.d.ts +0 -1
  111. package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
  112. package/dist/src/bitgo/bitcoin.js +26 -13
  113. package/dist/src/bitgo/bitgoBase.d.ts +19 -5
  114. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
  115. package/dist/src/bitgo/bitgoBase.js +1 -1
  116. package/dist/src/bitgo/coinFactory.d.ts +24 -3
  117. package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
  118. package/dist/src/bitgo/coinFactory.js +35 -3
  119. package/dist/src/bitgo/config.d.ts +3 -89
  120. package/dist/src/bitgo/config.d.ts.map +1 -1
  121. package/dist/src/bitgo/config.js +26 -15
  122. package/dist/src/bitgo/defi/defiVault.d.ts +171 -0
  123. package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -0
  124. package/dist/src/bitgo/defi/defiVault.js +445 -0
  125. package/dist/src/bitgo/defi/iDefiVault.d.ts +101 -0
  126. package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -0
  127. package/dist/src/bitgo/defi/iDefiVault.js +6 -0
  128. package/dist/src/bitgo/defi/index.d.ts +3 -0
  129. package/dist/src/bitgo/defi/index.d.ts.map +1 -0
  130. package/dist/src/bitgo/defi/index.js +22 -0
  131. package/dist/src/bitgo/ecdh.d.ts +0 -1
  132. package/dist/src/bitgo/ecdh.d.ts.map +1 -1
  133. package/dist/src/bitgo/ecdh.js +26 -13
  134. package/dist/src/bitgo/enterprise/enterprise.d.ts +22 -14
  135. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
  136. package/dist/src/bitgo/enterprise/enterprise.js +72 -31
  137. package/dist/src/bitgo/enterprise/enterprises.d.ts +6 -0
  138. package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -1
  139. package/dist/src/bitgo/enterprise/enterprises.js +48 -9
  140. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +9 -7
  141. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
  142. package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
  143. package/dist/src/bitgo/enterprise/iEnterprises.d.ts +2 -0
  144. package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -1
  145. package/dist/src/bitgo/enterprise/iEnterprises.js +1 -1
  146. package/dist/src/bitgo/enterprise/index.js +6 -2
  147. package/dist/src/bitgo/environments.d.ts +88 -5
  148. package/dist/src/bitgo/environments.d.ts.map +1 -1
  149. package/dist/src/bitgo/environments.js +436 -30
  150. package/dist/src/bitgo/errors.d.ts +189 -1
  151. package/dist/src/bitgo/errors.d.ts.map +1 -1
  152. package/dist/src/bitgo/errors.js +187 -3
  153. package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
  154. package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
  155. package/dist/src/bitgo/evm/evmUtils.js +50 -0
  156. package/dist/src/bitgo/index.d.ts +6 -1
  157. package/dist/src/bitgo/index.d.ts.map +1 -1
  158. package/dist/src/bitgo/index.js +32 -11
  159. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
  160. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
  161. package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
  162. package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
  163. package/dist/src/bitgo/internal/index.js +6 -2
  164. package/dist/src/bitgo/internal/internal.js +5 -6
  165. package/dist/src/bitgo/internal/keycard.d.ts +13 -8
  166. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
  167. package/dist/src/bitgo/internal/keycard.js +63 -48
  168. package/dist/src/bitgo/keychain/decryptKeychain.d.ts +14 -0
  169. package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
  170. package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
  171. package/dist/src/bitgo/keychain/iKeychains.d.ts +189 -10
  172. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
  173. package/dist/src/bitgo/keychain/iKeychains.js +2 -2
  174. package/dist/src/bitgo/keychain/index.d.ts +1 -0
  175. package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
  176. package/dist/src/bitgo/keychain/index.js +7 -2
  177. package/dist/src/bitgo/keychain/keychains.d.ts +106 -13
  178. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  179. package/dist/src/bitgo/keychain/keychains.js +451 -93
  180. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +126 -91
  181. package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
  182. package/dist/src/bitgo/keychain/ovcJsonCodec.js +53 -32
  183. package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
  184. package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
  185. package/dist/src/bitgo/legacyBitcoin.js +27 -13
  186. package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts +7 -0
  187. package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts.map +1 -0
  188. package/dist/src/bitgo/lightning/lightningWalletUtil.js +25 -0
  189. package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
  190. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
  191. package/dist/src/bitgo/market/index.js +6 -2
  192. package/dist/src/bitgo/market/markets.js +23 -9
  193. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +7 -1
  194. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
  195. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
  196. package/dist/src/bitgo/pendingApproval/index.js +6 -2
  197. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
  198. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  199. package/dist/src/bitgo/pendingApproval/pendingApproval.js +251 -110
  200. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
  201. package/dist/src/bitgo/proofs/WalletProofs.d.ts +19 -0
  202. package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -0
  203. package/dist/src/bitgo/proofs/WalletProofs.js +37 -0
  204. package/dist/src/bitgo/proofs/index.d.ts +2 -0
  205. package/dist/src/bitgo/proofs/index.d.ts.map +1 -0
  206. package/dist/src/bitgo/proofs/index.js +6 -0
  207. package/dist/src/bitgo/proofs/types.d.ts +80 -0
  208. package/dist/src/bitgo/proofs/types.d.ts.map +1 -0
  209. package/dist/src/bitgo/proofs/types.js +80 -0
  210. package/dist/src/bitgo/recovery/index.js +6 -2
  211. package/dist/src/bitgo/recovery/initiate.d.ts +20 -4
  212. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  213. package/dist/src/bitgo/recovery/initiate.js +49 -41
  214. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +13 -0
  215. package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
  216. package/dist/src/bitgo/safe/derivableEd25519Pub.js +35 -0
  217. package/dist/src/bitgo/safe/iSafe.d.ts +124 -0
  218. package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
  219. package/dist/src/bitgo/safe/iSafe.js +3 -0
  220. package/dist/src/bitgo/safe/iSafes.d.ts +94 -0
  221. package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
  222. package/dist/src/bitgo/safe/iSafes.js +3 -0
  223. package/dist/src/bitgo/safe/index.d.ts +8 -0
  224. package/dist/src/bitgo/safe/index.d.ts.map +1 -0
  225. package/dist/src/bitgo/safe/index.js +24 -0
  226. package/dist/src/bitgo/safe/recovery.d.ts +92 -0
  227. package/dist/src/bitgo/safe/recovery.d.ts.map +1 -0
  228. package/dist/src/bitgo/safe/recovery.js +148 -0
  229. package/dist/src/bitgo/safe/rootCoin.d.ts +15 -0
  230. package/dist/src/bitgo/safe/rootCoin.d.ts.map +1 -0
  231. package/dist/src/bitgo/safe/rootCoin.js +47 -0
  232. package/dist/src/bitgo/safe/safe.d.ts +88 -0
  233. package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
  234. package/dist/src/bitgo/safe/safe.js +409 -0
  235. package/dist/src/bitgo/safe/safes.d.ts +102 -0
  236. package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
  237. package/dist/src/bitgo/safe/safes.js +281 -0
  238. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +136 -0
  239. package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -0
  240. package/dist/src/bitgo/staking/goStakingInterfaces.js +3 -0
  241. package/dist/src/bitgo/staking/goStakingWallet.d.ts +62 -0
  242. package/dist/src/bitgo/staking/goStakingWallet.d.ts.map +1 -0
  243. package/dist/src/bitgo/staking/goStakingWallet.js +141 -0
  244. package/dist/src/bitgo/staking/iGoStakingWallet.d.ts +17 -0
  245. package/dist/src/bitgo/staking/iGoStakingWallet.d.ts.map +1 -0
  246. package/dist/src/bitgo/staking/iGoStakingWallet.js +3 -0
  247. package/dist/src/bitgo/staking/iStakingWallet.d.ts +197 -8
  248. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  249. package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
  250. package/dist/src/bitgo/staking/index.d.ts +3 -0
  251. package/dist/src/bitgo/staking/index.d.ts.map +1 -1
  252. package/dist/src/bitgo/staking/index.js +9 -2
  253. package/dist/src/bitgo/staking/stakingWallet.d.ts +27 -8
  254. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  255. package/dist/src/bitgo/staking/stakingWallet.js +161 -7
  256. package/dist/src/bitgo/trading/iTradingAccount.d.ts +15 -33
  257. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
  258. package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
  259. package/dist/src/bitgo/trading/index.d.ts +1 -15
  260. package/dist/src/bitgo/trading/index.d.ts.map +1 -1
  261. package/dist/src/bitgo/trading/index.js +7 -17
  262. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
  263. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
  264. package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
  265. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
  266. package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
  267. package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
  268. package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
  269. package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
  270. package/dist/src/bitgo/trading/network/decrypt.js +23 -0
  271. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
  272. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
  273. package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
  274. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
  275. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
  276. package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
  277. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
  278. package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
  279. package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
  280. package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
  281. package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
  282. package/dist/src/bitgo/trading/network/encrypt.js +58 -0
  283. package/dist/src/bitgo/trading/network/index.d.ts +5 -0
  284. package/dist/src/bitgo/trading/network/index.d.ts.map +1 -0
  285. package/dist/src/bitgo/trading/network/index.js +21 -0
  286. package/dist/src/bitgo/trading/network/network.d.ts +36 -0
  287. package/dist/src/bitgo/trading/network/network.d.ts.map +1 -0
  288. package/dist/src/bitgo/trading/network/network.js +94 -0
  289. package/dist/src/bitgo/trading/network/types.d.ts +277 -0
  290. package/dist/src/bitgo/trading/network/types.d.ts.map +1 -0
  291. package/dist/src/bitgo/trading/network/types.js +3 -0
  292. package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
  293. package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
  294. package/dist/src/bitgo/trading/network/utils.js +54 -0
  295. package/dist/src/bitgo/trading/tradingAccount.d.ts +23 -33
  296. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
  297. package/dist/src/bitgo/trading/tradingAccount.js +58 -97
  298. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +49 -0
  299. package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  300. package/dist/src/bitgo/tss/bitgoPubKeys.js +92 -0
  301. package/dist/src/bitgo/tss/common.d.ts +52 -6
  302. package/dist/src/bitgo/tss/common.d.ts.map +1 -1
  303. package/dist/src/bitgo/tss/common.js +144 -15
  304. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
  305. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  306. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +85 -81
  307. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
  308. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  309. package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +167 -0
  310. package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
  311. package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
  312. package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
  313. package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
  314. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  315. package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
  316. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +19 -9
  317. package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
  318. package/dist/src/bitgo/tss/eddsa/eddsa.js +56 -38
  319. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +42 -0
  320. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  321. package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +104 -0
  322. package/dist/src/bitgo/tss/eddsa/index.js +23 -9
  323. package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
  324. package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
  325. package/dist/src/bitgo/tss/index.d.ts +3 -2
  326. package/dist/src/bitgo/tss/index.d.ts.map +1 -1
  327. package/dist/src/bitgo/tss/index.js +26 -10
  328. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts +79 -0
  329. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  330. package/dist/src/bitgo/tss/redpallas/redpallasMPCv2.js +179 -0
  331. package/dist/src/bitgo/tss/types.d.ts +19 -0
  332. package/dist/src/bitgo/tss/types.d.ts.map +1 -1
  333. package/dist/src/bitgo/tss/types.js +2 -2
  334. package/dist/src/bitgo/types.d.ts +3 -3
  335. package/dist/src/bitgo/types.d.ts.map +1 -1
  336. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +14 -0
  337. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
  338. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +87 -10
  339. package/dist/src/bitgo/utils/codecProps.d.ts +7 -0
  340. package/dist/src/bitgo/utils/codecProps.d.ts.map +1 -0
  341. package/dist/src/bitgo/utils/codecProps.js +54 -0
  342. package/dist/src/bitgo/utils/codecs.d.ts +11 -0
  343. package/dist/src/bitgo/utils/codecs.d.ts.map +1 -0
  344. package/dist/src/bitgo/utils/codecs.js +59 -0
  345. package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
  346. package/dist/src/bitgo/utils/decode.js +30 -16
  347. package/dist/src/bitgo/utils/index.d.ts +5 -2
  348. package/dist/src/bitgo/utils/index.d.ts.map +1 -1
  349. package/dist/src/bitgo/utils/index.js +28 -11
  350. package/dist/src/bitgo/utils/messageTypes.d.ts +46 -0
  351. package/dist/src/bitgo/utils/messageTypes.d.ts.map +1 -0
  352. package/dist/src/bitgo/utils/messageTypes.js +23 -0
  353. package/dist/src/bitgo/utils/mpcUtils.d.ts +4 -4
  354. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
  355. package/dist/src/bitgo/utils/mpcUtils.js +208 -14
  356. package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
  357. package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
  358. package/dist/src/bitgo/utils/notEmpty.js +7 -0
  359. package/dist/src/bitgo/utils/opengpgUtils.d.ts +13 -9
  360. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  361. package/dist/src/bitgo/utils/opengpgUtils.js +87 -73
  362. package/dist/src/bitgo/utils/postWithCodec.d.ts +18 -0
  363. package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -0
  364. package/dist/src/bitgo/utils/postWithCodec.js +25 -0
  365. package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
  366. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
  367. package/dist/src/bitgo/utils/promise-utils.js +2 -3
  368. package/dist/src/bitgo/utils/siws.d.ts +17 -0
  369. package/dist/src/bitgo/utils/siws.d.ts.map +1 -0
  370. package/dist/src/bitgo/utils/siws.js +171 -0
  371. package/dist/src/bitgo/utils/transactionUtils.d.ts +9 -0
  372. package/dist/src/bitgo/utils/transactionUtils.d.ts.map +1 -0
  373. package/dist/src/bitgo/utils/transactionUtils.js +29 -0
  374. package/dist/src/bitgo/utils/triple.d.ts +1 -1
  375. package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
  376. package/dist/src/bitgo/utils/triple.js +2 -3
  377. package/dist/src/bitgo/utils/tss/addressVerification.d.ts +62 -0
  378. package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  379. package/dist/src/bitgo/utils/tss/addressVerification.js +93 -0
  380. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +157 -28
  381. package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
  382. package/dist/src/bitgo/utils/tss/baseTSSUtils.js +381 -43
  383. package/dist/src/bitgo/utils/tss/baseTypes.d.ts +620 -44
  384. package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
  385. package/dist/src/bitgo/utils/tss/baseTypes.js +60 -10
  386. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
  387. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
  388. package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
  389. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +28 -0
  390. package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
  391. package/dist/src/bitgo/utils/tss/ecdsa/base.js +53 -0
  392. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +63 -53
  393. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
  394. package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +356 -327
  395. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +240 -0
  396. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  397. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1076 -0
  398. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +16 -0
  399. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
  400. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +37 -0
  401. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts +69 -0
  402. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -0
  403. package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +442 -0
  404. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +5 -0
  405. package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
  406. package/dist/src/bitgo/utils/tss/ecdsa/index.js +11 -2
  407. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +15 -9
  408. package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
  409. package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
  410. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +125 -0
  411. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
  412. package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
  413. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +21 -0
  414. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -0
  415. package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +119 -0
  416. package/dist/src/bitgo/utils/tss/eddsa/base.d.ts +18 -0
  417. package/dist/src/bitgo/utils/tss/eddsa/base.d.ts.map +1 -0
  418. package/dist/src/bitgo/utils/tss/eddsa/base.js +64 -0
  419. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +59 -14
  420. package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
  421. package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +318 -99
  422. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +260 -0
  423. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  424. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +995 -0
  425. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +11 -0
  426. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -0
  427. package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +26 -0
  428. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +42 -0
  429. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
  430. package/dist/src/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +267 -0
  431. package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +5 -0
  432. package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
  433. package/dist/src/bitgo/utils/tss/eddsa/index.js +30 -8
  434. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +15 -7
  435. package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
  436. package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
  437. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +75 -0
  438. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -0
  439. package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +44 -0
  440. package/dist/src/bitgo/utils/tss/index.d.ts +7 -0
  441. package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
  442. package/dist/src/bitgo/utils/tss/index.js +31 -10
  443. package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts +40 -0
  444. package/dist/src/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
  445. package/dist/src/bitgo/utils/tss/keyShareEnvelope.js +103 -0
  446. package/dist/src/bitgo/utils/tss/keyVerification.d.ts +45 -0
  447. package/dist/src/bitgo/utils/tss/keyVerification.d.ts.map +1 -0
  448. package/dist/src/bitgo/utils/tss/keyVerification.js +192 -0
  449. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
  450. package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  451. package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
  452. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +42 -0
  453. package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
  454. package/dist/src/bitgo/utils/tss/recipientUtils.js +168 -0
  455. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts +29 -0
  456. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts.map +1 -0
  457. package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.js +126 -0
  458. package/dist/src/bitgo/utils/tss/redpallas/index.d.ts +4 -0
  459. package/dist/src/bitgo/utils/tss/redpallas/index.d.ts.map +1 -0
  460. package/dist/src/bitgo/utils/tss/redpallas/index.js +20 -0
  461. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +27 -0
  462. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  463. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.js +43 -0
  464. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts +45 -0
  465. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -0
  466. package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.js +55 -0
  467. package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts +8 -0
  468. package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts.map +1 -0
  469. package/dist/src/bitgo/utils/tss/serializedTxHexVerify.js +13 -0
  470. package/dist/src/bitgo/utils/tss/signableConsistency.d.ts +12 -0
  471. package/dist/src/bitgo/utils/tss/signableConsistency.d.ts.map +1 -0
  472. package/dist/src/bitgo/utils/tss/signableConsistency.js +9 -0
  473. package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
  474. package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
  475. package/dist/src/bitgo/utils/txRequest.js +49 -0
  476. package/dist/src/bitgo/utils/util.js +24 -10
  477. package/dist/src/bitgo/utils/wallet.d.ts +7 -0
  478. package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
  479. package/dist/src/bitgo/utils/wallet.js +48 -0
  480. package/dist/src/bitgo/v1Wallets.d.ts +170 -0
  481. package/dist/src/bitgo/v1Wallets.d.ts.map +1 -0
  482. package/dist/src/bitgo/v1Wallets.js +3 -0
  483. package/dist/src/bitgo/wallet/BuildParams.d.ts +201 -0
  484. package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -0
  485. package/dist/src/bitgo/wallet/BuildParams.js +202 -0
  486. package/dist/src/bitgo/wallet/iWallet.d.ts +682 -30
  487. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  488. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  489. package/dist/src/bitgo/wallet/iWallets.d.ts +325 -19
  490. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  491. package/dist/src/bitgo/wallet/iWallets.js +84 -3
  492. package/dist/src/bitgo/wallet/index.d.ts +1 -0
  493. package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
  494. package/dist/src/bitgo/wallet/index.js +7 -2
  495. package/dist/src/bitgo/wallet/safeKeychain.d.ts +75 -0
  496. package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -0
  497. package/dist/src/bitgo/wallet/safeKeychain.js +151 -0
  498. package/dist/src/bitgo/wallet/wallet.d.ts +485 -29
  499. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  500. package/dist/src/bitgo/wallet/wallet.js +2723 -478
  501. package/dist/src/bitgo/wallet/wallets.d.ts +124 -9
  502. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  503. package/dist/src/bitgo/wallet/wallets.js +1398 -181
  504. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
  505. package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
  506. package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
  507. package/dist/src/bitgo/walletUtil/index.d.ts +3 -0
  508. package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -0
  509. package/dist/src/bitgo/walletUtil/index.js +19 -0
  510. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
  511. package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
  512. package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
  513. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
  514. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
  515. package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +72 -0
  516. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +15 -0
  517. package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -0
  518. package/dist/src/bitgo/walletUtil/utxoMessageProof.js +40 -0
  519. package/dist/src/bitgo/webauthn/base64url.d.ts +16 -0
  520. package/dist/src/bitgo/webauthn/base64url.d.ts.map +1 -0
  521. package/dist/src/bitgo/webauthn/base64url.js +27 -0
  522. package/dist/src/bitgo/webauthn/deriveEnterpriseSalt.d.ts +18 -0
  523. package/dist/src/bitgo/webauthn/deriveEnterpriseSalt.d.ts.map +1 -0
  524. package/dist/src/bitgo/webauthn/deriveEnterpriseSalt.js +26 -0
  525. package/dist/src/bitgo/webauthn/derivePassword.d.ts +11 -0
  526. package/dist/src/bitgo/webauthn/derivePassword.d.ts.map +1 -0
  527. package/dist/src/bitgo/webauthn/derivePassword.js +16 -0
  528. package/dist/src/bitgo/webauthn/index.d.ts +5 -0
  529. package/dist/src/bitgo/webauthn/index.d.ts.map +1 -0
  530. package/dist/src/bitgo/webauthn/index.js +21 -0
  531. package/dist/src/bitgo/webauthn/types.d.ts +18 -0
  532. package/dist/src/bitgo/webauthn/types.d.ts.map +1 -0
  533. package/dist/src/bitgo/webauthn/types.js +3 -0
  534. package/dist/src/bitgo/webhook/index.js +6 -2
  535. package/dist/src/bitgo/webhook/webhooks.js +23 -9
  536. package/dist/src/coins/fiat.d.ts +45 -0
  537. package/dist/src/coins/fiat.d.ts.map +1 -0
  538. package/dist/src/coins/fiat.js +94 -0
  539. package/dist/src/coins/index.d.ts +1 -6
  540. package/dist/src/coins/index.d.ts.map +1 -1
  541. package/dist/src/coins/index.js +7 -8
  542. package/dist/src/coins/ofc.d.ts +21 -2
  543. package/dist/src/coins/ofc.d.ts.map +1 -1
  544. package/dist/src/coins/ofc.js +29 -3
  545. package/dist/src/coins/ofcToken.d.ts +15 -4
  546. package/dist/src/coins/ofcToken.d.ts.map +1 -1
  547. package/dist/src/coins/ofcToken.js +43 -5
  548. package/dist/src/coins/susd.d.ts +3 -2
  549. package/dist/src/coins/susd.d.ts.map +1 -1
  550. package/dist/src/coins/susd.js +5 -1
  551. package/dist/src/common.js +27 -13
  552. package/dist/src/index.d.ts +13 -1
  553. package/dist/src/index.d.ts.map +1 -1
  554. package/dist/src/index.js +42 -11
  555. package/dist/src/lightning.d.ts +20 -0
  556. package/dist/src/lightning.d.ts.map +1 -0
  557. package/dist/src/lightning.js +13 -0
  558. package/dist/src/units.js +5 -6
  559. package/dist/test/node.utils.d.ts +2 -0
  560. package/dist/test/node.utils.d.ts.map +1 -0
  561. package/dist/test/node.utils.js +5 -0
  562. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts +2 -0
  563. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
  564. package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.js +207 -0
  565. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +2 -0
  566. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
  567. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.js +174 -0
  568. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +2 -0
  569. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
  570. package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +108 -0
  571. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts +46 -0
  572. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts.map +1 -0
  573. package/dist/test/unit/account-lib/baseCoin/messages/fixtures.js +69 -0
  574. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  575. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  576. package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +279 -0
  577. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts +3 -0
  578. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.d.ts.map +1 -0
  579. package/dist/test/unit/account-lib/mpc/tss/ecdsa/fixtures.js +24 -0
  580. package/dist/test/unit/account-lib/mpc/util.d.ts +2 -0
  581. package/dist/test/unit/account-lib/mpc/util.d.ts.map +1 -0
  582. package/dist/test/unit/account-lib/mpc/util.js +53 -0
  583. package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
  584. package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
  585. package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
  586. package/dist/test/unit/bitgo/defi/defiVault.d.ts +2 -0
  587. package/dist/test/unit/bitgo/defi/defiVault.d.ts.map +1 -0
  588. package/dist/test/unit/bitgo/defi/defiVault.js +863 -0
  589. package/dist/test/unit/bitgo/environment.d.ts +2 -0
  590. package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
  591. package/dist/test/unit/bitgo/environment.js +38 -0
  592. package/dist/test/unit/bitgo/errors.d.ts +2 -0
  593. package/dist/test/unit/bitgo/errors.d.ts.map +1 -0
  594. package/dist/test/unit/bitgo/errors.js +262 -0
  595. package/dist/test/unit/bitgo/keychain/keychains.d.ts +2 -0
  596. package/dist/test/unit/bitgo/keychain/keychains.d.ts.map +1 -0
  597. package/dist/test/unit/bitgo/keychain/keychains.js +426 -0
  598. package/dist/test/unit/bitgo/recovery/initiate.d.ts +2 -0
  599. package/dist/test/unit/bitgo/recovery/initiate.d.ts.map +1 -0
  600. package/dist/test/unit/bitgo/recovery/initiate.js +159 -0
  601. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts +2 -0
  602. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
  603. package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +133 -0
  604. package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +72 -0
  605. package/dist/test/unit/bitgo/safe/recovery.d.ts +2 -0
  606. package/dist/test/unit/bitgo/safe/recovery.d.ts.map +1 -0
  607. package/dist/test/unit/bitgo/safe/recovery.js +313 -0
  608. package/dist/test/unit/bitgo/safe/rootCoin.d.ts +2 -0
  609. package/dist/test/unit/bitgo/safe/rootCoin.d.ts.map +1 -0
  610. package/dist/test/unit/bitgo/safe/rootCoin.js +13 -0
  611. package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
  612. package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
  613. package/dist/test/unit/bitgo/safe/safe.js +585 -0
  614. package/dist/test/unit/bitgo/safe/safeDerivation.d.ts +2 -0
  615. package/dist/test/unit/bitgo/safe/safeDerivation.d.ts.map +1 -0
  616. package/dist/test/unit/bitgo/safe/safeDerivation.js +75 -0
  617. package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
  618. package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
  619. package/dist/test/unit/bitgo/safe/safes.js +376 -0
  620. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
  621. package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
  622. package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
  623. package/dist/test/unit/bitgo/trading/network/network.test.d.ts +2 -0
  624. package/dist/test/unit/bitgo/trading/network/network.test.d.ts.map +1 -0
  625. package/dist/test/unit/bitgo/trading/network/network.test.js +136 -0
  626. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +2 -0
  627. package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +1 -0
  628. package/dist/test/unit/bitgo/trading/tradingAccount.js +192 -0
  629. package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts +2 -0
  630. package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
  631. package/dist/test/unit/bitgo/tss/bitgoPubKeys.js +66 -0
  632. package/dist/test/unit/bitgo/tss/common.d.ts +2 -0
  633. package/dist/test/unit/bitgo/tss/common.d.ts.map +1 -0
  634. package/dist/test/unit/bitgo/tss/common.js +77 -0
  635. package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts +2 -0
  636. package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  637. package/dist/test/unit/bitgo/tss/redpallas/redpallasMPCv2.js +249 -0
  638. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts +2 -0
  639. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
  640. package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +66 -0
  641. package/dist/test/unit/bitgo/utils/messageTypes.d.ts +2 -0
  642. package/dist/test/unit/bitgo/utils/messageTypes.d.ts.map +1 -0
  643. package/dist/test/unit/bitgo/utils/messageTypes.js +64 -0
  644. package/dist/test/unit/bitgo/utils/mpcUtils.unwrap.d.ts +2 -0
  645. package/dist/test/unit/bitgo/utils/mpcUtils.unwrap.d.ts.map +1 -0
  646. package/dist/test/unit/bitgo/utils/mpcUtils.unwrap.js +109 -0
  647. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts +2 -0
  648. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts.map +1 -0
  649. package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.js +106 -0
  650. package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
  651. package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
  652. package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
  653. package/dist/test/unit/bitgo/utils/postWithCodec.d.ts +2 -0
  654. package/dist/test/unit/bitgo/utils/postWithCodec.d.ts.map +1 -0
  655. package/dist/test/unit/bitgo/utils/postWithCodec.js +73 -0
  656. package/dist/test/unit/bitgo/utils/siws.d.ts +2 -0
  657. package/dist/test/unit/bitgo/utils/siws.d.ts.map +1 -0
  658. package/dist/test/unit/bitgo/utils/siws.js +206 -0
  659. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
  660. package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
  661. package/dist/test/unit/bitgo/utils/tss/addressVerification.js +251 -0
  662. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts +2 -0
  663. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -0
  664. package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +348 -0
  665. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts +2 -0
  666. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts.map +1 -0
  667. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.js +94 -0
  668. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +2 -0
  669. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
  670. package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1068 -0
  671. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts +5 -0
  672. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts.map +1 -0
  673. package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.js +36 -0
  674. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts +2 -0
  675. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts.map +1 -0
  676. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.js +158 -0
  677. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +2 -0
  678. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
  679. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +2410 -0
  680. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts +2 -0
  681. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.d.ts.map +1 -0
  682. package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaVrfMPCv2.js +549 -0
  683. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts +2 -0
  684. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts.map +1 -0
  685. package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +376 -0
  686. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts +2 -0
  687. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.d.ts.map +1 -0
  688. package/dist/test/unit/bitgo/utils/tss/keyShareEnvelope.js +83 -0
  689. package/dist/test/unit/bitgo/utils/tss/keyVerification.d.ts +2 -0
  690. package/dist/test/unit/bitgo/utils/tss/keyVerification.d.ts.map +1 -0
  691. package/dist/test/unit/bitgo/utils/tss/keyVerification.js +229 -0
  692. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
  693. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
  694. package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
  695. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
  696. package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
  697. package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +462 -0
  698. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +2 -0
  699. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
  700. package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.js +80 -0
  701. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts +2 -0
  702. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts.map +1 -0
  703. package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.js +279 -0
  704. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts +2 -0
  705. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts.map +1 -0
  706. package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.js +111 -0
  707. package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
  708. package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
  709. package/dist/test/unit/bitgo/utils/txRequest.js +179 -0
  710. package/dist/test/unit/bitgo/utils/wallet.d.ts +2 -0
  711. package/dist/test/unit/bitgo/utils/wallet.d.ts.map +1 -0
  712. package/dist/test/unit/bitgo/utils/wallet.js +55 -0
  713. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
  714. package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
  715. package/dist/test/unit/bitgo/wallet/BuildParams.js +154 -0
  716. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts +2 -0
  717. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.d.ts.map +1 -0
  718. package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +114 -0
  719. package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts +2 -0
  720. package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts.map +1 -0
  721. package/dist/test/unit/bitgo/wallet/getAccountResources.js +133 -0
  722. package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.d.ts +2 -0
  723. package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.d.ts.map +1 -0
  724. package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.js +88 -0
  725. package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts +2 -0
  726. package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts.map +1 -0
  727. package/dist/test/unit/bitgo/wallet/getResourceDelegations.js +118 -0
  728. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
  729. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
  730. package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
  731. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +2 -0
  732. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +1 -0
  733. package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +185 -0
  734. package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts +2 -0
  735. package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts.map +1 -0
  736. package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.js +20 -0
  737. package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts +3 -0
  738. package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts.map +1 -0
  739. package/dist/test/unit/bitgo/wallet/resourceManagement.js +441 -0
  740. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts +5 -0
  741. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts.map +1 -0
  742. package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +671 -0
  743. package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts +9 -0
  744. package/dist/test/unit/bitgo/wallet/safeShareWallet.d.ts.map +1 -0
  745. package/dist/test/unit/bitgo/wallet/safeShareWallet.js +303 -0
  746. package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts +2 -0
  747. package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts.map +1 -0
  748. package/dist/test/unit/bitgo/wallet/tokenApproval.js +210 -0
  749. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
  750. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
  751. package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
  752. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts +2 -0
  753. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts.map +1 -0
  754. package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +69 -0
  755. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
  756. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
  757. package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +320 -0
  758. package/dist/test/unit/bitgo/wallet/walletVerifyKey.d.ts +2 -0
  759. package/dist/test/unit/bitgo/wallet/walletVerifyKey.d.ts.map +1 -0
  760. package/dist/test/unit/bitgo/wallet/walletVerifyKey.js +160 -0
  761. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts +2 -0
  762. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts.map +1 -0
  763. package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +304 -0
  764. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
  765. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
  766. package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
  767. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
  768. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
  769. package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +853 -0
  770. package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts +2 -0
  771. package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts.map +1 -0
  772. package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +150 -0
  773. package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts +2 -0
  774. package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts.map +1 -0
  775. package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +201 -0
  776. package/dist/test/unit/coins/ofc.d.ts +2 -0
  777. package/dist/test/unit/coins/ofc.d.ts.map +1 -0
  778. package/dist/test/unit/coins/ofc.js +124 -0
  779. package/dist/test/unit/lightning.d.ts +2 -0
  780. package/dist/test/unit/lightning.d.ts.map +1 -0
  781. package/dist/test/unit/lightning.js +23 -0
  782. package/dist/test/unit/units.d.ts +2 -0
  783. package/dist/test/unit/units.d.ts.map +1 -0
  784. package/dist/test/unit/units.js +98 -0
  785. package/dist/tsconfig.tsbuildinfo +1 -8340
  786. package/package.json +31 -24
  787. package/.eslintignore +0 -5
  788. package/CHANGELOG.md +0 -662
  789. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -77
  790. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +0 -1
  791. package/dist/src/account-lib/baseCoin/blsKeyPair.js +0 -209
  792. package/dist/src/account-lib/mpc/hdTree.d.ts +0 -31
  793. package/dist/src/account-lib/mpc/hdTree.d.ts.map +0 -1
  794. package/dist/src/account-lib/mpc/hdTree.js +0 -141
  795. package/dist/src/account-lib/mpc/types.d.ts +0 -5
  796. package/dist/src/account-lib/mpc/types.d.ts.map +0 -1
  797. package/dist/src/account-lib/mpc/types.js +0 -3
  798. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +0 -49
  799. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +0 -1
  800. package/dist/src/account-lib/util/ed25519KeyDeriver.js +0 -87
  801. package/dist/src/bitgo/lightning/iLightning.d.ts +0 -186
  802. package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
  803. package/dist/src/bitgo/lightning/iLightning.js +0 -106
  804. package/dist/src/bitgo/lightning/index.d.ts +0 -5
  805. package/dist/src/bitgo/lightning/index.d.ts.map +0 -1
  806. package/dist/src/bitgo/lightning/index.js +0 -17
  807. package/dist/src/bitgo/lightning/lightning.d.ts +0 -25
  808. package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
  809. package/dist/src/bitgo/lightning/lightning.js +0 -111
  810. package/dist/src/bitgo/lightning/lightningUtils.d.ts +0 -46
  811. package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +0 -1
  812. package/dist/src/bitgo/lightning/lightningUtils.js +0 -133
  813. package/dist/src/bitgo/lightning/lnurlCodec.d.ts +0 -3
  814. package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
  815. package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
  816. package/dist/src/bitgo/trading/affirmation.d.ts +0 -35
  817. package/dist/src/bitgo/trading/affirmation.d.ts.map +0 -1
  818. package/dist/src/bitgo/trading/affirmation.js +0 -53
  819. package/dist/src/bitgo/trading/affirmations.d.ts +0 -23
  820. package/dist/src/bitgo/trading/affirmations.d.ts.map +0 -1
  821. package/dist/src/bitgo/trading/affirmations.js +0 -45
  822. package/dist/src/bitgo/trading/iAffirmation.d.ts +0 -15
  823. package/dist/src/bitgo/trading/iAffirmation.d.ts.map +0 -1
  824. package/dist/src/bitgo/trading/iAffirmation.js +0 -13
  825. package/dist/src/bitgo/trading/iAffirmations.d.ts +0 -10
  826. package/dist/src/bitgo/trading/iAffirmations.d.ts.map +0 -1
  827. package/dist/src/bitgo/trading/iAffirmations.js +0 -3
  828. package/dist/src/bitgo/trading/iSettlement.d.ts +0 -25
  829. package/dist/src/bitgo/trading/iSettlement.d.ts.map +0 -1
  830. package/dist/src/bitgo/trading/iSettlement.js +0 -17
  831. package/dist/src/bitgo/trading/iSettlements.d.ts +0 -19
  832. package/dist/src/bitgo/trading/iSettlements.d.ts.map +0 -1
  833. package/dist/src/bitgo/trading/iSettlements.js +0 -3
  834. package/dist/src/bitgo/trading/iTradingPartner.d.ts +0 -14
  835. package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +0 -1
  836. package/dist/src/bitgo/trading/iTradingPartner.js +0 -17
  837. package/dist/src/bitgo/trading/iTradingPartners.d.ts +0 -15
  838. package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +0 -1
  839. package/dist/src/bitgo/trading/iTradingPartners.js +0 -9
  840. package/dist/src/bitgo/trading/lock.d.ts +0 -16
  841. package/dist/src/bitgo/trading/lock.d.ts.map +0 -1
  842. package/dist/src/bitgo/trading/lock.js +0 -12
  843. package/dist/src/bitgo/trading/payload.d.ts +0 -22
  844. package/dist/src/bitgo/trading/payload.d.ts.map +0 -1
  845. package/dist/src/bitgo/trading/payload.js +0 -3
  846. package/dist/src/bitgo/trading/settlement.d.ts +0 -16
  847. package/dist/src/bitgo/trading/settlement.d.ts.map +0 -1
  848. package/dist/src/bitgo/trading/settlement.js +0 -21
  849. package/dist/src/bitgo/trading/settlements.d.ts +0 -32
  850. package/dist/src/bitgo/trading/settlements.d.ts.map +0 -1
  851. package/dist/src/bitgo/trading/settlements.js +0 -61
  852. package/dist/src/bitgo/trading/trade.d.ts +0 -29
  853. package/dist/src/bitgo/trading/trade.d.ts.map +0 -1
  854. package/dist/src/bitgo/trading/trade.js +0 -11
  855. package/dist/src/bitgo/trading/tradingPartner.d.ts +0 -26
  856. package/dist/src/bitgo/trading/tradingPartner.d.ts.map +0 -1
  857. package/dist/src/bitgo/trading/tradingPartner.js +0 -31
  858. package/dist/src/bitgo/trading/tradingPartners.d.ts +0 -24
  859. package/dist/src/bitgo/trading/tradingPartners.d.ts.map +0 -1
  860. package/dist/src/bitgo/trading/tradingPartners.js +0 -32
  861. package/dist/src/bitgo/utils/blsUtils.d.ts +0 -52
  862. package/dist/src/bitgo/utils/blsUtils.d.ts.map +0 -1
  863. package/dist/src/bitgo/utils/blsUtils.js +0 -237
  864. package/dist/src/bitgo/utils/iBlsUtils.d.ts +0 -14
  865. package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +0 -1
  866. package/dist/src/bitgo/utils/iBlsUtils.js +0 -3
  867. package/dist/src/coins/fiateur.d.ts +0 -31
  868. package/dist/src/coins/fiateur.d.ts.map +0 -1
  869. package/dist/src/coins/fiateur.js +0 -57
  870. package/dist/src/coins/fiatgbp.d.ts +0 -31
  871. package/dist/src/coins/fiatgbp.d.ts.map +0 -1
  872. package/dist/src/coins/fiatgbp.js +0 -57
  873. package/dist/src/coins/fiatusd.d.ts +0 -31
  874. package/dist/src/coins/fiatusd.d.ts.map +0 -1
  875. package/dist/src/coins/fiatusd.js +0 -57
  876. package/dist/src/coins/tfiateur.d.ts +0 -11
  877. package/dist/src/coins/tfiateur.d.ts.map +0 -1
  878. package/dist/src/coins/tfiateur.js +0 -17
  879. package/dist/src/coins/tfiatgbp.d.ts +0 -11
  880. package/dist/src/coins/tfiatgbp.d.ts.map +0 -1
  881. package/dist/src/coins/tfiatgbp.js +0 -17
  882. package/dist/src/coins/tfiatusd.d.ts +0 -11
  883. package/dist/src/coins/tfiatusd.d.ts.map +0 -1
  884. package/dist/src/coins/tfiatusd.js +0 -17
  885. package/dist/src/openssl/index.d.ts +0 -2
  886. package/dist/src/openssl/index.d.ts.map +0 -1
  887. package/dist/src/openssl/openssl.d.ts +0 -12
  888. package/dist/src/openssl/openssl.d.ts.map +0 -1
  889. package/dist/src/openssl/openssl.js +0 -48
  890. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  891. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  892. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,18 +15,39 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
37
  };
21
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ const openpgp = __importStar(require("openpgp"));
22
40
  const openpgp_1 = require("openpgp");
41
+ const errors_1 = require("../../errors");
42
+ const keychain_1 = require("../../keychain");
23
43
  const tss_1 = require("../../tss");
24
44
  const mpcUtils_1 = require("../mpcUtils");
25
45
  const _ = __importStar(require("lodash"));
46
+ const util_1 = require("../util");
47
+ const bitgoPubKeys_1 = require("../../tss/bitgoPubKeys");
48
+ const opengpgUtils_1 = require("../opengpgUtils");
49
+ const assert_1 = __importDefault(require("assert"));
50
+ const messageTypes_1 = require("../messageTypes");
26
51
  /**
27
52
  * BaseTssUtil class which different signature schemes have to extend
28
53
  */
@@ -37,6 +62,106 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
37
62
  }
38
63
  return this._wallet;
39
64
  }
65
+ async setBitgoGpgPubKey(bitgo) {
66
+ const { mpcV1, mpcV2, eddsaMpcV2, redpallasMpcV2 } = await (0, opengpgUtils_1.getBitgoGpgPubKey)(bitgo);
67
+ // Do not unset the MPCv1 key if it is already set. This is to avoid unsetting if extra constants api calls fail.
68
+ if (mpcV1 !== undefined) {
69
+ this.bitgoPublicGpgKey = mpcV1;
70
+ }
71
+ // Do not unset the MPCv2 key if it is already set
72
+ if (mpcV2 !== undefined) {
73
+ this.bitgoMPCv2PublicGpgKey = mpcV2;
74
+ }
75
+ // Do not unset the EdDSA MPCv2 key if it is already set
76
+ if (eddsaMpcV2 !== undefined) {
77
+ this.bitgoEddsaMpcv2PublicGpgKey = eddsaMpcV2;
78
+ }
79
+ // Do not unset the RedPallas MPCv2 key if it is already set
80
+ if (redpallasMpcV2 !== undefined) {
81
+ this.bitgoRedpallasMpcv2PublicGpgKey = redpallasMpcV2;
82
+ }
83
+ }
84
+ async pickBitgoPubGpgKeyForSigning(isMpcv2, reqId, enterpriseId, isEddsaMpcv2, isRedpallasMpcv2) {
85
+ let bitgoGpgPubKey;
86
+ try {
87
+ const bitgoKeyChain = await this.baseCoin.keychains().get({ id: this.wallet.keyIds()[keychain_1.KeyIndices.BITGO], reqId });
88
+ if (!bitgoKeyChain || !bitgoKeyChain.hsmType) {
89
+ throw new Error('Missing Bitgo GPG Pub Key Type.');
90
+ }
91
+ bitgoGpgPubKey = await openpgp.readKey({
92
+ armoredKey: (0, bitgoPubKeys_1.getBitgoMpcGpgPubKey)(this.bitgo.getEnv(), bitgoKeyChain.hsmType === 'nitro' ? 'nitro' : 'onprem', isRedpallasMpcv2 ? 'redpallasMpcv2' : isEddsaMpcv2 ? 'eddsaMpcv2' : isMpcv2 ? 'mpcv2' : 'mpcv1'),
93
+ });
94
+ }
95
+ catch (e) {
96
+ if (!(0, bitgoPubKeys_1.envRequiresBitgoPubGpgKeyConfig)(this.bitgo.getEnv())) {
97
+ console.warn(`Unable to get BitGo GPG key based on key data with error: ${e}. Fetching BitGo GPG key based on feature flags.`);
98
+ // First try to get the key based on feature flags, if that fails, fallback to the default key from constants api.
99
+ bitgoGpgPubKey = await this.getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId, isMpcv2, reqId)
100
+ .then(async ({ mpcv2PublicKey, eddsaMpcv2PublicKey, redpallasMpcv2PublicKey }) => {
101
+ if (isRedpallasMpcv2) {
102
+ return redpallasMpcv2PublicKey ?? (await this.getBitgoRedpallasMpcv2PublicGpgKey());
103
+ }
104
+ if (isEddsaMpcv2) {
105
+ return eddsaMpcv2PublicKey ?? (await this.getBitgoEddsaMpcv2PublicGpgKey());
106
+ }
107
+ return (mpcv2PublicKey ?? (isMpcv2 ? await this.getBitgoMpcv2PublicGpgKey() : await this.getBitgoPublicGpgKey()));
108
+ })
109
+ .catch(async () => {
110
+ if (isRedpallasMpcv2) {
111
+ return this.getBitgoRedpallasMpcv2PublicGpgKey();
112
+ }
113
+ if (isEddsaMpcv2) {
114
+ return this.getBitgoEddsaMpcv2PublicGpgKey();
115
+ }
116
+ return isMpcv2 ? await this.getBitgoMpcv2PublicGpgKey() : await this.getBitgoPublicGpgKey();
117
+ });
118
+ }
119
+ else {
120
+ throw new Error(`Environment "${this.bitgo.getEnv()}" requires a BitGo GPG Pub Key Config in BitGoJS for TSS. Error thrown while getting the key from config: ${e}`);
121
+ }
122
+ }
123
+ return bitgoGpgPubKey;
124
+ }
125
+ async getBitgoPublicGpgKey() {
126
+ if (!this.bitgoPublicGpgKey) {
127
+ // retry getting bitgo's gpg key
128
+ await this.setBitgoGpgPubKey(this.bitgo);
129
+ if (!this.bitgoPublicGpgKey) {
130
+ throw new Error("Failed to get Bitgo's gpg key");
131
+ }
132
+ }
133
+ return this.bitgoPublicGpgKey;
134
+ }
135
+ async getBitgoMpcv2PublicGpgKey() {
136
+ if (!this.bitgoMPCv2PublicGpgKey) {
137
+ // retry getting bitgo's gpg key
138
+ await this.setBitgoGpgPubKey(this.bitgo);
139
+ if (!this.bitgoMPCv2PublicGpgKey) {
140
+ throw new Error("Failed to get Bitgo's gpg key");
141
+ }
142
+ }
143
+ return this.bitgoMPCv2PublicGpgKey;
144
+ }
145
+ async getBitgoEddsaMpcv2PublicGpgKey() {
146
+ if (!this.bitgoEddsaMpcv2PublicGpgKey) {
147
+ // retry getting bitgo's gpg key
148
+ await this.setBitgoGpgPubKey(this.bitgo);
149
+ if (!this.bitgoEddsaMpcv2PublicGpgKey) {
150
+ throw new Error("Failed to get Bitgo's EdDSA MPCv2 gpg key");
151
+ }
152
+ }
153
+ return this.bitgoEddsaMpcv2PublicGpgKey;
154
+ }
155
+ async getBitgoRedpallasMpcv2PublicGpgKey() {
156
+ if (!this.bitgoRedpallasMpcv2PublicGpgKey) {
157
+ // retry getting bitgo's gpg key
158
+ await this.setBitgoGpgPubKey(this.bitgo);
159
+ if (!this.bitgoRedpallasMpcv2PublicGpgKey) {
160
+ throw new Error("Failed to get Bitgo's RedPallas MPCv2 gpg key");
161
+ }
162
+ }
163
+ return this.bitgoRedpallasMpcv2PublicGpgKey;
164
+ }
40
165
  async createBitgoHeldBackupKeyShare(userGpgKey, enterprise) {
41
166
  const keyResponse = await this.bitgo
42
167
  .post(this.baseCoin.url('/krs/backupkeys'))
@@ -74,6 +199,16 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
74
199
  signTxRequestForMessage(params) {
75
200
  throw new Error('Method not implemented.');
76
201
  }
202
+ supportsVerifyKey() {
203
+ return false;
204
+ }
205
+ async verifyKey(params) {
206
+ // unsupported wallet types are rejected by the `supportsVerifyKey()` gate in Wallet.verifyKey,
207
+ // which surfaces the user-facing message; reaching this stub means a direct caller invoked
208
+ // verifyKey on an algorithm that does not implement it.
209
+ // async so the rejection, rather than a sync throw, reaches callers of a Promise-typed method.
210
+ throw new errors_1.MethodNotImplementedError();
211
+ }
77
212
  /**
78
213
  * Signs a transaction using TSS for EdDSA and through utilization of custom share generators
79
214
  *
@@ -82,15 +217,61 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
82
217
  * @param {CustomGShareGeneratingFunction} externalSignerGShareGenerator a function that creates G shares in the EdDSA TSS flow
83
218
  * @returns {Promise<TxRequest>} - a signed tx request
84
219
  */
85
- signUsingExternalSigner(txRequest, externalSignerRShareGenerator, externalSignerGShareGenerator) {
220
+ signEddsaTssUsingExternalSigner(txRequest, externalSignerCommitmentGenerator, externalSignerRShareGenerator, externalSignerGShareGenerator) {
221
+ throw new Error('Method not implemented.');
222
+ }
223
+ /**
224
+ * Signs a transaction using TSS for ECDSA and through utilization of custom share generators
225
+ *
226
+ * @param {params: TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
227
+ * @param {RequestType} requestType - the type of the request to sign (transaction or message).
228
+ * @param {CustomPaillierModulusGetterFunction} externalSignerPaillierModulusGetter a function that creates Paillier Modulus shares in the ECDSA TSS flow.
229
+ * @param {CustomKShareGeneratingFunction} externalSignerKShareGenerator a function that creates K shares in the ECDSA TSS flow.
230
+ * @param {CustomMuDeltaShareGeneratingFunction} externalSignerMuDeltaShareGenerator a function that creates Mu and Delta shares in the ECDSA TSS flow.
231
+ * @param {CustomSShareGeneratingFunction} externalSignerSShareGenerator a function that creates S shares in the ECDSA TSS flow.
232
+ */
233
+ signEcdsaTssUsingExternalSigner(params, requestType, externalSignerPaillierModulusGetter, externalSignerKShareGenerator, externalSignerMuDeltaShareGenerator, externalSignerSShareGenerator) {
234
+ throw new Error('Method not implemented.');
235
+ }
236
+ /**
237
+ * Signs a transaction using TSS MPCv2 for ECDSA and through utilization of custom share generators
238
+ *
239
+ * @param {TSSParams | TSSParamsForMessage} params - params object that represents parameters to sign a transaction or a message.
240
+ * @param {CustomMPCv2SigningRound1GeneratingFunction} externalSignerMPCv2SigningRound1Generator - a function that creates MPCv2 Round 1 shares in the ECDSA TSS MPCv2 flow.
241
+ * @param {CustomMPCv2SigningRound2GeneratingFunction} externalSignerMPCv2SigningRound2Generator - a function that creates MPCv2 Round 2 shares in the ECDSA TSS MPCv2 flow.
242
+ * @param {CustomMPCv2SigningRound3GeneratingFunction} externalSignerMPCv2SigningRound3Generator - a function that creates MPCv2 Round 3 shares in the ECDSA TSS MPCv2 flow.
243
+ * @param {RequestType} requestType - the type of the request to sign (transaction or message).
244
+ * @returns {Promise<TxRequest>} - a signed tx request
245
+ */
246
+ signEcdsaMPCv2TssUsingExternalSigner(params, externalSignerMPCv2SigningRound1Generator, externalSignerMPCv2SigningRound2Generator, externalSignerMPCv2SigningRound3Generator, requestType) {
247
+ throw new Error('Method not implemented.');
248
+ }
249
+ signEddsaMPCv2TssUsingExternalSigner(params, externalSignerEddsaMPCv2SigningRound1Generator, externalSignerEddsaMPCv2SigningRound2Generator, externalSignerEddsaMPCv2SigningRound3Generator, requestType) {
250
+ throw new Error('Method not implemented.');
251
+ }
252
+ /**
253
+ * Create an Commitment (User to BitGo) share from an unsigned transaction and private user signing material
254
+ * EDDSA only
255
+ *
256
+ * @param {Object} params - params object
257
+ * @param {TxRequest} params.txRequest - transaction request with unsigned transaction
258
+ * @param {string} params.prv - user signing material
259
+ * @param {string} params.walletPassphrase - wallet passphrase
260
+ *
261
+ * @returns {Promise<{ userToBitgoCommitment: CommitmentShareRecor, encryptedSignerShare: EncryptedSignerShareRecord }>} - Commitment Share and the Encrypted Signer Share to BitGo
262
+ */
263
+ createCommitmentShareFromTxRequest(params) {
86
264
  throw new Error('Method not implemented.');
87
265
  }
88
266
  /**
89
267
  * Create an R (User to BitGo) share from an unsigned transaction and private user signing material
90
268
  *
91
- * @param {TxRequest} txRequest - transaction request with unsigned transaction
92
- * @param {string} prv - user signing material
93
- * @returns {Promise<{ rShare: SignShare; signingKeyYShare: YShare }>} - R Share and the Signing Key's Y share to BitGo
269
+ * @param {Object} params - params object
270
+ * @param {TxRequest} params.txRequest - transaction request with unsigned transaction
271
+ * @param {string} params.prv - user signing material
272
+ * @param {string} [params.walletPassphrase] - wallet passphrase
273
+ * @param {EncryptedSignerShareRecord} [params.encryptedUserToBitgoRShare] - encrypted user to bitgo R share generated in the commitment phase
274
+ * @returns {Promise<{ rShare: SignShare }>} - R Share to BitGo
94
275
  */
95
276
  createRShareFromTxRequest(params) {
96
277
  throw new Error('Method not implemented.');
@@ -98,10 +279,12 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
98
279
  /**
99
280
  * Create a G (User to BitGo) share from an unsigned transaction and private user signing material
100
281
  *
101
- * @param {TxRequest} txRequest - transaction request with unsigned transaction
102
- * @param {string} prv - user signing material
103
- * @param {SignatureShareRecord} bitgoToUserRShare - BitGo to User R Share
104
- * @param {SignShare} userToBitgoRShare - User to BitGo R Share
282
+ * @param {Object} params - params object
283
+ * @param {TxRequest} params.txRequest - transaction request with unsigned transaction
284
+ * @param {string} params.prv - user signing material
285
+ * @param {SignatureShareRecord} params.bitgoToUserRShare - BitGo to User R Share
286
+ * @param {SignShare} params.userToBitgoRShare - User to BitGo R Share
287
+ * @param {CommitmentShareRecord} params.bitgoToUserCommitment - BitGo to User Commitment
105
288
  * @returns {Promise<GShare>} - GShare from User to BitGo
106
289
  */
107
290
  createGShareFromTxRequest(params) {
@@ -124,6 +307,8 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
124
307
  apiVersion: apiVersion,
125
308
  preview,
126
309
  };
310
+ const reqTracer = params.reqId || new util_1.RequestTracer();
311
+ this.bitgo.setRequestTracer(reqTracer);
127
312
  const unsignedTx = (await this.bitgo
128
313
  .post(this.bitgo.url('/wallet/' + this.wallet.id() + '/txrequests', 2))
129
314
  .send(whitelistedParams)
@@ -132,24 +317,52 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
132
317
  }
133
318
  /**
134
319
  * Create a tx request from params for message signing
320
+ * @deprecated Use createSignMessageRequest instead
135
321
  *
136
322
  * @param params
137
323
  * @param apiVersion
138
324
  * @param preview
139
325
  */
140
326
  async createTxRequestWithIntentForMessageSigning(params, apiVersion = 'full', preview) {
141
- var _a, _b;
142
327
  const intentOptions = {
143
328
  custodianMessageId: params.custodianMessageId,
144
329
  intentType: params.intentType,
145
330
  sequenceId: params.sequenceId,
146
331
  comment: params.comment,
147
- memo: (_a = params.memo) === null || _a === void 0 ? void 0 : _a.value,
332
+ memo: params.memo?.value,
333
+ isTss: params.isTss,
334
+ messageRaw: params.messageRaw,
335
+ messageEncoded: params.messageEncoded ?? '',
336
+ };
337
+ return this.createTxRequestBase(intentOptions, apiVersion, preview, params.reqId);
338
+ }
339
+ /**
340
+ * Create a sign message request
341
+ *
342
+ * @param params - the parameters for the sign message request
343
+ * @param apiVersion - the API version to use, defaults to 'full'
344
+ */
345
+ async buildSignMessageRequest(params, apiVersion = 'full') {
346
+ (0, assert_1.default)(params.intentType === 'signMessage', 'Intent type must be signMessage for createMsgRequestWithSignMessageIntent');
347
+ this.baseCoin.validateSignableMessage?.({
348
+ messageRaw: params.messageRaw,
349
+ messageStandardType: params.messageStandardType,
350
+ signerAddress: params.signerAddress,
351
+ });
352
+ const intent = {
353
+ custodianMessageId: params.custodianMessageId,
354
+ intentType: params.intentType,
355
+ sequenceId: params.sequenceId,
356
+ comment: params.comment,
357
+ memo: params.memo?.value,
148
358
  isTss: params.isTss,
149
359
  messageRaw: params.messageRaw,
150
- messageEncoded: (_b = params.messageEncoded) !== null && _b !== void 0 ? _b : '',
360
+ messageStandardType: params.messageStandardType ?? messageTypes_1.MessageStandardType.UNKNOWN,
361
+ messageEncoded: params.messageEncoded ?? '',
362
+ signerAddress: params.signerAddress,
363
+ preparedTransaction: params.preparedTransaction,
151
364
  };
152
- return this.createTxRequestBase(intentOptions, apiVersion, preview);
365
+ return this.buildSignMessageRequestBase(intent, apiVersion, params.reqId);
153
366
  }
154
367
  /**
155
368
  * Create a tx request from params for type data signing
@@ -159,25 +372,26 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
159
372
  * @param preview
160
373
  */
161
374
  async createTxRequestWithIntentForTypedDataSigning(params, apiVersion = 'full', preview) {
162
- var _a, _b;
163
375
  const intentOptions = {
164
376
  custodianMessageId: params.custodianMessageId,
165
377
  intentType: params.intentType,
166
378
  sequenceId: params.sequenceId,
167
379
  comment: params.comment,
168
- memo: (_a = params.memo) === null || _a === void 0 ? void 0 : _a.value,
380
+ memo: params.memo?.value,
169
381
  isTss: params.isTss,
170
382
  messageRaw: params.typedDataRaw,
171
- messageEncoded: (_b = params.typedDataEncoded) !== null && _b !== void 0 ? _b : '',
383
+ messageEncoded: params.typedDataEncoded ?? '',
172
384
  };
173
- return this.createTxRequestBase(intentOptions, apiVersion, preview);
385
+ return this.createTxRequestBase(intentOptions, apiVersion, preview, params.reqId);
174
386
  }
175
387
  /**
176
388
  * Calls Bitgo API to create tx request.
177
389
  *
178
390
  * @private
179
391
  */
180
- async createTxRequestBase(intentOptions, apiVersion, preview) {
392
+ async createTxRequestBase(intentOptions, apiVersion, preview, reqId) {
393
+ // TODO(WCN-541): add optional attestation pass-through for MPC /txrequests (deferred until
394
+ // multisig attestation, WCN-539, is verified end-to-end on staging).
181
395
  const whitelistedParams = {
182
396
  intent: {
183
397
  ...intentOptions,
@@ -185,18 +399,42 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
185
399
  apiVersion,
186
400
  preview,
187
401
  };
402
+ const reqTracer = reqId || new util_1.RequestTracer();
403
+ this.bitgo.setRequestTracer(reqTracer);
188
404
  return this.bitgo
189
405
  .post(this.bitgo.url(`/wallet/${this.wallet.id()}/txrequests`, 2))
190
406
  .send(whitelistedParams)
191
407
  .result();
192
408
  }
409
+ /**
410
+ * Calls Bitgo API to create msg request.
411
+ *
412
+ * @private
413
+ */
414
+ async buildSignMessageRequestBase(intent, apiVersion, reqId) {
415
+ const whitelistedParams = {
416
+ intent: {
417
+ ...intent,
418
+ },
419
+ apiVersion,
420
+ };
421
+ const reqTracer = reqId || new util_1.RequestTracer();
422
+ this.bitgo.setRequestTracer(reqTracer);
423
+ return this.bitgo
424
+ .post(this.bitgo.url(`/wallet/${this.wallet.id()}/msgrequests`, 2))
425
+ .send(whitelistedParams)
426
+ .result();
427
+ }
193
428
  /**
194
429
  * Call delete signature shares for a txRequest, the endpoint delete the signatures and return them
195
430
  *
196
431
  * @param {string} txRequestId tx id reference to delete signature shares
432
+ * @param {IRequestTracer} reqId - the request tracer request id
197
433
  * @returns {SignatureShareRecord[]}
198
434
  */
199
- async deleteSignatureShares(txRequestId) {
435
+ async deleteSignatureShares(txRequestId, reqId) {
436
+ const reqTracer = reqId || new util_1.RequestTracer();
437
+ this.bitgo.setRequestTracer(reqTracer);
200
438
  return this.bitgo
201
439
  .del(this.bitgo.url(`/wallet/${this.wallet.id()}/txrequests/${txRequestId}/signatureshares`, 2))
202
440
  .send()
@@ -206,10 +444,13 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
206
444
  * Initialize the send procedure once Bitgo has the User To Bitgo GShare
207
445
  *
208
446
  * @param {String} txRequestId - the txRequest Id
447
+ * @param {IRequestTracer} reqId - the request tracer request id
209
448
  * @returns {Promise<any>}
210
449
  */
211
450
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
212
- async sendTxRequest(txRequestId) {
451
+ async sendTxRequest(txRequestId, reqId) {
452
+ const reqTracer = reqId || new util_1.RequestTracer();
453
+ this.bitgo.setRequestTracer(reqTracer);
213
454
  return this.bitgo
214
455
  .post(this.baseCoin.url('/wallet/' + this.wallet.id() + '/tx/send'))
215
456
  .send({ txRequestId })
@@ -226,41 +467,138 @@ class BaseTssUtils extends mpcUtils_1.MpcUtils {
226
467
  * @returns {Promise<any>}
227
468
  */
228
469
  async recreateTxRequest(txRequestId, decryptedPrv, reqId) {
229
- await this.deleteSignatureShares(txRequestId);
470
+ await this.deleteSignatureShares(txRequestId, reqId);
230
471
  // after delete signatures shares get the tx without them
231
- const txRequest = await tss_1.getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
472
+ const txRequest = await this.getTxRequest(txRequestId, reqId);
232
473
  return await this.signTxRequest({ txRequest, prv: decryptedPrv, reqId });
233
474
  }
234
475
  /**
235
476
  * Gets the latest Tx Request by id
236
477
  *
237
478
  * @param {String} txRequestId - the txRequest Id
479
+ * @param {IRequestTracer} reqId - request tracer request id
238
480
  * @returns {Promise<TxRequest>}
239
481
  */
240
- async getTxRequest(txRequestId) {
241
- return tss_1.getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
482
+ async getTxRequest(txRequestId, reqId) {
483
+ return (0, tss_1.getTxRequest)(this.bitgo, this.wallet.id(), txRequestId, reqId);
242
484
  }
243
485
  /**
244
- * Checks whether the third party backup provider is valid/supported
245
- * @param backupProvider - the backup provider client selected
246
- */
247
- isValidThirdPartyBackupProvider(backupProvider) {
248
- // As of now, BitGo is the only supported KRS provider for TSS
249
- return !!(backupProvider && backupProvider === 'BitGoTrustAsKrs');
250
- }
251
- /**
252
- * It gets the appropriate BitGo GPG public key for key creation based on a
486
+ * It gets the appropriate BitGo GPG public keys for key creation based on a
253
487
  * combination of coin and the feature flags on the user and their enterprise if set.
488
+ * Returns the default MPCv2 key, the EdDSA-specific MPCv2 key, and the RedPallas-specific
489
+ * MPCv2 key (each if present).
254
490
  * @param enterpriseId - enterprise under which user wants to create the wallet
491
+ * @param isMPCv2 - true to get the MPCv2 GPG public key, defaults to false
492
+ * @param reqId - request tracer request id
255
493
  */
256
- async getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId) {
494
+ async getBitgoGpgPubkeyBasedOnFeatureFlags(enterpriseId, isMPCv2 = false, reqId) {
495
+ const reqTracer = reqId || new util_1.RequestTracer();
496
+ this.bitgo.setRequestTracer(reqTracer);
257
497
  const response = await this.bitgo
258
498
  .get(this.baseCoin.url('/tss/pubkey'))
259
499
  .query({ enterpriseId })
500
+ .retry(3)
260
501
  .result();
261
- const bitgoPublicKeyStr = response.publicKey;
262
- return openpgp_1.readKey({ armoredKey: bitgoPublicKeyStr });
502
+ const mpcv2PublicKey = await (0, openpgp_1.readKey)({
503
+ armoredKey: (isMPCv2 ? response.mpcv2PublicKey : response.publicKey),
504
+ });
505
+ const eddsaMpcv2PublicKey = response.eddsaMpcv2PublicKey
506
+ ? await (0, openpgp_1.readKey)({ armoredKey: response.eddsaMpcv2PublicKey })
507
+ : undefined;
508
+ const redpallasMpcv2PublicKey = response.redpallasMpcv2PublicKey
509
+ ? await (0, openpgp_1.readKey)({ armoredKey: response.redpallasMpcv2PublicKey })
510
+ : undefined;
511
+ return { mpcv2PublicKey, eddsaMpcv2PublicKey, redpallasMpcv2PublicKey };
512
+ }
513
+ /**
514
+ * Returns supported TxRequest versions for this wallet
515
+ * @deprecated Whenever needed, use apiVersion 'full' for TSS wallets
516
+ */
517
+ supportedTxRequestVersions() {
518
+ if (!this._wallet || this._wallet.type() === 'trading' || this._wallet.multisigType() !== 'tss') {
519
+ return [];
520
+ }
521
+ else if (this._wallet.baseCoin.getMPCAlgorithm() === 'ecdsa') {
522
+ return ['full'];
523
+ }
524
+ else if (this._wallet.baseCoin.getMPCAlgorithm() === 'eddsa' && this._wallet.type() === 'hot') {
525
+ if (this._wallet.multisigTypeVersion() === 'MPCv2') {
526
+ return ['full'];
527
+ }
528
+ return ['lite', 'full'];
529
+ }
530
+ else {
531
+ return ['full'];
532
+ }
533
+ }
534
+ /**
535
+ * Returns true if the txRequest is using apiVersion == full and is pending approval
536
+ * @param txRequest
537
+ * @returns boolean
538
+ */
539
+ isPendingApprovalTxRequestFull(txRequest) {
540
+ const { apiVersion, state } = txRequest;
541
+ return apiVersion === 'full' && 'pendingApproval' === state;
542
+ }
543
+ /**
544
+ * Get the signable hex, derivation path, and serialized tx hex from a full single-transaction request.
545
+ * @param {TxRequest} txRequest - the transaction request object
546
+ * @returns {{ signableHex: string; derivationPath: string; serializedTxHex: string | undefined }} - the signable hex, derivation path, and serialized tx hex
547
+ */
548
+ getSignableHexAndDerivationPath(txRequest, missingTransactionsMessage = 'createOfflineShare requires exactly one transaction in txRequest') {
549
+ (0, assert_1.default)(txRequest.transactions && txRequest.transactions.length === 1, missingTransactionsMessage);
550
+ const unsignedTx = txRequest.transactions[0].unsignedTx;
551
+ (0, assert_1.default)(unsignedTx, 'Missing unsignedTx in transactions');
552
+ (0, assert_1.default)(unsignedTx.signableHex, 'Missing signableHex in unsignedTx');
553
+ (0, assert_1.default)(unsignedTx.derivationPath, 'Missing derivationPath in unsignedTx');
554
+ return {
555
+ signableHex: unsignedTx.signableHex,
556
+ derivationPath: unsignedTx.derivationPath,
557
+ serializedTxHex: unsignedTx.serializedTxHex,
558
+ };
559
+ }
560
+ /**
561
+ * Gets the BitGo and user GPG keys from the BitGo public GPG key and the encrypted user GPG private key.
562
+ * @param {string} bitgoPublicGpgKey - the BitGo public GPG key
563
+ * @param {string} encryptedUserGpgPrvKey - the encrypted user GPG private key
564
+ * @param {string} walletPassphrase - the wallet passphrase
565
+ * @param {string} adata - the additional data to validate the GPG keys
566
+ * @param {string} userGpgKeyDomainSeparator - the domain separator expected in the encrypted GPG key adata
567
+ * @returns {Promise<{ bitgoGpgKey: openpgp.Key; userGpgPrvKey: openpgp.PrivateKey }>} - the BitGo and user GPG keys
568
+ */
569
+ async getBitgoAndUserGpgKeys(bitgoPublicGpgKey, encryptedUserGpgPrvKey, walletPassphrase, adata, userGpgKeyDomainSeparator) {
570
+ const bitgoGpgKey = await openpgp.readKey({ armoredKey: bitgoPublicGpgKey });
571
+ const decryptedGpgPrvKey = await this.bitgo.decrypt({
572
+ input: encryptedUserGpgPrvKey,
573
+ password: walletPassphrase,
574
+ });
575
+ if (adata) {
576
+ this.validateAdata(adata, encryptedUserGpgPrvKey, userGpgKeyDomainSeparator);
577
+ }
578
+ const userGpgPrvKey = await openpgp.readPrivateKey({ armoredKey: decryptedGpgPrvKey });
579
+ return { bitgoGpgKey, userGpgPrvKey };
580
+ }
581
+ /**
582
+ * Validates encryption additional authenticated data against the ciphertext envelope.
583
+ * @param adata string
584
+ * @param cyphertext string
585
+ * @param roundDomainSeparator string
586
+ * @throws {Error} if the adata or cyphertext is invalid
587
+ */
588
+ validateAdata(adata, cyphertext, roundDomainSeparator) {
589
+ let cypherJson;
590
+ try {
591
+ cypherJson = JSON.parse(cyphertext);
592
+ }
593
+ catch (e) {
594
+ throw new Error('Failed to parse cyphertext to JSON, got: ' + cyphertext);
595
+ }
596
+ // using decodeURIComponent to handle special characters
597
+ if (decodeURIComponent(cypherJson.adata) !== decodeURIComponent(`${roundDomainSeparator}:${adata}`) &&
598
+ decodeURIComponent(cypherJson.adata) !== decodeURIComponent(adata)) {
599
+ throw new Error('Adata does not match cyphertext adata');
600
+ }
263
601
  }
264
602
  }
265
603
  exports.default = BaseTssUtils;
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EscUNBQTBEO0FBSTFELG1DQUF5QztBQUV6QywwQ0FBdUM7QUFDdkMsMENBQTRCO0FBcUI1Qjs7R0FFRztBQUNILE1BQXFCLFlBQXVCLFNBQVEsbUJBQVE7SUFHMUQsWUFBWSxLQUFnQixFQUFFLFFBQW1CLEVBQUUsTUFBZ0I7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyw2QkFBNkIsQ0FDakMsVUFBcUMsRUFDckMsVUFBOEI7UUFFOUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSzthQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUMxQyxJQUFJLENBQUM7WUFDSixVQUFVO1lBQ1YsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLFNBQVM7U0FDdkMsQ0FBQzthQUNELE1BQU0sRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTztZQUNMLEVBQUUs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M0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFtQjtRQUNwQyxPQUFPLGtCQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCwrQkFBK0IsQ0FDN0IsY0FBbUQ7UUFFbkQsOERBQThEO1FBQzlELE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLGNBQWMsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLFlBQWdDO1FBQ2hGLE1BQU0sUUFBUSxHQUFzQixNQUFNLElBQUksQ0FBQyxLQUFLO2FBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNyQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQzthQUN2QixNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQW1CLENBQUM7UUFDdkQsT0FBTyxpQkFBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFyVEQsK0JBcVRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xuaW1wb3J0IHsgS2V5LCByZWFkS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtleWNoYWluIH0gZnJvbSAnLi4vLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZ2V0VHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHNzJztcbmltcG9ydCB7IElXYWxsZXQsIEJhY2t1cFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vd2FsbGV0JztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi4vbXBjVXRpbHMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlLFxuICBDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgSVRzc1V0aWxzLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICBUU1NQYXJhbXMsXG4gIFR4UmVxdWVzdCxcbiAgVHhSZXF1ZXN0VmVyc2lvbixcbiAgQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgUG9wdWxhdGVkSW50ZW50Rm9yTWVzc2FnZVNpZ25pbmcsXG4gIEludGVudE9wdGlvbnNGb3JUeXBlZERhdGEsXG4gIFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcsXG4gIENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlLFxufSBmcm9tICcuL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSwgWVNoYXJlIH0gZnJvbSAnLi4vLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5cbi8qKlxuICogQmFzZVRzc1V0aWwgY2xhc3Mgd2hpY2ggZGlmZmVyZW50IHNpZ25hdHVyZSBzY2hlbWVzIGhhdmUgdG8gZXh0ZW5kXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VUc3NVdGlsczxLZXlTaGFyZT4gZXh0ZW5kcyBNcGNVdGlscyBpbXBsZW1lbnRzIElUc3NVdGlsczxLZXlTaGFyZT4ge1xuICBwcml2YXRlIF93YWxsZXQ/OiBJV2FsbGV0O1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4sIHdhbGxldD86IElXYWxsZXQpIHtcbiAgICBzdXBlcihiaXRnbywgYmFzZUNvaW4pO1xuICAgIHRoaXMuX3dhbGxldCA9IHdhbGxldDtcbiAgfVxuXG4gIGdldCB3YWxsZXQoKTogSVdhbGxldCB7XG4gICAgaWYgKF8uaXNOaWwodGhpcy5fd2FsbGV0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYWxsZXQgbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dhbGxldDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUJpdGdvSGVsZEJhY2t1cEtleVNoYXJlKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgZW50ZXJwcmlzZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8Qml0Z29IZWxkQmFja3VwS2V5U2hhcmU+IHtcbiAgICBjb25zdCBrZXlSZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcva3JzL2JhY2t1cGtleXMnKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgZW50ZXJwcmlzZSxcbiAgICAgICAgdXNlckdQR1B1YmxpY0tleTogdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpO1xuICAgIGlmICgha2V5UmVzcG9uc2UgfHwgIWtleVJlc3BvbnNlLmtleVNoYXJlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IGJhY2t1cCBzaGFyZXMgZnJvbSBCaXRHby4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBrZXlSZXNwb25zZS5pZCxcbiAgICAgIGtleVNoYXJlczoga2V5UmVzcG9uc2Uua2V5U2hhcmVzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZmluYWxpemVCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZShcbiAgICBrZXlJZDogc3RyaW5nLFxuICAgIGNvbW1vbktleWNoYWluOiBzdHJpbmcsXG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZSxcbiAgICBiaXRnb0tleWNoYWluOiBLZXljaGFpbixcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIGJhY2t1cEdwZ0tleTogS2V5XG4gICk6IFByb21pc2U8Qml0Z29IZWxkQmFja3VwS2V5U2hhcmU+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVVc2VyS2V5Y2hhaW4ocGFyYW1zOiBDcmVhdGVLZXljaGFpblBhcmFtc0Jhc2UpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlQmFja3VwS2V5Y2hhaW4ocGFyYW1zOiBDcmVhdGVLZXljaGFpblBhcmFtc0Jhc2UpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlQml0Z29LZXljaGFpbihwYXJhbXM6IENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNUaGlyZFBhcnR5QmFja3VwPzogYm9vbGVhbjtcbiAgICBiYWNrdXBQcm92aWRlcj86IEJhY2t1cFByb3ZpZGVyO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgc2lnblR4UmVxdWVzdChwYXJhbXM6IFRTU1BhcmFtcyk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgc2lnblR4UmVxdWVzdEZvck1lc3NhZ2UocGFyYW1zOiBUU1NQYXJhbXMpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBhIHRyYW5zYWN0aW9uIHVzaW5nIFRTUyBmb3IgRWREU0EgYW5kIHRocm91Z2ggdXRpbGl6YXRpb24gb2YgY3VzdG9tIHNoYXJlIGdlbmVyYXRvcnNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBUeFJlcXVlc3R9IHR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0N1c3RvbVJTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJSU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgUiBzaGFyZXMgaW4gdGhlIEVkRFNBIFRTUyBmbG93XG4gICAqIEBwYXJhbSB7Q3VzdG9tR1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lckdTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBHIHNoYXJlcyBpbiB0aGUgRWREU0EgVFNTIGZsb3dcbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gLSBhIHNpZ25lZCB0eCByZXF1ZXN0XG4gICAqL1xuICBzaWduVXNpbmdFeHRlcm5hbFNpZ25lcihcbiAgICB0eFJlcXVlc3Q6IHN0cmluZyB8IFR4UmVxdWVzdCxcbiAgICBleHRlcm5hbFNpZ25lclJTaGFyZUdlbmVyYXRvcjogQ3VzdG9tUlNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyR1NoYXJlR2VuZXJhdG9yOiBDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb25cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIFIgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSB0eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IHdpdGggdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IHJTaGFyZTogU2lnblNoYXJlOyBzaWduaW5nS2V5WVNoYXJlOiBZU2hhcmUgfT59IC0gUiBTaGFyZSBhbmQgdGhlIFNpZ25pbmcgS2V5J3MgWSBzaGFyZSB0byBCaXRHb1xuICAgKi9cbiAgY3JlYXRlUlNoYXJlRnJvbVR4UmVxdWVzdChwYXJhbXM6IHtcbiAgICB0eFJlcXVlc3Q6IFR4UmVxdWVzdDtcbiAgICBwcnY6IHN0cmluZztcbiAgfSk6IFByb21pc2U8eyByU2hhcmU6IFNpZ25TaGFyZTsgc2lnbmluZ0tleVlTaGFyZTogWVNoYXJlIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRyAoVXNlciB0byBCaXRHbykgc2hhcmUgZnJvbSBhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgcHJpdmF0ZSB1c2VyIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICpcbiAgICogQHBhcmFtIHtUeFJlcXVlc3R9IHR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEBwYXJhbSB7U2lnbmF0dXJlU2hhcmVSZWNvcmR9IGJpdGdvVG9Vc2VyUlNoYXJlIC0gQml0R28gdG8gVXNlciBSIFNoYXJlXG4gICAqIEBwYXJhbSB7U2lnblNoYXJlfSB1c2VyVG9CaXRnb1JTaGFyZSAtIFVzZXIgdG8gQml0R28gUiBTaGFyZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxHU2hhcmU+fSAtIEdTaGFyZSBmcm9tIFVzZXIgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZUdTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgYml0Z29Ub1VzZXJSU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICAgIHVzZXJUb0JpdGdvUlNoYXJlOiBTaWduU2hhcmU7XG4gIH0pOiBQcm9taXNlPEdTaGFyZT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSB0eCByZXF1ZXN0IGZyb20gcGFyYW1zIGFuZCB2ZXJpZnkgaXRcbiAgICpcbiAgICogQHBhcmFtIHtQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnN9IHBhcmFtcyAtIHBhcmFtZXRlcnMgdG8gYnVpbGQgdGhlIHR4XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0VmVyc2lvbn0gYXBpVmVyc2lvbiBsaXRlIG9yIGZ1bGxcbiAgICogQHBhcmFtIHtib29sZWFufSBwcmV2aWV3IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIGlzIHRvIHByZXZpZXcgYSB0eCByZXF1ZXN0LCB3aGljaCB3aWxsIG5vdCBpbml0aWF0ZSBwb2xpY3kgY2hlY2tzIG9yIHBlbmRpbmcgYXBwcm92YWxzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IC0gYSBidWlsdCB0eCByZXF1ZXN0XG4gICAqL1xuICBhc3luYyBwcmVidWlsZFR4V2l0aEludGVudChcbiAgICBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2xpdGUnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9ucyA9IHRoaXMucG9wdWxhdGVJbnRlbnQodGhpcy5iYXNlQ29pbiwgcGFyYW1zKTtcblxuICAgIGNvbnN0IHdoaXRlbGlzdGVkUGFyYW1zID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIC4uLmludGVudE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogYXBpVmVyc2lvbixcbiAgICAgIHByZXZpZXcsXG4gICAgfTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSAoYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAgIC5zZW5kKHdoaXRlbGlzdGVkUGFyYW1zKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICByZXR1cm4gdW5zaWduZWRUeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0eCByZXF1ZXN0IGZyb20gcGFyYW1zIGZvciBtZXNzYWdlIHNpZ25pbmdcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gYXBpVmVyc2lvblxuICAgKiBAcGFyYW0gcHJldmlld1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlVHhSZXF1ZXN0V2l0aEludGVudEZvck1lc3NhZ2VTaWduaW5nKFxuICAgIHBhcmFtczogSW50ZW50T3B0aW9uc0Zvck1lc3NhZ2UsXG4gICAgYXBpVmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbiA9ICdmdWxsJyxcbiAgICBwcmV2aWV3PzogYm9vbGVhblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGNvbnN0IGludGVudE9wdGlvbnM6IFBvcHVsYXRlZEludGVudEZvck1lc3NhZ2VTaWduaW5nID0ge1xuICAgICAgY3VzdG9kaWFuTWVzc2FnZUlkOiBwYXJhbXMuY3VzdG9kaWFuTWVzc2FnZUlkLFxuICAgICAgaW50ZW50VHlwZTogcGFyYW1zLmludGVudFR5cGUsXG4gICAgICBzZXF1ZW5jZUlkOiBwYXJhbXMuc2VxdWVuY2VJZCxcbiAgICAgIGNvbW1lbnQ6IHBhcmFtcy5jb21tZW50LFxuICAgICAgbWVtbzogcGFyYW1zLm1lbW8/LnZhbHVlLFxuICAgICAgaXNUc3M6IHBhcmFtcy5pc1RzcyxcbiAgICAgIG1lc3NhZ2VSYXc6IHBhcmFtcy5tZXNzYWdlUmF3LFxuICAgICAgbWVzc2FnZUVuY29kZWQ6IHBhcmFtcy5tZXNzYWdlRW5jb2RlZCA/PyAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVHhSZXF1ZXN0QmFzZShpbnRlbnRPcHRpb25zLCBhcGlWZXJzaW9uLCBwcmV2aWV3KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0eCByZXF1ZXN0IGZyb20gcGFyYW1zIGZvciB0eXBlIGRhdGEgc2lnbmluZ1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBhcGlWZXJzaW9uXG4gICAqIEBwYXJhbSBwcmV2aWV3XG4gICAqL1xuICBhc3luYyBjcmVhdGVUeFJlcXVlc3RXaXRoSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyhcbiAgICBwYXJhbXM6IEludGVudE9wdGlvbnNGb3JUeXBlZERhdGEsXG4gICAgYXBpVmVyc2lvbjogVHhSZXF1ZXN0VmVyc2lvbiA9ICdmdWxsJyxcbiAgICBwcmV2aWV3PzogYm9vbGVhblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIGNvbnN0IGludGVudE9wdGlvbnM6IFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcgPSB7XG4gICAgICBjdXN0b2RpYW5NZXNzYWdlSWQ6IHBhcmFtcy5jdXN0b2RpYW5NZXNzYWdlSWQsXG4gICAgICBpbnRlbnRUeXBlOiBwYXJhbXMuaW50ZW50VHlwZSxcbiAgICAgIHNlcXVlbmNlSWQ6IHBhcmFtcy5zZXF1ZW5jZUlkLFxuICAgICAgY29tbWVudDogcGFyYW1zLmNvbW1lbnQsXG4gICAgICBtZW1vOiBwYXJhbXMubWVtbz8udmFsdWUsXG4gICAgICBpc1RzczogcGFyYW1zLmlzVHNzLFxuICAgICAgbWVzc2FnZVJhdzogcGFyYW1zLnR5cGVkRGF0YVJhdyxcbiAgICAgIG1lc3NhZ2VFbmNvZGVkOiBwYXJhbXMudHlwZWREYXRhRW5jb2RlZCA/PyAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVHhSZXF1ZXN0QmFzZShpbnRlbnRPcHRpb25zLCBhcGlWZXJzaW9uLCBwcmV2aWV3KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBCaXRnbyBBUEkgdG8gY3JlYXRlIHR4IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdEJhc2UoXG4gICAgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyB8IFBvcHVsYXRlZEludGVudEZvck1lc3NhZ2VTaWduaW5nLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24sXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCB3aGl0ZWxpc3RlZFBhcmFtcyA9IHtcbiAgICAgIGludGVudDoge1xuICAgICAgICAuLi5pbnRlbnRPcHRpb25zLFxuICAgICAgfSxcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwcmV2aWV3LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS90eHJlcXVlc3RzYCwgMikpXG4gICAgICAuc2VuZCh3aGl0ZWxpc3RlZFBhcmFtcylcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGRlbGV0ZSBzaWduYXR1cmUgc2hhcmVzIGZvciBhIHR4UmVxdWVzdCwgdGhlIGVuZHBvaW50IGRlbGV0ZSB0aGUgc2lnbmF0dXJlcyBhbmQgcmV0dXJuIHRoZW1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR4UmVxdWVzdElkIHR4IGlkIHJlZmVyZW5jZSB0byBkZWxldGUgc2lnbmF0dXJlIHNoYXJlc1xuICAgKiBAcmV0dXJucyB7U2lnbmF0dXJlU2hhcmVSZWNvcmRbXX1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5kZWwodGhpcy5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS90eHJlcXVlc3RzLyR7dHhSZXF1ZXN0SWR9L3NpZ25hdHVyZXNoYXJlc2AsIDIpKVxuICAgICAgLnNlbmQoKVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHNlbmQgcHJvY2VkdXJlIG9uY2UgQml0Z28gaGFzIHRoZSBVc2VyIFRvIEJpdGdvIEdTaGFyZVxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBhc3luYyBzZW5kVHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHgvc2VuZCcpKVxuICAgICAgLnNlbmQoeyB0eFJlcXVlc3RJZCB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzaWduYXR1cmUgc2hhcmVzLCBnZXQgdGhlIHR4IHJlcXVlc3Qgd2l0aG91dCB0aGVtIGZyb20gdGhlIGRiIGFuZCBzaWduIGl0IHRvIGZpbmFsbHkgc2VuZCBpdC5cbiAgICpcbiAgICogTm90ZSA6IFRoaXMgY2FuIGJlIHBlcmZvcm1lZCBpbiBvcmRlciB0byByZWFjaCBsYXRlc3QgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmVkIG9uIHBlbmRpbmcgYXBwcm92YWwgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZCB0byBtYWtlIHRoZSByZXF1ZXN0cy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlY3J5cHRlZFBydiAtIGRlY3J5cHRlZCBwcnYgdG8gc2lnbiB0aGUgdHggcmVxdWVzdC5cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyByZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCBkZWNyeXB0ZWRQcnY6IHN0cmluZywgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZCk7XG4gICAgLy8gYWZ0ZXIgZGVsZXRlIHNpZ25hdHVyZXMgc2hhcmVzIGdldCB0aGUgdHggd2l0aG91dCB0aGVtXG4gICAgY29uc3QgdHhSZXF1ZXN0ID0gYXdhaXQgZ2V0VHhSZXF1ZXN0KHRoaXMuYml0Z28sIHRoaXMud2FsbGV0LmlkKCksIHR4UmVxdWVzdElkKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zaWduVHhSZXF1ZXN0KHsgdHhSZXF1ZXN0LCBwcnY6IGRlY3J5cHRlZFBydiwgcmVxSWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGF0ZXN0IFR4IFJlcXVlc3QgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fVxuICAgKi9cbiAgYXN5bmMgZ2V0VHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHJldHVybiBnZXRUeFJlcXVlc3QodGhpcy5iaXRnbywgdGhpcy53YWxsZXQuaWQoKSwgdHhSZXF1ZXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSB0aGlyZCBwYXJ0eSBiYWNrdXAgcHJvdmlkZXIgaXMgdmFsaWQvc3VwcG9ydGVkXG4gICAqIEBwYXJhbSBiYWNrdXBQcm92aWRlciAtIHRoZSBiYWNrdXAgcHJvdmlkZXIgY2xpZW50IHNlbGVjdGVkXG4gICAqL1xuICBpc1ZhbGlkVGhpcmRQYXJ0eUJhY2t1cFByb3ZpZGVyKFxuICAgIGJhY2t1cFByb3ZpZGVyOiBCYWNrdXBQcm92aWRlciB8IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBiYWNrdXBQcm92aWRlciBpcyBCYWNrdXBQcm92aWRlciB7XG4gICAgLy8gQXMgb2Ygbm93LCBCaXRHbyBpcyB0aGUgb25seSBzdXBwb3J0ZWQgS1JTIHByb3ZpZGVyIGZvciBUU1NcbiAgICByZXR1cm4gISEoYmFja3VwUHJvdmlkZXIgJiYgYmFja3VwUHJvdmlkZXIgPT09ICdCaXRHb1RydXN0QXNLcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBnZXRzIHRoZSBhcHByb3ByaWF0ZSBCaXRHbyBHUEcgcHVibGljIGtleSBmb3Iga2V5IGNyZWF0aW9uIGJhc2VkIG9uIGFcbiAgICogY29tYmluYXRpb24gb2YgY29pbiBhbmQgdGhlIGZlYXR1cmUgZmxhZ3Mgb24gdGhlIHVzZXIgYW5kIHRoZWlyIGVudGVycHJpc2UgaWYgc2V0LlxuICAgKiBAcGFyYW0gZW50ZXJwcmlzZUlkIC0gZW50ZXJwcmlzZSB1bmRlciB3aGljaCB1c2VyIHdhbnRzIHRvIGNyZWF0ZSB0aGUgd2FsbGV0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKGVudGVycHJpc2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxLZXk+IHtcbiAgICBjb25zdCByZXNwb25zZTogQml0Z29HUEdQdWJsaWNLZXkgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYmFzZUNvaW4udXJsKCcvdHNzL3B1YmtleScpKVxuICAgICAgLnF1ZXJ5KHsgZW50ZXJwcmlzZUlkIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3QgYml0Z29QdWJsaWNLZXlTdHIgPSByZXNwb25zZS5wdWJsaWNLZXkgYXMgc3RyaW5nO1xuICAgIHJldHVybiByZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29QdWJsaWNLZXlTdHIgfSk7XG4gIH1cbn1cbiJdfQ==
604
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxpREFBbUM7QUFDbkMscUNBQTBEO0FBRzFELHlDQUF5RDtBQUN6RCw2Q0FBaUY7QUFDakYsbUNBQXlDO0FBRXpDLDBDQUF1QztBQUN2QywwQ0FBNEI7QUFvQzVCLGtDQUF3QztBQUN4Qyx5REFBK0Y7QUFDL0Ysa0RBQW9EO0FBQ3BELG9EQUE0QjtBQUM1QixrREFBc0Q7QUFFdEQ7O0dBRUc7QUFDSCxNQUFxQixZQUF1QixTQUFRLG1CQUFRO0lBTzFELFlBQVksS0FBZ0IsRUFBRSxRQUFtQixFQUFFLE1BQWdCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7UUFDckMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sSUFBQSxnQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNwRixpSEFBaUg7UUFDakgsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFD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QUUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGFBQWEsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxvQkFBNEI7UUFDckYsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLENBQUM7WUFDSCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELHdEQUF3RDtRQUN4RCxJQUNFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxrQkFBa0IsQ0FBQyxHQUFHLG9CQUFvQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQy9GLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDbEUsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdnRCRCwrQkF1dEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW5jcnlwdGlvblZlcnNpb24sIElSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vLi4vLi4vYXBpJztcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBLZXksIHJlYWRLZXksIFNlcmlhbGl6ZWRLZXlQYWlyIH0gZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgeyBJQmFzZUNvaW4sIEtleWNoYWluc1RyaXBsZXQgfSBmcm9tICcuLi8uLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICcuLi8uLi9iaXRnb0Jhc2UnO1xuaW1wb3J0IHsgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBLZXljaGFpbiwgS2V5SW5kaWNlcywgV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbyB9IGZyb20gJy4uLy4uL2tleWNoYWluJztcbmltcG9ydCB7IGdldFR4UmVxdWVzdCB9IGZyb20gJy4uLy4uL3Rzcyc7XG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnLi4vLi4vd2FsbGV0JztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi4vbXBjVXRpbHMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQml0Z29HUEdQdWJsaWNLZXksXG4gIEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlLFxuICBDb21taXRtZW50U2hhcmVSZWNvcmQsXG4gIENyZWF0ZUJpdEdvS2V5Y2hhaW5QYXJhbXNCYXNlLFxuICBDcmVhdGVLZXljaGFpblBhcmFtc0Jhc2UsXG4gIEN1c3RvbUNvbW1pdG1lbnRHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21FZGRzYU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tS1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgQ3VzdG9tTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICBDdXN0b21NdURlbHRhU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gIEN1c3RvbVNTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQsXG4gIEludGVudE9wdGlvbnNGb3JNZXNzYWdlLFxuICBJbnRlbnRPcHRpb25zRm9yVHlwZWREYXRhLFxuICBJVHNzVXRpbHMsXG4gIFBvcHVsYXRlZEludGVudEZvck1lc3NhZ2VTaWduaW5nLFxuICBQb3B1bGF0ZWRJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nLFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFJlcXVlc3RUeXBlLFxuICBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgVFNTUGFyYW1zLFxuICBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICBUc3NTaWduVHhSZXF1ZXN0UGFyYW1zV2l0aFBydixcbiAgVHhSZXF1ZXN0LFxuICBUeFJlcXVlc3RWZXJzaW9uLFxufSBmcm9tICcuL2Jhc2VUeXBlcyc7XG5pbXBvcnQgeyBHU2hhcmUsIFNpZ25TaGFyZSB9IGZyb20gJy4uLy4uLy4uL2FjY291bnQtbGliL21wYy90c3MnO1xuaW1wb3J0IHsgUmVxdWVzdFRyYWNlciB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZywgZ2V0Qml0Z29NcGNHcGdQdWJLZXkgfSBmcm9tICcuLi8uLi90c3MvYml0Z29QdWJLZXlzJztcbmltcG9ydCB7IGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi4vb3BlbmdwZ1V0aWxzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE1lc3NhZ2VTdGFuZGFyZFR5cGUgfSBmcm9tICcuLi9tZXNzYWdlVHlwZXMnO1xuXG4vKipcbiAqIEJhc2VUc3NVdGlsIGNsYXNzIHdoaWNoIGRpZmZlcmVudCBzaWduYXR1cmUgc2NoZW1lcyBoYXZlIHRvIGV4dGVuZFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlVHNzVXRpbHM8S2V5U2hhcmU+IGV4dGVuZHMgTXBjVXRpbHMgaW1wbGVtZW50cyBJVHNzVXRpbHM8S2V5U2hhcmU+IHtcbiAgcHJpdmF0ZSBfd2FsbGV0PzogSVdhbGxldDtcbiAgcHJvdGVjdGVkIGJpdGdvUHVibGljR3BnS2V5OiBvcGVucGdwLktleTtcbiAgcHJvdGVjdGVkIGJpdGdvTVBDdjJQdWJsaWNHcGdLZXk6IG9wZW5wZ3AuS2V5IHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgYml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5OiBvcGVucGdwLktleSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIGJpdGdvUmVkcGFsbGFzTXBjdjJQdWJsaWNHcGdLZXk6IG9wZW5wZ3AuS2V5IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4sIHdhbGxldD86IElXYWxsZXQpIHtcbiAgICBzdXBlcihiaXRnbywgYmFzZUNvaW4pO1xuICAgIHRoaXMuX3dhbGxldCA9IHdhbGxldDtcbiAgfVxuXG4gIGdldCB3YWxsZXQoKTogSVdhbGxldCB7XG4gICAgaWYgKF8uaXNOaWwodGhpcy5fd2FsbGV0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYWxsZXQgbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dhbGxldDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzZXRCaXRnb0dwZ1B1YktleShiaXRnbykge1xuICAgIGNvbnN0IHsgbXBjVjEsIG1wY1YyLCBlZGRzYU1wY1YyLCByZWRwYWxsYXNNcGNWMiB9ID0gYXdhaXQgZ2V0Qml0Z29HcGdQdWJLZXkoYml0Z28pO1xuICAgIC8vIERvIG5vdCB1bnNldCB0aGUgTVBDdjEga2V5IGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIGlzIHRvIGF2b2lkIHVuc2V0dGluZyBpZiBleHRyYSBjb25zdGFudHMgYXBpIGNhbGxzIGZhaWwuXG4gICAgaWYgKG1wY1YxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYml0Z29QdWJsaWNHcGdLZXkgPSBtcGNWMTtcbiAgICB9XG4gICAgLy8gRG8gbm90IHVuc2V0IHRoZSBNUEN2MiBrZXkgaWYgaXQgaXMgYWxyZWFkeSBzZXRcbiAgICBpZiAobXBjVjIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5ID0gbXBjVjI7XG4gICAgfVxuICAgIC8vIERvIG5vdCB1bnNldCB0aGUgRWREU0EgTVBDdjIga2V5IGlmIGl0IGlzIGFscmVhZHkgc2V0XG4gICAgaWYgKGVkZHNhTXBjVjIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iaXRnb0VkZHNhTXBjdjJQdWJsaWNHcGdLZXkgPSBlZGRzYU1wY1YyO1xuICAgIH1cbiAgICAvLyBEbyBub3QgdW5zZXQgdGhlIFJlZFBhbGxhcyBNUEN2MiBrZXkgaWYgaXQgaXMgYWxyZWFkeSBzZXRcbiAgICBpZiAocmVkcGFsbGFzTXBjVjIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iaXRnb1JlZHBhbGxhc01wY3YyUHVibGljR3BnS2V5ID0gcmVkcGFsbGFzTXBjVjI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcoXG4gICAgaXNNcGN2MjogYm9vbGVhbixcbiAgICByZXFJZD86IElSZXF1ZXN0VHJhY2VyLFxuICAgIGVudGVycHJpc2VJZD86IHN0cmluZyxcbiAgICBpc0VkZHNhTXBjdjI/OiBib29sZWFuLFxuICAgIGlzUmVkcGFsbGFzTXBjdjI/OiBib29sZWFuXG4gICk6IFByb21pc2U8b3BlbnBncC5LZXk+IHtcbiAgICBsZXQgYml0Z29HcGdQdWJLZXk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJpdGdvS2V5Q2hhaW4gPSBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmdldCh7IGlkOiB0aGlzLndhbGxldC5rZXlJZHMoKVtLZXlJbmRpY2VzLkJJVEdPXSwgcmVxSWQgfSk7XG4gICAgICBpZiAoIWJpdGdvS2V5Q2hhaW4gfHwgIWJpdGdvS2V5Q2hhaW4uaHNtVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0Z28gR1BHIFB1YiBLZXkgVHlwZS4nKTtcbiAgICAgIH1cbiAgICAgIGJpdGdvR3BnUHViS2V5ID0gYXdhaXQgb3BlbnBncC5yZWFkS2V5KHtcbiAgICAgICAgYXJtb3JlZEtleTogZ2V0Qml0Z29NcGNHcGdQdWJLZXkoXG4gICAgICAgICAgdGhpcy5iaXRnby5nZXRFbnYoKSxcbiAgICAgICAgICBiaXRnb0tleUNoYWluLmhzbVR5cGUgPT09ICduaXRybycgPyAnbml0cm8nIDogJ29ucHJlbScsXG4gICAgICAgICAgaXNSZWRwYWxsYXNNcGN2MiA/ICdyZWRwYWxsYXNNcGN2MicgOiBpc0VkZHNhTXBjdjIgPyAnZWRkc2FNcGN2MicgOiBpc01wY3YyID8gJ21wY3YyJyA6ICdtcGN2MSdcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICghZW52UmVxdWlyZXNCaXRnb1B1YkdwZ0tleUNvbmZpZyh0aGlzLmJpdGdvLmdldEVudigpKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFVuYWJsZSB0byBnZXQgQml0R28gR1BHIGtleSBiYXNlZCBvbiBrZXkgZGF0YSB3aXRoIGVycm9yOiAke2V9LiBGZXRjaGluZyBCaXRHbyBHUEcga2V5IGJhc2VkIG9uIGZlYXR1cmUgZmxhZ3MuYFxuICAgICAgICApO1xuICAgICAgICAvLyBGaXJzdCB0cnkgdG8gZ2V0IHRoZSBrZXkgYmFzZWQgb24gZmVhdHVyZSBmbGFncywgaWYgdGhhdCBmYWlscywgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQga2V5IGZyb20gY29uc3RhbnRzIGFwaS5cbiAgICAgICAgYml0Z29HcGdQdWJLZXkgPSBhd2FpdCB0aGlzLmdldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncyhlbnRlcnByaXNlSWQsIGlzTXBjdjIsIHJlcUlkKVxuICAgICAgICAgIC50aGVuKGFzeW5jICh7IG1wY3YyUHVibGljS2V5LCBlZGRzYU1wY3YyUHVibGljS2V5LCByZWRwYWxsYXNNcGN2MlB1YmxpY0tleSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNSZWRwYWxsYXNNcGN2Mikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVkcGFsbGFzTXBjdjJQdWJsaWNLZXkgPz8gKGF3YWl0IHRoaXMuZ2V0Qml0Z29SZWRwYWxsYXNNcGN2MlB1YmxpY0dwZ0tleSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0VkZHNhTXBjdjIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVkZHNhTXBjdjJQdWJsaWNLZXkgPz8gKGF3YWl0IHRoaXMuZ2V0Qml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgbXBjdjJQdWJsaWNLZXkgPz8gKGlzTXBjdjIgPyBhd2FpdCB0aGlzLmdldEJpdGdvTXBjdjJQdWJsaWNHcGdLZXkoKSA6IGF3YWl0IHRoaXMuZ2V0Qml0Z29QdWJsaWNHcGdLZXkoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUmVkcGFsbGFzTXBjdjIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Qml0Z29SZWRwYWxsYXNNcGN2MlB1YmxpY0dwZ0tleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRWRkc2FNcGN2Mikge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRCaXRnb0VkZHNhTXBjdjJQdWJsaWNHcGdLZXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc01wY3YyID8gYXdhaXQgdGhpcy5nZXRCaXRnb01wY3YyUHVibGljR3BnS2V5KCkgOiBhd2FpdCB0aGlzLmdldEJpdGdvUHVibGljR3BnS2V5KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEVudmlyb25tZW50IFwiJHt0aGlzLmJpdGdvLmdldEVudigpfVwiIHJlcXVpcmVzIGEgQml0R28gR1BHIFB1YiBLZXkgQ29uZmlnIGluIEJpdEdvSlMgZm9yIFRTUy4gRXJyb3IgdGhyb3duIHdoaWxlIGdldHRpbmcgdGhlIGtleSBmcm9tIGNvbmZpZzogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJpdGdvR3BnUHViS2V5O1xuICB9XG5cbiAgYXN5bmMgZ2V0Qml0Z29QdWJsaWNHcGdLZXkoKTogUHJvbWlzZTxvcGVucGdwLktleT4ge1xuICAgIGlmICghdGhpcy5iaXRnb1B1YmxpY0dwZ0tleSkge1xuICAgICAgLy8gcmV0cnkgZ2V0dGluZyBiaXRnbydzIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRoaXMuc2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG4gICAgICBpZiAoIXRoaXMuYml0Z29QdWJsaWNHcGdLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBCaXRnbydzIGdwZyBrZXlcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29QdWJsaWNHcGdLZXk7XG4gIH1cblxuICBhc3luYyBnZXRCaXRnb01wY3YyUHVibGljR3BnS2V5KCk6IFByb21pc2U8b3BlbnBncC5LZXk+IHtcbiAgICBpZiAoIXRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSkge1xuICAgICAgLy8gcmV0cnkgZ2V0dGluZyBiaXRnbydzIGdwZyBrZXlcbiAgICAgIGF3YWl0IHRoaXMuc2V0Qml0Z29HcGdQdWJLZXkodGhpcy5iaXRnbyk7XG4gICAgICBpZiAoIXRoaXMuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IEJpdGdvJ3MgZ3BnIGtleVwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnb01QQ3YyUHVibGljR3BnS2V5O1xuICB9XG5cbiAgYXN5bmMgZ2V0Qml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5KCk6IFByb21pc2U8b3BlbnBncC5LZXk+IHtcbiAgICBpZiAoIXRoaXMuYml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5KSB7XG4gICAgICAvLyByZXRyeSBnZXR0aW5nIGJpdGdvJ3MgZ3BnIGtleVxuICAgICAgYXdhaXQgdGhpcy5zZXRCaXRnb0dwZ1B1YktleSh0aGlzLmJpdGdvKTtcbiAgICAgIGlmICghdGhpcy5iaXRnb0VkZHNhTXBjdjJQdWJsaWNHcGdLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBCaXRnbydzIEVkRFNBIE1QQ3YyIGdwZyBrZXlcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29FZGRzYU1wY3YyUHVibGljR3BnS2V5O1xuICB9XG5cbiAgYXN5bmMgZ2V0Qml0Z29SZWRwYWxsYXNNcGN2MlB1YmxpY0dwZ0tleSgpOiBQcm9taXNlPG9wZW5wZ3AuS2V5PiB7XG4gICAgaWYgKCF0aGlzLmJpdGdvUmVkcGFsbGFzTXBjdjJQdWJsaWNHcGdLZXkpIHtcbiAgICAgIC8vIHJldHJ5IGdldHRpbmcgYml0Z28ncyBncGcga2V5XG4gICAgICBhd2FpdCB0aGlzLnNldEJpdGdvR3BnUHViS2V5KHRoaXMuYml0Z28pO1xuICAgICAgaWYgKCF0aGlzLmJpdGdvUmVkcGFsbGFzTXBjdjJQdWJsaWNHcGdLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBCaXRnbydzIFJlZFBhbGxhcyBNUEN2MiBncGcga2V5XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJpdGdvUmVkcGFsbGFzTXBjdjJQdWJsaWNHcGdLZXk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCaXRnb0hlbGRCYWNrdXBLZXlTaGFyZShcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIGVudGVycHJpc2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlPiB7XG4gICAgY29uc3Qga2V5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL2tycy9iYWNrdXBrZXlzJykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIGVudGVycHJpc2UsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHVzZXJHcGdLZXkucHVibGljS2V5LFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBpZiAoIWtleVJlc3BvbnNlIHx8ICFrZXlSZXNwb25zZS5rZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBiYWNrdXAgc2hhcmVzIGZyb20gQml0R28uJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDoga2V5UmVzcG9uc2UuaWQsXG4gICAgICBrZXlTaGFyZXM6IGtleVJlc3BvbnNlLmtleVNoYXJlcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGZpbmFsaXplQml0Z29IZWxkQmFja3VwS2V5U2hhcmUoXG4gICAga2V5SWQ6IHN0cmluZyxcbiAgICBjb21tb25LZXljaGFpbjogc3RyaW5nLFxuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICBiYWNrdXBHcGdLZXk6IEtleVxuICApOiBQcm9taXNlPEJpdGdvSGVsZEJhY2t1cEtleVNoYXJlPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgY3JlYXRlVXNlcktleWNoYWluKHBhcmFtczogQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUJhY2t1cEtleWNoYWluKHBhcmFtczogQ3JlYXRlS2V5Y2hhaW5QYXJhbXNCYXNlKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGNyZWF0ZUJpdGdvS2V5Y2hhaW4ocGFyYW1zOiBDcmVhdGVCaXRHb0tleWNoYWluUGFyYW1zQmFzZSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBjcmVhdGVLZXljaGFpbnMocGFyYW1zOiB7XG4gICAgcGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGVudGVycHJpc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzVGhpcmRQYXJ0eUJhY2t1cD86IGJvb2xlYW47XG4gICAgd2ViYXV0aG5JbmZvPzogV2ViYXV0aG5LZXlFbmNyeXB0aW9uSW5mbztcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uO1xuICB9KTogUHJvbWlzZTxLZXljaGFpbnNUcmlwbGV0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgc2lnblR4UmVxdWVzdChwYXJhbXM6IFRzc1NpZ25UeFJlcXVlc3RQYXJhbXNXaXRoUHJ2KTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzaWduVHhSZXF1ZXN0Rm9yTWVzc2FnZShwYXJhbXM6IFRTU1BhcmFtc0Zvck1lc3NhZ2UpOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHN1cHBvcnRzVmVyaWZ5S2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeUtleShwYXJhbXM6IHsgcHJ2OiBzdHJpbmc7IGNvbW1vbktleWNoYWluOiBzdHJpbmcgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIHVuc3VwcG9ydGVkIHdhbGxldCB0eXBlcyBhcmUgcmVqZWN0ZWQgYnkgdGhlIGBzdXBwb3J0c1ZlcmlmeUtleSgpYCBnYXRlIGluIFdhbGxldC52ZXJpZnlLZXksXG4gICAgLy8gd2hpY2ggc3VyZmFjZXMgdGhlIHVzZXItZmFjaW5nIG1lc3NhZ2U7IHJlYWNoaW5nIHRoaXMgc3R1YiBtZWFucyBhIGRpcmVjdCBjYWxsZXIgaW52b2tlZFxuICAgIC8vIHZlcmlmeUtleSBvbiBhbiBhbGdvcml0aG0gdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgaXQuXG4gICAgLy8gYXN5bmMgc28gdGhlIHJlamVjdGlvbiwgcmF0aGVyIHRoYW4gYSBzeW5jIHRocm93LCByZWFjaGVzIGNhbGxlcnMgb2YgYSBQcm9taXNlLXR5cGVkIG1ldGhvZC5cbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGEgdHJhbnNhY3Rpb24gdXNpbmcgVFNTIGZvciBFZERTQSBhbmQgdGhyb3VnaCB1dGlsaXphdGlvbiBvZiBjdXN0b20gc2hhcmUgZ2VuZXJhdG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFR4UmVxdWVzdH0gdHhSZXF1ZXN0IC0gdHJhbnNhY3Rpb24gcmVxdWVzdCB3aXRoIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7Q3VzdG9tUlNoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lclJTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBSIHNoYXJlcyBpbiB0aGUgRWREU0EgVFNTIGZsb3dcbiAgICogQHBhcmFtIHtDdXN0b21HU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyR1NoYXJlR2VuZXJhdG9yIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIEcgc2hhcmVzIGluIHRoZSBFZERTQSBUU1MgZmxvd1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUeFJlcXVlc3Q+fSAtIGEgc2lnbmVkIHR4IHJlcXVlc3RcbiAgICovXG4gIHNpZ25FZGRzYVRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgdHhSZXF1ZXN0OiBzdHJpbmcgfCBUeFJlcXVlc3QsXG4gICAgZXh0ZXJuYWxTaWduZXJDb21taXRtZW50R2VuZXJhdG9yOiBDdXN0b21Db21taXRtZW50R2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyUlNoYXJlR2VuZXJhdG9yOiBDdXN0b21SU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJHU2hhcmVHZW5lcmF0b3I6IEN1c3RvbUdTaGFyZUdlbmVyYXRpbmdGdW5jdGlvblxuICApOiBQcm9taXNlPFR4UmVxdWVzdD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBhIHRyYW5zYWN0aW9uIHVzaW5nIFRTUyBmb3IgRUNEU0EgYW5kIHRocm91Z2ggdXRpbGl6YXRpb24gb2YgY3VzdG9tIHNoYXJlIGdlbmVyYXRvcnNcbiAgICpcbiAgICogQHBhcmFtIHtwYXJhbXM6IFRTU1BhcmFtcyB8IFRTU1BhcmFtc0Zvck1lc3NhZ2V9IHBhcmFtcyAtIHBhcmFtcyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHBhcmFtZXRlcnMgdG8gc2lnbiBhIHRyYW5zYWN0aW9uIG9yIGEgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHlwZX0gcmVxdWVzdFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcmVxdWVzdCB0byBzaWduICh0cmFuc2FjdGlvbiBvciBtZXNzYWdlKS5cbiAgICogQHBhcmFtIHtDdXN0b21QYWlsbGllck1vZHVsdXNHZXR0ZXJGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJQYWlsbGllck1vZHVsdXNHZXR0ZXIgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgUGFpbGxpZXIgTW9kdWx1cyBzaGFyZXMgaW4gdGhlIEVDRFNBIFRTUyBmbG93LlxuICAgKiBAcGFyYW0ge0N1c3RvbUtTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJLU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgSyBzaGFyZXMgaW4gdGhlIEVDRFNBIFRTUyBmbG93LlxuICAgKiBAcGFyYW0ge0N1c3RvbU11RGVsdGFTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJNdURlbHRhU2hhcmVHZW5lcmF0b3IgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgTXUgYW5kIERlbHRhIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tU1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lclNTaGFyZUdlbmVyYXRvciBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBTIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIGZsb3cuXG4gICAqL1xuICBzaWduRWNkc2FUc3NVc2luZ0V4dGVybmFsU2lnbmVyKFxuICAgIHBhcmFtczogVFNTUGFyYW1zIHwgVFNTUGFyYW1zRm9yTWVzc2FnZSxcbiAgICByZXF1ZXN0VHlwZTogUmVxdWVzdFR5cGUsXG4gICAgZXh0ZXJuYWxTaWduZXJQYWlsbGllck1vZHVsdXNHZXR0ZXI6IEN1c3RvbVBhaWxsaWVyTW9kdWx1c0dldHRlckZ1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyS1NoYXJlR2VuZXJhdG9yOiBDdXN0b21LU2hhcmVHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJNdURlbHRhU2hhcmVHZW5lcmF0b3I6IEN1c3RvbU11RGVsdGFTaGFyZUdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lclNTaGFyZUdlbmVyYXRvcjogQ3VzdG9tU1NoYXJlR2VuZXJhdGluZ0Z1bmN0aW9uXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGEgdHJhbnNhY3Rpb24gdXNpbmcgVFNTIE1QQ3YyIGZvciBFQ0RTQSBhbmQgdGhyb3VnaCB1dGlsaXphdGlvbiBvZiBjdXN0b20gc2hhcmUgZ2VuZXJhdG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge1RTU1BhcmFtcyB8IFRTU1BhcmFtc0Zvck1lc3NhZ2V9IHBhcmFtcyAtIHBhcmFtcyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHBhcmFtZXRlcnMgdG8gc2lnbiBhIHRyYW5zYWN0aW9uIG9yIGEgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb259IGV4dGVybmFsU2lnbmVyTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdG9yIC0gYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgTVBDdjIgUm91bmQgMSBzaGFyZXMgaW4gdGhlIEVDRFNBIFRTUyBNUEN2MiBmbG93LlxuICAgKiBAcGFyYW0ge0N1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbn0gZXh0ZXJuYWxTaWduZXJNUEN2MlNpZ25pbmdSb3VuZDJHZW5lcmF0b3IgLSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBNUEN2MiBSb3VuZCAyIHNoYXJlcyBpbiB0aGUgRUNEU0EgVFNTIE1QQ3YyIGZsb3cuXG4gICAqIEBwYXJhbSB7Q3VzdG9tTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9ufSBleHRlcm5hbFNpZ25lck1QQ3YyU2lnbmluZ1JvdW5kM0dlbmVyYXRvciAtIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIE1QQ3YyIFJvdW5kIDMgc2hhcmVzIGluIHRoZSBFQ0RTQSBUU1MgTVBDdjIgZmxvdy5cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHlwZX0gcmVxdWVzdFR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgcmVxdWVzdCB0byBzaWduICh0cmFuc2FjdGlvbiBvciBtZXNzYWdlKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn0gLSBhIHNpZ25lZCB0eCByZXF1ZXN0XG4gICAqL1xuICBzaWduRWNkc2FNUEN2MlRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIGV4dGVybmFsU2lnbmVyTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdG9yOiBDdXN0b21NUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0aW5nRnVuY3Rpb24sXG4gICAgZXh0ZXJuYWxTaWduZXJNUEN2MlNpZ25pbmdSb3VuZDJHZW5lcmF0b3I6IEN1c3RvbU1QQ3YyU2lnbmluZ1JvdW5kMkdlbmVyYXRpbmdGdW5jdGlvbixcbiAgICBleHRlcm5hbFNpZ25lck1QQ3YyU2lnbmluZ1JvdW5kM0dlbmVyYXRvcjogQ3VzdG9tTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIHJlcXVlc3RUeXBlPzogUmVxdWVzdFR5cGVcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBzaWduRWRkc2FNUEN2MlRzc1VzaW5nRXh0ZXJuYWxTaWduZXIoXG4gICAgcGFyYW1zOiBUU1NQYXJhbXMgfCBUU1NQYXJhbXNGb3JNZXNzYWdlLFxuICAgIGV4dGVybmFsU2lnbmVyRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDFHZW5lcmF0b3I6IEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQxR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDJHZW5lcmF0b3I6IEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQyR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIGV4dGVybmFsU2lnbmVyRWRkc2FNUEN2MlNpZ25pbmdSb3VuZDNHZW5lcmF0b3I6IEN1c3RvbUVkZHNhTVBDdjJTaWduaW5nUm91bmQzR2VuZXJhdGluZ0Z1bmN0aW9uLFxuICAgIHJlcXVlc3RUeXBlPzogUmVxdWVzdFR5cGVcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIENvbW1pdG1lbnQgKFVzZXIgdG8gQml0R28pIHNoYXJlIGZyb20gYW4gdW5zaWduZWQgdHJhbnNhY3Rpb24gYW5kIHByaXZhdGUgdXNlciBzaWduaW5nIG1hdGVyaWFsXG4gICAqIEVERFNBIG9ubHlcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIHBhcmFtcyBvYmplY3RcbiAgICogQHBhcmFtIHtUeFJlcXVlc3R9IHBhcmFtcy50eFJlcXVlc3QgLSB0cmFuc2FjdGlvbiByZXF1ZXN0IHdpdGggdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5wcnYgLSB1c2VyIHNpZ25pbmcgbWF0ZXJpYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIC0gd2FsbGV0IHBhc3NwaHJhc2VcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8eyB1c2VyVG9CaXRnb0NvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yLCBlbmNyeXB0ZWRTaWduZXJTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQgfT59IC0gQ29tbWl0bWVudCBTaGFyZSBhbmQgdGhlIEVuY3J5cHRlZCBTaWduZXIgU2hhcmUgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZUNvbW1pdG1lbnRTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGJpdGdvR3BnUHViS2V5OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHtcbiAgICB1c2VyVG9CaXRnb0NvbW1pdG1lbnQ6IENvbW1pdG1lbnRTaGFyZVJlY29yZDtcbiAgICBlbmNyeXB0ZWRTaWduZXJTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gICAgZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmU6IEVuY3J5cHRlZFNpZ25lclNoYXJlUmVjb3JkO1xuICB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBSIChVc2VyIHRvIEJpdEdvKSBzaGFyZSBmcm9tIGFuIHVuc2lnbmVkIHRyYW5zYWN0aW9uIGFuZCBwcml2YXRlIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge1R4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtcy53YWxsZXRQYXNzcGhyYXNlXSAtIHdhbGxldCBwYXNzcGhyYXNlXG4gICAqIEBwYXJhbSB7RW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmR9IFtwYXJhbXMuZW5jcnlwdGVkVXNlclRvQml0Z29SU2hhcmVdIC0gZW5jcnlwdGVkIHVzZXIgdG8gYml0Z28gUiBzaGFyZSBnZW5lcmF0ZWQgaW4gdGhlIGNvbW1pdG1lbnQgcGhhc2VcbiAgICogQHJldHVybnMge1Byb21pc2U8eyByU2hhcmU6IFNpZ25TaGFyZSB9Pn0gLSBSIFNoYXJlIHRvIEJpdEdvXG4gICAqL1xuICBjcmVhdGVSU2hhcmVGcm9tVHhSZXF1ZXN0KHBhcmFtczoge1xuICAgIHR4UmVxdWVzdDogVHhSZXF1ZXN0O1xuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbmNyeXB0ZWRVc2VyVG9CaXRnb1JTaGFyZTogRW5jcnlwdGVkU2lnbmVyU2hhcmVSZWNvcmQ7XG4gIH0pOiBQcm9taXNlPHsgclNoYXJlOiBTaWduU2hhcmUgfT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBHIChVc2VyIHRvIEJpdEdvKSBzaGFyZSBmcm9tIGFuIHVuc2lnbmVkIHRyYW5zYWN0aW9uIGFuZCBwcml2YXRlIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge1R4UmVxdWVzdH0gcGFyYW1zLnR4UmVxdWVzdCAtIHRyYW5zYWN0aW9uIHJlcXVlc3Qgd2l0aCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnBydiAtIHVzZXIgc2lnbmluZyBtYXRlcmlhbFxuICAgKiBAcGFyYW0ge1NpZ25hdHVyZVNoYXJlUmVjb3JkfSBwYXJhbXMuYml0Z29Ub1VzZXJSU2hhcmUgLSBCaXRHbyB0byBVc2VyIFIgU2hhcmVcbiAgICogQHBhcmFtIHtTaWduU2hhcmV9IHBhcmFtcy51c2VyVG9CaXRnb1JTaGFyZSAtIFVzZXIgdG8gQml0R28gUiBTaGFyZVxuICAgKiBAcGFyYW0ge0NvbW1pdG1lbnRTaGFyZVJlY29yZH0gcGFyYW1zLmJpdGdvVG9Vc2VyQ29tbWl0bWVudCAtIEJpdEdvIHRvIFVzZXIgQ29tbWl0bWVudFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxHU2hhcmU+fSAtIEdTaGFyZSBmcm9tIFVzZXIgdG8gQml0R29cbiAgICovXG4gIGNyZWF0ZUdTaGFyZUZyb21UeFJlcXVlc3QocGFyYW1zOiB7XG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3Q7XG4gICAgcHJ2OiBzdHJpbmc7XG4gICAgYml0Z29Ub1VzZXJSU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkO1xuICAgIHVzZXJUb0JpdGdvUlNoYXJlOiBTaWduU2hhcmU7XG4gICAgYml0Z29Ub1VzZXJDb21taXRtZW50OiBDb21taXRtZW50U2hhcmVSZWNvcmQ7XG4gIH0pOiBQcm9taXNlPEdTaGFyZT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSB0eCByZXF1ZXN0IGZyb20gcGFyYW1zIGFuZCB2ZXJpZnkgaXRcbiAgICpcbiAgICogQHBhcmFtIHtQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnN9IHBhcmFtcyAtIHBhcmFtZXRlcnMgdG8gYnVpbGQgdGhlIHR4XG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0VmVyc2lvbn0gYXBpVmVyc2lvbiBsaXRlIG9yIGZ1bGxcbiAgICogQHBhcmFtIHtib29sZWFufSBwcmV2aWV3IGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGlzIGlzIHRvIHByZXZpZXcgYSB0eCByZXF1ZXN0LCB3aGljaCB3aWxsIG5vdCBpbml0aWF0ZSBwb2xpY3kgY2hlY2tzIG9yIHBlbmRpbmcgYXBwcm92YWxzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59IC0gYSBidWlsdCB0eCByZXF1ZXN0XG4gICAqL1xuICBhc3luYyBwcmVidWlsZFR4V2l0aEludGVudChcbiAgICBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2xpdGUnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9ucyA9IHRoaXMucG9wdWxhdGVJbnRlbnQodGhpcy5iYXNlQ29pbiwgcGFyYW1zKTtcblxuICAgIGNvbnN0IHdoaXRlbGlzdGVkUGFyYW1zID0ge1xuICAgICAgaW50ZW50OiB7XG4gICAgICAgIC4uLmludGVudE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbjogYXBpVmVyc2lvbixcbiAgICAgIHByZXZpZXcsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlcVRyYWNlciA9IHBhcmFtcy5yZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFUcmFjZXIpO1xuICAgIGNvbnN0IHVuc2lnbmVkVHggPSAoYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoJy93YWxsZXQvJyArIHRoaXMud2FsbGV0LmlkKCkgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAgIC5zZW5kKHdoaXRlbGlzdGVkUGFyYW1zKVxuICAgICAgLnJlc3VsdCgpKSBhcyBUeFJlcXVlc3Q7XG5cbiAgICByZXR1cm4gdW5zaWduZWRUeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0eCByZXF1ZXN0IGZyb20gcGFyYW1zIGZvciBtZXNzYWdlIHNpZ25pbmdcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNyZWF0ZVNpZ25NZXNzYWdlUmVxdWVzdCBpbnN0ZWFkXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGFwaVZlcnNpb25cbiAgICogQHBhcmFtIHByZXZpZXdcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdFdpdGhJbnRlbnRGb3JNZXNzYWdlU2lnbmluZyhcbiAgICBwYXJhbXM6IEludGVudE9wdGlvbnNGb3JNZXNzYWdlLFxuICAgIGFwaVZlcnNpb246IFR4UmVxdWVzdFZlcnNpb24gPSAnZnVsbCcsXG4gICAgcHJldmlldz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCBpbnRlbnRPcHRpb25zOiBQb3B1bGF0ZWRJbnRlbnRGb3JNZXNzYWdlU2lnbmluZyA9IHtcbiAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogcGFyYW1zLmN1c3RvZGlhbk1lc3NhZ2VJZCxcbiAgICAgIGludGVudFR5cGU6IHBhcmFtcy5pbnRlbnRUeXBlLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgIGlzVHNzOiBwYXJhbXMuaXNUc3MsXG4gICAgICBtZXNzYWdlUmF3OiBwYXJhbXMubWVzc2FnZVJhdyxcbiAgICAgIG1lc3NhZ2VFbmNvZGVkOiBwYXJhbXMubWVzc2FnZUVuY29kZWQgPz8gJycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVR4UmVxdWVzdEJhc2UoaW50ZW50T3B0aW9ucywgYXBpVmVyc2lvbiwgcHJldmlldywgcGFyYW1zLnJlcUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzaWduIG1lc3NhZ2UgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzaWduIG1lc3NhZ2UgcmVxdWVzdFxuICAgKiBAcGFyYW0gYXBpVmVyc2lvbiAtIHRoZSBBUEkgdmVyc2lvbiB0byB1c2UsIGRlZmF1bHRzIHRvICdmdWxsJ1xuICAgKi9cbiAgYXN5bmMgYnVpbGRTaWduTWVzc2FnZVJlcXVlc3QoXG4gICAgcGFyYW1zOiBJbnRlbnRPcHRpb25zRm9yTWVzc2FnZSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgYXNzZXJ0KFxuICAgICAgcGFyYW1zLmludGVudFR5cGUgPT09ICdzaWduTWVzc2FnZScsXG4gICAgICAnSW50ZW50IHR5cGUgbXVzdCBiZSBzaWduTWVzc2FnZSBmb3IgY3JlYXRlTXNnUmVxdWVzdFdpdGhTaWduTWVzc2FnZUludGVudCdcbiAgICApO1xuICAgIHRoaXMuYmFzZUNvaW4udmFsaWRhdGVTaWduYWJsZU1lc3NhZ2U/Lih7XG4gICAgICBtZXNzYWdlUmF3OiBwYXJhbXMubWVzc2FnZVJhdyxcbiAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IHBhcmFtcy5tZXNzYWdlU3RhbmRhcmRUeXBlLFxuICAgICAgc2lnbmVyQWRkcmVzczogcGFyYW1zLnNpZ25lckFkZHJlc3MsXG4gICAgfSk7XG4gICAgY29uc3QgaW50ZW50OiBQb3B1bGF0ZWRJbnRlbnRGb3JNZXNzYWdlU2lnbmluZyA9IHtcbiAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogcGFyYW1zLmN1c3RvZGlhbk1lc3NhZ2VJZCxcbiAgICAgIGludGVudFR5cGU6IHBhcmFtcy5pbnRlbnRUeXBlLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgIGlzVHNzOiBwYXJhbXMuaXNUc3MsXG4gICAgICBtZXNzYWdlUmF3OiBwYXJhbXMubWVzc2FnZVJhdyxcbiAgICAgIG1lc3NhZ2VTdGFuZGFyZFR5cGU6IHBhcmFtcy5tZXNzYWdlU3RhbmRhcmRUeXBlID8/IE1lc3NhZ2VTdGFuZGFyZFR5cGUuVU5LTk9XTixcbiAgICAgIG1lc3NhZ2VFbmNvZGVkOiBwYXJhbXMubWVzc2FnZUVuY29kZWQgPz8gJycsXG4gICAgICBzaWduZXJBZGRyZXNzOiBwYXJhbXMuc2lnbmVyQWRkcmVzcyxcbiAgICAgIHByZXBhcmVkVHJhbnNhY3Rpb246IHBhcmFtcy5wcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZFNpZ25NZXNzYWdlUmVxdWVzdEJhc2UoaW50ZW50LCBhcGlWZXJzaW9uLCBwYXJhbXMucmVxSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHR4IHJlcXVlc3QgZnJvbSBwYXJhbXMgZm9yIHR5cGUgZGF0YSBzaWduaW5nXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIGFwaVZlcnNpb25cbiAgICogQHBhcmFtIHByZXZpZXdcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVR4UmVxdWVzdFdpdGhJbnRlbnRGb3JUeXBlZERhdGFTaWduaW5nKFxuICAgIHBhcmFtczogSW50ZW50T3B0aW9uc0ZvclR5cGVkRGF0YSxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uID0gJ2Z1bGwnLFxuICAgIHByZXZpZXc/OiBib29sZWFuXG4gICk6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgY29uc3QgaW50ZW50T3B0aW9uczogUG9wdWxhdGVkSW50ZW50Rm9yVHlwZWREYXRhU2lnbmluZyA9IHtcbiAgICAgIGN1c3RvZGlhbk1lc3NhZ2VJZDogcGFyYW1zLmN1c3RvZGlhbk1lc3NhZ2VJZCxcbiAgICAgIGludGVudFR5cGU6IHBhcmFtcy5pbnRlbnRUeXBlLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgICBjb21tZW50OiBwYXJhbXMuY29tbWVudCxcbiAgICAgIG1lbW86IHBhcmFtcy5tZW1vPy52YWx1ZSxcbiAgICAgIGlzVHNzOiBwYXJhbXMuaXNUc3MsXG4gICAgICBtZXNzYWdlUmF3OiBwYXJhbXMudHlwZWREYXRhUmF3LFxuICAgICAgbWVzc2FnZUVuY29kZWQ6IHBhcmFtcy50eXBlZERhdGFFbmNvZGVkID8/ICcnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUeFJlcXVlc3RCYXNlKGludGVudE9wdGlvbnMsIGFwaVZlcnNpb24sIHByZXZpZXcsIHBhcmFtcy5yZXFJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgQml0Z28gQVBJIHRvIGNyZWF0ZSB0eCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVUeFJlcXVlc3RCYXNlKFxuICAgIGludGVudE9wdGlvbnM6IFBvcHVsYXRlZEludGVudEZvclR5cGVkRGF0YVNpZ25pbmcgfCBQb3B1bGF0ZWRJbnRlbnRGb3JNZXNzYWdlU2lnbmluZyxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uLFxuICAgIHByZXZpZXc/OiBib29sZWFuLFxuICAgIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICAvLyBUT0RPKFdDTi01NDEpOiBhZGQgb3B0aW9uYWwgYXR0ZXN0YXRpb24gcGFzcy10aHJvdWdoIGZvciBNUEMgL3R4cmVxdWVzdHMgKGRlZmVycmVkIHVudGlsXG4gICAgLy8gbXVsdGlzaWcgYXR0ZXN0YXRpb24sIFdDTi01MzksIGlzIHZlcmlmaWVkIGVuZC10by1lbmQgb24gc3RhZ2luZykuXG4gICAgY29uc3Qgd2hpdGVsaXN0ZWRQYXJhbXMgPSB7XG4gICAgICBpbnRlbnQ6IHtcbiAgICAgICAgLi4uaW50ZW50T3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcHJldmlldyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVxVHJhY2VyID0gcmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS90eHJlcXVlc3RzYCwgMikpXG4gICAgICAuc2VuZCh3aGl0ZWxpc3RlZFBhcmFtcylcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBCaXRnbyBBUEkgdG8gY3JlYXRlIG1zZyByZXF1ZXN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFNpZ25NZXNzYWdlUmVxdWVzdEJhc2UoXG4gICAgaW50ZW50OiBQb3B1bGF0ZWRJbnRlbnRGb3JNZXNzYWdlU2lnbmluZyxcbiAgICBhcGlWZXJzaW9uOiBUeFJlcXVlc3RWZXJzaW9uLFxuICAgIHJlcUlkPzogSVJlcXVlc3RUcmFjZXJcbiAgKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBjb25zdCB3aGl0ZWxpc3RlZFBhcmFtcyA9IHtcbiAgICAgIGludGVudDoge1xuICAgICAgICAuLi5pbnRlbnQsXG4gICAgICB9LFxuICAgICAgYXBpVmVyc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVxVHJhY2VyID0gcmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iaXRnby51cmwoYC93YWxsZXQvJHt0aGlzLndhbGxldC5pZCgpfS9tc2dyZXF1ZXN0c2AsIDIpKVxuICAgICAgLnNlbmQod2hpdGVsaXN0ZWRQYXJhbXMpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBkZWxldGUgc2lnbmF0dXJlIHNoYXJlcyBmb3IgYSB0eFJlcXVlc3QsIHRoZSBlbmRwb2ludCBkZWxldGUgdGhlIHNpZ25hdHVyZXMgYW5kIHJldHVybiB0aGVtXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eFJlcXVlc3RJZCB0eCBpZCByZWZlcmVuY2UgdG8gZGVsZXRlIHNpZ25hdHVyZSBzaGFyZXNcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7U2lnbmF0dXJlU2hhcmVSZWNvcmRbXX1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZDogc3RyaW5nLCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZFtdPiB7XG4gICAgY29uc3QgcmVxVHJhY2VyID0gcmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxVHJhY2VyKTtcbiAgICByZXR1cm4gdGhpcy5iaXRnb1xuICAgICAgLmRlbCh0aGlzLmJpdGdvLnVybChgL3dhbGxldC8ke3RoaXMud2FsbGV0LmlkKCl9L3R4cmVxdWVzdHMvJHt0eFJlcXVlc3RJZH0vc2lnbmF0dXJlc2hhcmVzYCwgMikpXG4gICAgICAuc2VuZCgpXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VuZCBwcm9jZWR1cmUgb25jZSBCaXRnbyBoYXMgdGhlIFVzZXIgVG8gQml0Z28gR1NoYXJlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSB0aGUgcmVxdWVzdCB0cmFjZXIgcmVxdWVzdCBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgYXN5bmMgc2VuZFR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCByZXFJZD86IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXFUcmFjZXIgPSByZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFUcmFjZXIpO1xuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL3dhbGxldC8nICsgdGhpcy53YWxsZXQuaWQoKSArICcvdHgvc2VuZCcpKVxuICAgICAgLnNlbmQoeyB0eFJlcXVlc3RJZCB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzaWduYXR1cmUgc2hhcmVzLCBnZXQgdGhlIHR4IHJlcXVlc3Qgd2l0aG91dCB0aGVtIGZyb20gdGhlIGRiIGFuZCBzaWduIGl0IHRvIGZpbmFsbHkgc2VuZCBpdC5cbiAgICpcbiAgICogTm90ZSA6IFRoaXMgY2FuIGJlIHBlcmZvcm1lZCBpbiBvcmRlciB0byByZWFjaCBsYXRlc3QgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmVkIG9uIHBlbmRpbmcgYXBwcm92YWwgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZCB0byBtYWtlIHRoZSByZXF1ZXN0cy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlY3J5cHRlZFBydiAtIGRlY3J5cHRlZCBwcnYgdG8gc2lnbiB0aGUgdHggcmVxdWVzdC5cbiAgICogQHBhcmFtIHtSZXF1ZXN0VHJhY2VyfSByZXFJZCBpZCB0cmFjZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyByZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZDogc3RyaW5nLCBkZWNyeXB0ZWRQcnY6IHN0cmluZywgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZVNpZ25hdHVyZVNoYXJlcyh0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICAgIC8vIGFmdGVyIGRlbGV0ZSBzaWduYXR1cmVzIHNoYXJlcyBnZXQgdGhlIHR4IHdpdGhvdXQgdGhlbVxuICAgIGNvbnN0IHR4UmVxdWVzdCA9IGF3YWl0IHRoaXMuZ2V0VHhSZXF1ZXN0KHR4UmVxdWVzdElkLCByZXFJZCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2lnblR4UmVxdWVzdCh7IHR4UmVxdWVzdCwgcHJ2OiBkZWNyeXB0ZWRQcnYsIHJlcUlkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBUeCBSZXF1ZXN0IGJ5IGlkXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAgICogQHBhcmFtIHtJUmVxdWVzdFRyYWNlcn0gcmVxSWQgLSByZXF1ZXN0IHRyYWNlciByZXF1ZXN0IGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFR4UmVxdWVzdD59XG4gICAqL1xuICBhc3luYyBnZXRUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZywgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gICAgcmV0dXJuIGdldFR4UmVxdWVzdCh0aGlzLmJpdGdvLCB0aGlzLndhbGxldC5pZCgpLCB0eFJlcXVlc3RJZCwgcmVxSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGdldHMgdGhlIGFwcHJvcHJpYXRlIEJpdEdvIEdQRyBwdWJsaWMga2V5cyBmb3Iga2V5IGNyZWF0aW9uIGJhc2VkIG9uIGFcbiAgICogY29tYmluYXRpb24gb2YgY29pbiBhbmQgdGhlIGZlYXR1cmUgZmxhZ3Mgb24gdGhlIHVzZXIgYW5kIHRoZWlyIGVudGVycHJpc2UgaWYgc2V0LlxuICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IE1QQ3YyIGtleSwgdGhlIEVkRFNBLXNwZWNpZmljIE1QQ3YyIGtleSwgYW5kIHRoZSBSZWRQYWxsYXMtc3BlY2lmaWNcbiAgICogTVBDdjIga2V5IChlYWNoIGlmIHByZXNlbnQpLlxuICAgKiBAcGFyYW0gZW50ZXJwcmlzZUlkIC0gZW50ZXJwcmlzZSB1bmRlciB3aGljaCB1c2VyIHdhbnRzIHRvIGNyZWF0ZSB0aGUgd2FsbGV0XG4gICAqIEBwYXJhbSBpc01QQ3YyIC0gdHJ1ZSB0byBnZXQgdGhlIE1QQ3YyIEdQRyBwdWJsaWMga2V5LCBkZWZhdWx0cyB0byBmYWxzZVxuICAgKiBAcGFyYW0gcmVxSWQgLSByZXF1ZXN0IHRyYWNlciByZXF1ZXN0IGlkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzKFxuICAgIGVudGVycHJpc2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGlzTVBDdjIgPSBmYWxzZSxcbiAgICByZXFJZD86IElSZXF1ZXN0VHJhY2VyXG4gICk6IFByb21pc2U8eyBtcGN2MlB1YmxpY0tleTogS2V5OyBlZGRzYU1wY3YyUHVibGljS2V5OiBLZXkgfCB1bmRlZmluZWQ7IHJlZHBhbGxhc01wY3YyUHVibGljS2V5OiBLZXkgfCB1bmRlZmluZWQgfT4ge1xuICAgIGNvbnN0IHJlcVRyYWNlciA9IHJlcUlkIHx8IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcVRyYWNlcik7XG4gICAgY29uc3QgcmVzcG9uc2U6IEJpdGdvR1BHUHVibGljS2V5ID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL3Rzcy9wdWJrZXknKSlcbiAgICAgIC5xdWVyeSh7IGVudGVycHJpc2VJZCB9KVxuICAgICAgLnJldHJ5KDMpXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3QgbXBjdjJQdWJsaWNLZXkgPSBhd2FpdCByZWFkS2V5KHtcbiAgICAgIGFybW9yZWRLZXk6IChpc01QQ3YyID8gcmVzcG9uc2UubXBjdjJQdWJsaWNLZXkgOiByZXNwb25zZS5wdWJsaWNLZXkpIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgICBjb25zdCBlZGRzYU1wY3YyUHVibGljS2V5ID0gcmVzcG9uc2UuZWRkc2FNcGN2MlB1YmxpY0tleVxuICAgICAgPyBhd2FpdCByZWFkS2V5KHsgYXJtb3JlZEtleTogcmVzcG9uc2UuZWRkc2FNcGN2MlB1YmxpY0tleSB9KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVkcGFsbGFzTXBjdjJQdWJsaWNLZXkgPSByZXNwb25zZS5yZWRwYWxsYXNNcGN2MlB1YmxpY0tleVxuICAgICAgPyBhd2FpdCByZWFkS2V5KHsgYXJtb3JlZEtleTogcmVzcG9uc2UucmVkcGFsbGFzTXBjdjJQdWJsaWNLZXkgfSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IG1wY3YyUHVibGljS2V5LCBlZGRzYU1wY3YyUHVibGljS2V5LCByZWRwYWxsYXNNcGN2MlB1YmxpY0tleSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3VwcG9ydGVkIFR4UmVxdWVzdCB2ZXJzaW9ucyBmb3IgdGhpcyB3YWxsZXRcbiAgICogQGRlcHJlY2F0ZWQgV2hlbmV2ZXIgbmVlZGVkLCB1c2UgYXBpVmVyc2lvbiAnZnVsbCcgZm9yIFRTUyB3YWxsZXRzXG4gICAqL1xuICBwdWJsaWMgc3VwcG9ydGVkVHhSZXF1ZXN0VmVyc2lvbnMoKTogVHhSZXF1ZXN0VmVyc2lvbltdIHtcbiAgICBpZiAoIXRoaXMuX3dhbGxldCB8fCB0aGlzLl93YWxsZXQudHlwZSgpID09PSAndHJhZGluZycgfHwgdGhpcy5fd2FsbGV0Lm11bHRpc2lnVHlwZSgpICE9PSAndHNzJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fd2FsbGV0LmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpID09PSAnZWNkc2EnKSB7XG4gICAgICByZXR1cm4gWydmdWxsJ107XG4gICAgfSBlbHNlIGlmICh0aGlzLl93YWxsZXQuYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgPT09ICdlZGRzYScgJiYgdGhpcy5fd2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCcpIHtcbiAgICAgIGlmICh0aGlzLl93YWxsZXQubXVsdGlzaWdUeXBlVmVyc2lvbigpID09PSAnTVBDdjInKSB7XG4gICAgICAgIHJldHVybiBbJ2Z1bGwnXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbJ2xpdGUnLCAnZnVsbCddO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gWydmdWxsJ107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHhSZXF1ZXN0IGlzIHVzaW5nIGFwaVZlcnNpb24gPT0gZnVsbCBhbmQgaXMgcGVuZGluZyBhcHByb3ZhbFxuICAgKiBAcGFyYW0gdHhSZXF1ZXN0XG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIGlzUGVuZGluZ0FwcHJvdmFsVHhSZXF1ZXN0RnVsbCh0eFJlcXVlc3Q6IFR4UmVxdWVzdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgYXBpVmVyc2lvbiwgc3RhdGUgfSA9IHR4UmVxdWVzdDtcbiAgICByZXR1cm4gYXBpVmVyc2lvbiA9PT0gJ2Z1bGwnICYmICdwZW5kaW5nQXBwcm92YWwnID09PSBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hYmxlIGhleCwgZGVyaXZhdGlvbiBwYXRoLCBhbmQgc2VyaWFsaXplZCB0eCBoZXggZnJvbSBhIGZ1bGwgc2luZ2xlLXRyYW5zYWN0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7VHhSZXF1ZXN0fSB0eFJlcXVlc3QgLSB0aGUgdHJhbnNhY3Rpb24gcmVxdWVzdCBvYmplY3RcbiAgICogQHJldHVybnMge3sgc2lnbmFibGVIZXg6IHN0cmluZzsgZGVyaXZhdGlvblBhdGg6IHN0cmluZzsgc2VyaWFsaXplZFR4SGV4OiBzdHJpbmcgfCB1bmRlZmluZWQgfX0gLSB0aGUgc2lnbmFibGUgaGV4LCBkZXJpdmF0aW9uIHBhdGgsIGFuZCBzZXJpYWxpemVkIHR4IGhleFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGgoXG4gICAgdHhSZXF1ZXN0OiBUeFJlcXVlc3QsXG4gICAgbWlzc2luZ1RyYW5zYWN0aW9uc01lc3NhZ2UgPSAnY3JlYXRlT2ZmbGluZVNoYXJlIHJlcXVpcmVzIGV4YWN0bHkgb25lIHRyYW5zYWN0aW9uIGluIHR4UmVxdWVzdCdcbiAgKToge1xuICAgIHNpZ25hYmxlSGV4OiBzdHJpbmc7XG4gICAgZGVyaXZhdGlvblBhdGg6IHN0cmluZztcbiAgICBzZXJpYWxpemVkVHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgYXNzZXJ0KHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgJiYgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEsIG1pc3NpbmdUcmFuc2FjdGlvbnNNZXNzYWdlKTtcbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS51bnNpZ25lZFR4O1xuICAgIGFzc2VydCh1bnNpZ25lZFR4LCAnTWlzc2luZyB1bnNpZ25lZFR4IGluIHRyYW5zYWN0aW9ucycpO1xuICAgIGFzc2VydCh1bnNpZ25lZFR4LnNpZ25hYmxlSGV4LCAnTWlzc2luZyBzaWduYWJsZUhleCBpbiB1bnNpZ25lZFR4Jyk7XG4gICAgYXNzZXJ0KHVuc2lnbmVkVHguZGVyaXZhdGlvblBhdGgsICdNaXNzaW5nIGRlcml2YXRpb25QYXRoIGluIHVuc2lnbmVkVHgnKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2lnbmFibGVIZXg6IHVuc2lnbmVkVHguc2lnbmFibGVIZXgsXG4gICAgICBkZXJpdmF0aW9uUGF0aDogdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aCxcbiAgICAgIHNlcmlhbGl6ZWRUeEhleDogdW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBCaXRHbyBhbmQgdXNlciBHUEcga2V5cyBmcm9tIHRoZSBCaXRHbyBwdWJsaWMgR1BHIGtleSBhbmQgdGhlIGVuY3J5cHRlZCB1c2VyIEdQRyBwcml2YXRlIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJpdGdvUHVibGljR3BnS2V5IC0gdGhlIEJpdEdvIHB1YmxpYyBHUEcga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5IC0gdGhlIGVuY3J5cHRlZCB1c2VyIEdQRyBwcml2YXRlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gd2FsbGV0UGFzc3BocmFzZSAtIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRhdGEgLSB0aGUgYWRkaXRpb25hbCBkYXRhIHRvIHZhbGlkYXRlIHRoZSBHUEcga2V5c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlckdwZ0tleURvbWFpblNlcGFyYXRvciAtIHRoZSBkb21haW4gc2VwYXJhdG9yIGV4cGVjdGVkIGluIHRoZSBlbmNyeXB0ZWQgR1BHIGtleSBhZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IGJpdGdvR3BnS2V5OiBvcGVucGdwLktleTsgdXNlckdwZ1BydktleTogb3BlbnBncC5Qcml2YXRlS2V5IH0+fSAtIHRoZSBCaXRHbyBhbmQgdXNlciBHUEcga2V5c1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEJpdGdvQW5kVXNlckdwZ0tleXMoXG4gICAgYml0Z29QdWJsaWNHcGdLZXk6IHN0cmluZyxcbiAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBzdHJpbmcsXG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nLFxuICAgIGFkYXRhOiBzdHJpbmcsXG4gICAgdXNlckdwZ0tleURvbWFpblNlcGFyYXRvcjogc3RyaW5nXG4gICk6IFByb21pc2U8e1xuICAgIGJpdGdvR3BnS2V5OiBvcGVucGdwLktleTtcbiAgICB1c2VyR3BnUHJ2S2V5OiBvcGVucGdwLlByaXZhdGVLZXk7XG4gIH0+IHtcbiAgICBjb25zdCBiaXRnb0dwZ0tleSA9IGF3YWl0IG9wZW5wZ3AucmVhZEtleSh7IGFybW9yZWRLZXk6IGJpdGdvUHVibGljR3BnS2V5IH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkR3BnUHJ2S2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICBpZiAoYWRhdGEpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGF0YShhZGF0YSwgZW5jcnlwdGVkVXNlckdwZ1BydktleSwgdXNlckdwZ0tleURvbWFpblNlcGFyYXRvcik7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJHcGdQcnZLZXkgPSBhd2FpdCBvcGVucGdwLnJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogZGVjcnlwdGVkR3BnUHJ2S2V5IH0pO1xuICAgIHJldHVybiB7IGJpdGdvR3BnS2V5LCB1c2VyR3BnUHJ2S2V5IH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGVuY3J5cHRpb24gYWRkaXRpb25hbCBhdXRoZW50aWNhdGVkIGRhdGEgYWdhaW5zdCB0aGUgY2lwaGVydGV4dCBlbnZlbG9wZS5cbiAgICogQHBhcmFtIGFkYXRhIHN0cmluZ1xuICAgKiBAcGFyYW0gY3lwaGVydGV4dCBzdHJpbmdcbiAgICogQHBhcmFtIHJvdW5kRG9tYWluU2VwYXJhdG9yIHN0cmluZ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFkYXRhIG9yIGN5cGhlcnRleHQgaXMgaW52YWxpZFxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQWRhdGEoYWRhdGE6IHN0cmluZywgY3lwaGVydGV4dDogc3RyaW5nLCByb3VuZERvbWFpblNlcGFyYXRvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGN5cGhlckpzb247XG4gICAgdHJ5IHtcbiAgICAgIGN5cGhlckpzb24gPSBKU09OLnBhcnNlKGN5cGhlcnRleHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHBhcnNlIGN5cGhlcnRleHQgdG8gSlNPTiwgZ290OiAnICsgY3lwaGVydGV4dCk7XG4gICAgfVxuICAgIC8vIHVzaW5nIGRlY29kZVVSSUNvbXBvbmVudCB0byBoYW5kbGUgc3BlY2lhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKFxuICAgICAgZGVjb2RlVVJJQ29tcG9uZW50KGN5cGhlckpzb24uYWRhdGEpICE9PSBkZWNvZGVVUklDb21wb25lbnQoYCR7cm91bmREb21haW5TZXBhcmF0b3J9OiR7YWRhdGF9YCkgJiZcbiAgICAgIGRlY29kZVVSSUNvbXBvbmVudChjeXBoZXJKc29uLmFkYXRhKSAhPT0gZGVjb2RlVVJJQ29tcG9uZW50KGFkYXRhKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhJyk7XG4gICAgfVxuICB9XG59XG4iXX0=