ROOT logo
// $Id$
//**************************************************************************
//* This file is property of and copyright by the                          * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************

/// @file   AliHLTTask.cxx
/// @author Matthias Richter
/// @date   
/// @brief  Implementation of HLT tasks.
///

#include <cerrno>
#include <cassert>
#include <iostream>
#include <string>
#include <ctime>
#include "AliHLTTask.h"
#include "AliHLTConfiguration.h"
#include "AliHLTConfigurationHandler.h"
#include "AliHLTComponent.h"
#include "AliHLTComponentHandler.h"
#include "TList.h"
#include "AliHLTErrorGuard.h"

using std::cout;

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTTask)

AliHLTTask::AliHLTTask()
  :
  fpConfiguration(NULL),
  fpComponent(NULL),
  fpDataBuffer(NULL),
  fListTargets(),
  fListDependencies(),
  fBlockDataArray()
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

AliHLTTask::AliHLTTask(AliHLTConfiguration* pConf)
  :
  fpConfiguration(pConf),
  fpComponent(NULL),
  fpDataBuffer(NULL),
  fListTargets(),
  fListDependencies(),
  fBlockDataArray()
{
  // see header file for function documentation
}

AliHLTTask::~AliHLTTask()
{
  // see header file for function documentation
  TObjLink* lnk=fListDependencies.FirstLink();

  while (lnk!=NULL) {
    AliHLTTask* pTask=(AliHLTTask*)lnk->GetObject();
    pTask->UnsetTarget(this);
    lnk=lnk->Next();
  }
  lnk=fListTargets.FirstLink();

  while (lnk!=NULL) {
    AliHLTTask* pTask=(AliHLTTask*)lnk->GetObject();
    pTask->UnsetDependency(this);
    lnk=lnk->Next();
  }

  if (fpComponent) delete fpComponent;
  fpComponent=NULL;
}

int AliHLTTask::Init(AliHLTConfiguration* pConf, AliHLTComponentHandler* pCH)
{
  // see header file for function documentation
  int iResult=0;
  if (fpConfiguration!=NULL && pConf!=NULL && fpConfiguration!=pConf) {
    HLTWarning("overriding existing reference to configuration object %p by %p",
	       fpConfiguration, pConf);
  }
  if (pConf!=NULL) fpConfiguration=pConf;
  iResult=CreateComponent(fpConfiguration, pCH, fpComponent);
  if (iResult>=0) {
    iResult=CustomInit(pCH);
  }
  return iResult;
}

int AliHLTTask::CreateComponent(AliHLTConfiguration* pConfiguration, AliHLTComponentHandler* pCH, AliHLTComponent*& pComponent) const
{
  // see header file for class documentation
  int iResult=0;
  if (!pConfiguration) return -EINVAL;

  const AliHLTConfiguration* pConf=AliHLTConfigurationHandler::FindSubstitution(*pConfiguration);
  if (!pConf) pConf=pConfiguration;
  if (pConf) {
    if (pCH) {
      int argc=0;
      const char** argv=NULL;
      if ((iResult=pConf->GetArguments(&argv))>=0) {
	argc=iResult; // just to make it clear
	// TODO: we have to think about the optional environment parameter,
	// currently just set to NULL.
	iResult=pCH->CreateComponent(pConf->GetComponentID(), pComponent);
	if (pComponent && iResult>=0) {
	  TString description;
	  description.Form("chainid=%s", GetName());
	  pComponent->SetComponentDescription(description.Data());
	  const AliHLTAnalysisEnvironment* pEnv=pCH->GetEnvironment();
	  if ((iResult=pComponent->Init(pEnv, NULL, argc, argv))>=0) {
	    //HLTDebug("component %s (%p) created", pComponent->GetComponentID(), pComponent); 
	  } else {
	    HLTError("Initialization of component \"%s\" failed with error %d", pComponent->GetComponentID(), iResult);
	  }
	} else {
	  //HLTError("can not find component \"%s\" (%d)", pConf->GetComponentID(), iResult);
	}
      } else {
	HLTError("can not get argument list for configuration %s (%s)", pConf->GetName(), pConf->GetComponentID());
	iResult=-EINVAL;
      }
    } else {
      HLTError("component handler instance needed for task initialization");
      iResult=-EINVAL;
    }
  } else {
    HLTError("configuration object instance needed for task initialization");
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTTask::Deinit()
{
  // see header file for function documentation
  int iResult=0;
  CustomCleanup();
  AliHLTComponent* pComponent=GetComponent();
  fpComponent=NULL;
  if (pComponent) {
    //HLTDebug("delete component %s (%p)", pComponent->GetComponentID(), pComponent); 
    pComponent->Deinit();
    delete pComponent;
  } else {
    HLTWarning("task doesn't seem to be in initialized");
  }
  return iResult;
}

const char *AliHLTTask::GetName() const
{
  // see header file for function documentation
  if (fpConfiguration)
    return fpConfiguration->GetName();
  return TObject::GetName();
}

AliHLTConfiguration* AliHLTTask::GetConf() const
{
  // see header file for function documentation
  return fpConfiguration;
}

AliHLTComponent* AliHLTTask::GetComponent() const
{
  // see header file for function documentation
  return fpComponent;
}

AliHLTTask* AliHLTTask::FindDependency(const char* id)
{
  // see header file for function documentation
  AliHLTTask* pTask=NULL;
  if (id) {
    pTask=(AliHLTTask*)fListDependencies.FindObject(id);
  }
  return pTask;
}

int AliHLTTask::FollowDependency(const char* id, TList* pTgtList)
{
  // see header file for function documentation
  int iResult=0;
  if (id) {
    AliHLTTask* pDep=NULL;
    if ((pDep=(AliHLTTask*)fListDependencies.FindObject(id))!=NULL) {
      if (pTgtList) pTgtList->Add(pDep);
      iResult++;
    } else {
      TObjLink* lnk=fListDependencies.FirstLink();
      while (lnk && iResult==0) {
	pDep=(AliHLTTask*)lnk->GetObject();
	if (pDep) {
	  if ((iResult=pDep->FollowDependency(id, pTgtList))>0) {
	    if (pTgtList) pTgtList->AddFirst(pDep);
	    iResult++;
	  }
	} else {
	  iResult=-EFAULT;
	}
	lnk=lnk->Next();
      }
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

void AliHLTTask::PrintDependencyTree(const char* id, int bFromConfiguration)
{
  // see header file for function documentation
  HLTLogKeyword("task dependencies");
  int iResult=0;
  TList tgtList;
  if (bFromConfiguration) {
    if (fpConfiguration)
      iResult=fpConfiguration->FollowDependency(id, &tgtList);
    else
      iResult=-EFAULT;
  } else
    iResult=FollowDependency(id, &tgtList);
  if (iResult>0) {
    HLTMessage("     dependency level %d ", iResult);
    TObjLink* lnk=tgtList.FirstLink();
    int i=iResult;
    char* pSpace = new char[iResult+1];
    if (pSpace) {
      memset(pSpace, 32, iResult);
      pSpace[i]=0;
      while (lnk) {
	TObject* obj=lnk->GetObject();
	HLTMessage("     %s^-- %s ", &pSpace[i--], obj->GetName());
	lnk=lnk->Next();
      }
      delete [] pSpace;
    } else {
      iResult=-ENOMEM;
    }
  }
}

int AliHLTTask::SetDependency(AliHLTTask* pDep)
{
  // see header file for function documentation
  int iResult=0;
  if (pDep) {
    if (FindDependency(pDep->GetName())==NULL) {
      fListDependencies.Add(pDep);
    } else {
      iResult=-EEXIST;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTTask::UnsetDependency(AliHLTTask* pDep)
{
  // see header file for function documentation
  fListDependencies.Remove(pDep);
  if (fpConfiguration) {
    fpConfiguration->InvalidateSources();
  }
  return 0;
}

int AliHLTTask::CheckDependencies()
{
  // see header file for function documentation
  int iResult=0;
  AliHLTConfiguration* pSrc=fpConfiguration->GetFirstSource();
  while (pSrc) {
    if (FindDependency(pSrc->GetName())==NULL) {
      //HLTDebug("dependency \"%s\" unresolved", pSrc->GetName());
      iResult++;
    }
    pSrc=fpConfiguration->GetNextSource();
  }
  return iResult;
}


int AliHLTTask::Depends(AliHLTTask* pTask)
{
  // see header file for function documentation
  int iResult=0;
  if (pTask) {
    if (fpConfiguration) {
      iResult=fpConfiguration->GetSource(pTask->GetName())!=NULL;
      if (iResult>0) {
	//HLTDebug("task  \"%s\" depends on \"%s\"", GetName(), pTask->GetName());
      } else {
	//HLTDebug("task  \"%s\" independend of \"%s\"", GetName(), pTask->GetName());
      }
    } else {
      iResult=-EFAULT;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

AliHLTTask* AliHLTTask::FindTarget(const char* id)
{
  // see header file for function documentation
  AliHLTTask* pTask=NULL;
  if (id) {
    pTask=(AliHLTTask*)fListTargets.FindObject(id);
  }
  return pTask;
}

int AliHLTTask::SetTarget(AliHLTTask* pTgt)
{
  // see header file for function documentation
  int iResult=0;
  if (pTgt) {
    if (FindTarget(pTgt->GetName())==NULL) {
      fListTargets.Add(pTgt);
    } else {
      iResult=-EEXIST;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTTask::UnsetTarget(AliHLTTask* pTarget)
{
  // see header file for function documentation
  fListTargets.Remove(pTarget);
  return 0;
}

int AliHLTTask::StartRun()
{
  // see header file for function documentation
  int iResult=0;
  int iNofInputDataBlocks=0;
  AliHLTComponent* pComponent=GetComponent();
  if (pComponent) {
    // determine the number of input data blocks provided from the source tasks
    { // set scope for lnk as a local variable
    TObjLink* lnk=fListDependencies.FirstLink();
    while (lnk && iResult>=0) {
      AliHLTTask* pSrcTask=(AliHLTTask*)lnk->GetObject();
      if (pSrcTask) {
	if ((iResult=pSrcTask->GetNofMatchingDataTypes(this))>0) {
	  iNofInputDataBlocks+=iResult;
	} else if (iResult==0) {
	  HLTWarning("source task %s (%p) does not provide any matching data type for task %s (%p)", pSrcTask->GetName(), pSrcTask, GetName(), this);
	} else {
	  HLTError("task %s (%p): error getting matching data types for source task %s (%p)", GetName(), this, pSrcTask->GetName(), pSrcTask);
	  iResult=-EFAULT;
	}
      }
      lnk=lnk->Next();
    }
    }
    if (iResult>=0) {
      if (fBlockDataArray.size()>0) {
	HLTWarning("block data array for task %s (%p) was not cleaned", GetName(), this);
	fBlockDataArray.clear();
      }

      // component init
      // the initialization of the component is done by the ComponentHandler after creation
      // of the component.
      //iResult=Init( AliHLTAnalysisEnvironment* environ, void* environ_param, int argc, const char** argv );

      // allocate the data buffer, which controls the output buffer and subscriptions
      if (iResult>=0) {
	fpDataBuffer=new AliHLTDataBuffer;
	if (fpDataBuffer!=NULL) {
	  fpDataBuffer->SetLocalLoggingLevel(GetLocalLoggingLevel());
	  HLTDebug("created data buffer %p for task %s (%p)", fpDataBuffer, GetName(), this);
	  TObjLink* lnk=fListTargets.FirstLink();
	  while (lnk && iResult>=0) {
	    AliHLTTask* pTgtTask=(AliHLTTask*)lnk->GetObject();
	    if (pTgtTask) {
	      if ((iResult=fpDataBuffer->SetConsumer(pTgtTask->GetComponent()))>=0) {
	      }
	    } else {
	      iResult=-EFAULT;
	      break;
	    }
	    lnk=lnk->Next();
	  }
	} else {
	  HLTFatal("can not create data buffer object, memory allocation failed");
	  iResult=-ENOMEM;
	}
      }
    }
    if (iResult>=0) {
      // send the SOR event
      
    }
  } else {
    HLTError("task %s (%p) does not have a component", GetName(), this);
    iResult=-EFAULT;
  }
  return iResult;
}

int AliHLTTask::EndRun()
{
  // see header file for function documentation
  int iResult=0;
  if (fBlockDataArray.size()>0) {
    fBlockDataArray.clear();
  }
  if (fpDataBuffer) {
    AliHLTDataBuffer* pBuffer=fpDataBuffer;
    fpDataBuffer=NULL;
    delete pBuffer;
  }
  return iResult;
}

int AliHLTTask::ProcessTask(Int_t eventNo, AliHLTUInt32_t eventType, AliHLTTriggerMask_t trgMask,
			    AliHLTUInt32_t timestamp, AliHLTUInt32_t participatingDetectors)
{
  // see header file for function documentation
  int iResult=0;
  AliHLTComponent* pComponent=GetComponent();
  if (pComponent && fpDataBuffer) {
    HLTDebug("Processing task %s (%p) fpDataBuffer %p", GetName(), this, fpDataBuffer);
    fpDataBuffer->Reset();
    int iSourceDataBlock=0;
    int iInputDataVolume=0;

    AliHLTTask* pSrcTask=NULL;
    AliHLTTaskPList subscribedTaskList;
    TObjLink* lnk=fListDependencies.FirstLink();

    // instances of SOR and EOR events to be kept
    int iSOR=-1;
    int iEOR=-1;
    // TODO 2009-09-30
    // generalize handling of the special blocks to be forwarded on SOR and EOR
    // just adding a new specific handling for the ECS parameter block as a quick
    // solution
    int iECS=-1;

    // subscribe to all source tasks
    fBlockDataArray.clear();
    while (lnk && iResult>=0) {
      pSrcTask=(AliHLTTask*)lnk->GetObject();
      if (pSrcTask) {
	int iMatchingDB=pSrcTask->GetNofMatchingDataBlocks(this);
	if (iMatchingDB<0) {
	  HLTError("task %s (%p): error getting no of matching data blocks from task %s (%p), error %d", GetName(), this, pSrcTask->GetName(), pSrcTask, iMatchingDB);
	  iResult=iMatchingDB;
	  break;
	} else if (iMatchingDB==0) {
	  HLTDebug("source task %s (%p) does not provide any matching data type for task %s (%p)", pSrcTask->GetName(), pSrcTask, GetName(), this);
	}
	if ((iResult=pSrcTask->Subscribe(this, fBlockDataArray))>=0) {
	  iSOR=iEOR=iECS=-1;
	  AliHLTComponentBlockDataList::iterator block=fBlockDataArray.begin();
	  for (int i=0; block!=fBlockDataArray.end(); i++) {
	    bool bRemove=0;
	    bRemove|=(*block).fDataType==kAliHLTDataTypeSOR && !(iSOR<0 && (iSOR=i)>=0);
	    bRemove|=(*block).fDataType==kAliHLTDataTypeEOR && !(iEOR<0 && (iEOR=i)>=0);
	    bRemove|=(*block).fDataType==kAliHLTDataTypeECSParam && !(iECS<0 && (iECS=i)>=0);
	    //HLTInfo("block %d, iSOR=%d iEOR=%d remove=%d", i, iSOR, iEOR, bRemove);
	    if (i<iSourceDataBlock) {
	      assert(!bRemove);
	    } else if (bRemove) {
	      HLTDebug("remove duplicated event %s (%d)", AliHLTComponent::DataType2Text((*block).fDataType).c_str(), i);
	      pSrcTask->Release(&(*block), this);
	      block=fBlockDataArray.erase(block);
	      continue;
	    } else {
	    iInputDataVolume+=(*block).fSize;
	    // put the source task as many times into the list as it provides data blocks
	    // makes the bookkeeping for the data release easier
	    subscribedTaskList.push_back(pSrcTask);
	    }
	    block++;
	  }
	  HLTDebug("Task %s (%p) successfully subscribed to %d data block(s) of task %s (%p)", GetName(), this, iResult, pSrcTask->GetName(), pSrcTask);
	  iSourceDataBlock=fBlockDataArray.size();	  
	  iResult=0;
	} else {
	  HLTError("Task %s (%p): subscription to task %s (%p) failed with error %d", GetName(), this, pSrcTask->GetName(), pSrcTask, iResult);
	  iResult=-EFAULT;
	}
      } else {
	HLTFatal("fatal internal error in ROOT list handling");
	iResult=-EFAULT;
      }
      lnk=lnk->Next();
    }    

    // process the event
    int iNofTrial=0; // repeat processing if component returns -ENOSPC
    AliHLTUInt32_t iLastOutputDataSize=0;
    if (iResult>=0) {
    do {
      long unsigned int iOutputDataSize=0;
      AliHLTConfiguration* pConf=GetConf();
      // check if there was a buffer size specified, query output size
      // estimator from component otherwize
      if (pConf && pConf->GetOutputBufferSize()>=0) {
	iOutputDataSize=pConf->GetOutputBufferSize();
      } else {
      long unsigned int iConstBase=0;
      double fInputMultiplier=0;
      if (pComponent->GetComponentType()!=AliHLTComponent::kSink) {
	pComponent->GetOutputDataSize(iConstBase, fInputMultiplier);
	// add a small margin to the buffer to allow optional component
	// statistics
	iConstBase+=100;
#if defined(__DEBUG) || defined(HLT_COMPONENT_STATISTICS)
	for (AliHLTComponentBlockDataList::iterator element=fBlockDataArray.begin();
	     element!=fBlockDataArray.end(); element++) {
	  if (element->fDataType==kAliHLTDataTypeComponentStatistics) {
	    iConstBase+=element->fSize;
	  }
	}
#endif
      }
      if (fInputMultiplier<0) {
	HLTWarning("ignoring negative input multiplier");
	fInputMultiplier=0;
      }
      iOutputDataSize=int(fInputMultiplier*iInputDataVolume) + iConstBase;
      //HLTDebug("task %s: reqired output size %d", GetName(), iOutputDataSize);
      }
      if (iNofTrial>0) {
	// dont process again if the buffer size is the same
	if (iLastOutputDataSize==iOutputDataSize) break;
	HLTImportant("processing event %d again with buffer size %d", eventNo, iOutputDataSize);
      }
      AliHLTUInt8_t* pTgtBuffer=NULL;
      if (iOutputDataSize>0) pTgtBuffer=fpDataBuffer->GetTargetBuffer(iOutputDataSize);
      //HLTDebug("provided raw buffer %p", pTgtBuffer);
      AliHLTComponentEventData evtData;
      AliHLTComponent::FillEventData(evtData);
      if (eventNo>=0)
	evtData.fEventID=(AliHLTEventID_t)eventNo;
      if (timestamp < kMaxUInt) evtData.fEventCreation_s=timestamp;
      else
      evtData.fEventCreation_s=static_cast<AliHLTUInt32_t>(time(NULL));
      AliHLTComponentTriggerData trigData;
      AliHLTEventTriggerData evtTrigData;
      trigData.fStructSize=sizeof(trigData);
      trigData.fDataSize=sizeof(AliHLTEventTriggerData);
      memset(&evtTrigData, 0, trigData.fDataSize);
      // Setup the CDH in the trigger data, based on the event type, CTP trigger
      // mask and participating detectors.
      evtTrigData.fCommonHeaderWordCnt=gkAliHLTCommonHeaderCount;
      AliHLTUInt8_t l1msg = 0x0;
      switch (eventType)
      {
      case gkAliEventTypeData:        l1msg = 0x00; break;
      case gkAliEventTypeDataReplay:  l1msg = 0x00; break;
      case gkAliEventTypeStartOfRun:  l1msg = (0xE << 2) | 0x01; break;
      case gkAliEventTypeEndOfRun:    l1msg = (0xF << 2) | 0x01; break;
      case gkAliEventTypeCalibration: l1msg = (0x1 << 6) | 0x01; break;
      case gkAliEventTypeSoftware:    l1msg = 0x01; break;
      }
      evtTrigData.fCommonHeader[1] = AliHLTUInt32_t(l1msg) << 14;
      evtTrigData.fCommonHeader[3] = ((l1msg & 0x1) == 0x1) ? (participatingDetectors & 0xFFFFFF) : 0x0;
      evtTrigData.fCommonHeader[5] = (trgMask & AliHLTTriggerMask_t(0xffffffff)).to_ulong();
      evtTrigData.fCommonHeader[6] = ((trgMask>>32) & AliHLTTriggerMask_t(0x3ffff)).to_ulong();
      evtTrigData.fCommonHeader[7] = ((trgMask>>50) & AliHLTTriggerMask_t(0xffffffff)).to_ulong();
      evtTrigData.fCommonHeader[8] = ((trgMask>>72) & AliHLTTriggerMask_t(0x3ffff)).to_ulong();

      trigData.fData=&evtTrigData;
      iLastOutputDataSize=iOutputDataSize;
      AliHLTUInt32_t size=iOutputDataSize;
      AliHLTUInt32_t outputBlockCnt=0;
      AliHLTComponentBlockData* outputBlocks=NULL;
      AliHLTComponentEventDoneData* edd=NULL;
      if (pTgtBuffer!=NULL || iOutputDataSize==0) {
	// add event type data block
	// the block is removed immediately after processing from the list
	AliHLTComponentBlockData eventTypeBlock;
	AliHLTComponent::FillBlockData(eventTypeBlock);
	// Note: no payload!
	eventTypeBlock.fDataType=kAliHLTDataTypeEvent;
	eventTypeBlock.fSpecification=eventType;
	fBlockDataArray.push_back(eventTypeBlock);

	if (CheckFilter(kHLTLogDebug)) Print("proc");

	AliHLTUInt32_t iblock=0;
	// check input and output buffers for consistency
	// to be enabled after fixing bug with DataBuffer and forwarded SOR/EOR
	//for (iblock=0; iblock<fBlockDataArray.size(); iblock++) {
	//  if ((AliHLTUInt8_t*)fBlockDataArray[iblock].fPtr >= pTgtBuffer+size) continue;
	//  if (pTgtBuffer >= (AliHLTUInt8_t*)fBlockDataArray[iblock].fPtr+fBlockDataArray[iblock].fSize) continue;
	//  HLTFatal("input and output buffer overlap for block descriptor %d (ptr %p size %d): output buffer %p %d",
	//	   iblock, fBlockDataArray[iblock].fPtr, fBlockDataArray[iblock].fSize,
	//	   pTgtBuffer, size);
	//}	

	// process
	evtData.fBlockCnt=fBlockDataArray.size();
	iResult=pComponent->ProcessEvent(evtData, &fBlockDataArray[0], trigData, pTgtBuffer, size, outputBlockCnt, outputBlocks, edd);
	HLTDebug("component %s ProcessEvent finnished (%d): size=%d blocks=%d", pComponent->GetComponentID(), iResult, size, outputBlockCnt);

	// EventDoneData is for the moment ignored in AliHLTSystem
	if (edd) {
	  HLTDebug("got EventDoneData size %d", edd->fDataSize);
	  delete [] reinterpret_cast<char*>(edd);
	  edd=NULL;
	}

	// remove event data block
	fBlockDataArray.pop_back();

	// check for forwarded blocks.
	// loop over all output blocks and check
	// 1. for duplicate blocks (pointing to same location in output buffer
	//    or to the same buffer)
	// 2. for blocks forwarded from the input.
	if (iResult>=0 && outputBlocks) {
	  if (fListTargets.First()!=NULL) {
	    AliHLTComponentBlockDataList segments;
	    for (AliHLTUInt32_t oblock=0; oblock<outputBlockCnt; oblock++) {
	      // consistency check for data reference
	      if (outputBlocks[oblock].fPtr!=NULL && outputBlocks[oblock].fPtr!=pTgtBuffer &&
		  outputBlocks[oblock].fOffset!=0) {
		HLTWarning("output block %s 0x%08x has inconsistent data reference ptr=%p offset=0x%08x: "
			   "for new blocks use offset only, forwarded blocks have fPtr set only",
			   AliHLTComponent::DataType2Text(outputBlocks[oblock].fDataType).c_str(),
			   outputBlocks[oblock].fSpecification,
			   outputBlocks[oblock].fPtr, outputBlocks[oblock].fOffset);
	      }

	      // check for duplicates in the output
	      // this check applies for forwarded data blocks where
	      // the ptr is not inside the target buffer
	      AliHLTUInt32_t checkblock=0;
	      for (; checkblock<oblock; checkblock++) {
		if (outputBlocks[oblock].fPtr!=NULL && outputBlocks[oblock].fPtr!=pTgtBuffer &&
		    outputBlocks[checkblock].fPtr==outputBlocks[oblock].fPtr) {
		  if (outputBlocks[checkblock].fSize!=outputBlocks[oblock].fSize ||
		      outputBlocks[checkblock].fDataType!=outputBlocks[oblock].fDataType) {
		    HLTWarning("output blocks %d (%s 0x%08x) and %d (%s 0x%08x) have identical data references ptr=%p "
			       "but differ in data type and/or size: %d vs. %d, ignoring block %d",
			       oblock,
			       AliHLTComponent::DataType2Text(outputBlocks[oblock].fDataType).c_str(),
			       outputBlocks[oblock].fSpecification,
			       checkblock,
			       AliHLTComponent::DataType2Text(outputBlocks[checkblock].fDataType).c_str(),
			       outputBlocks[checkblock].fSpecification,
			       outputBlocks[oblock].fPtr,
			       outputBlocks[oblock].fSize,
			       outputBlocks[checkblock].fSize,
			       checkblock);
		  }
		  // ignore from the second copy
		  break;
		}
	      }
	      if (checkblock<oblock) continue;

	      // search for the forwarded data blocks
	      // new data blocks are announced to the data buffer, forwarded data blocks
	      // to the publisher task. The publisher task of a forwarded data block is
	      // removed from the list in order to keep the buffer open. It will be releases
	      // when the subscribing task releases it
	      iblock=0;
	      for (; iblock<fBlockDataArray.size(); iblock++) {
		if (outputBlocks[oblock].fDataType==kAliHLTDataTypeEvent) {
		  // the event type data block is an artificial data block
		  // ignore if it was forwarded
		  break;
		}
		if (fBlockDataArray[iblock].fPtr==outputBlocks[oblock].fPtr) {
		  assert(subscribedTaskList[iblock]!=NULL);
		  if (subscribedTaskList[iblock]==NULL) {
		    ALIHLTERRORGUARD(1, "missing parent task for forwarded data block %s 0x%08x, original data block %s 0x%08x, subsequent errors are suppressed",
				     AliHLTComponent::DataType2Text(outputBlocks[oblock].fDataType).c_str(),
				     outputBlocks[oblock].fSpecification,
				     AliHLTComponent::DataType2Text(outputBlocks[iblock].fDataType).c_str(),
				     outputBlocks[iblock].fSpecification);
		    continue;
		  }
		  HLTDebug("forward segment %d (source task %s %p) to data buffer %p", iblock, pSrcTask->GetName(), pSrcTask, fpDataBuffer);
		  fpDataBuffer->Forward(subscribedTaskList[iblock], &fBlockDataArray[iblock]);
		  subscribedTaskList[iblock]=NULL; // not to be released in the loop further down
		  break;
		}
	      }
	      if (iblock==fBlockDataArray.size()) segments.push_back(outputBlocks[oblock]);
	    }
	    if (pTgtBuffer && segments.size()>0) {
	      iResult=fpDataBuffer->SetSegments(pTgtBuffer, &segments[0], segments.size());
	    }
	  } else {
	    // no forwarding, actually we dont even need to keep the data, this is a
	    // dead end (fListTargets empty)
	    //iResult=fpDataBuffer->SetSegments(pTgtBuffer, outputBlocks, outputBlockCnt);
	  }
	  delete [] outputBlocks; outputBlocks=NULL; outputBlockCnt=0;
	} else {
	  fpDataBuffer->Reset();
	}
	if (fListTargets.First()!=NULL) {
	  if (iSOR>=0 && subscribedTaskList[iSOR]!=NULL) {
	    HLTDebug("forward SOR event segment %d (source task %s %p) to data buffer %p", iSOR, pSrcTask->GetName(), pSrcTask, fpDataBuffer);
	    fpDataBuffer->Forward(subscribedTaskList[iSOR], &fBlockDataArray[iSOR]);
	    subscribedTaskList[iSOR]=NULL; // not to be released in the loop further down
	  }
	  if (iEOR>=0 && subscribedTaskList[iEOR]!=NULL) {
	    HLTDebug("forward EOR event (%s) segment %d (source task %s %p) to data buffer %p", AliHLTComponent::DataType2Text(fBlockDataArray[iEOR].fDataType).c_str(), iEOR, pSrcTask->GetName(), pSrcTask, fpDataBuffer);
	    fpDataBuffer->Forward(subscribedTaskList[iEOR], &fBlockDataArray[iEOR]);
	    subscribedTaskList[iEOR]=NULL; // not to be released in the loop further down
	  }
	  if (iECS>=0 && subscribedTaskList[iECS]!=NULL) {
	    HLTDebug("forward ECS event (%s) segment %d (source task %s %p) to data buffer %p", AliHLTComponent::DataType2Text(fBlockDataArray[iECS].fDataType).c_str(), iECS, pSrcTask->GetName(), pSrcTask, fpDataBuffer);
	    fpDataBuffer->Forward(subscribedTaskList[iECS], &fBlockDataArray[iECS]);
	    subscribedTaskList[iECS]=NULL; // not to be released in the loop further down
	  }
	}
      } else {
	HLTError("no target buffer available");
	iResult=-EFAULT;
      }
    } while (iResult==-ENOSPC && iNofTrial++<1);
    }

    fBlockDataArray.clear();
    if (CheckFilter(kHLTLogDebug)) Print("proc");

    // now release all buffers which we have subscribed to
    iSourceDataBlock=0;
    AliHLTTaskPList::iterator element;
    while ((element=subscribedTaskList.begin())!=subscribedTaskList.end()) {
      pSrcTask=*element;
      if (pSrcTask) {
	int iTempRes=0;
	if ((iTempRes=pSrcTask->Release(&fBlockDataArray[iSourceDataBlock], this))>=0) {
	  HLTDebug("successfully released segment of task %s (%p)", pSrcTask->GetName(), pSrcTask);
	} else {
	  HLTError("realease of task %s (%p) failed with error %d", pSrcTask->GetName(), pSrcTask, iTempRes);
	}
      }
      subscribedTaskList.erase(element);
      iSourceDataBlock++;
    }
    if (subscribedTaskList.size()>0) {
      HLTError("could not release all data buffers");
    }
  } else {
    HLTError("internal failure (not initialized component %p, data buffer %p)", fpComponent, fpDataBuffer);
    iResult=-EFAULT;
  }
  return iResult;
}

int AliHLTTask::SubscribeSourcesAndSkip()
{
  // function carries out the proper cleanup of the source components
  // by subscribing and releasing
  int iResult=0;  
  AliHLTTask* pSrcTask=NULL;
  AliHLTTaskPList subscribedTaskList;

  // cleanup the data buffer
  if (fpDataBuffer) fpDataBuffer->Reset();

  // subscribe to all source tasks
  fBlockDataArray.clear();
  for (TObjLink* lnk=fListDependencies.FirstLink(); lnk!=NULL; lnk=lnk->Next()) {
    if (!lnk->GetObject()) continue;
    pSrcTask=dynamic_cast<AliHLTTask*>(lnk->GetObject());
    if (!pSrcTask) continue;
    unsigned iPosition=fBlockDataArray.size();
    if ((iResult=pSrcTask->Subscribe(this, fBlockDataArray))>0) {
      for (unsigned i=iPosition; i<fBlockDataArray.size(); i++) {
	subscribedTaskList.push_back(pSrcTask);
      }
      HLTDebug("subscribed to %d blocks of task %s (%p)", iResult, pSrcTask->GetName(), pSrcTask, iResult);
    } else if (iResult<0) {
      HLTError("failed to subscribe to task %s (%p) with error %d", pSrcTask->GetName(), pSrcTask, iResult);
    }
  }

  unsigned iSourceDataBlock=0;
  AliHLTTaskPList::iterator element;
  while ((element=subscribedTaskList.begin())!=subscribedTaskList.end()) {
    assert(iSourceDataBlock<fBlockDataArray.size());
    pSrcTask=*element;
    if (pSrcTask && iSourceDataBlock<fBlockDataArray.size()) {
      if ((iResult=pSrcTask->Release(&fBlockDataArray[iSourceDataBlock], this))>=0) {
	HLTDebug("successfully released segment of task %s (%p)", pSrcTask->GetName(), pSrcTask);
      } else if (iSourceDataBlock>=fBlockDataArray.size()) {
	HLTError("mismatch between list of subscribed tasks and block list in task %s (%p), can not release task %s (%p)", GetName(), this, pSrcTask->GetName(), pSrcTask);
      } else {
	HLTError("realease of task %s (%p) failed with error %d", pSrcTask->GetName(), pSrcTask, iResult);
      }
    }
    subscribedTaskList.erase(element);
    iSourceDataBlock++;
  }
  if (iSourceDataBlock<fBlockDataArray.size()) {
    HLTWarning("not all subscriptions released for task %s (%p)", GetName(), this);
  }

  return 0;
}

int AliHLTTask::GetNofMatchingDataBlocks(const AliHLTTask* pConsumerTask) const
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumerTask) {
    if (fpDataBuffer) {
      iResult=fpDataBuffer->FindMatchingDataBlocks(pConsumerTask->GetComponent(), NULL);
    } else {
      HLTFatal("internal data buffer missing");
      iResult=-EFAULT;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTTask::GetNofMatchingDataTypes(const AliHLTTask* pConsumerTask) const
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumerTask) {
    AliHLTComponent* pComponent=GetComponent();
    if (!pComponent) {
      // init ?
      HLTError("component not initialized");
      iResult=-EFAULT;
    }
    if (pComponent) {
      iResult=pComponent->FindMatchingDataTypes(pConsumerTask->GetComponent(), NULL);
    } else {
      HLTFatal("task initialization failed");
      iResult=-EFAULT;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTTask::Subscribe(const AliHLTTask* pConsumerTask, AliHLTComponentBlockDataList& blockDescList)
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumerTask) {
    if (fpDataBuffer) {
      iResult=fpDataBuffer->Subscribe(pConsumerTask->GetComponent(), blockDescList);
    } else {
      HLTFatal("internal data buffer missing");
      iResult=-EFAULT;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

int AliHLTTask::Release(AliHLTComponentBlockData* pBlockDesc, const AliHLTTask* pConsumerTask)
{
  // see header file for function documentation
  int iResult=0;
  if (pConsumerTask && pBlockDesc) {
    if (fpDataBuffer) {
      iResult=fpDataBuffer->Release(pBlockDesc, pConsumerTask->GetComponent(), this);
    } else {
      HLTFatal("internal data buffer missing");
      iResult=-EFAULT;
    }
  } else {
    iResult=-EINVAL;
  }
  return iResult;
}

void AliHLTTask::PrintStatus()
{
  // see header file for function documentation
  HLTLogKeyword("task properties");
  AliHLTComponent* pComponent=GetComponent();
  if (pComponent) {
    HLTMessage("     component: %s (%p)", pComponent->GetComponentID(), pComponent);
  } else {
    HLTMessage("     no component set!");
  }
  if (fpConfiguration) {
    AliHLTConfiguration* pSrc=fpConfiguration->GetFirstSource();
    while (pSrc) {
      const char* pQualifier="unresolved";
      if (FindDependency(pSrc->GetName()))
	pQualifier="resolved";
      HLTMessage("     source: %s (%s)", pSrc->GetName(), pQualifier);
      pSrc=fpConfiguration->GetNextSource();
    }
    TObjLink* lnk = fListTargets.FirstLink();
    while (lnk) {
      TObject *obj = lnk->GetObject();
      HLTMessage("     target: %s", obj->GetName());
      lnk = lnk->Next();
    }
  } else {
    HLTMessage("     task not initialized");
  }
}

void AliHLTTask::Print(const char* options) const
{
  // Overloaded from TObject
  if (strcmp(options, "proc")==0) {
    // print processing info
    HLTMessage("**********************************************");
    HLTMessage("******* AliHLTTask Processing info ***********");
    HLTMessage(" component: %p %s", fpComponent, (fpComponent?fpComponent->GetComponentID():""));
    HLTMessage(" data buffer: %p", fpDataBuffer);
    if (fpDataBuffer) fpDataBuffer->Print("");
    HLTMessage(" input block descriptors: %d", fBlockDataArray.size());
    for (unsigned i=0; i<fBlockDataArray.size(); i++) {
      HLTMessage("  %d: %s 0x%08x %p %d", i,
		 AliHLTComponent::DataType2Text(fBlockDataArray[i].fDataType).c_str(),
		 fBlockDataArray[i].fSpecification,
		 fBlockDataArray[i].fPtr,
		 fBlockDataArray[i].fSize
		 );
    }
    HLTMessage("**** end of AliHLTTask Processing info *******");
    HLTMessage("**********************************************");
    return;
  }

  cout << "AliHLTTask " << GetName() << " " << this
       << " component " << fpComponent << " "
       << (fpComponent?fpComponent->GetComponentID():"")
       << endl;
}


int AliHLTTask::CustomInit(AliHLTComponentHandler* /*pCH*/)
{
  // default implementation nothing to do
  return 0;
}

int AliHLTTask::CustomCleanup()
{
  // default implementation nothing to do
  return 0;
}

int AliHLTTask::LoggingVarargs(AliHLTComponentLogSeverity severity, 
				    const char* originClass, const char* originFunc,
				    const char* file, int line, ... ) const
{
  // see header file for function documentation
  int iResult=0;

  va_list args;
  va_start(args, line);

  AliHLTLogging::SetLogString(this, " (%p)", "%s_pfmt_: ", GetName());
  iResult=SendMessage(severity, originClass, originFunc, file, line, AliHLTLogging::BuildLogString(NULL, args, true /*append*/));
  va_end(args);

  return iResult;
}
 AliHLTTask.cxx:1
 AliHLTTask.cxx:2
 AliHLTTask.cxx:3
 AliHLTTask.cxx:4
 AliHLTTask.cxx:5
 AliHLTTask.cxx:6
 AliHLTTask.cxx:7
 AliHLTTask.cxx:8
 AliHLTTask.cxx:9
 AliHLTTask.cxx:10
 AliHLTTask.cxx:11
 AliHLTTask.cxx:12
 AliHLTTask.cxx:13
 AliHLTTask.cxx:14
 AliHLTTask.cxx:15
 AliHLTTask.cxx:16
 AliHLTTask.cxx:17
 AliHLTTask.cxx:18
 AliHLTTask.cxx:19
 AliHLTTask.cxx:20
 AliHLTTask.cxx:21
 AliHLTTask.cxx:22
 AliHLTTask.cxx:23
 AliHLTTask.cxx:24
 AliHLTTask.cxx:25
 AliHLTTask.cxx:26
 AliHLTTask.cxx:27
 AliHLTTask.cxx:28
 AliHLTTask.cxx:29
 AliHLTTask.cxx:30
 AliHLTTask.cxx:31
 AliHLTTask.cxx:32
 AliHLTTask.cxx:33
 AliHLTTask.cxx:34
 AliHLTTask.cxx:35
 AliHLTTask.cxx:36
 AliHLTTask.cxx:37
 AliHLTTask.cxx:38
 AliHLTTask.cxx:39
 AliHLTTask.cxx:40
 AliHLTTask.cxx:41
 AliHLTTask.cxx:42
 AliHLTTask.cxx:43
 AliHLTTask.cxx:44
 AliHLTTask.cxx:45
 AliHLTTask.cxx:46
 AliHLTTask.cxx:47
 AliHLTTask.cxx:48
 AliHLTTask.cxx:49
 AliHLTTask.cxx:50
 AliHLTTask.cxx:51
 AliHLTTask.cxx:52
 AliHLTTask.cxx:53
 AliHLTTask.cxx:54
 AliHLTTask.cxx:55
 AliHLTTask.cxx:56
 AliHLTTask.cxx:57
 AliHLTTask.cxx:58
 AliHLTTask.cxx:59
 AliHLTTask.cxx:60
 AliHLTTask.cxx:61
 AliHLTTask.cxx:62
 AliHLTTask.cxx:63
 AliHLTTask.cxx:64
 AliHLTTask.cxx:65
 AliHLTTask.cxx:66
 AliHLTTask.cxx:67
 AliHLTTask.cxx:68
 AliHLTTask.cxx:69
 AliHLTTask.cxx:70
 AliHLTTask.cxx:71
 AliHLTTask.cxx:72
 AliHLTTask.cxx:73
 AliHLTTask.cxx:74
 AliHLTTask.cxx:75
 AliHLTTask.cxx:76
 AliHLTTask.cxx:77
 AliHLTTask.cxx:78
 AliHLTTask.cxx:79
 AliHLTTask.cxx:80
 AliHLTTask.cxx:81
 AliHLTTask.cxx:82
 AliHLTTask.cxx:83
 AliHLTTask.cxx:84
 AliHLTTask.cxx:85
 AliHLTTask.cxx:86
 AliHLTTask.cxx:87
 AliHLTTask.cxx:88
 AliHLTTask.cxx:89
 AliHLTTask.cxx:90
 AliHLTTask.cxx:91
 AliHLTTask.cxx:92
 AliHLTTask.cxx:93
 AliHLTTask.cxx:94
 AliHLTTask.cxx:95
 AliHLTTask.cxx:96
 AliHLTTask.cxx:97
 AliHLTTask.cxx:98
 AliHLTTask.cxx:99
 AliHLTTask.cxx:100
 AliHLTTask.cxx:101
 AliHLTTask.cxx:102
 AliHLTTask.cxx:103
 AliHLTTask.cxx:104
 AliHLTTask.cxx:105
 AliHLTTask.cxx:106
 AliHLTTask.cxx:107
 AliHLTTask.cxx:108
 AliHLTTask.cxx:109
 AliHLTTask.cxx:110
 AliHLTTask.cxx:111
 AliHLTTask.cxx:112
 AliHLTTask.cxx:113
 AliHLTTask.cxx:114
 AliHLTTask.cxx:115
 AliHLTTask.cxx:116
 AliHLTTask.cxx:117
 AliHLTTask.cxx:118
 AliHLTTask.cxx:119
 AliHLTTask.cxx:120
 AliHLTTask.cxx:121
 AliHLTTask.cxx:122
 AliHLTTask.cxx:123
 AliHLTTask.cxx:124
 AliHLTTask.cxx:125
 AliHLTTask.cxx:126
 AliHLTTask.cxx:127
 AliHLTTask.cxx:128
 AliHLTTask.cxx:129
 AliHLTTask.cxx:130
 AliHLTTask.cxx:131
 AliHLTTask.cxx:132
 AliHLTTask.cxx:133
 AliHLTTask.cxx:134
 AliHLTTask.cxx:135
 AliHLTTask.cxx:136
 AliHLTTask.cxx:137
 AliHLTTask.cxx:138
 AliHLTTask.cxx:139
 AliHLTTask.cxx:140
 AliHLTTask.cxx:141
 AliHLTTask.cxx:142
 AliHLTTask.cxx:143
 AliHLTTask.cxx:144
 AliHLTTask.cxx:145
 AliHLTTask.cxx:146
 AliHLTTask.cxx:147
 AliHLTTask.cxx:148
 AliHLTTask.cxx:149
 AliHLTTask.cxx:150
 AliHLTTask.cxx:151
 AliHLTTask.cxx:152
 AliHLTTask.cxx:153
 AliHLTTask.cxx:154
 AliHLTTask.cxx:155
 AliHLTTask.cxx:156
 AliHLTTask.cxx:157
 AliHLTTask.cxx:158
 AliHLTTask.cxx:159
 AliHLTTask.cxx:160
 AliHLTTask.cxx:161
 AliHLTTask.cxx:162
 AliHLTTask.cxx:163
 AliHLTTask.cxx:164
 AliHLTTask.cxx:165
 AliHLTTask.cxx:166
 AliHLTTask.cxx:167
 AliHLTTask.cxx:168
 AliHLTTask.cxx:169
 AliHLTTask.cxx:170
 AliHLTTask.cxx:171
 AliHLTTask.cxx:172
 AliHLTTask.cxx:173
 AliHLTTask.cxx:174
 AliHLTTask.cxx:175
 AliHLTTask.cxx:176
 AliHLTTask.cxx:177
 AliHLTTask.cxx:178
 AliHLTTask.cxx:179
 AliHLTTask.cxx:180
 AliHLTTask.cxx:181
 AliHLTTask.cxx:182
 AliHLTTask.cxx:183
 AliHLTTask.cxx:184
 AliHLTTask.cxx:185
 AliHLTTask.cxx:186
 AliHLTTask.cxx:187
 AliHLTTask.cxx:188
 AliHLTTask.cxx:189
 AliHLTTask.cxx:190
 AliHLTTask.cxx:191
 AliHLTTask.cxx:192
 AliHLTTask.cxx:193
 AliHLTTask.cxx:194
 AliHLTTask.cxx:195
 AliHLTTask.cxx:196
 AliHLTTask.cxx:197
 AliHLTTask.cxx:198
 AliHLTTask.cxx:199
 AliHLTTask.cxx:200
 AliHLTTask.cxx:201
 AliHLTTask.cxx:202
 AliHLTTask.cxx:203
 AliHLTTask.cxx:204
 AliHLTTask.cxx:205
 AliHLTTask.cxx:206
 AliHLTTask.cxx:207
 AliHLTTask.cxx:208
 AliHLTTask.cxx:209
 AliHLTTask.cxx:210
 AliHLTTask.cxx:211
 AliHLTTask.cxx:212
 AliHLTTask.cxx:213
 AliHLTTask.cxx:214
 AliHLTTask.cxx:215
 AliHLTTask.cxx:216
 AliHLTTask.cxx:217
 AliHLTTask.cxx:218
 AliHLTTask.cxx:219
 AliHLTTask.cxx:220
 AliHLTTask.cxx:221
 AliHLTTask.cxx:222
 AliHLTTask.cxx:223
 AliHLTTask.cxx:224
 AliHLTTask.cxx:225
 AliHLTTask.cxx:226
 AliHLTTask.cxx:227
 AliHLTTask.cxx:228
 AliHLTTask.cxx:229
 AliHLTTask.cxx:230
 AliHLTTask.cxx:231
 AliHLTTask.cxx:232
 AliHLTTask.cxx:233
 AliHLTTask.cxx:234
 AliHLTTask.cxx:235
 AliHLTTask.cxx:236
 AliHLTTask.cxx:237
 AliHLTTask.cxx:238
 AliHLTTask.cxx:239
 AliHLTTask.cxx:240
 AliHLTTask.cxx:241
 AliHLTTask.cxx:242
 AliHLTTask.cxx:243
 AliHLTTask.cxx:244
 AliHLTTask.cxx:245
 AliHLTTask.cxx:246
 AliHLTTask.cxx:247
 AliHLTTask.cxx:248
 AliHLTTask.cxx:249
 AliHLTTask.cxx:250
 AliHLTTask.cxx:251
 AliHLTTask.cxx:252
 AliHLTTask.cxx:253
 AliHLTTask.cxx:254
 AliHLTTask.cxx:255
 AliHLTTask.cxx:256
 AliHLTTask.cxx:257
 AliHLTTask.cxx:258
 AliHLTTask.cxx:259
 AliHLTTask.cxx:260
 AliHLTTask.cxx:261
 AliHLTTask.cxx:262
 AliHLTTask.cxx:263
 AliHLTTask.cxx:264
 AliHLTTask.cxx:265
 AliHLTTask.cxx:266
 AliHLTTask.cxx:267
 AliHLTTask.cxx:268
 AliHLTTask.cxx:269
 AliHLTTask.cxx:270
 AliHLTTask.cxx:271
 AliHLTTask.cxx:272
 AliHLTTask.cxx:273
 AliHLTTask.cxx:274
 AliHLTTask.cxx:275
 AliHLTTask.cxx:276
 AliHLTTask.cxx:277
 AliHLTTask.cxx:278
 AliHLTTask.cxx:279
 AliHLTTask.cxx:280
 AliHLTTask.cxx:281
 AliHLTTask.cxx:282
 AliHLTTask.cxx:283
 AliHLTTask.cxx:284
 AliHLTTask.cxx:285
 AliHLTTask.cxx:286
 AliHLTTask.cxx:287
 AliHLTTask.cxx:288
 AliHLTTask.cxx:289
 AliHLTTask.cxx:290
 AliHLTTask.cxx:291
 AliHLTTask.cxx:292
 AliHLTTask.cxx:293
 AliHLTTask.cxx:294
 AliHLTTask.cxx:295
 AliHLTTask.cxx:296
 AliHLTTask.cxx:297
 AliHLTTask.cxx:298
 AliHLTTask.cxx:299
 AliHLTTask.cxx:300
 AliHLTTask.cxx:301
 AliHLTTask.cxx:302
 AliHLTTask.cxx:303
 AliHLTTask.cxx:304
 AliHLTTask.cxx:305
 AliHLTTask.cxx:306
 AliHLTTask.cxx:307
 AliHLTTask.cxx:308
 AliHLTTask.cxx:309
 AliHLTTask.cxx:310
 AliHLTTask.cxx:311
 AliHLTTask.cxx:312
 AliHLTTask.cxx:313
 AliHLTTask.cxx:314
 AliHLTTask.cxx:315
 AliHLTTask.cxx:316
 AliHLTTask.cxx:317
 AliHLTTask.cxx:318
 AliHLTTask.cxx:319
 AliHLTTask.cxx:320
 AliHLTTask.cxx:321
 AliHLTTask.cxx:322
 AliHLTTask.cxx:323
 AliHLTTask.cxx:324
 AliHLTTask.cxx:325
 AliHLTTask.cxx:326
 AliHLTTask.cxx:327
 AliHLTTask.cxx:328
 AliHLTTask.cxx:329
 AliHLTTask.cxx:330
 AliHLTTask.cxx:331
 AliHLTTask.cxx:332
 AliHLTTask.cxx:333
 AliHLTTask.cxx:334
 AliHLTTask.cxx:335
 AliHLTTask.cxx:336
 AliHLTTask.cxx:337
 AliHLTTask.cxx:338
 AliHLTTask.cxx:339
 AliHLTTask.cxx:340
 AliHLTTask.cxx:341
 AliHLTTask.cxx:342
 AliHLTTask.cxx:343
 AliHLTTask.cxx:344
 AliHLTTask.cxx:345
 AliHLTTask.cxx:346
 AliHLTTask.cxx:347
 AliHLTTask.cxx:348
 AliHLTTask.cxx:349
 AliHLTTask.cxx:350
 AliHLTTask.cxx:351
 AliHLTTask.cxx:352
 AliHLTTask.cxx:353
 AliHLTTask.cxx:354
 AliHLTTask.cxx:355
 AliHLTTask.cxx:356
 AliHLTTask.cxx:357
 AliHLTTask.cxx:358
 AliHLTTask.cxx:359
 AliHLTTask.cxx:360
 AliHLTTask.cxx:361
 AliHLTTask.cxx:362
 AliHLTTask.cxx:363
 AliHLTTask.cxx:364
 AliHLTTask.cxx:365
 AliHLTTask.cxx:366
 AliHLTTask.cxx:367
 AliHLTTask.cxx:368
 AliHLTTask.cxx:369
 AliHLTTask.cxx:370
 AliHLTTask.cxx:371
 AliHLTTask.cxx:372
 AliHLTTask.cxx:373
 AliHLTTask.cxx:374
 AliHLTTask.cxx:375
 AliHLTTask.cxx:376
 AliHLTTask.cxx:377
 AliHLTTask.cxx:378
 AliHLTTask.cxx:379
 AliHLTTask.cxx:380
 AliHLTTask.cxx:381
 AliHLTTask.cxx:382
 AliHLTTask.cxx:383
 AliHLTTask.cxx:384
 AliHLTTask.cxx:385
 AliHLTTask.cxx:386
 AliHLTTask.cxx:387
 AliHLTTask.cxx:388
 AliHLTTask.cxx:389
 AliHLTTask.cxx:390
 AliHLTTask.cxx:391
 AliHLTTask.cxx:392
 AliHLTTask.cxx:393
 AliHLTTask.cxx:394
 AliHLTTask.cxx:395
 AliHLTTask.cxx:396
 AliHLTTask.cxx:397
 AliHLTTask.cxx:398
 AliHLTTask.cxx:399
 AliHLTTask.cxx:400
 AliHLTTask.cxx:401
 AliHLTTask.cxx:402
 AliHLTTask.cxx:403
 AliHLTTask.cxx:404
 AliHLTTask.cxx:405
 AliHLTTask.cxx:406
 AliHLTTask.cxx:407
 AliHLTTask.cxx:408
 AliHLTTask.cxx:409
 AliHLTTask.cxx:410
 AliHLTTask.cxx:411
 AliHLTTask.cxx:412
 AliHLTTask.cxx:413
 AliHLTTask.cxx:414
 AliHLTTask.cxx:415
 AliHLTTask.cxx:416
 AliHLTTask.cxx:417
 AliHLTTask.cxx:418
 AliHLTTask.cxx:419
 AliHLTTask.cxx:420
 AliHLTTask.cxx:421
 AliHLTTask.cxx:422
 AliHLTTask.cxx:423
 AliHLTTask.cxx:424
 AliHLTTask.cxx:425
 AliHLTTask.cxx:426
 AliHLTTask.cxx:427
 AliHLTTask.cxx:428
 AliHLTTask.cxx:429
 AliHLTTask.cxx:430
 AliHLTTask.cxx:431
 AliHLTTask.cxx:432
 AliHLTTask.cxx:433
 AliHLTTask.cxx:434
 AliHLTTask.cxx:435
 AliHLTTask.cxx:436
 AliHLTTask.cxx:437
 AliHLTTask.cxx:438
 AliHLTTask.cxx:439
 AliHLTTask.cxx:440
 AliHLTTask.cxx:441
 AliHLTTask.cxx:442
 AliHLTTask.cxx:443
 AliHLTTask.cxx:444
 AliHLTTask.cxx:445
 AliHLTTask.cxx:446
 AliHLTTask.cxx:447
 AliHLTTask.cxx:448
 AliHLTTask.cxx:449
 AliHLTTask.cxx:450
 AliHLTTask.cxx:451
 AliHLTTask.cxx:452
 AliHLTTask.cxx:453
 AliHLTTask.cxx:454
 AliHLTTask.cxx:455
 AliHLTTask.cxx:456
 AliHLTTask.cxx:457
 AliHLTTask.cxx:458
 AliHLTTask.cxx:459
 AliHLTTask.cxx:460
 AliHLTTask.cxx:461
 AliHLTTask.cxx:462
 AliHLTTask.cxx:463
 AliHLTTask.cxx:464
 AliHLTTask.cxx:465
 AliHLTTask.cxx:466
 AliHLTTask.cxx:467
 AliHLTTask.cxx:468
 AliHLTTask.cxx:469
 AliHLTTask.cxx:470
 AliHLTTask.cxx:471
 AliHLTTask.cxx:472
 AliHLTTask.cxx:473
 AliHLTTask.cxx:474
 AliHLTTask.cxx:475
 AliHLTTask.cxx:476
 AliHLTTask.cxx:477
 AliHLTTask.cxx:478
 AliHLTTask.cxx:479
 AliHLTTask.cxx:480
 AliHLTTask.cxx:481
 AliHLTTask.cxx:482
 AliHLTTask.cxx:483
 AliHLTTask.cxx:484
 AliHLTTask.cxx:485
 AliHLTTask.cxx:486
 AliHLTTask.cxx:487
 AliHLTTask.cxx:488
 AliHLTTask.cxx:489
 AliHLTTask.cxx:490
 AliHLTTask.cxx:491
 AliHLTTask.cxx:492
 AliHLTTask.cxx:493
 AliHLTTask.cxx:494
 AliHLTTask.cxx:495
 AliHLTTask.cxx:496
 AliHLTTask.cxx:497
 AliHLTTask.cxx:498
 AliHLTTask.cxx:499
 AliHLTTask.cxx:500
 AliHLTTask.cxx:501
 AliHLTTask.cxx:502
 AliHLTTask.cxx:503
 AliHLTTask.cxx:504
 AliHLTTask.cxx:505
 AliHLTTask.cxx:506
 AliHLTTask.cxx:507
 AliHLTTask.cxx:508
 AliHLTTask.cxx:509
 AliHLTTask.cxx:510
 AliHLTTask.cxx:511
 AliHLTTask.cxx:512
 AliHLTTask.cxx:513
 AliHLTTask.cxx:514
 AliHLTTask.cxx:515
 AliHLTTask.cxx:516
 AliHLTTask.cxx:517
 AliHLTTask.cxx:518
 AliHLTTask.cxx:519
 AliHLTTask.cxx:520
 AliHLTTask.cxx:521
 AliHLTTask.cxx:522
 AliHLTTask.cxx:523
 AliHLTTask.cxx:524
 AliHLTTask.cxx:525
 AliHLTTask.cxx:526
 AliHLTTask.cxx:527
 AliHLTTask.cxx:528
 AliHLTTask.cxx:529
 AliHLTTask.cxx:530
 AliHLTTask.cxx:531
 AliHLTTask.cxx:532
 AliHLTTask.cxx:533
 AliHLTTask.cxx:534
 AliHLTTask.cxx:535
 AliHLTTask.cxx:536
 AliHLTTask.cxx:537
 AliHLTTask.cxx:538
 AliHLTTask.cxx:539
 AliHLTTask.cxx:540
 AliHLTTask.cxx:541
 AliHLTTask.cxx:542
 AliHLTTask.cxx:543
 AliHLTTask.cxx:544
 AliHLTTask.cxx:545
 AliHLTTask.cxx:546
 AliHLTTask.cxx:547
 AliHLTTask.cxx:548
 AliHLTTask.cxx:549
 AliHLTTask.cxx:550
 AliHLTTask.cxx:551
 AliHLTTask.cxx:552
 AliHLTTask.cxx:553
 AliHLTTask.cxx:554
 AliHLTTask.cxx:555
 AliHLTTask.cxx:556
 AliHLTTask.cxx:557
 AliHLTTask.cxx:558
 AliHLTTask.cxx:559
 AliHLTTask.cxx:560
 AliHLTTask.cxx:561
 AliHLTTask.cxx:562
 AliHLTTask.cxx:563
 AliHLTTask.cxx:564
 AliHLTTask.cxx:565
 AliHLTTask.cxx:566
 AliHLTTask.cxx:567
 AliHLTTask.cxx:568
 AliHLTTask.cxx:569
 AliHLTTask.cxx:570
 AliHLTTask.cxx:571
 AliHLTTask.cxx:572
 AliHLTTask.cxx:573
 AliHLTTask.cxx:574
 AliHLTTask.cxx:575
 AliHLTTask.cxx:576
 AliHLTTask.cxx:577
 AliHLTTask.cxx:578
 AliHLTTask.cxx:579
 AliHLTTask.cxx:580
 AliHLTTask.cxx:581
 AliHLTTask.cxx:582
 AliHLTTask.cxx:583
 AliHLTTask.cxx:584
 AliHLTTask.cxx:585
 AliHLTTask.cxx:586
 AliHLTTask.cxx:587
 AliHLTTask.cxx:588
 AliHLTTask.cxx:589
 AliHLTTask.cxx:590
 AliHLTTask.cxx:591
 AliHLTTask.cxx:592
 AliHLTTask.cxx:593
 AliHLTTask.cxx:594
 AliHLTTask.cxx:595
 AliHLTTask.cxx:596
 AliHLTTask.cxx:597
 AliHLTTask.cxx:598
 AliHLTTask.cxx:599
 AliHLTTask.cxx:600
 AliHLTTask.cxx:601
 AliHLTTask.cxx:602
 AliHLTTask.cxx:603
 AliHLTTask.cxx:604
 AliHLTTask.cxx:605
 AliHLTTask.cxx:606
 AliHLTTask.cxx:607
 AliHLTTask.cxx:608
 AliHLTTask.cxx:609
 AliHLTTask.cxx:610
 AliHLTTask.cxx:611
 AliHLTTask.cxx:612
 AliHLTTask.cxx:613
 AliHLTTask.cxx:614
 AliHLTTask.cxx:615
 AliHLTTask.cxx:616
 AliHLTTask.cxx:617
 AliHLTTask.cxx:618
 AliHLTTask.cxx:619
 AliHLTTask.cxx:620
 AliHLTTask.cxx:621
 AliHLTTask.cxx:622
 AliHLTTask.cxx:623
 AliHLTTask.cxx:624
 AliHLTTask.cxx:625
 AliHLTTask.cxx:626
 AliHLTTask.cxx:627
 AliHLTTask.cxx:628
 AliHLTTask.cxx:629
 AliHLTTask.cxx:630
 AliHLTTask.cxx:631
 AliHLTTask.cxx:632
 AliHLTTask.cxx:633
 AliHLTTask.cxx:634
 AliHLTTask.cxx:635
 AliHLTTask.cxx:636
 AliHLTTask.cxx:637
 AliHLTTask.cxx:638
 AliHLTTask.cxx:639
 AliHLTTask.cxx:640
 AliHLTTask.cxx:641
 AliHLTTask.cxx:642
 AliHLTTask.cxx:643
 AliHLTTask.cxx:644
 AliHLTTask.cxx:645
 AliHLTTask.cxx:646
 AliHLTTask.cxx:647
 AliHLTTask.cxx:648
 AliHLTTask.cxx:649
 AliHLTTask.cxx:650
 AliHLTTask.cxx:651
 AliHLTTask.cxx:652
 AliHLTTask.cxx:653
 AliHLTTask.cxx:654
 AliHLTTask.cxx:655
 AliHLTTask.cxx:656
 AliHLTTask.cxx:657
 AliHLTTask.cxx:658
 AliHLTTask.cxx:659
 AliHLTTask.cxx:660
 AliHLTTask.cxx:661
 AliHLTTask.cxx:662
 AliHLTTask.cxx:663
 AliHLTTask.cxx:664
 AliHLTTask.cxx:665
 AliHLTTask.cxx:666
 AliHLTTask.cxx:667
 AliHLTTask.cxx:668
 AliHLTTask.cxx:669
 AliHLTTask.cxx:670
 AliHLTTask.cxx:671
 AliHLTTask.cxx:672
 AliHLTTask.cxx:673
 AliHLTTask.cxx:674
 AliHLTTask.cxx:675
 AliHLTTask.cxx:676
 AliHLTTask.cxx:677
 AliHLTTask.cxx:678
 AliHLTTask.cxx:679
 AliHLTTask.cxx:680
 AliHLTTask.cxx:681
 AliHLTTask.cxx:682
 AliHLTTask.cxx:683
 AliHLTTask.cxx:684
 AliHLTTask.cxx:685
 AliHLTTask.cxx:686
 AliHLTTask.cxx:687
 AliHLTTask.cxx:688
 AliHLTTask.cxx:689
 AliHLTTask.cxx:690
 AliHLTTask.cxx:691
 AliHLTTask.cxx:692
 AliHLTTask.cxx:693
 AliHLTTask.cxx:694
 AliHLTTask.cxx:695
 AliHLTTask.cxx:696
 AliHLTTask.cxx:697
 AliHLTTask.cxx:698
 AliHLTTask.cxx:699
 AliHLTTask.cxx:700
 AliHLTTask.cxx:701
 AliHLTTask.cxx:702
 AliHLTTask.cxx:703
 AliHLTTask.cxx:704
 AliHLTTask.cxx:705
 AliHLTTask.cxx:706
 AliHLTTask.cxx:707
 AliHLTTask.cxx:708
 AliHLTTask.cxx:709
 AliHLTTask.cxx:710
 AliHLTTask.cxx:711
 AliHLTTask.cxx:712
 AliHLTTask.cxx:713
 AliHLTTask.cxx:714
 AliHLTTask.cxx:715
 AliHLTTask.cxx:716
 AliHLTTask.cxx:717
 AliHLTTask.cxx:718
 AliHLTTask.cxx:719
 AliHLTTask.cxx:720
 AliHLTTask.cxx:721
 AliHLTTask.cxx:722
 AliHLTTask.cxx:723
 AliHLTTask.cxx:724
 AliHLTTask.cxx:725
 AliHLTTask.cxx:726
 AliHLTTask.cxx:727
 AliHLTTask.cxx:728
 AliHLTTask.cxx:729
 AliHLTTask.cxx:730
 AliHLTTask.cxx:731
 AliHLTTask.cxx:732
 AliHLTTask.cxx:733
 AliHLTTask.cxx:734
 AliHLTTask.cxx:735
 AliHLTTask.cxx:736
 AliHLTTask.cxx:737
 AliHLTTask.cxx:738
 AliHLTTask.cxx:739
 AliHLTTask.cxx:740
 AliHLTTask.cxx:741
 AliHLTTask.cxx:742
 AliHLTTask.cxx:743
 AliHLTTask.cxx:744
 AliHLTTask.cxx:745
 AliHLTTask.cxx:746
 AliHLTTask.cxx:747
 AliHLTTask.cxx:748
 AliHLTTask.cxx:749
 AliHLTTask.cxx:750
 AliHLTTask.cxx:751
 AliHLTTask.cxx:752
 AliHLTTask.cxx:753
 AliHLTTask.cxx:754
 AliHLTTask.cxx:755
 AliHLTTask.cxx:756
 AliHLTTask.cxx:757
 AliHLTTask.cxx:758
 AliHLTTask.cxx:759
 AliHLTTask.cxx:760
 AliHLTTask.cxx:761
 AliHLTTask.cxx:762
 AliHLTTask.cxx:763
 AliHLTTask.cxx:764
 AliHLTTask.cxx:765
 AliHLTTask.cxx:766
 AliHLTTask.cxx:767
 AliHLTTask.cxx:768
 AliHLTTask.cxx:769
 AliHLTTask.cxx:770
 AliHLTTask.cxx:771
 AliHLTTask.cxx:772
 AliHLTTask.cxx:773
 AliHLTTask.cxx:774
 AliHLTTask.cxx:775
 AliHLTTask.cxx:776
 AliHLTTask.cxx:777
 AliHLTTask.cxx:778
 AliHLTTask.cxx:779
 AliHLTTask.cxx:780
 AliHLTTask.cxx:781
 AliHLTTask.cxx:782
 AliHLTTask.cxx:783
 AliHLTTask.cxx:784
 AliHLTTask.cxx:785
 AliHLTTask.cxx:786
 AliHLTTask.cxx:787
 AliHLTTask.cxx:788
 AliHLTTask.cxx:789
 AliHLTTask.cxx:790
 AliHLTTask.cxx:791
 AliHLTTask.cxx:792
 AliHLTTask.cxx:793
 AliHLTTask.cxx:794
 AliHLTTask.cxx:795
 AliHLTTask.cxx:796
 AliHLTTask.cxx:797
 AliHLTTask.cxx:798
 AliHLTTask.cxx:799
 AliHLTTask.cxx:800
 AliHLTTask.cxx:801
 AliHLTTask.cxx:802
 AliHLTTask.cxx:803
 AliHLTTask.cxx:804
 AliHLTTask.cxx:805
 AliHLTTask.cxx:806
 AliHLTTask.cxx:807
 AliHLTTask.cxx:808
 AliHLTTask.cxx:809
 AliHLTTask.cxx:810
 AliHLTTask.cxx:811
 AliHLTTask.cxx:812
 AliHLTTask.cxx:813
 AliHLTTask.cxx:814
 AliHLTTask.cxx:815
 AliHLTTask.cxx:816
 AliHLTTask.cxx:817
 AliHLTTask.cxx:818
 AliHLTTask.cxx:819
 AliHLTTask.cxx:820
 AliHLTTask.cxx:821
 AliHLTTask.cxx:822
 AliHLTTask.cxx:823
 AliHLTTask.cxx:824
 AliHLTTask.cxx:825
 AliHLTTask.cxx:826
 AliHLTTask.cxx:827
 AliHLTTask.cxx:828
 AliHLTTask.cxx:829
 AliHLTTask.cxx:830
 AliHLTTask.cxx:831
 AliHLTTask.cxx:832
 AliHLTTask.cxx:833
 AliHLTTask.cxx:834
 AliHLTTask.cxx:835
 AliHLTTask.cxx:836
 AliHLTTask.cxx:837
 AliHLTTask.cxx:838
 AliHLTTask.cxx:839
 AliHLTTask.cxx:840
 AliHLTTask.cxx:841
 AliHLTTask.cxx:842
 AliHLTTask.cxx:843
 AliHLTTask.cxx:844
 AliHLTTask.cxx:845
 AliHLTTask.cxx:846
 AliHLTTask.cxx:847
 AliHLTTask.cxx:848
 AliHLTTask.cxx:849
 AliHLTTask.cxx:850
 AliHLTTask.cxx:851
 AliHLTTask.cxx:852
 AliHLTTask.cxx:853
 AliHLTTask.cxx:854
 AliHLTTask.cxx:855
 AliHLTTask.cxx:856
 AliHLTTask.cxx:857
 AliHLTTask.cxx:858
 AliHLTTask.cxx:859
 AliHLTTask.cxx:860
 AliHLTTask.cxx:861
 AliHLTTask.cxx:862
 AliHLTTask.cxx:863
 AliHLTTask.cxx:864
 AliHLTTask.cxx:865
 AliHLTTask.cxx:866
 AliHLTTask.cxx:867
 AliHLTTask.cxx:868
 AliHLTTask.cxx:869
 AliHLTTask.cxx:870
 AliHLTTask.cxx:871
 AliHLTTask.cxx:872
 AliHLTTask.cxx:873
 AliHLTTask.cxx:874
 AliHLTTask.cxx:875
 AliHLTTask.cxx:876
 AliHLTTask.cxx:877
 AliHLTTask.cxx:878
 AliHLTTask.cxx:879
 AliHLTTask.cxx:880
 AliHLTTask.cxx:881
 AliHLTTask.cxx:882
 AliHLTTask.cxx:883
 AliHLTTask.cxx:884
 AliHLTTask.cxx:885
 AliHLTTask.cxx:886
 AliHLTTask.cxx:887
 AliHLTTask.cxx:888
 AliHLTTask.cxx:889
 AliHLTTask.cxx:890
 AliHLTTask.cxx:891
 AliHLTTask.cxx:892
 AliHLTTask.cxx:893
 AliHLTTask.cxx:894
 AliHLTTask.cxx:895
 AliHLTTask.cxx:896
 AliHLTTask.cxx:897
 AliHLTTask.cxx:898
 AliHLTTask.cxx:899
 AliHLTTask.cxx:900
 AliHLTTask.cxx:901
 AliHLTTask.cxx:902
 AliHLTTask.cxx:903
 AliHLTTask.cxx:904
 AliHLTTask.cxx:905
 AliHLTTask.cxx:906
 AliHLTTask.cxx:907
 AliHLTTask.cxx:908
 AliHLTTask.cxx:909
 AliHLTTask.cxx:910
 AliHLTTask.cxx:911
 AliHLTTask.cxx:912
 AliHLTTask.cxx:913
 AliHLTTask.cxx:914
 AliHLTTask.cxx:915
 AliHLTTask.cxx:916
 AliHLTTask.cxx:917
 AliHLTTask.cxx:918
 AliHLTTask.cxx:919
 AliHLTTask.cxx:920
 AliHLTTask.cxx:921
 AliHLTTask.cxx:922
 AliHLTTask.cxx:923
 AliHLTTask.cxx:924
 AliHLTTask.cxx:925
 AliHLTTask.cxx:926
 AliHLTTask.cxx:927
 AliHLTTask.cxx:928
 AliHLTTask.cxx:929
 AliHLTTask.cxx:930
 AliHLTTask.cxx:931
 AliHLTTask.cxx:932
 AliHLTTask.cxx:933
 AliHLTTask.cxx:934
 AliHLTTask.cxx:935
 AliHLTTask.cxx:936
 AliHLTTask.cxx:937
 AliHLTTask.cxx:938
 AliHLTTask.cxx:939
 AliHLTTask.cxx:940
 AliHLTTask.cxx:941
 AliHLTTask.cxx:942
 AliHLTTask.cxx:943
 AliHLTTask.cxx:944
 AliHLTTask.cxx:945
 AliHLTTask.cxx:946
 AliHLTTask.cxx:947
 AliHLTTask.cxx:948
 AliHLTTask.cxx:949
 AliHLTTask.cxx:950
 AliHLTTask.cxx:951
 AliHLTTask.cxx:952
 AliHLTTask.cxx:953
 AliHLTTask.cxx:954
 AliHLTTask.cxx:955
 AliHLTTask.cxx:956
 AliHLTTask.cxx:957
 AliHLTTask.cxx:958
 AliHLTTask.cxx:959
 AliHLTTask.cxx:960
 AliHLTTask.cxx:961
 AliHLTTask.cxx:962
 AliHLTTask.cxx:963
 AliHLTTask.cxx:964
 AliHLTTask.cxx:965
 AliHLTTask.cxx:966
 AliHLTTask.cxx:967
 AliHLTTask.cxx:968
 AliHLTTask.cxx:969
 AliHLTTask.cxx:970
 AliHLTTask.cxx:971
 AliHLTTask.cxx:972
 AliHLTTask.cxx:973
 AliHLTTask.cxx:974
 AliHLTTask.cxx:975
 AliHLTTask.cxx:976
 AliHLTTask.cxx:977
 AliHLTTask.cxx:978
 AliHLTTask.cxx:979
 AliHLTTask.cxx:980
 AliHLTTask.cxx:981
 AliHLTTask.cxx:982
 AliHLTTask.cxx:983
 AliHLTTask.cxx:984
 AliHLTTask.cxx:985
 AliHLTTask.cxx:986
 AliHLTTask.cxx:987
 AliHLTTask.cxx:988
 AliHLTTask.cxx:989
 AliHLTTask.cxx:990
 AliHLTTask.cxx:991
 AliHLTTask.cxx:992
 AliHLTTask.cxx:993
 AliHLTTask.cxx:994
 AliHLTTask.cxx:995
 AliHLTTask.cxx:996