code: def _decode_xsrf_token(
          self, cookie: str
      ) -> Tuple[Optional[int], Optional[bytes], Optional[float]]:
          
  
          try:
              m = _signed_value_version_re.match(utf8(cookie))
  
              if m:
                  version = int(m.group(1))
                  if version == 2:
                      _, mask_str, masked_token, timestamp_str = cookie.split("|")
  
                      mask = binascii.a2b_hex(utf8(mask_str))
                      token = _websocket_mask(mask, binascii.a2b_hex(utf8(masked_token)))
                      timestamp = int(timestamp_str)
                      return version, token, timestamp
                  else:
                      # Treat unknown versions as not present instead of failing.
                      raise Exception("Unknown xsrf cookie version")
              else:
                  version = 1
                  try:
                      token = binascii.a2b_hex(utf8(cookie))
                  except (binascii.Error, TypeError):
                      token = utf8(cookie)
                  # We don't have a usable timestamp in older versions.
                  timestamp = int(time.time())
                  return (version, token, timestamp)
          except Exception:
              # Catch exceptions and return nothing instead of failing.
              gen_log.debug("Uncaught exception in _decode_xsrf_token", exc_info=True)
              return None, None, None
docs: Convert a cookie string into a the tuple form returned by
          _get_raw_xsrf_token.