interface IERC777Sender {
    /**
     * @dev Called by an {IERC777} token contract whenever a registered holder's
     * (`from`) tokens are about to be moved or destroyed. The type of operation
     * is conveyed by `to` being the zero address or not.
     *
     * This call occurs _before_ the token contract's state is updated, so
     * {IERC777-balanceOf}, etc., can be used to query the pre-operation state.
     *
     * This function may revert to prevent the operation from being executed.
     */
    function tokensToSend(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes calldata userData,
        bytes calldata operatorData
    ) external;
}
function tokensToSend(
    address operator,
    address from,
    address to,
    uint256 amount,
    bytes calldata userData,
    bytes calldata operatorData
) external;

/**
 * @dev Called by an {IERC777} token contract whenever a registered holder's
 * (`from`) tokens are about to be moved or destroyed. The type of operation
 * is conveyed by `to` being the zero address or not.
 *
 * This call occurs _before_ the token contract's state is updated, so
 * {IERC777-balanceOf}, etc., can be used to query the pre-operation state.
 *
 * This function may revert to prevent the operation from being executed.
 */