[
    {
        "inputs": [
            {
                "internalType": "contract IPoolManager",
                "name": "_poolManager",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "NotEnoughLiquidity",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NotPoolManager",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NotSelf",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "QuoteSwap",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "UnexpectedCallSuccess",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "revertData",
                "type": "bytes"
            }
        ],
        "name": "UnexpectedRevertBytes",
        "type": "error"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "exactCurrency",
                        "type": "address"
                    },
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "intermediateCurrency",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            },
                            {
                                "internalType": "bytes",
                                "name": "hookData",
                                "type": "bytes"
                            }
                        ],
                        "internalType": "struct PathKey[]",
                        "name": "path",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "_quoteExactInput",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactSingleParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "_quoteExactInputSingle",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "exactCurrency",
                        "type": "address"
                    },
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "intermediateCurrency",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            },
                            {
                                "internalType": "bytes",
                                "name": "hookData",
                                "type": "bytes"
                            }
                        ],
                        "internalType": "struct PathKey[]",
                        "name": "path",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "_quoteExactOutput",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactSingleParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "_quoteExactOutputSingle",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "poolManager",
        "outputs": [
            {
                "internalType": "contract IPoolManager",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "exactCurrency",
                        "type": "address"
                    },
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "intermediateCurrency",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            },
                            {
                                "internalType": "bytes",
                                "name": "hookData",
                                "type": "bytes"
                            }
                        ],
                        "internalType": "struct PathKey[]",
                        "name": "path",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "quoteExactInput",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "amountOut",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "gasEstimate",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactSingleParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "quoteExactInputSingle",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "amountOut",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "gasEstimate",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "exactCurrency",
                        "type": "address"
                    },
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "intermediateCurrency",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            },
                            {
                                "internalType": "bytes",
                                "name": "hookData",
                                "type": "bytes"
                            }
                        ],
                        "internalType": "struct PathKey[]",
                        "name": "path",
                        "type": "tuple[]"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "quoteExactOutput",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "amountIn",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "gasEstimate",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "components": [
                            {
                                "internalType": "Currency",
                                "name": "currency0",
                                "type": "address"
                            },
                            {
                                "internalType": "Currency",
                                "name": "currency1",
                                "type": "address"
                            },
                            {
                                "internalType": "uint24",
                                "name": "fee",
                                "type": "uint24"
                            },
                            {
                                "internalType": "int24",
                                "name": "tickSpacing",
                                "type": "int24"
                            },
                            {
                                "internalType": "contract IHooks",
                                "name": "hooks",
                                "type": "address"
                            }
                        ],
                        "internalType": "struct PoolKey",
                        "name": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "bool",
                        "name": "zeroForOne",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint128",
                        "name": "exactAmount",
                        "type": "uint128"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookData",
                        "type": "bytes"
                    }
                ],
                "internalType": "struct IV4Quoter.QuoteExactSingleParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "quoteExactOutputSingle",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "amountIn",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "gasEstimate",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "unlockCallback",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]
