code: func (actor Actor) StartApplication(app Application, client NOAAClient) (<-chan *LogMessage, <-chan error, <-chan ApplicationStateChange, <-chan string, <-chan error) {
  	messages, logErrs := actor.GetStreamingLogs(app.GUID, client)
  
  	appState := make(chan ApplicationStateChange)
  	allWarnings := make(chan string)
  	errs := make(chan error)
  	go func() {
  		defer close(appState)
  		defer close(allWarnings)
  		defer close(errs)
  		defer client.Close() // automatic close to prevent stale clients
  
  		if app.PackageState != constant.ApplicationPackageStaged {
  			appState <- ApplicationStateStaging
  		}
  
  		updatedApp, warnings, err := actor.CloudControllerClient.UpdateApplication(ccv2.Application{
  			GUID:  app.GUID,
  			State: constant.ApplicationStarted,
  		})
  
  		for _, warning := range warnings {
  			allWarnings <- warning
  		}
  		if err != nil {
  			errs <- err
  			return
  		}
  
  		actor.waitForApplicationStageAndStart(Application(updatedApp), client, appState, allWarnings, errs)
  	}()
  
  	return messages, logErrs, appState, allWarnings, errs
  }
docs: // StartApplication restarts a given application. If already stopped, no stop
  // call will be sent.