{
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                }
            ],
            "name": "OwnableInvalidOwner",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "OwnableUnauthorizedAccount",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "token",
                    "type": "address"
                }
            ],
            "name": "SafeERC20FailedOperation",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "LiquidatorAddressChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferStarted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "inputAmount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "inputToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountOut",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "outputToken",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "int256",
                    "name": "slippage",
                    "type": "int256"
                },
                {
                    "indexed": false,
                    "internalType": "uint64",
                    "name": "referralCode",
                    "type": "uint64"
                },
                {
                    "indexed": false,
                    "internalType": "uint64",
                    "name": "referralFee",
                    "type": "uint64"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "referralFeeRecipient",
                    "type": "address"
                }
            ],
            "name": "Swap",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "amountsIn",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "tokensIn",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                },
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "tokensOut",
                    "type": "address[]"
                },
                {
                    "indexed": false,
                    "internalType": "int256[]",
                    "name": "slippage",
                    "type": "int256[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint64",
                    "name": "referralCode",
                    "type": "uint64"
                },
                {
                    "indexed": false,
                    "internalType": "uint64",
                    "name": "referralFee",
                    "type": "uint64"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "referralFeeRecipient",
                    "type": "address"
                }
            ],
            "name": "SwapMulti",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "FEE_DENOM",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "acceptOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "addressList",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "changeLiquidatorAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "liquidatorAddress",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "pendingOwner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "inputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "inputAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "inputReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "outputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "outputReceiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapTokenInfo",
                    "name": "tokenInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                }
            ],
            "name": "swap",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountOut",
                    "type": "uint256"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "swapCompact",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountIn",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.inputTokenInfo[]",
                    "name": "inputs",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.outputTokenInfo[]",
                    "name": "outputs",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                }
            ],
            "name": "swapMulti",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "swapMultiCompact",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "contractAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "deadline",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "signature",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.permit2Info",
                    "name": "permit2",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountIn",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.inputTokenInfo[]",
                    "name": "inputs",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.outputTokenInfo[]",
                    "name": "outputs",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                }
            ],
            "name": "swapMultiPermit2",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "contractAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "deadline",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "signature",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.permit2Info",
                    "name": "permit2",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountIn",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.inputTokenInfo[]",
                    "name": "inputs",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.outputTokenInfo[]",
                    "name": "outputs",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "hookTarget",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "hookData",
                    "type": "bytes"
                }
            ],
            "name": "swapMultiPermit2WithHook",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountIn",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.inputTokenInfo[]",
                    "name": "inputs",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.outputTokenInfo[]",
                    "name": "outputs",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "hookTarget",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "hookData",
                    "type": "bytes"
                }
            ],
            "name": "swapMultiWithHook",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "contractAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "deadline",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "signature",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.permit2Info",
                    "name": "permit2",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "inputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "inputAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "inputReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "outputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "outputReceiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapTokenInfo",
                    "name": "tokenInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                }
            ],
            "name": "swapPermit2",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountOut",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "contractAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "deadline",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "signature",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.permit2Info",
                    "name": "permit2",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "inputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "inputAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "inputReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "outputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "outputReceiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapTokenInfo",
                    "name": "tokenInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "hookTarget",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "hookData",
                    "type": "bytes"
                }
            ],
            "name": "swapPermit2WithHook",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountOut",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountIn",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.inputTokenInfo[]",
                    "name": "inputs",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "tokenAddress",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "receiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.outputTokenInfo[]",
                    "name": "outputs",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                }
            ],
            "name": "swapRouterFunds",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "amountsOut",
                    "type": "uint256[]"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "inputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "inputAmount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "inputReceiver",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "outputToken",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputQuote",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "outputMin",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "outputReceiver",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapTokenInfo",
                    "name": "tokenInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "pathDefinition",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "executor",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "uint64",
                            "name": "code",
                            "type": "uint64"
                        },
                        {
                            "internalType": "uint64",
                            "name": "fee",
                            "type": "uint64"
                        },
                        {
                            "internalType": "address",
                            "name": "feeRecipient",
                            "type": "address"
                        }
                    ],
                    "internalType": "struct IOdosRouterV3.swapReferralInfo",
                    "name": "referralInfo",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "hookTarget",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "hookData",
                    "type": "bytes"
                }
            ],
            "name": "swapWithHook",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountOut",
                    "type": "uint256"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "tokens",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "amounts",
                    "type": "uint256[]"
                },
                {
                    "internalType": "address",
                    "name": "dest",
                    "type": "address"
                }
            ],
            "name": "transferRouterFunds",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "addresses",
                    "type": "address[]"
                }
            ],
            "name": "writeAddressList",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "stateMutability": "payable",
            "type": "receive"
        }
    ]
}