code: def _parse_eyelink_ascii(
      fname,
      find_overlaps=True,
      overlap_threshold=0.05,
      apply_offsets=False,
  ):
      # ======================== Parse ASCII File =========================
      raw_extras = dict()
      raw_extras.update(_parse_recording_blocks(fname))
      raw_extras.update(_get_metadata(raw_extras))
      raw_extras["dt"] = _get_recording_datetime(fname)
      _validate_data(raw_extras)
  
      # ======================== Create DataFrames ========================
      raw_extras["dfs"] = _create_dataframes(raw_extras, apply_offsets)
      del raw_extras["sample_lines"]  # free up memory
      # add column names to dataframes and set the dtype of each column
      col_names, ch_names = _infer_col_names(raw_extras)
      raw_extras["dfs"] = _assign_col_names(
          col_names, raw_extras["dfs"]
      )
      raw_extras["dfs"] = _set_df_dtypes(
          raw_extras["dfs"]
      )  # set dtypes for dataframes
      # if HREF data, convert to radians
      if "HREF" in raw_extras["rec_info"]:
          raw_extras["dfs"]["samples"] = _convert_href_samples(
              raw_extras["dfs"]["samples"]
          )
      # fill in times between recording blocks with BAD_ACQ_SKIP
      if raw_extras["n_blocks"] > 1:
          logger.info(
              f"There are {raw_extras['n_blocks']} recording blocks in this file."
              f" Times between blocks will be annotated with BAD_ACQ_SKIP."
          )
          raw_extras["dfs"]["samples"] = _adjust_times(
              raw_extras["dfs"]["samples"], raw_extras["sfreq"]
          )
      # Convert timestamps to seconds
      for df in raw_extras["dfs"].values():
          df = _convert_times(df, raw_extras["first_samp"])
      # Find overlaps between left and right eye events
      if find_overlaps:
          for key in raw_extras["dfs"]:
              if key not in ["blinks", "fixations", "saccades"]:
                  continue
              raw_extras["dfs"][key] = _find_overlaps(
                  raw_extras["dfs"][key], max_time=overlap_threshold
              )
      # ======================== Info for BaseRaw ========================
      eye_ch_data = raw_extras["dfs"]["samples"][ch_names].to_numpy().T
      info = _create_info(ch_names, raw_extras)
  
      return eye_ch_data, info, raw_extras
  
imports: import re
  from datetime import datetime, timedelta, timezone
  import numpy
  from ..._fiff.constants import FIFF
  from ..._fiff.meas_info import create_info
  from ...annotations import Annotations
  from ...utils import _check_pandas_installed, logger, warn
label_desc: Use image node_id 1 for calling a global function with example usage: _parse_eyelink_ascii(fname, find_overlaps, overlap_threshold, apply_offsets) and returns: eye_ch_data,  info,  raw_extras