interface IERC1363Spender {
    /*
     * Note: the ERC-165 identifier for this interface is 0x7b04a2d0.
     * 0x7b04a2d0 === bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))
     */

    /**
     * @notice Handle the approval of ERC1363 tokens
     * @dev Any ERC1363 smart contract calls this function on the recipient
     * after an `approve`. This function MAY throw to revert and reject the
     * approval. Return of other than the magic value MUST result in the
     * transaction being reverted.
     * Note: the token contract address is always the message sender.
     * @param sender address The address which called `approveAndCall` function
     * @param amount uint256 The amount of tokens to be spent
     * @param data bytes Additional data with no specified format
     * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` unless throwing
     */
    function onApprovalReceived(address sender, uint256 amount, bytes calldata data) external returns (bytes4);
}
function onApprovalReceived(address sender, uint256 amount, bytes calldata data) external returns (bytes4);

/**
 * @notice Handle the approval of ERC1363 tokens
 * @dev Any ERC1363 smart contract calls this function on the recipient
 * after an `approve`. This function MAY throw to revert and reject the
 * approval. Return of other than the magic value MUST result in the
 * transaction being reverted.
 * Note: the token contract address is always the message sender.
 * @param sender address The address which called `approveAndCall` function
 * @param amount uint256 The amount of tokens to be spent
 * @param data bytes Additional data with no specified format
 * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` unless throwing
 */