code: public void passDataToOutputPlugins(EventModel event) {
          IdentificationManagerM identificationManager = IdentificationManager.getInstance();
          List<Identification> allIds = outputPlugins.stream()
                  .map(identificationManager::getIdentification)
                  .filter(Optional::isPresent)
                  .map(Optional::get)
                  .collect(Collectors.toList());
  
          HashMap<Integer, List<Identification>> outputPluginBehaviour = event.getEventBehaviourController()
                  .getOutputPluginBehaviour(allIds);
  
          @SuppressWarnings("unchecked")
          Set<OutputPluginModel> outputPluginsCopy = (Set<OutputPluginModel>) this.outputPlugins.clone();
  
          Function<List<Identification>, List<OutputPluginModel>> getOutputPlugin = ids -> ids.stream()
                  .map(id -> outputPluginsCopy.stream()
                          .filter(outputPlugin -> outputPlugin.isOwner(id))
                          .findFirst()
                          .orElseGet(null))
                  .filter(Objects::nonNull)
                  .peek(outputPluginsCopy::remove)
                  .collect(Collectors.toList());
  
          outputPluginBehaviour.entrySet().stream()
                  .sorted(Comparator.comparingInt((Map.Entry<Integer, List<Identification>> x) -> x.getKey()).reversed())
                  .flatMap(entry -> getOutputPlugin.apply(entry.getValue()).stream())
                  .distinct()
                  .forEach(op -> processOutputPlugin(event, op));
  
          outputPluginsCopy.forEach(op -> processOutputPlugin(event, op));
      }
docs: gets the Event and sends it to the right outputPlugin for further processing
  <p>
  passDataToOutputPlugins is the main method of OutputManger. It is called whenever the output process has to be started
  
  @param event an Instance of Event