code: def ParseUserEngagedRow(
        self, parser_mediator, query, row, **unused_kwargs):
      
      query_hash = hash(query)
  
      event_data = WindowsTimelineUserEngagedEventData()
      event_data.package_identifier = self._GetRowValue(
          query_hash, row, 'PackageName')
  
      # Payload is JSON serialized as binary data in a BLOB field, with the text
      # encoded as UTF-8.
      payload_json_bytes = bytes(self._GetRowValue(query_hash, row, 'Payload'))
      payload_json_string = payload_json_bytes.decode('utf-8')
      payload = json.loads(payload_json_string)
  
      if 'reportingApp' in payload:
        event_data.reporting_app = payload['reportingApp']
      if 'activeDurationSeconds' in payload:
        event_data.active_duration_seconds = int(payload['activeDurationSeconds'])
  
      timestamp = self._GetRowValue(query_hash, row, 'StartTime')
      date_time = dfdatetime_posix_time.PosixTime(timestamp=timestamp)
      event = time_events.DateTimeValuesEvent(
          date_time, definitions.TIME_DESCRIPTION_START)
      parser_mediator.ProduceEventWithEventData(event, event_data)
docs: Parses a timeline row that describes a user interacting with an app.
  
      Args:
        parser_mediator (ParserMediator): mediates interactions between parsers
            and other components, such as storage and dfvfs.
        query (str): query that created the row.
        row (sqlite3.Row): row.