docs: def Start(self):
      """This uploads the rules to the foreman and, thus, starts the hunt."""
      # We are already running.
      if self.hunt_obj.Get(self.hunt_obj.Schema.STATE) == "STARTED":
        return
  
      # Determine when this hunt will expire.
      self.context.duration = self.runner_args.expiry_time
  
      # When the next client can be scheduled. Implements gradual client
      # recruitment rate according to the client_rate.
      self.context.next_client_due = rdfvalue.RDFDatetime.Now()
  
      self._CreateAuditEvent("HUNT_STARTED")
  
      # Start the hunt.
      self.hunt_obj.Set(self.hunt_obj.Schema.STATE("STARTED"))
      self.hunt_obj.Flush()
  
      if self.runner_args.add_foreman_rules:
        self._AddForemanRule()