code: def read_lines(self, max_lines=None):
      
      if max_lines is None:
        return self.read_stream().split('\n')
  
      max_to_read = self.metadata.size
      bytes_to_read = min(100 * max_lines, self.metadata.size)
      while True:
        content = self.read_stream(byte_count=bytes_to_read)
  
        lines = content.split('\n')
        if len(lines) > max_lines or bytes_to_read >= max_to_read:
          break
        # try 10 times more bytes or max
        bytes_to_read = min(bytes_to_read * 10, max_to_read)
  
      # remove the partial line at last
      del lines[-1]
      return lines[0:max_lines]
docs: Reads the content of this object as text, and return a list of lines up to some max.
  
      Args:
        max_lines: max number of lines to return. If None, return all lines.
      Returns:
        The text content of the object as a list of lines.
      Raises:
        Exception if there was an error requesting the object's content.