@bitgo-beta/sdk-coin-sol 7.6.4-beta.71 → 7.6.4-beta.710
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.
- package/dist/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
- package/dist/cjs/src/bigint-buffer-guard.js +29 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +12 -1
- package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/ataInitializationBuilder.js +231 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts +55 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/closeAtaBuilder.js +162 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +128 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.js +311 -0
- package/dist/{src → cjs/src}/lib/constants.d.ts +89 -2
- package/dist/cjs/src/lib/constants.d.ts.map +1 -0
- package/dist/cjs/src/lib/constants.js +269 -0
- package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/src/lib/explainTransactionWasm.js +304 -0
- package/dist/cjs/src/lib/iface.d.ts +526 -0
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +7 -0
- package/dist/{src → cjs/src}/lib/index.d.ts +5 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/index.js +93 -0
- package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
- package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/instructionParamsFactory.js +1220 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
- package/dist/{src → cjs/src}/lib/keyPair.d.ts +6 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +112 -0
- package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
- package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
- package/dist/cjs/src/lib/scaledUiAmount.d.ts +30 -0
- package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
- package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +27 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.js +196 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +30 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +205 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts +9 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.js +58 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
- package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
- package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/solInstructionFactory.js +1094 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.js +129 -0
- package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
- package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDeactivateBuilder.js +214 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.js +126 -0
- package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
- package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingWithdrawBuilder.js +87 -0
- package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
- package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
- package/dist/cjs/src/lib/token2022Resolve.js +199 -0
- package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
- package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenExtensions.js +105 -0
- package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
- package/dist/{src → cjs/src}/lib/transaction.d.ts +22 -0
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +661 -0
- package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +9 -1
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +388 -0
- package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +14 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +222 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +81 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilderV2.js +252 -0
- package/dist/{src → cjs/src}/lib/utils.d.ts +5 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +657 -0
- package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
- package/dist/cjs/src/register.d.ts +5 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +29 -0
- package/dist/{src → cjs/src}/sol.d.ts +114 -3
- package/dist/cjs/src/sol.d.ts.map +1 -0
- package/dist/cjs/src/sol.js +1670 -0
- package/dist/{src → cjs/src}/solToken.d.ts +7 -0
- package/dist/cjs/src/solToken.d.ts.map +1 -0
- package/dist/cjs/src/solToken.js +79 -0
- package/dist/cjs/src/tsol.d.ts.map +1 -0
- package/dist/cjs/src/tsol.js +24 -0
- package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
- package/dist/cjs/test/fixtures/sol.js +1433 -0
- package/dist/{test → cjs/test}/resources/sol.d.ts +29 -29
- package/dist/cjs/test/resources/sol.d.ts.map +1 -0
- package/dist/cjs/test/resources/sol.js +320 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransactionWasm.js +66 -0
- package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
- package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
- package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/instructionParamsFactory.js +425 -0
- package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
- package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
- package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
- package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
- package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
- package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
- package/dist/cjs/test/unit/keyPair.js +177 -0
- package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
- package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
- package/dist/cjs/test/unit/register.d.ts +2 -0
- package/dist/cjs/test/unit/register.d.ts.map +1 -0
- package/dist/cjs/test/unit/register.js +65 -0
- package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
- package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
- package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.js +63 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.js +90 -0
- package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
- package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
- package/dist/cjs/test/unit/sol.js +5038 -0
- package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/solInstructionFactory.js +623 -0
- package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
- package/dist/cjs/test/unit/solToken.js +37 -0
- package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
- package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
- package/dist/cjs/test/unit/token2022Resolve.js +252 -0
- package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
- package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
- package/dist/cjs/test/unit/tokenExtensions.js +58 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +1108 -0
- package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +508 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +343 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +909 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +144 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +167 -0
- package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
- package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +926 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +302 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -0
- package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
- package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
- package/dist/cjs/test/unit/utils.js +628 -0
- package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/versionedTransaction.js +207 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/bigint-buffer-guard.d.ts +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/esm/lib/ataInitializationBuilder.js +191 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/closeAtaBuilder.js +155 -0
- package/dist/esm/lib/confidentialTransferBuilder.d.ts +128 -0
- package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/confidentialTransferBuilder.js +304 -0
- package/dist/esm/lib/constants.d.ts +227 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +266 -0
- package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
- package/dist/esm/lib/customInstructionBuilder.js +282 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/esm/lib/explainTransactionWasm.js +301 -0
- package/dist/esm/lib/iface.d.ts +526 -0
- package/dist/esm/lib/iface.d.ts.map +1 -0
- package/dist/esm/lib/iface.js +3 -0
- package/dist/esm/lib/index.d.ts +27 -0
- package/dist/esm/lib/index.d.ts.map +1 -0
- package/dist/esm/lib/index.js +27 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/esm/lib/instructionParamsFactory.js +1212 -0
- package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
- package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
- package/dist/esm/lib/keyPair.d.ts +32 -0
- package/dist/esm/lib/keyPair.d.ts.map +1 -0
- package/dist/esm/lib/keyPair.js +75 -0
- package/dist/esm/lib/messages/index.d.ts +2 -0
- package/dist/esm/lib/messages/index.js +2 -0
- package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
- package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
- package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
- package/dist/esm/lib/scaledUiAmount.d.ts +30 -0
- package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
- package/dist/esm/lib/scaledUiAmount.js +108 -0
- package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
- package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
- package/dist/esm/lib/serialization/codecs/v1/message.d.ts +27 -0
- package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/message.js +188 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +30 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.js +202 -0
- package/dist/esm/lib/serialization/parseWireTransaction.d.ts +9 -0
- package/dist/esm/lib/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/parseWireTransaction.js +50 -0
- package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
- package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/wire-transaction.js +48 -0
- package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
- package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/esm/lib/solInstructionFactory.js +1088 -0
- package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
- package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingActivateBuilder.js +122 -0
- package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
- package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
- package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
- package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingDeactivateBuilder.js +207 -0
- package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
- package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingDelegateBuilder.js +119 -0
- package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
- package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
- package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
- package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingWithdrawBuilder.js +80 -0
- package/dist/esm/lib/token2022Resolve.d.ts +106 -0
- package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
- package/dist/esm/lib/token2022Resolve.js +194 -0
- package/dist/esm/lib/tokenExtensions.d.ts +26 -0
- package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
- package/dist/esm/lib/tokenExtensions.js +99 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tokenTransferBuilder.js +230 -0
- package/dist/esm/lib/transaction.d.ts +125 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +654 -0
- package/dist/esm/lib/transactionBuilder.d.ts +136 -0
- package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilder.js +381 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +129 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilderFactory.js +218 -0
- package/dist/esm/lib/transferBuilder.d.ts +26 -0
- package/dist/{src → esm}/lib/transferBuilder.d.ts.map +1 -1
- package/dist/esm/lib/transferBuilder.js +74 -0
- package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
- package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/esm/lib/transferBuilderV2.js +245 -0
- package/dist/esm/lib/utils.d.ts +205 -0
- package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +619 -0
- package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
- package/dist/esm/lib/walletInitializationBuilder.js +64 -0
- package/dist/esm/register.d.ts +5 -0
- package/dist/esm/register.d.ts.map +1 -0
- package/dist/esm/register.js +24 -0
- package/dist/esm/sol.d.ts +351 -0
- package/dist/esm/sol.d.ts.map +1 -0
- package/dist/esm/sol.js +1629 -0
- package/dist/esm/solToken.d.ts +44 -0
- package/dist/esm/solToken.d.ts.map +1 -0
- package/dist/esm/solToken.js +75 -0
- package/dist/esm/tsol.d.ts +11 -0
- package/dist/esm/tsol.js +20 -0
- package/package.json +36 -16
- package/dist/src/config/token2022StaticConfig.d.ts +0 -3
- package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
- package/dist/src/config/token2022StaticConfig.js +0 -50
- package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/ataInitializationBuilder.js +0 -196
- package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
- package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
- package/dist/src/lib/closeAtaBuilder.js +0 -69
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -171
- package/dist/src/lib/customInstructionBuilder.js +0 -289
- package/dist/src/lib/iface.d.ts +0 -244
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -7
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -77
- package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
- package/dist/src/lib/instructionParamsFactory.js +0 -1036
- package/dist/src/lib/jitoStakePoolOperations.js +0 -200
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -63
- package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
- package/dist/src/lib/solInstructionFactory.js +0 -572
- package/dist/src/lib/stakingActivateBuilder.js +0 -120
- package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
- package/dist/src/lib/stakingDeactivateBuilder.js +0 -208
- package/dist/src/lib/stakingDelegateBuilder.js +0 -120
- package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
- package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
- package/dist/src/lib/token2022Config.d.ts +0 -44
- package/dist/src/lib/token2022Config.d.ts.map +0 -1
- package/dist/src/lib/token2022Config.js +0 -27
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/src/lib/tokenTransferBuilder.js +0 -188
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -595
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -380
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -202
- package/dist/src/lib/transferBuilder.js +0 -70
- package/dist/src/lib/transferBuilderV2.d.ts +0 -43
- package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
- package/dist/src/lib/transferBuilderV2.js +0 -210
- package/dist/src/lib/utils.js +0 -589
- package/dist/src/lib/walletInitializationBuilder.js +0 -71
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -15
- package/dist/src/sol.d.ts.map +0 -1
- package/dist/src/sol.js +0 -1324
- package/dist/src/solToken.d.ts.map +0 -1
- package/dist/src/solToken.js +0 -69
- package/dist/src/tsol.js +0 -24
- package/dist/test/fixtures/sol.js +0 -1433
- package/dist/test/resources/sol.d.ts.map +0 -1
- package/dist/test/resources/sol.js +0 -320
- package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
- package/dist/test/unit/fixtures/solBackupKey.js +0 -8
- package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/getBuilderFactory.js +0 -10
- package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
- package/dist/test/unit/instructionParamsFactory.js +0 -412
- package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
- package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
- package/dist/test/unit/keyPair.js +0 -177
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
- package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
- package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
- package/dist/test/unit/sol.js +0 -3180
- package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
- package/dist/test/unit/solInstructionFactory.js +0 -454
- package/dist/test/unit/solToken.d.ts.map +0 -1
- package/dist/test/unit/solToken.js +0 -31
- package/dist/test/unit/transaction.d.ts.map +0 -1
- package/dist/test/unit/transaction.js +0 -983
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
- package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
- package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
- package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
- package/dist/test/unit/utils.js +0 -517
- package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
- package/dist/test/unit/versionedTransaction.js +0 -207
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
- /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
- /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
- /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/tsol.d.ts.map +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.explainSolTransaction = explainSolTransaction;
|
|
4
|
+
const wasm_solana_1 = require("@bitgo/wasm-solana");
|
|
5
|
+
const constants_1 = require("./constants");
|
|
6
|
+
const instructionParamsFactory_1 = require("./instructionParamsFactory");
|
|
7
|
+
// =============================================================================
|
|
8
|
+
// Transaction type derivation (ported from @bitgo/wasm-solana explain.ts)
|
|
9
|
+
// =============================================================================
|
|
10
|
+
var TransactionType;
|
|
11
|
+
(function (TransactionType) {
|
|
12
|
+
TransactionType["Send"] = "Send";
|
|
13
|
+
TransactionType["StakingActivate"] = "StakingActivate";
|
|
14
|
+
TransactionType["StakingDeactivate"] = "StakingDeactivate";
|
|
15
|
+
TransactionType["StakingWithdraw"] = "StakingWithdraw";
|
|
16
|
+
TransactionType["StakingAuthorize"] = "StakingAuthorize";
|
|
17
|
+
TransactionType["StakingDelegate"] = "StakingDelegate";
|
|
18
|
+
TransactionType["WalletInitialization"] = "WalletInitialization";
|
|
19
|
+
TransactionType["AssociatedTokenAccountInitialization"] = "AssociatedTokenAccountInitialization";
|
|
20
|
+
TransactionType["CustomTx"] = "CustomTx";
|
|
21
|
+
TransactionType["ConfidentialTransfer"] = "ConfidentialTransfer";
|
|
22
|
+
})(TransactionType || (TransactionType = {}));
|
|
23
|
+
function detectCombinedPattern(instructions) {
|
|
24
|
+
for (let i = 0; i < instructions.length - 1; i++) {
|
|
25
|
+
const curr = instructions[i];
|
|
26
|
+
const next = instructions[i + 1];
|
|
27
|
+
if (curr.type === 'CreateAccount' && next.type === 'StakeInitialize') {
|
|
28
|
+
return {
|
|
29
|
+
kind: 'StakingActivate',
|
|
30
|
+
fromAddress: curr.fromAddress,
|
|
31
|
+
stakingAddress: curr.newAddress,
|
|
32
|
+
amount: curr.amount,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (curr.type === 'CreateAccount' && next.type === 'NonceInitialize') {
|
|
36
|
+
return {
|
|
37
|
+
kind: 'WalletInitialization',
|
|
38
|
+
fromAddress: curr.fromAddress,
|
|
39
|
+
nonceAddress: curr.newAddress,
|
|
40
|
+
amount: curr.amount,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
// =============================================================================
|
|
47
|
+
// Transaction type derivation
|
|
48
|
+
// =============================================================================
|
|
49
|
+
const BOILERPLATE_TYPES = new Set(['NonceAdvance', 'Memo', 'SetComputeUnitLimit', 'SetPriorityFee']);
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if a WASM-parsed Unknown instruction is a confidential transfer instruction
|
|
52
|
+
* (Token-2022 CT extension or zk-elgamal-proof program).
|
|
53
|
+
*
|
|
54
|
+
* CT extension: byte 0 = CT_EXT_DISCRIMINATOR, byte 1 ∈ CT_SUB_DISCRIMINATORS
|
|
55
|
+
* zk-elgamal-proof: any instruction from the zk-elgamal-proof program
|
|
56
|
+
*/
|
|
57
|
+
function isWasmConfidentialTransferInstruction(instr) {
|
|
58
|
+
if (instr.type !== 'Unknown')
|
|
59
|
+
return false;
|
|
60
|
+
const programId = instr.programId;
|
|
61
|
+
// zk-elgamal-proof program instructions are always CT proof verifications
|
|
62
|
+
if (programId === constants_1.ZK_ELGAMAL_PROOF_PROGRAM_ID) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
// Token-2022 CT extension: byte 0 = CT_EXT_DISCRIMINATOR, byte 1 ∈ CT_SUB_DISCRIMINATORS
|
|
66
|
+
const TOKEN_2022_PROGRAM_ID = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';
|
|
67
|
+
if (programId === TOKEN_2022_PROGRAM_ID) {
|
|
68
|
+
const dataBytes = Buffer.from(instr.data, 'base64');
|
|
69
|
+
if (dataBytes.length >= 2) {
|
|
70
|
+
return dataBytes[0] === constants_1.CT_EXT_DISCRIMINATOR && constants_1.CT_SUB_DISCRIMINATORS.has(dataBytes[1]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns true if a WASM-parsed Unknown instruction is a Token ACL permissionless
|
|
77
|
+
* thaw instruction (sRFC-37 Token ACL program).
|
|
78
|
+
*
|
|
79
|
+
* The wasm parser does not know the Token ACL program, so ThawPermissionlessIdempotent
|
|
80
|
+
* instructions parse as Unknown. Mirrors the JS-side `getInstructionType` case for
|
|
81
|
+
* TOKEN_ACL_PROGRAM_ID in lib/utils.ts.
|
|
82
|
+
*/
|
|
83
|
+
function isWasmTokenAclThawInstruction(instr) {
|
|
84
|
+
return instr.type === 'Unknown' && instr.programId === constants_1.TOKEN_ACL_PROGRAM_ID;
|
|
85
|
+
}
|
|
86
|
+
function deriveTransactionType(instructions, combined, memo) {
|
|
87
|
+
if (combined)
|
|
88
|
+
return TransactionType[combined.kind];
|
|
89
|
+
// Marinade deactivate: Transfer + memo containing "PrepareForRevoke"
|
|
90
|
+
if (memo?.includes('PrepareForRevoke'))
|
|
91
|
+
return TransactionType.StakingDeactivate;
|
|
92
|
+
// Jito pool operations
|
|
93
|
+
if (instructions.some((i) => i.type === 'StakePoolDepositSol'))
|
|
94
|
+
return TransactionType.StakingActivate;
|
|
95
|
+
if (instructions.some((i) => i.type === 'StakePoolWithdrawStake'))
|
|
96
|
+
return TransactionType.StakingDeactivate;
|
|
97
|
+
// ATA-only transactions (ignoring boilerplate and Token ACL permissionless thaw)
|
|
98
|
+
const meaningful = instructions.filter((i) => !BOILERPLATE_TYPES.has(i.type) && !isWasmTokenAclThawInstruction(i));
|
|
99
|
+
if (meaningful.length > 0 && meaningful.every((i) => i.type === 'CreateAssociatedTokenAccount')) {
|
|
100
|
+
return TransactionType.AssociatedTokenAccountInitialization;
|
|
101
|
+
}
|
|
102
|
+
// Direct staking instruction mapping
|
|
103
|
+
const staking = instructions.find((i) => i.type in TransactionType);
|
|
104
|
+
if (staking)
|
|
105
|
+
return TransactionType[staking.type];
|
|
106
|
+
// Unknown instructions indicate a custom/unrecognized transaction
|
|
107
|
+
if (instructions.some((i) => i.type === 'Unknown' && isWasmConfidentialTransferInstruction(i))) {
|
|
108
|
+
return TransactionType.ConfidentialTransfer;
|
|
109
|
+
}
|
|
110
|
+
if (instructions.some((i) => i.type === 'Unknown' && !isWasmTokenAclThawInstruction(i)))
|
|
111
|
+
return TransactionType.CustomTx;
|
|
112
|
+
// Send requires an explicit Transfer or TokenTransfer instruction.
|
|
113
|
+
// Everything else is a custom/unrecognized transaction.
|
|
114
|
+
if (instructions.some((i) => i.type === 'Transfer' || i.type === 'TokenTransfer'))
|
|
115
|
+
return TransactionType.Send;
|
|
116
|
+
return TransactionType.CustomTx;
|
|
117
|
+
}
|
|
118
|
+
// =============================================================================
|
|
119
|
+
// Transaction ID extraction
|
|
120
|
+
// =============================================================================
|
|
121
|
+
// Base58 encoding of 64 zero bytes (unsigned transactions have all-zero signatures)
|
|
122
|
+
const ALL_ZEROS_BASE58 = '1111111111111111111111111111111111111111111111111111111111111111';
|
|
123
|
+
function extractTransactionId(signatures) {
|
|
124
|
+
const sig = signatures[0];
|
|
125
|
+
if (!sig || sig === ALL_ZEROS_BASE58)
|
|
126
|
+
return undefined;
|
|
127
|
+
return sig;
|
|
128
|
+
}
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// Staking authorize mapping
|
|
131
|
+
// =============================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Map WASM StakingAuthorize instruction to the legacy BitGoJS shape.
|
|
134
|
+
* BitGoJS uses different field names for Staker vs Withdrawer authority changes.
|
|
135
|
+
*/
|
|
136
|
+
function mapStakingAuthorize(instr) {
|
|
137
|
+
if (instr.authorizeType === 'Withdrawer') {
|
|
138
|
+
return {
|
|
139
|
+
stakingAddress: instr.stakingAddress,
|
|
140
|
+
oldWithdrawAddress: instr.oldAuthorizeAddress,
|
|
141
|
+
newWithdrawAddress: instr.newAuthorizeAddress,
|
|
142
|
+
custodianAddress: instr.custodianAddress,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Staker authority change
|
|
146
|
+
return {
|
|
147
|
+
stakingAddress: instr.stakingAddress,
|
|
148
|
+
oldWithdrawAddress: '',
|
|
149
|
+
newWithdrawAddress: '',
|
|
150
|
+
oldStakingAuthorityAddress: instr.oldAuthorizeAddress,
|
|
151
|
+
newStakingAuthorityAddress: instr.newAuthorizeAddress,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// =============================================================================
|
|
155
|
+
// Main explain function
|
|
156
|
+
// =============================================================================
|
|
157
|
+
/**
|
|
158
|
+
* Standalone WASM-based transaction explanation.
|
|
159
|
+
*
|
|
160
|
+
* Parses the transaction via `parseTransaction(tx)` from @bitgo/wasm-solana,
|
|
161
|
+
* then derives the transaction type, extracts outputs/inputs, computes fees,
|
|
162
|
+
* and maps to BitGoJS TransactionExplanation format.
|
|
163
|
+
*
|
|
164
|
+
* The explain logic was ported from wasm-solana per the convention that
|
|
165
|
+
* `explainTransaction` belongs in BitGoJS, not in wasm-* packages.
|
|
166
|
+
*/
|
|
167
|
+
function explainSolTransaction(params) {
|
|
168
|
+
const txBytes = Buffer.from(params.txBase64, 'base64');
|
|
169
|
+
const tx = wasm_solana_1.Transaction.fromBytes(txBytes);
|
|
170
|
+
const parsed = (0, wasm_solana_1.parseTransaction)(tx);
|
|
171
|
+
// --- Transaction ID ---
|
|
172
|
+
const id = extractTransactionId(parsed.signatures);
|
|
173
|
+
// --- Fee calculation ---
|
|
174
|
+
const lamportsPerSignature = params.feeInfo ? BigInt(params.feeInfo.fee) : 0n;
|
|
175
|
+
let fee = BigInt(parsed.numSignatures) * lamportsPerSignature;
|
|
176
|
+
// Each CreateAssociatedTokenAccount creates a new token account requiring a rent deposit.
|
|
177
|
+
const ataCount = parsed.instructionsData.filter((i) => i.type === 'CreateAssociatedTokenAccount').length;
|
|
178
|
+
if (ataCount > 0 && params.tokenAccountRentExemptAmount) {
|
|
179
|
+
fee += BigInt(ataCount) * BigInt(params.tokenAccountRentExemptAmount);
|
|
180
|
+
}
|
|
181
|
+
// --- Extract memo (needed before type derivation) ---
|
|
182
|
+
let memo;
|
|
183
|
+
for (const instr of parsed.instructionsData) {
|
|
184
|
+
if (instr.type === 'Memo') {
|
|
185
|
+
memo = instr.memo;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// --- Detect combined patterns and derive type ---
|
|
189
|
+
const combined = detectCombinedPattern(parsed.instructionsData);
|
|
190
|
+
const txType = deriveTransactionType(parsed.instructionsData, combined, memo);
|
|
191
|
+
// Marinade deactivate: Transfer + PrepareForRevoke memo.
|
|
192
|
+
// The Transfer is a contract interaction, not real value transfer — skip from outputs.
|
|
193
|
+
const isMarinadeDeactivate = txType === TransactionType.StakingDeactivate && memo !== undefined && memo.includes('PrepareForRevoke');
|
|
194
|
+
// --- Extract outputs and inputs ---
|
|
195
|
+
const outputs = [];
|
|
196
|
+
const inputs = [];
|
|
197
|
+
if (combined?.kind === 'StakingActivate') {
|
|
198
|
+
outputs.push({ address: combined.stakingAddress, amount: combined.amount });
|
|
199
|
+
inputs.push({ address: combined.fromAddress, value: combined.amount });
|
|
200
|
+
}
|
|
201
|
+
else if (combined?.kind === 'WalletInitialization') {
|
|
202
|
+
outputs.push({ address: combined.nonceAddress, amount: combined.amount });
|
|
203
|
+
inputs.push({ address: combined.fromAddress, value: combined.amount });
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
for (const instr of parsed.instructionsData) {
|
|
207
|
+
switch (instr.type) {
|
|
208
|
+
case 'Transfer':
|
|
209
|
+
if (isMarinadeDeactivate)
|
|
210
|
+
break;
|
|
211
|
+
outputs.push({ address: instr.toAddress, amount: instr.amount });
|
|
212
|
+
inputs.push({ address: instr.fromAddress, value: instr.amount });
|
|
213
|
+
break;
|
|
214
|
+
case 'TokenTransfer':
|
|
215
|
+
outputs.push({ address: instr.toAddress, amount: instr.amount, tokenName: instr.tokenAddress });
|
|
216
|
+
inputs.push({ address: instr.fromAddress, value: instr.amount });
|
|
217
|
+
break;
|
|
218
|
+
case 'StakingActivate':
|
|
219
|
+
outputs.push({ address: instr.stakingAddress, amount: instr.amount });
|
|
220
|
+
inputs.push({ address: instr.fromAddress, value: instr.amount });
|
|
221
|
+
break;
|
|
222
|
+
case 'StakingWithdraw':
|
|
223
|
+
// Withdraw: SOL flows FROM staking address TO the recipient (fromAddress)
|
|
224
|
+
outputs.push({ address: instr.fromAddress, amount: instr.amount });
|
|
225
|
+
inputs.push({ address: instr.stakingAddress, value: instr.amount });
|
|
226
|
+
break;
|
|
227
|
+
case 'StakePoolDepositSol':
|
|
228
|
+
// Jito liquid staking deposit
|
|
229
|
+
outputs.push({ address: instr.stakePool, amount: instr.lamports });
|
|
230
|
+
inputs.push({ address: instr.fundingAccount, value: instr.lamports });
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// --- Output amount (native SOL only, not token amounts) ---
|
|
236
|
+
const outputAmount = outputs.filter((o) => !o.tokenName).reduce((sum, o) => sum + o.amount, 0n);
|
|
237
|
+
// --- ATA owner mapping and token enablements ---
|
|
238
|
+
const ataOwnerMap = {};
|
|
239
|
+
const tokenEnablements = [];
|
|
240
|
+
for (const instr of parsed.instructionsData) {
|
|
241
|
+
if (instr.type === 'CreateAssociatedTokenAccount') {
|
|
242
|
+
ataOwnerMap[instr.ataAddress] = instr.ownerAddress;
|
|
243
|
+
tokenEnablements.push({
|
|
244
|
+
address: instr.ataAddress,
|
|
245
|
+
tokenName: (0, instructionParamsFactory_1.findTokenName)(instr.mintAddress, undefined, true),
|
|
246
|
+
tokenAddress: instr.mintAddress,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// --- Staking authorize ---
|
|
251
|
+
let stakingAuthorize;
|
|
252
|
+
for (const instr of parsed.instructionsData) {
|
|
253
|
+
if (instr.type === 'StakingAuthorize') {
|
|
254
|
+
stakingAuthorize = mapStakingAuthorize(instr);
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// --- Resolve token names and convert bigint to string at serialization boundary ---
|
|
259
|
+
const resolvedOutputs = outputs.map((o) => ({
|
|
260
|
+
address: o.address,
|
|
261
|
+
amount: String(o.amount),
|
|
262
|
+
...(o.tokenName ? { tokenName: (0, instructionParamsFactory_1.findTokenName)(o.tokenName, undefined, true) } : {}),
|
|
263
|
+
}));
|
|
264
|
+
const resolvedInputs = inputs.map((i) => ({
|
|
265
|
+
address: i.address,
|
|
266
|
+
value: String(i.value),
|
|
267
|
+
}));
|
|
268
|
+
return {
|
|
269
|
+
displayOrder: [
|
|
270
|
+
'id',
|
|
271
|
+
'type',
|
|
272
|
+
'blockhash',
|
|
273
|
+
'durableNonce',
|
|
274
|
+
'outputAmount',
|
|
275
|
+
'changeAmount',
|
|
276
|
+
'outputs',
|
|
277
|
+
'changeOutputs',
|
|
278
|
+
'tokenEnablements',
|
|
279
|
+
'fee',
|
|
280
|
+
'memo',
|
|
281
|
+
],
|
|
282
|
+
id: id ?? constants_1.UNAVAILABLE_TEXT,
|
|
283
|
+
// WASM returns "StakingAuthorize" but BitGoJS uses "StakingAuthorizeRaw"
|
|
284
|
+
// when deserializing from bytes (the non-raw type only exists during building).
|
|
285
|
+
type: txType === TransactionType.StakingAuthorize ? 'StakingAuthorizeRaw' : txType,
|
|
286
|
+
changeOutputs: [],
|
|
287
|
+
changeAmount: '0',
|
|
288
|
+
outputAmount: String(outputAmount),
|
|
289
|
+
outputs: resolvedOutputs,
|
|
290
|
+
inputs: resolvedInputs,
|
|
291
|
+
feePayer: parsed.feePayer,
|
|
292
|
+
fee: {
|
|
293
|
+
fee: params.feeInfo ? String(fee) : '0',
|
|
294
|
+
feeRate: params.feeInfo ? Number(params.feeInfo.fee) : undefined,
|
|
295
|
+
},
|
|
296
|
+
memo,
|
|
297
|
+
blockhash: parsed.nonce,
|
|
298
|
+
durableNonce: parsed.durableNonce,
|
|
299
|
+
tokenEnablements,
|
|
300
|
+
ataOwnerMap,
|
|
301
|
+
...(stakingAuthorize ? { stakingAuthorize } : {}),
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZXhwbGFpblRyYW5zYWN0aW9uV2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFPQSxzREFvSkM7QUF4WEQsb0RBQW1IO0FBQ25ILDJDQU1xQjtBQUVyQix5RUFBMkQ7QUFTM0QsZ0ZBQWdGO0FBQ2hGLDBFQUEwRTtBQUMxRSxnRkFBZ0Y7QUFFaEYsSUFBSyxlQVdKO0FBWEQsV0FBSyxlQUFlO0lBQ2xCLGdDQUFhLENBQUE7SUFDYixzREFBbUMsQ0FBQTtJQUNuQywwREFBdUMsQ0FBQTtJQUN2QyxzREFBbUMsQ0FBQTtJQUNuQyx3REFBcUMsQ0FBQTtJQUNyQyxzREFBbUMsQ0FBQTtJQUNuQyxnRUFBNkMsQ0FBQTtJQUM3QyxnR0FBNkUsQ0FBQTtJQUM3RSx3Q0FBcUIsQ0FBQTtJQUNyQixnRUFBNkMsQ0FBQTtBQUMvQyxDQUFDLEVBWEksZUFBZSxLQUFmLGVBQWUsUUFXbkI7QUEyQkQsU0FBUyxxQkFBcUIsQ0FBQyxZQUFpQztJQUM5RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztZQUNyRSxPQUFPO2dCQUNMLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMvQixNQUFN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YztZQUNkLGNBQWM7WUFDZCxjQUFjO1lBQ2QsU0FBUztZQUNULGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsS0FBSztZQUNMLE1BQU07U0FDUDtRQUNELEVBQUUsRUFBRSxFQUFFLElBQUksNEJBQWdCO1FBQzFCLHlFQUF5RTtRQUN6RSxnRkFBZ0Y7UUFDaEYsSUFBSSxFQUFFLE1BQU0sS0FBSyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ2xGLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLFlBQVksRUFBRSxHQUFHO1FBQ2pCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLE1BQU0sRUFBRSxjQUFjO1FBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixHQUFHLEVBQUU7WUFDSCxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3ZDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNqRTtRQUNELElBQUk7UUFDSixTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLGdCQUFnQjtRQUNoQixXQUFXO1FBQ1gsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUb2tlbkVuYWJsZW1lbnQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgcGFyc2VUcmFuc2FjdGlvbiwgdHlwZSBQYXJzZWRUcmFuc2FjdGlvbiwgdHlwZSBJbnN0cnVjdGlvblBhcmFtcyB9IGZyb20gJ0BiaXRnby93YXNtLXNvbGFuYSc7XG5pbXBvcnQge1xuICBVTkFWQUlMQUJMRV9URVhULFxuICBaS19FTEdBTUFMX1BST09GX1BST0dSQU1fSUQsXG4gIENUX0VYVF9ESVNDUklNSU5BVE9SLFxuICBDVF9TVUJfRElTQ1JJTUlOQVRPUlMsXG4gIFRPS0VOX0FDTF9QUk9HUkFNX0lELFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTdGFraW5nQXV0aG9yaXplUGFyYW1zLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIFNvbExpYlRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGZpbmRUb2tlbk5hbWUgfSBmcm9tICcuL2luc3RydWN0aW9uUGFyYW1zRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uV2FzbU9wdGlvbnMge1xuICB0eEJhc2U2NDogc3RyaW5nO1xuICBmZWVJbmZvPzogeyBmZWU6IHN0cmluZyB9O1xuICB0b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50Pzogc3RyaW5nO1xuICBjb2luTmFtZTogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHJhbnNhY3Rpb24gdHlwZSBkZXJpdmF0aW9uIChwb3J0ZWQgZnJvbSBAYml0Z28vd2FzbS1zb2xhbmEgZXhwbGFpbi50cylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmVudW0gVHJhbnNhY3Rpb25UeXBlIHtcbiAgU2VuZCA9ICdTZW5kJyxcbiAgU3Rha2luZ0FjdGl2YXRlID0gJ1N0YWtpbmdBY3RpdmF0ZScsXG4gIFN0YWtpbmdEZWFjdGl2YXRlID0gJ1N0YWtpbmdEZWFjdGl2YXRlJyxcbiAgU3Rha2luZ1dpdGhkcmF3ID0gJ1N0YWtpbmdXaXRoZHJhdycsXG4gIFN0YWtpbmdBdXRob3JpemUgPSAnU3Rha2luZ0F1dGhvcml6ZScsXG4gIFN0YWtpbmdEZWxlZ2F0ZSA9ICdTdGFraW5nRGVsZWdhdGUnLFxuICBXYWxsZXRJbml0aWFsaXphdGlvbiA9ICdXYWxsZXRJbml0aWFsaXphdGlvbicsXG4gIEFzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbiA9ICdBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24nLFxuICBDdXN0b21UeCA9ICdDdXN0b21UeCcsXG4gIENvbmZpZGVudGlhbFRyYW5zZmVyID0gJ0NvbmZpZGVudGlhbFRyYW5zZmVyJyxcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbWJpbmVkIGluc3RydWN0aW9uIHBhdHRlcm4gZGV0ZWN0aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBTb2xhbmEgbmF0aXZlIHN0YWtpbmcgcmVxdWlyZXMgMyBzZXBhcmF0ZSBpbnN0cnVjdGlvbnM6XG4vLyAgIENyZWF0ZUFjY291bnQgKGZ1bmQpICsgU3Rha2VJbml0aWFsaXplIChzZXQgYXV0aG9yaXRpZXMpICsgRGVsZWdhdGVTdGFrZSAocGljayB2YWxpZGF0b3IpXG4vLyBNYXJpbmFkZSBzdGFraW5nIHVzZXMgb25seSBDcmVhdGVBY2NvdW50ICsgU3Rha2VJbml0aWFsaXplIChubyBEZWxlZ2F0ZSkuXG4vLyBXYWxsZXQgaW5pdCB1c2VzIENyZWF0ZUFjY291bnQgKyBOb25jZUluaXRpYWxpemUuXG5cbmludGVyZmFjZSBDb21iaW5lZFN0YWtlQWN0aXZhdGUge1xuICBraW5kOiAnU3Rha2luZ0FjdGl2YXRlJztcbiAgZnJvbUFkZHJlc3M6IHN0cmluZztcbiAgc3Rha2luZ0FkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBiaWdpbnQ7XG59XG5cbmludGVyZmFjZSBDb21iaW5lZFdhbGxldEluaXQge1xuICBraW5kOiAnV2FsbGV0SW5pdGlhbGl6YXRpb24nO1xuICBmcm9tQWRkcmVzczogc3RyaW5nO1xuICBub25jZUFkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBiaWdpbnQ7XG59XG5cbnR5cGUgQ29tYmluZWRQYXR0ZXJuID0gQ29tYmluZWRTdGFrZUFjdGl2YXRlIHwgQ29tYmluZWRXYWxsZXRJbml0O1xuXG5mdW5jdGlvbiBkZXRlY3RDb21iaW5lZFBhdHRlcm4oaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvblBhcmFtc1tdKTogQ29tYmluZWRQYXR0ZXJuIHwgbnVsbCB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IGN1cnIgPSBpbnN0cnVjdGlvbnNbaV07XG4gICAgY29uc3QgbmV4dCA9IGluc3RydWN0aW9uc1tpICsgMV07XG5cbiAgICBpZiAoY3Vyci50eXBlID09PSAnQ3JlYXRlQWNjb3VudCcgJiYgbmV4dC50eXBlID09PSAnU3Rha2VJbml0aWFsaXplJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ1N0YWtpbmdBY3RpdmF0ZScsXG4gICAgICAgIGZyb21BZGRyZXNzOiBjdXJyLmZyb21BZGRyZXNzLFxuICAgICAgICBzdGFraW5nQWRkcmVzczogY3Vyci5uZXdBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IGN1cnIuYW1vdW50LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY3Vyci50eXBlID09PSAnQ3JlYXRlQWNjb3VudCcgJiYgbmV4dC50eXBlID09PSAnTm9uY2VJbml0aWFsaXplJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ1dhbGxldEluaXRpYWxpemF0aW9uJyxcbiAgICAgICAgZnJvbUFkZHJlc3M6IGN1cnIuZnJvbUFkZHJlc3MsXG4gICAgICAgIG5vbmNlQWRkcmVzczogY3Vyci5uZXdBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IGN1cnIuYW1vdW50LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYW5zYWN0aW9uIHR5cGUgZGVyaXZhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgQk9JTEVSUExBVEVfVFlQRVMgPSBuZXcgU2V0KFsnTm9uY2VBZHZhbmNlJywgJ01lbW8nLCAnU2V0Q29tcHV0ZVVuaXRMaW1pdCcsICdTZXRQcmlvcml0eUZlZSddKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBXQVNNLXBhcnNlZCBVbmtub3duIGluc3RydWN0aW9uIGlzIGEgY29uZmlkZW50aWFsIHRyYW5zZmVyIGluc3RydWN0aW9uXG4gKiAoVG9rZW4tMjAyMiBDVCBleHRlbnNpb24gb3IgemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtKS5cbiAqXG4gKiBDVCBleHRlbnNpb246IGJ5dGUgMCA9IENUX0VYVF9ESVNDUklNSU5BVE9SLCBieXRlIDEg4oiIIENUX1NVQl9ESVNDUklNSU5BVE9SU1xuICogemstZWxnYW1hbC1wcm9vZjogYW55IGluc3RydWN0aW9uIGZyb20gdGhlIHprLWVsZ2FtYWwtcHJvb2YgcHJvZ3JhbVxuICovXG5mdW5jdGlvbiBpc1dhc21Db25maWRlbnRpYWxUcmFuc2Zlckluc3RydWN0aW9uKGluc3RyOiBJbnN0cnVjdGlvblBhcmFtcyk6IGJvb2xlYW4ge1xuICBpZiAoaW5zdHIudHlwZSAhPT0gJ1Vua25vd24nKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb2dyYW1JZCA9IGluc3RyLnByb2dyYW1JZDtcbiAgLy8gemstZWxnYW1hbC1wcm9vZiBwcm9ncmFtIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIENUIHByb29mIHZlcmlmaWNhdGlvbnNcbiAgaWYgKHByb2dyYW1JZCA9PT0gWktfRUxHQU1BTF9QUk9PRl9QUk9HUkFNX0lEKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gVG9rZW4tMjAyMiBDVCBleHRlbnNpb246IGJ5dGUgMCA9IENUX0VYVF9ESVNDUklNSU5BVE9SLCBieXRlIDEg4oiIIENUX1NVQl9ESVNDUklNSU5BVE9SU1xuICBjb25zdCBUT0tFTl8yMDIyX1BST0dSQU1fSUQgPSAnVG9rZW56UWRCTmJMcVA1VkVoZGtBUzZFUEZMQzFQSG5CcUNYRXBQeHVFYic7XG4gIGlmIChwcm9ncmFtSWQgPT09IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCkge1xuICAgIGNvbnN0IGRhdGFCeXRlcyA9IEJ1ZmZlci5mcm9tKGluc3RyLmRhdGEsICdiYXNlNjQnKTtcbiAgICBpZiAoZGF0YUJ5dGVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICByZXR1cm4gZGF0YUJ5dGVzWzBdID09PSBDVF9FWFRfRElTQ1JJTUlOQVRPUiAmJiBDVF9TVUJfRElTQ1JJTUlOQVRPUlMuaGFzKGRhdGFCeXRlc1sxXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBXQVNNLXBhcnNlZCBVbmtub3duIGluc3RydWN0aW9uIGlzIGEgVG9rZW4gQUNMIHBlcm1pc3Npb25sZXNzXG4gKiB0aGF3IGluc3RydWN0aW9uIChzUkZDLTM3IFRva2VuIEFDTCBwcm9ncmFtKS5cbiAqXG4gKiBUaGUgd2FzbSBwYXJzZXIgZG9lcyBub3Qga25vdyB0aGUgVG9rZW4gQUNMIHByb2dyYW0sIHNvIFRoYXdQZXJtaXNzaW9ubGVzc0lkZW1wb3RlbnRcbiAqIGluc3RydWN0aW9ucyBwYXJzZSBhcyBVbmtub3duLiBNaXJyb3JzIHRoZSBKUy1zaWRlIGBnZXRJbnN0cnVjdGlvblR5cGVgIGNhc2UgZm9yXG4gKiBUT0tFTl9BQ0xfUFJPR1JBTV9JRCBpbiBsaWIvdXRpbHMudHMuXG4gKi9cbmZ1bmN0aW9uIGlzV2FzbVRva2VuQWNsVGhhd0luc3RydWN0aW9uKGluc3RyOiBJbnN0cnVjdGlvblBhcmFtcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5zdHIudHlwZSA9PT0gJ1Vua25vd24nICYmIGluc3RyLnByb2dyYW1JZCA9PT0gVE9LRU5fQUNMX1BST0dSQU1fSUQ7XG59XG5cbmZ1bmN0aW9uIGRlcml2ZVRyYW5zYWN0aW9uVHlwZShcbiAgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvblBhcmFtc1tdLFxuICBjb21iaW5lZDogQ29tYmluZWRQYXR0ZXJuIHwgbnVsbCxcbiAgbWVtbzogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBUcmFuc2FjdGlvblR5cGUge1xuICBpZiAoY29tYmluZWQpIHJldHVybiBUcmFuc2FjdGlvblR5cGVbY29tYmluZWQua2luZF07XG5cbiAgLy8gTWFyaW5hZGUgZGVhY3RpdmF0ZTogVHJhbnNmZXIgKyBtZW1vIGNvbnRhaW5pbmcgXCJQcmVwYXJlRm9yUmV2b2tlXCJcbiAgaWYgKG1lbW8/LmluY2x1ZGVzKCdQcmVwYXJlRm9yUmV2b2tlJykpIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU7XG5cbiAgLy8gSml0byBwb29sIG9wZXJhdGlvbnNcbiAgaWYgKGluc3RydWN0aW9ucy5zb21lKChpKSA9PiBpLnR5cGUgPT09ICdTdGFrZVBvb2xEZXBvc2l0U29sJykpIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICBpZiAoaW5zdHJ1Y3Rpb25zLnNvbWUoKGkpID0+IGkudHlwZSA9PT0gJ1N0YWtlUG9vbFdpdGhkcmF3U3Rha2UnKSkgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZTtcblxuICAvLyBBVEEtb25seSB0cmFuc2FjdGlvbnMgKGlnbm9yaW5nIGJvaWxlcnBsYXRlIGFuZCBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MgdGhhdylcbiAgY29uc3QgbWVhbmluZ2Z1bCA9IGluc3RydWN0aW9ucy5maWx0ZXIoKGkpID0+ICFCT0lMRVJQTEFURV9UWVBFUy5oYXMoaS50eXBlKSAmJiAhaXNXYXNtVG9rZW5BY2xUaGF3SW5zdHJ1Y3Rpb24oaSkpO1xuICBpZiAobWVhbmluZ2Z1bC5sZW5ndGggPiAwICYmIG1lYW5pbmdmdWwuZXZlcnkoKGkpID0+IGkudHlwZSA9PT0gJ0NyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnKSkge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uO1xuICB9XG5cbiAgLy8gRGlyZWN0IHN0YWtpbmcgaW5zdHJ1Y3Rpb24gbWFwcGluZ1xuICBjb25zdCBzdGFraW5nID0gaW5zdHJ1Y3Rpb25zLmZpbmQoKGkpID0+IGkudHlwZSBpbiBUcmFuc2FjdGlvblR5cGUpO1xuICBpZiAoc3Rha2luZykgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZVtzdGFraW5nLnR5cGUgYXMga2V5b2YgdHlwZW9mIFRyYW5zYWN0aW9uVHlwZV07XG5cbiAgLy8gVW5rbm93biBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgYSBjdXN0b20vdW5yZWNvZ25pemVkIHRyYW5zYWN0aW9uXG4gIGlmIChpbnN0cnVjdGlvbnMuc29tZSgoaSkgPT4gaS50eXBlID09PSAnVW5rbm93bicgJiYgaXNXYXNtQ29uZmlkZW50aWFsVHJhbnNmZXJJbnN0cnVjdGlvbihpKSkpIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkNvbmZpZGVudGlhbFRyYW5zZmVyO1xuICB9XG4gIGlmIChpbnN0cnVjdGlvbnMuc29tZSgoaSkgPT4gaS50eXBlID09PSAnVW5rbm93bicgJiYgIWlzV2FzbVRva2VuQWNsVGhhd0luc3RydWN0aW9uKGkpKSlcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkN1c3RvbVR4O1xuXG4gIC8vIFNlbmQgcmVxdWlyZXMgYW4gZXhwbGljaXQgVHJhbnNmZXIgb3IgVG9rZW5UcmFuc2ZlciBpbnN0cnVjdGlvbi5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGlzIGEgY3VzdG9tL3VucmVjb2duaXplZCB0cmFuc2FjdGlvbi5cbiAgaWYgKGluc3RydWN0aW9ucy5zb21lKChpKSA9PiBpLnR5cGUgPT09ICdUcmFuc2ZlcicgfHwgaS50eXBlID09PSAnVG9rZW5UcmFuc2ZlcicpKSByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG5cbiAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5DdXN0b21UeDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRyYW5zYWN0aW9uIElEIGV4dHJhY3Rpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIEJhc2U1OCBlbmNvZGluZyBvZiA2NCB6ZXJvIGJ5dGVzICh1bnNpZ25lZCB0cmFuc2FjdGlvbnMgaGF2ZSBhbGwtemVybyBzaWduYXR1cmVzKVxuY29uc3QgQUxMX1pFUk9TX0JBU0U1OCA9ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcblxuZnVuY3Rpb24gZXh0cmFjdFRyYW5zYWN0aW9uSWQoc2lnbmF0dXJlczogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzaWcgPSBzaWduYXR1cmVzWzBdO1xuICBpZiAoIXNpZyB8fCBzaWcgPT09IEFMTF9aRVJPU19CQVNFNTgpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBzaWc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTdGFraW5nIGF1dGhvcml6ZSBtYXBwaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE1hcCBXQVNNIFN0YWtpbmdBdXRob3JpemUgaW5zdHJ1Y3Rpb24gdG8gdGhlIGxlZ2FjeSBCaXRHb0pTIHNoYXBlLlxuICogQml0R29KUyB1c2VzIGRpZmZlcmVudCBmaWVsZCBuYW1lcyBmb3IgU3Rha2VyIHZzIFdpdGhkcmF3ZXIgYXV0aG9yaXR5IGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIG1hcFN0YWtpbmdBdXRob3JpemUoaW5zdHI6IHtcbiAgc3Rha2luZ0FkZHJlc3M6IHN0cmluZztcbiAgb2xkQXV0aG9yaXplQWRkcmVzczogc3RyaW5nO1xuICBuZXdBdXRob3JpemVBZGRyZXNzOiBzdHJpbmc7XG4gIGF1dGhvcml6ZVR5cGU6ICdTdGFrZXInIHwgJ1dpdGhkcmF3ZXInO1xuICBjdXN0b2RpYW5BZGRyZXNzPzogc3RyaW5nO1xufSk6IFN0YWtpbmdBdXRob3JpemVQYXJhbXMge1xuICBpZiAoaW5zdHIuYXV0aG9yaXplVHlwZSA9PT0gJ1dpdGhkcmF3ZXInKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YWtpbmdBZGRyZXNzOiBpbnN0ci5zdGFraW5nQWRkcmVzcyxcbiAgICAgIG9sZFdpdGhkcmF3QWRkcmVzczogaW5zdHIub2xkQXV0aG9yaXplQWRkcmVzcyxcbiAgICAgIG5ld1dpdGhkcmF3QWRkcmVzczogaW5zdHIubmV3QXV0aG9yaXplQWRkcmVzcyxcbiAgICAgIGN1c3RvZGlhbkFkZHJlc3M6IGluc3RyLmN1c3RvZGlhbkFkZHJlc3MsXG4gICAgfTtcbiAgfVxuICAvLyBTdGFrZXIgYXV0aG9yaXR5IGNoYW5nZVxuICByZXR1cm4ge1xuICAgIHN0YWtpbmdBZGRyZXNzOiBpbnN0ci5zdGFraW5nQWRkcmVzcyxcbiAgICBvbGRXaXRoZHJhd0FkZHJlc3M6ICcnLFxuICAgIG5ld1dpdGhkcmF3QWRkcmVzczogJycsXG4gICAgb2xkU3Rha2luZ0F1dGhvcml0eUFkZHJlc3M6IGluc3RyLm9sZEF1dGhvcml6ZUFkZHJlc3MsXG4gICAgbmV3U3Rha2luZ0F1dGhvcml0eUFkZHJlc3M6IGluc3RyLm5ld0F1dGhvcml6ZUFkZHJlc3MsXG4gIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBNYWluIGV4cGxhaW4gZnVuY3Rpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU3RhbmRhbG9uZSBXQVNNLWJhc2VkIHRyYW5zYWN0aW9uIGV4cGxhbmF0aW9uLlxuICpcbiAqIFBhcnNlcyB0aGUgdHJhbnNhY3Rpb24gdmlhIGBwYXJzZVRyYW5zYWN0aW9uKHR4KWAgZnJvbSBAYml0Z28vd2FzbS1zb2xhbmEsXG4gKiB0aGVuIGRlcml2ZXMgdGhlIHRyYW5zYWN0aW9uIHR5cGUsIGV4dHJhY3RzIG91dHB1dHMvaW5wdXRzLCBjb21wdXRlcyBmZWVzLFxuICogYW5kIG1hcHMgdG8gQml0R29KUyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGZvcm1hdC5cbiAqXG4gKiBUaGUgZXhwbGFpbiBsb2dpYyB3YXMgcG9ydGVkIGZyb20gd2FzbS1zb2xhbmEgcGVyIHRoZSBjb252ZW50aW9uIHRoYXRcbiAqIGBleHBsYWluVHJhbnNhY3Rpb25gIGJlbG9uZ3MgaW4gQml0R29KUywgbm90IGluIHdhc20tKiBwYWNrYWdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Tb2xUcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbldhc21PcHRpb25zKTogU29sTGliVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIGNvbnN0IHR4Qnl0ZXMgPSBCdWZmZXIuZnJvbShwYXJhbXMudHhCYXNlNjQsICdiYXNlNjQnKTtcbiAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tQnl0ZXModHhCeXRlcyk7XG4gIGNvbnN0IHBhcnNlZDogUGFyc2VkVHJhbnNhY3Rpb24gPSBwYXJzZVRyYW5zYWN0aW9uKHR4KTtcblxuICAvLyAtLS0gVHJhbnNhY3Rpb24gSUQgLS0tXG4gIGNvbnN0IGlkID0gZXh0cmFjdFRyYW5zYWN0aW9uSWQocGFyc2VkLnNpZ25hdHVyZXMpO1xuXG4gIC8vIC0tLSBGZWUgY2FsY3VsYXRpb24gLS0tXG4gIGNvbnN0IGxhbXBvcnRzUGVyU2lnbmF0dXJlID0gcGFyYW1zLmZlZUluZm8gPyBCaWdJbnQocGFyYW1zLmZlZUluZm8uZmVlKSA6IDBuO1xuICBsZXQgZmVlID0gQmlnSW50KHBhcnNlZC5udW1TaWduYXR1cmVzKSAqIGxhbXBvcnRzUGVyU2lnbmF0dXJlO1xuXG4gIC8vIEVhY2ggQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCBjcmVhdGVzIGEgbmV3IHRva2VuIGFjY291bnQgcmVxdWlyaW5nIGEgcmVudCBkZXBvc2l0LlxuICBjb25zdCBhdGFDb3VudCA9IHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhLmZpbHRlcigoaSkgPT4gaS50eXBlID09PSAnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcpLmxlbmd0aDtcbiAgaWYgKGF0YUNvdW50ID4gMCAmJiBwYXJhbXMudG9rZW5BY2NvdW50UmVudEV4ZW1wdEFtb3VudCkge1xuICAgIGZlZSArPSBCaWdJbnQoYXRhQ291bnQpICogQmlnSW50KHBhcmFtcy50b2tlbkFjY291bnRSZW50RXhlbXB0QW1vdW50KTtcbiAgfVxuXG4gIC8vIC0tLSBFeHRyYWN0IG1lbW8gKG5lZWRlZCBiZWZvcmUgdHlwZSBkZXJpdmF0aW9uKSAtLS1cbiAgbGV0IG1lbW86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBpbnN0ciBvZiBwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgIGlmIChpbnN0ci50eXBlID09PSAnTWVtbycpIHtcbiAgICAgIG1lbW8gPSBpbnN0ci5tZW1vO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBEZXRlY3QgY29tYmluZWQgcGF0dGVybnMgYW5kIGRlcml2ZSB0eXBlIC0tLVxuICBjb25zdCBjb21iaW5lZCA9IGRldGVjdENvbWJpbmVkUGF0dGVybihwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YSk7XG4gIGNvbnN0IHR4VHlwZSA9IGRlcml2ZVRyYW5zYWN0aW9uVHlwZShwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YSwgY29tYmluZWQsIG1lbW8pO1xuXG4gIC8vIE1hcmluYWRlIGRlYWN0aXZhdGU6IFRyYW5zZmVyICsgUHJlcGFyZUZvclJldm9rZSBtZW1vLlxuICAvLyBUaGUgVHJhbnNmZXIgaXMgYSBjb250cmFjdCBpbnRlcmFjdGlvbiwgbm90IHJlYWwgdmFsdWUgdHJhbnNmZXIg4oCUIHNraXAgZnJvbSBvdXRwdXRzLlxuICBjb25zdCBpc01hcmluYWRlRGVhY3RpdmF0ZSA9XG4gICAgdHhUeXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGUgJiYgbWVtbyAhPT0gdW5kZWZpbmVkICYmIG1lbW8uaW5jbHVkZXMoJ1ByZXBhcmVGb3JSZXZva2UnKTtcblxuICAvLyAtLS0gRXh0cmFjdCBvdXRwdXRzIGFuZCBpbnB1dHMgLS0tXG4gIGNvbnN0IG91dHB1dHM6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IGJpZ2ludDsgdG9rZW5OYW1lPzogc3RyaW5nIH1bXSA9IFtdO1xuICBjb25zdCBpbnB1dHM6IHsgYWRkcmVzczogc3RyaW5nOyB2YWx1ZTogYmlnaW50IH1bXSA9IFtdO1xuXG4gIGlmIChjb21iaW5lZD8ua2luZCA9PT0gJ1N0YWtpbmdBY3RpdmF0ZScpIHtcbiAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBjb21iaW5lZC5zdGFraW5nQWRkcmVzcywgYW1vdW50OiBjb21iaW5lZC5hbW91bnQgfSk7XG4gICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBjb21iaW5lZC5mcm9tQWRkcmVzcywgdmFsdWU6IGNvbWJpbmVkLmFtb3VudCB9KTtcbiAgfSBlbHNlIGlmIChjb21iaW5lZD8ua2luZCA9PT0gJ1dhbGxldEluaXRpYWxpemF0aW9uJykge1xuICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGNvbWJpbmVkLm5vbmNlQWRkcmVzcywgYW1vdW50OiBjb21iaW5lZC5hbW91bnQgfSk7XG4gICAgaW5wdXRzLnB1c2goeyBhZGRyZXNzOiBjb21iaW5lZC5mcm9tQWRkcmVzcywgdmFsdWU6IGNvbWJpbmVkLmFtb3VudCB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGluc3RyIG9mIHBhcnNlZC5pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgICBzd2l0Y2ggKGluc3RyLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnVHJhbnNmZXInOlxuICAgICAgICAgIGlmIChpc01hcmluYWRlRGVhY3RpdmF0ZSkgYnJlYWs7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIudG9BZGRyZXNzLCBhbW91bnQ6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLmZyb21BZGRyZXNzLCB2YWx1ZTogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdUb2tlblRyYW5zZmVyJzpcbiAgICAgICAgICBvdXRwdXRzLnB1c2goeyBhZGRyZXNzOiBpbnN0ci50b0FkZHJlc3MsIGFtb3VudDogaW5zdHIuYW1vdW50LCB0b2tlbk5hbWU6IGluc3RyLnRva2VuQWRkcmVzcyB9KTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLmZyb21BZGRyZXNzLCB2YWx1ZTogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTdGFraW5nQWN0aXZhdGUnOlxuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLnN0YWtpbmdBZGRyZXNzLCBhbW91bnQ6IGluc3RyLmFtb3VudCB9KTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLmZyb21BZGRyZXNzLCB2YWx1ZTogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTdGFraW5nV2l0aGRyYXcnOlxuICAgICAgICAgIC8vIFdpdGhkcmF3OiBTT0wgZmxvd3MgRlJPTSBzdGFraW5nIGFkZHJlc3MgVE8gdGhlIHJlY2lwaWVudCAoZnJvbUFkZHJlc3MpXG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuZnJvbUFkZHJlc3MsIGFtb3VudDogaW5zdHIuYW1vdW50IH0pO1xuICAgICAgICAgIGlucHV0cy5wdXNoKHsgYWRkcmVzczogaW5zdHIuc3Rha2luZ0FkZHJlc3MsIHZhbHVlOiBpbnN0ci5hbW91bnQgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1N0YWtlUG9vbERlcG9zaXRTb2wnOlxuICAgICAgICAgIC8vIEppdG8gbGlxdWlkIHN0YWtpbmcgZGVwb3NpdFxuICAgICAgICAgIG91dHB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLnN0YWtlUG9vbCwgYW1vdW50OiBpbnN0ci5sYW1wb3J0cyB9KTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh7IGFkZHJlc3M6IGluc3RyLmZ1bmRpbmdBY2NvdW50LCB2YWx1ZTogaW5zdHIubGFtcG9ydHMgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIE91dHB1dCBhbW91bnQgKG5hdGl2ZSBTT0wgb25seSwgbm90IHRva2VuIGFtb3VudHMpIC0tLVxuICBjb25zdCBvdXRwdXRBbW91bnQgPSBvdXRwdXRzLmZpbHRlcigobykgPT4gIW8udG9rZW5OYW1lKS5yZWR1Y2UoKHN1bSwgbykgPT4gc3VtICsgby5hbW91bnQsIDBuKTtcblxuICAvLyAtLS0gQVRBIG93bmVyIG1hcHBpbmcgYW5kIHRva2VuIGVuYWJsZW1lbnRzIC0tLVxuICBjb25zdCBhdGFPd25lck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBjb25zdCB0b2tlbkVuYWJsZW1lbnRzOiBJVG9rZW5FbmFibGVtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBpbnN0ciBvZiBwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgIGlmIChpbnN0ci50eXBlID09PSAnQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCcpIHtcbiAgICAgIGF0YU93bmVyTWFwW2luc3RyLmF0YUFkZHJlc3NdID0gaW5zdHIub3duZXJBZGRyZXNzO1xuICAgICAgdG9rZW5FbmFibGVtZW50cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogaW5zdHIuYXRhQWRkcmVzcyxcbiAgICAgICAgdG9rZW5OYW1lOiBmaW5kVG9rZW5OYW1lKGluc3RyLm1pbnRBZGRyZXNzLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICB0b2tlbkFkZHJlc3M6IGluc3RyLm1pbnRBZGRyZXNzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFN0YWtpbmcgYXV0aG9yaXplIC0tLVxuICBsZXQgc3Rha2luZ0F1dGhvcml6ZTogU3Rha2luZ0F1dGhvcml6ZVBhcmFtcyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBpbnN0ciBvZiBwYXJzZWQuaW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgIGlmIChpbnN0ci50eXBlID09PSAnU3Rha2luZ0F1dGhvcml6ZScpIHtcbiAgICAgIHN0YWtpbmdBdXRob3JpemUgPSBtYXBTdGFraW5nQXV0aG9yaXplKGluc3RyKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBSZXNvbHZlIHRva2VuIG5hbWVzIGFuZCBjb252ZXJ0IGJpZ2ludCB0byBzdHJpbmcgYXQgc2VyaWFsaXphdGlvbiBib3VuZGFyeSAtLS1cbiAgY29uc3QgcmVzb2x2ZWRPdXRwdXRzID0gb3V0cHV0cy5tYXAoKG8pID0+ICh7XG4gICAgYWRkcmVzczogby5hZGRyZXNzLFxuICAgIGFtb3VudDogU3RyaW5nKG8uYW1vdW50KSxcbiAgICAuLi4oby50b2tlbk5hbWUgPyB7IHRva2VuTmFtZTogZmluZFRva2VuTmFtZShvLnRva2VuTmFtZSwgdW5kZWZpbmVkLCB0cnVlKSB9IDoge30pLFxuICB9KSk7XG5cbiAgY29uc3QgcmVzb2x2ZWRJbnB1dHMgPSBpbnB1dHMubWFwKChpKSA9PiAoe1xuICAgIGFkZHJlc3M6IGkuYWRkcmVzcyxcbiAgICB2YWx1ZTogU3RyaW5nKGkudmFsdWUpLFxuICB9KSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkaXNwbGF5T3JkZXI6IFtcbiAgICAgICdpZCcsXG4gICAgICAndHlwZScsXG4gICAgICAnYmxvY2toYXNoJyxcbiAgICAgICdkdXJhYmxlTm9uY2UnLFxuICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICd0b2tlbkVuYWJsZW1lbnRzJyxcbiAgICAgICdmZWUnLFxuICAgICAgJ21lbW8nLFxuICAgIF0sXG4gICAgaWQ6IGlkID8/IFVOQVZBSUxBQkxFX1RFWFQsXG4gICAgLy8gV0FTTSByZXR1cm5zIFwiU3Rha2luZ0F1dGhvcml6ZVwiIGJ1dCBCaXRHb0pTIHVzZXMgXCJTdGFraW5nQXV0aG9yaXplUmF3XCJcbiAgICAvLyB3aGVuIGRlc2VyaWFsaXppbmcgZnJvbSBieXRlcyAodGhlIG5vbi1yYXcgdHlwZSBvbmx5IGV4aXN0cyBkdXJpbmcgYnVpbGRpbmcpLlxuICAgIHR5cGU6IHR4VHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBdXRob3JpemUgPyAnU3Rha2luZ0F1dGhvcml6ZVJhdycgOiB0eFR5cGUsXG4gICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgb3V0cHV0QW1vdW50OiBTdHJpbmcob3V0cHV0QW1vdW50KSxcbiAgICBvdXRwdXRzOiByZXNvbHZlZE91dHB1dHMsXG4gICAgaW5wdXRzOiByZXNvbHZlZElucHV0cyxcbiAgICBmZWVQYXllcjogcGFyc2VkLmZlZVBheWVyLFxuICAgIGZlZToge1xuICAgICAgZmVlOiBwYXJhbXMuZmVlSW5mbyA/IFN0cmluZyhmZWUpIDogJzAnLFxuICAgICAgZmVlUmF0ZTogcGFyYW1zLmZlZUluZm8gPyBOdW1iZXIocGFyYW1zLmZlZUluZm8uZmVlKSA6IHVuZGVmaW5lZCxcbiAgICB9LFxuICAgIG1lbW8sXG4gICAgYmxvY2toYXNoOiBwYXJzZWQubm9uY2UsXG4gICAgZHVyYWJsZU5vbmNlOiBwYXJzZWQuZHVyYWJsZU5vbmNlLFxuICAgIHRva2VuRW5hYmxlbWVudHMsXG4gICAgYXRhT3duZXJNYXAsXG4gICAgLi4uKHN0YWtpbmdBdXRob3JpemUgPyB7IHN0YWtpbmdBdXRob3JpemUgfSA6IHt9KSxcbiAgfTtcbn1cbiJdfQ==
|