[
    {
        "inputs": [],
        "name": "PoolFactory__IdenticalAddresses",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__InitializationFeeIsZero",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "msgValue",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "fee",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__InitializationFeeRequired",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__InvalidInput",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__NotAuthorized",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "maturity",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__OptionExpired",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "maturity",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__OptionMaturityExceedsMax",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "maturity",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__OptionMaturityNot8UTC",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "maturity",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__OptionMaturityNotFriday",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "uint256",
                "name": "maturity",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__OptionMaturityNotLastFriday",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__OptionStrikeEqualsZero",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "UD60x18",
                "name": "strike",
                "type": "uint256"
            },
            {
                "internalType": "UD60x18",
                "name": "strikeInterval",
                "type": "uint256"
            }
        ],
        "name": "PoolFactory__OptionStrikeInvalid",
        "type": "error"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "poolAddress",
                "type": "address"
            }
        ],
        "name": "PoolFactory__PoolAlreadyDeployed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__PoolNotExpired",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__TransferNativeTokenFailed",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PoolFactory__ZeroAddress",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "base",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "quote",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "oracleAdapter",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "UD60x18",
                "name": "strike",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "maturity",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "isCallPool",
                "type": "bool"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "poolAddress",
                "type": "address"
            }
        ],
        "name": "PoolDeployed",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address",
                "name": "pool",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "address[][]",
                "name": "basePath",
                "type": "address[][]"
            },
            {
                "indexed": false,
                "internalType": "uint8[]",
                "name": "basePathDecimals",
                "type": "uint8[]"
            },
            {
                "indexed": false,
                "internalType": "enum IOracleAdapter.AdapterType",
                "name": "baseAdapterType",
                "type": "uint8"
            },
            {
                "indexed": false,
                "internalType": "address[][]",
                "name": "quotePath",
                "type": "address[][]"
            },
            {
                "indexed": false,
                "internalType": "uint8[]",
                "name": "quotePathDecimals",
                "type": "uint8[]"
            },
            {
                "indexed": false,
                "internalType": "enum IOracleAdapter.AdapterType",
                "name": "quoteAdapterType",
                "type": "uint8"
            }
        ],
        "name": "PricingPath",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "UD60x18",
                "name": "discountPerPool",
                "type": "uint256"
            }
        ],
        "name": "SetDiscountPerPool",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "feeReceiver",
                "type": "address"
            }
        ],
        "name": "SetFeeReceiver",
        "type": "event"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "base",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "quote",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "oracleAdapter",
                        "type": "address"
                    },
                    {
                        "internalType": "UD60x18",
                        "name": "strike",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maturity",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "isCallPool",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IPoolFactory.PoolKey",
                "name": "k",
                "type": "tuple"
            }
        ],
        "name": "deployPool",
        "outputs": [
            {
                "internalType": "address",
                "name": "poolAddress",
                "type": "address"
            }
        ],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "base",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "quote",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "oracleAdapter",
                        "type": "address"
                    },
                    {
                        "internalType": "UD60x18",
                        "name": "strike",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maturity",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "isCallPool",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IPoolFactory.PoolKey",
                "name": "k",
                "type": "tuple"
            }
        ],
        "name": "getPoolAddress",
        "outputs": [
            {
                "internalType": "address",
                "name": "pool",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "isDeployed",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "base",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "quote",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "oracleAdapter",
                        "type": "address"
                    },
                    {
                        "internalType": "UD60x18",
                        "name": "strike",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maturity",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "isCallPool",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IPoolFactory.PoolKey",
                "name": "k",
                "type": "tuple"
            }
        ],
        "name": "initializationFee",
        "outputs": [
            {
                "internalType": "UD60x18",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "contractAddress",
                "type": "address"
            }
        ],
        "name": "isPool",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "address",
                        "name": "base",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "quote",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "oracleAdapter",
                        "type": "address"
                    },
                    {
                        "internalType": "UD60x18",
                        "name": "strike",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maturity",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "isCallPool",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IPoolFactory.PoolKey",
                "name": "k",
                "type": "tuple"
            }
        ],
        "name": "removeDiscount",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "UD60x18",
                "name": "discountPerPool",
                "type": "uint256"
            }
        ],
        "name": "setDiscountPerPool",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "feeReceiver",
                "type": "address"
            }
        ],
        "name": "setFeeReceiver",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]
