def METHOD_NAME(
    message: Message, env: Environment
) -> MessageCallOutput:
    """
    If `message.current` is empty then it creates a smart contract
    else it executes a call from the `message.caller` to the `message.target`.
    Parameters
    ----------
    message :
        Transaction specific items.
    env :
        External items required for EVM execution.
    Returns
    -------
    output : `MessageCallOutput`
        Output of the message call
    """
    if message.target == Bytes0(b""):
        is_collision = account_has_code_or_nonce(
            env.state, message.current_target
        )
        if is_collision:
            return MessageCallOutput(Uint(0), U256(0), tuple(), set(), True)
        else:
            evm = process_create_message(message, env)
    else:
        evm = process_message(message, env)
    accounts_to_delete = collect_accounts_to_delete(evm)
    refund_counter = (
        calculate_gas_refund(evm)
        + len(accounts_to_delete) * REFUND_SELF_DESTRUCT
    )
    return MessageCallOutput(
        gas_left=evm.gas_left,
        refund_counter=refund_counter,
        logs=evm.logs if not evm.has_erred else (),
        accounts_to_delete=accounts_to_delete,
        has_erred=evm.has_erred,
    )