[
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "_wrappedNativeToken",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_permit2",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "_daiAddress",
                "type": "address"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [],
        "name": "CommandsLengthsMismatch",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "FailedToSendNativeToken",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidCommand",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidCommandsLength",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidEIP1271Signature",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidEIP721Signature",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidETHSIGNSignature",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidFlags",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidNonce",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidPendingTransfersLength",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidPermit2Commands",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidPermit2TransfersLength",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidSender",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidSignatureLength",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidSignatureType",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidSignatureValueS",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "InvalidSignatureValueV",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "MakerAmountsLengthsMismatch",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ManyToManyNotSupported",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NotEnoughNativeToken",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NullBeneficiary",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "OrderExpired",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "OrderInvalidSigner",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "OrdersLengthsMismatch",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PartialFillNotSupported",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PartnerAlreadyRegistered",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "PartnerFeeTooHigh",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "TokensLengthsMismatch",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "UnsafeCast",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "UpdatedMakerAmountsTooLow",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "WrongWrappedTokenAddress",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ZeroMakerAmount",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ZeroNonce",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "uint128",
                "name": "eventId",
                "type": "uint128"
            }
        ],
        "name": "BebopOrder",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": false,
                "internalType": "address",
                "name": "maker",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "address",
                "name": "signer",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "bool",
                "name": "allowed",
                "type": "bool"
            }
        ],
        "name": "OrderSignerRegistered",
        "type": "event"
    },
    {
        "inputs": [],
        "name": "DOMAIN_SEPARATOR",
        "outputs": [
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_addresses",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_nonces",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "taker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "maker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "taker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "maker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Aggregate",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "uint64",
                "name": "partnerId",
                "type": "uint64"
            },
            {
                "internalType": "uint256[][]",
                "name": "updatedMakerAmounts",
                "type": "uint256[][]"
            },
            {
                "internalType": "uint256[]",
                "name": "updatedMakerNonces",
                "type": "uint256[]"
            }
        ],
        "name": "hashAggregateOrder",
        "outputs": [
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address[]",
                        "name": "taker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "taker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Multi",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "uint64",
                "name": "partnerId",
                "type": "uint64"
            },
            {
                "internalType": "uint256[]",
                "name": "updatedMakerAmounts",
                "type": "uint256[]"
            },
            {
                "internalType": "uint256",
                "name": "updatedMakerNonce",
                "type": "uint256"
            }
        ],
        "name": "hashMultiOrder",
        "outputs": [
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "taker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "packed_commands",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Single",
                "name": "order",
                "type": "tuple"
            },
            {
                "internalType": "uint64",
                "name": "partnerId",
                "type": "uint64"
            },
            {
                "internalType": "uint256",
                "name": "updatedMakerAmount",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "updatedMakerNonce",
                "type": "uint256"
            }
        ],
        "name": "hashSingleOrder",
        "outputs": [
            {
                "internalType": "bytes32",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint64",
                "name": "",
                "type": "uint64"
            }
        ],
        "name": "partners",
        "outputs": [
            {
                "internalType": "uint16",
                "name": "fee",
                "type": "uint16"
            },
            {
                "internalType": "address",
                "name": "beneficiary",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "registered",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "signer",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "allowed",
                "type": "bool"
            }
        ],
        "name": "registerAllowedOrderSigner",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint64",
                "name": "partnerId",
                "type": "uint64"
            },
            {
                "internalType": "uint16",
                "name": "fee",
                "type": "uint16"
            },
            {
                "internalType": "address",
                "name": "beneficiary",
                "type": "address"
            }
        ],
        "name": "registerPartner",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_addresses",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_nonces",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "taker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "maker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "taker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "maker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Aggregate",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature[]",
                "name": "makersSignatures",
                "type": "tuple[]"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "makerAmounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "makerNonces",
                        "type": "uint256[]"
                    }
                ],
                "internalType": "struct Transfer.OldAggregateQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            }
        ],
        "name": "settleAggregate",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_addresses",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_nonces",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "taker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "maker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "taker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "maker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Aggregate",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature[]",
                "name": "makersSignatures",
                "type": "tuple[]"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "makerAmounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "makerNonces",
                        "type": "uint256[]"
                    }
                ],
                "internalType": "struct Transfer.OldAggregateQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.PermitSignature",
                "name": "takerPermitSignature",
                "type": "tuple"
            }
        ],
        "name": "settleAggregateAndSignPermit",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_addresses",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_nonces",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "taker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "maker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "taker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "maker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Aggregate",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature[]",
                "name": "makersSignatures",
                "type": "tuple[]"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "makerAmounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "makerNonces",
                        "type": "uint256[]"
                    }
                ],
                "internalType": "struct Transfer.OldAggregateQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint48",
                        "name": "deadline",
                        "type": "uint48"
                    },
                    {
                        "internalType": "uint48[]",
                        "name": "nonces",
                        "type": "uint48[]"
                    }
                ],
                "internalType": "struct Signature.MultiTokensPermit2Signature",
                "name": "infoPermit2",
                "type": "tuple"
            }
        ],
        "name": "settleAggregateAndSignPermit2",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address[]",
                        "name": "taker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "taker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Multi",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "makerAmounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerNonce",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Transfer.OldMultiQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            }
        ],
        "name": "settleMulti",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address[]",
                        "name": "taker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "taker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Multi",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "makerAmounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerNonce",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Transfer.OldMultiQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.PermitSignature",
                "name": "takerPermitSignature",
                "type": "tuple"
            }
        ],
        "name": "settleMultiAndSignPermit",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address[]",
                        "name": "taker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "taker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Multi",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "makerAmounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerNonce",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Transfer.OldMultiQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint48",
                        "name": "deadline",
                        "type": "uint48"
                    },
                    {
                        "internalType": "uint48[]",
                        "name": "nonces",
                        "type": "uint48[]"
                    }
                ],
                "internalType": "struct Signature.MultiTokensPermit2Signature",
                "name": "infoPermit2",
                "type": "tuple"
            }
        ],
        "name": "settleMultiAndSignPermit2",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "taker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "packed_commands",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Single",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerNonce",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Transfer.OldSingleQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            }
        ],
        "name": "settleSingle",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "taker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "packed_commands",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Single",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerNonce",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Transfer.OldSingleQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.PermitSignature",
                "name": "takerPermitSignature",
                "type": "tuple"
            }
        ],
        "name": "settleSingleAndSignPermit",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "taker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "packed_commands",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Single",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            },
            {
                "components": [
                    {
                        "internalType": "bool",
                        "name": "useOldAmount",
                        "type": "bool"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerAmount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "makerNonce",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Transfer.OldSingleQuote",
                "name": "takerQuoteInfo",
                "type": "tuple"
            },
            {
                "internalType": "bytes",
                "name": "takerSignature",
                "type": "bytes"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint48",
                        "name": "deadline",
                        "type": "uint48"
                    },
                    {
                        "internalType": "uint48",
                        "name": "nonce",
                        "type": "uint48"
                    }
                ],
                "internalType": "struct Signature.Permit2Signature",
                "name": "takerPermit2Signature",
                "type": "tuple"
            }
        ],
        "name": "settleSingleAndSignPermit2",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_addresses",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_nonces",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "taker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "address[][]",
                        "name": "maker_tokens",
                        "type": "address[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "taker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "uint256[][]",
                        "name": "maker_amounts",
                        "type": "uint256[][]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Aggregate",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature[]",
                "name": "makersSignatures",
                "type": "tuple[]"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            }
        ],
        "name": "swapAggregate",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address[]",
                        "name": "taker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "address[]",
                        "name": "maker_tokens",
                        "type": "address[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "taker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "uint256[]",
                        "name": "maker_amounts",
                        "type": "uint256[]"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "commands",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Multi",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            }
        ],
        "name": "swapMulti",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "taker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "packed_commands",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Single",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            },
            {
                "internalType": "uint256",
                "name": "filledTakerAmount",
                "type": "uint256"
            }
        ],
        "name": "swapSingle",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "uint256",
                        "name": "expiry",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_address",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_nonce",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "taker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "maker_token",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "taker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "maker_amount",
                        "type": "uint256"
                    },
                    {
                        "internalType": "address",
                        "name": "receiver",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "packed_commands",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Order.Single",
                "name": "order",
                "type": "tuple"
            },
            {
                "components": [
                    {
                        "internalType": "bytes",
                        "name": "signatureBytes",
                        "type": "bytes"
                    },
                    {
                        "internalType": "uint256",
                        "name": "flags",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct Signature.MakerSignature",
                "name": "makerSignature",
                "type": "tuple"
            }
        ],
        "name": "swapSingleFromContract",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "stateMutability": "payable",
        "type": "receive"
    }
]
