ROOT logo
// $Id$

/** @file   AliHLTMessage.cxx
    @author Matthias Richter (customization of Root TMessage )
    @date   
    @brief  Serialization of Root objects in the ALICE HLT. */

// This is the original Root TMessage implementation with a few minor
// modifications, original revision:
// root/net: v5-14-00 $: TMessage.cxx,v 1.6 2004/05/07 09:51:58 brun
// Author: Fons Rademakers   19/12/96

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TMessage                                                             //
//                                                                      //
// Message buffer class used for serializing objects and sending them   //
// over a network. This class inherits from TBuffer the basic I/O       //
// serializer.                                                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "AliHLTMessage.h"
#include "TVirtualStreamerInfo.h"
#include "Bytes.h"
#include "TFile.h"
#include "TProcessID.h"
#include "TClass.h"

extern "C" void R__zip (Int_t cxlevel, Int_t *nin, char *bufin, Int_t *lout, char *bufout, Int_t *nout);
extern "C" void R__unzip(Int_t *nin, UChar_t *bufin, Int_t *lout, char *bufout, Int_t *nout);
const Int_t kMAXBUF = 0xffffff;

Bool_t AliHLTMessage::fgEvolution = kFALSE;

ClassImp(AliHLTMessage)

//______________________________________________________________________________
AliHLTMessage::AliHLTMessage(UInt_t what) 
  :
# ifdef ROOT_TBufferFile
  TBufferFile(kWrite),
# else
  TBuffer(kWrite),
# endif
  AliHLTLogging(),
  fWhat(what),
  fClass(0),
  fCompress(0),
  fBufComp(0),
  fBufCompCur(0),
  fCompPos(0)
  , fBufUncompressed(0)
  , fBitsPIDs(0)
  , fInfos(NULL)
  , fEvolution(kFALSE)
{
   // Create a AliHLTMessage object for storing objects. The "what" integer
   // describes the type of message. Predifined ROOT system message types
   // can be found in MessageTypes.h. Make sure your own message types are
   // unique from the ROOT defined message types (i.e. 0 - 10000 are
   // reserved by ROOT). In case you OR "what" with kMESS_ACK, the message
   // will wait for an acknowledgement from the remote side. This makes
   // the sending process synchronous. In case you OR "what" with kMESS_ZIP,
   // the message will be compressed in TSocket using the zip algorithm
   // (only if message is > 256 bytes).

   // space at the beginning of the message reserved for the message length
   UInt_t   reserved = 0;
   *this << reserved;

   *this << what;

   SetBit(kCannotHandleMemberWiseStreaming);
}

const Int_t AliHLTMessage::fgkMinimumSize=30;
UInt_t AliHLTMessage::fgkDefaultBuffer[2]={0,0};

//______________________________________________________________________________
AliHLTMessage::AliHLTMessage(void *buf, Int_t bufsize)
  :
# if defined(ROOT_TBufferFile)
  TBufferFile(kRead, bufsize>fgkMinimumSize?bufsize:sizeof(fgkDefaultBuffer), bufsize>fgkMinimumSize?buf:&fgkDefaultBuffer, 0),
# else
  TBuffer(kRead, bufsize>fgkMinimumSize?bufsize:sizeof(fgkDefaultBuffer), bufsize>fgkMinimumSize?buf:&fgkDefaultBuffer, 0),
# endif
  AliHLTLogging(),
  fWhat(0),
  fClass(0),
  fCompress(0),
  fBufComp(0),
  fBufCompCur(0),
  fCompPos(0)
  , fBufUncompressed(0)
  , fBitsPIDs(0)
  , fInfos(NULL)
  , fEvolution(kFALSE)
{
   // Create a AliHLTMessage object for reading objects. The objects will be
   // read from buf. Use the What() method to get the message type.

   // skip space at the beginning of the message reserved for the message length
   fBufCur += sizeof(UInt_t);

   *this >> fWhat;

   if (fWhat & kMESS_ZIP) {
      // if buffer has kMESS_ZIP set, move it to fBufComp and uncompress
      fBufComp    = fBuffer;
      fBufCompCur = fBuffer + bufsize;
      fBuffer     = 0;
      Uncompress();
      // Matthias Sep 2008
      // NOTE: this is not done in TMessage and will lead to the deletion
      // of the buffer. This is not allowed in case of HLT where the
      // buffer is handled by the framework. In general, I think this
      // is a very bad idea to do it like that in TMessage
      fBufComp    = NULL;
      fBufCompCur = 0;
   }

   if (fWhat == kMESS_OBJECT) {
      InitMap();
      fClass = ReadClass();     // get first the class stored in message
      SetBufferOffset(sizeof(UInt_t) + sizeof(fWhat));
      ResetMap();
   } else {
      fClass = 0;
   }
}

//______________________________________________________________________________
AliHLTMessage::~AliHLTMessage()
{
   // Clean up compression buffer.
  Reset();
}

//______________________________________________________________________________
void AliHLTMessage::EnableSchemaEvolutionForAll(Bool_t enable)
{
   // Static function enabling or disabling the automatic schema evolution.
   // By default schema evolution support is off.

   fgEvolution = enable;
}

//______________________________________________________________________________
Bool_t AliHLTMessage::UsesSchemaEvolutionForAll()
{
   // Static function returning status of global schema evolution.

   return fgEvolution;
}

//______________________________________________________________________________
void AliHLTMessage::ForceWriteInfo(TVirtualStreamerInfo *info, Bool_t /* force */)
{
   // Force writing the TStreamerInfo to the message.

   if (fgEvolution || fEvolution) {
      if (!fInfos) fInfos = new TList();
      if (fInfos->FindObject(info->GetName())==NULL) {
	fInfos->Add(info);
      }
   }
}

//______________________________________________________________________________
void AliHLTMessage::Forward()
{
   // Change a buffer that was received into one that can be send, i.e.
   // forward a just received message.

   if (IsReading()) {
      SetWriteMode();
      SetBufferOffset(fBufSize);
      SetBit(kCannotHandleMemberWiseStreaming);

      if (fBufComp) {
         fCompPos = fBufCur;
      }
   }
}

//______________________________________________________________________________
void AliHLTMessage::IncrementLevel(TVirtualStreamerInfo *info)
{
   // Increment level.

   TBufferFile::IncrementLevel(info);

   if (!info) return;
   if (fgEvolution || fEvolution) {
      if (!fInfos) fInfos = new TList();

      // add the streamer info, but only once
      // this assumes that there is only one version
      if (fInfos->FindObject(info->GetName())==NULL) {
	fInfos->Add(info);
      }
   }
}

//______________________________________________________________________________
void AliHLTMessage::Reset()
{
   // Reset the message buffer so we can use (i.e. fill) it again.

   SetBufferOffset(sizeof(UInt_t) + sizeof(fWhat));
   ResetMap();

   if (fBufComp) {
      delete [] fBufComp;
      fBufComp    = 0;
      fBufCompCur = 0;
      fCompPos    = 0;
   }
   if (fBufUncompressed) {
     delete [] fBufUncompressed;
     fBufUncompressed=NULL;
   }
}

//______________________________________________________________________________
void AliHLTMessage::SetLength() const
{
   // Set the message length at the beginning of the message buffer.

   if (IsWriting()) {
      char *buf = Buffer();
      *((UInt_t*)buf) = (UInt_t)(Length() - sizeof(UInt_t));

      if (fBufComp) {
         buf = fBufComp;
	 *((UInt_t*)buf) = (UInt_t)(CompLength() - sizeof(UInt_t));
      }
   }
}

//______________________________________________________________________________
void AliHLTMessage::SetWhat(UInt_t what)
{
   // Using this method one can change the message type a-posteriory.
   // In case you OR "what" with kMESS_ACK, the message will wait for
   // an acknowledgement from the remote side. This makes the sending
   // process synchronous.

   fWhat = what;

   char *buf = Buffer();
   buf += sizeof(UInt_t);   // skip reserved length space
   tobuf(buf, what);

   if (fBufComp) {
      buf = fBufComp;
      buf += sizeof(UInt_t);   // skip reserved length space
      tobuf(buf, what | kMESS_ZIP);
   }
}

//______________________________________________________________________________
void AliHLTMessage::SetCompressionLevel(Int_t level)
{
   // Set the message compression level. Can be between 0 and 9 with 0
   // being no compression and 9 maximum compression. In general the default
   // level of 1 is the best compromise between achieved compression and
   // cpu time. Compression will only happen when the message is > 256 bytes.

   if (level < 0) level = 0;
   if (level > 9) level = 9;

   if (level != fCompress && fBufComp) {
      delete [] fBufComp;
      fBufComp    = 0;
      fBufCompCur = 0;
      fCompPos    = 0;
   }
   fCompress = level;
}

//______________________________________________________________________________
Int_t AliHLTMessage::Compress()
{
   // Compress the message. The message will only be compressed if the
   // compression level > 0 and the if the message is > 256 bytes.
   // Returns -1 in case of error (when compression fails or
   // when the message increases in size in some pathological cases),
   // otherwise returns 0.

   if (fCompress == 0) {
      // no compression specified
      if (fBufComp) {
         delete [] fBufComp;
         fBufComp    = 0;
         fBufCompCur = 0;
         fCompPos    = 0;
      }
      return 0;
   }

   if (fBufComp && fCompPos == fBufCur) {
      // the message was already compressed
      return 0;
   }

   // remove any existing compressed buffer before compressing modified message
   if (fBufComp) {
      delete [] fBufComp;
      fBufComp    = 0;
      fBufCompCur = 0;
      fCompPos    = 0;
   }

   if (Length() <= (Int_t)(256 + 2*sizeof(UInt_t))) {
      // this message is too small to be compressed
      return 0;
   }

   Int_t hdrlen   = 2*sizeof(UInt_t);
   Int_t messlen  = Length() - hdrlen;
   Int_t nbuffers = messlen / kMAXBUF;
   Int_t chdrlen  = 3*sizeof(UInt_t);   // compressed buffer header length
   Int_t buflen   = TMath::Max(512, chdrlen + messlen + 9*nbuffers);
   fBufComp       = new char[buflen];
   char *messbuf  = Buffer() + hdrlen;
   char *bufcur   = fBufComp + chdrlen;
   Int_t noutot   = 0;
   Int_t nzip     = 0;
   Int_t nout, bufmax;
   for (Int_t i = 0; i <= nbuffers; i++) {
      if (i == nbuffers)
         bufmax = messlen - nzip;
      else
         bufmax = kMAXBUF;
      R__zip(fCompress, &bufmax, messbuf, &bufmax, bufcur, &nout);
      if (nout == 0 || nout >= messlen) {
         //this happens when the buffer cannot be compressed
         delete [] fBufComp;
         fBufComp    = 0;
         fBufCompCur = 0;
         fCompPos    = 0;
         return -1;
      }
      bufcur  += nout;
      noutot  += nout;
      messbuf += kMAXBUF;
      nzip    += kMAXBUF;
   }
   fBufCompCur = bufcur;
   fCompPos    = fBufCur;

   bufcur = fBufComp;
   tobuf(bufcur, (UInt_t)(CompLength() - sizeof(UInt_t)));
   Int_t what = fWhat | kMESS_ZIP;
   tobuf(bufcur, what);
   tobuf(bufcur, Length());    // original uncompressed buffer length

   return 0;
}

//______________________________________________________________________________
Int_t AliHLTMessage::Uncompress()
{
   // Uncompress the message. The message will only be uncompressed when
   // kMESS_ZIP is set. Returns -1 in case of error, 0 otherwise.

   if (!fBufComp || !(fWhat & kMESS_ZIP))
      return -1;

   Int_t buflen;
   Int_t hdrlen = 2*sizeof(UInt_t);
   char *bufcur1 = fBufComp + hdrlen;
   frombuf(bufcur1, &buflen);
   UChar_t *bufcur = (UChar_t*)bufcur1;
   fBuffer  = new char[buflen];
   fBufUncompressed = fBuffer;
   fBufSize = buflen;
   fBufCur  = fBuffer + sizeof(UInt_t) + sizeof(fWhat);
   fBufMax  = fBuffer + fBufSize;
   char *messbuf = fBuffer + hdrlen;

   Int_t nin, nout, nbuf;
   Int_t noutot = 0;
   while (1) {
      nin  = 9 + ((Int_t)bufcur[3] | ((Int_t)bufcur[4] << 8) | ((Int_t)bufcur[5] << 16));
      nbuf = (Int_t)bufcur[6] | ((Int_t)bufcur[7] << 8) | ((Int_t)bufcur[8] << 16);
      R__unzip(&nin, bufcur, &nbuf, messbuf, &nout);
      if (!nout) break;
      noutot += nout;
      if (noutot >= buflen - hdrlen) break;
      bufcur  += nin;
      messbuf += nout;
   }

   fWhat &= ~kMESS_ZIP;
   fCompress = 1;

   return 0;
}

//______________________________________________________________________________
void AliHLTMessage::WriteObject(const TObject *obj)
{
   // Write object to message buffer.
   // When support for schema evolution is enabled the list of TStreamerInfo
   // used to stream this object is kept in fInfos. This information is used
   // by TSocket::Send that sends this list through the socket. This list is in
   // turn used by TSocket::Recv to store the TStreamerInfo objects in the
   // relevant TClass in case the TClass does not know yet about a particular
   // class version. This feature is implemented to support clients and servers
   // with either different ROOT versions or different user classes versions.

   if (fgEvolution || fEvolution) {
      if (fInfos)
         fInfos->Clear();
      else
         fInfos = new TList();
   }

   fBitsPIDs.ResetAllBits();
   WriteObjectAny(obj, TObject::Class());
}

//______________________________________________________________________________
UShort_t AliHLTMessage::WriteProcessID(TProcessID *pid)
{
   // Check if the ProcessID pid is already in the message.
   // If not, then:
   //   - mark bit 0 of fBitsPIDs to indicate that a ProcessID has been found
   //   - mark bit uid+1 where uid id the uid of the ProcessID

   if (fBitsPIDs.TestBitNumber(0)) return 0;
   if (!pid)
      pid = TProcessID::GetPID();
   if (!pid) return 0;
   fBitsPIDs.SetBitNumber(0);
   UInt_t uid = pid->GetUniqueID();
   fBitsPIDs.SetBitNumber(uid+1);
   return 1;
}

AliHLTMessage* AliHLTMessage::Stream(TObject* pSrc, Int_t compression, unsigned verbosity)
{
  /// Helper function to stream an object into an AliHLTMessage
  /// The returned instance must be cleaned by the caller
  ///
  /// Get the data and data size from the message:
  ///  first check
  ///    pMsg->CompLength();
  ///    pMsg->CompBuffer();
  ///  if that is NULL
  ///    pMsg->Length();
  ///    pMsg->Buffer();
  ///
  /// Note: accessing scheme will be change din the future to just have the two
  ///       latter ones.
  if (!pSrc) return NULL;

  AliHLTLogging log;
  AliHLTMessage* pMsg=new AliHLTMessage(kMESS_OBJECT);
  if (!pMsg) {
    log.LoggingVarargs(kHLTLogError, "AliHLTMessage", "Stream" , __FILE__ , __LINE__ , "memory allocation failed");
    return NULL;
  }

  pMsg->SetCompressionLevel(compression);
  pMsg->WriteObject(pSrc);
  if (pMsg->Length()>0) {
    // Matthias Sep 2008
    // NOTE: AliHLTMessage does implement it's own SetLength method
    // which is not architecture independent. The original SetLength
    // stores the size always in network byte order.
    // I'm trying to remember the rational for that, might be that
    // it was just some lack of knowledge. Want to change this, but
    // has to be done carefully to be backward compatible.
    pMsg->SetLength(); // sets the length to the first (reserved) word

    // does nothing if the level is 0
    pMsg->Compress();

    if (pMsg->CompBuffer()) {
      pMsg->SetLength(); // set once more to have the byte order
      if (verbosity>0) log.LoggingVarargs(kHLTLogInfo, "AliHLTMessage", "Stream" , __FILE__ , __LINE__ , "object %p type %s streamed: size %d", pSrc, pSrc->GetName(), pMsg->CompLength());
    } else {
      if (verbosity>0) log.LoggingVarargs(kHLTLogInfo, "AliHLTMessage", "Stream" , __FILE__ , __LINE__ , "object %p type %s streamed: size %d", pSrc, pSrc->GetName(), pMsg->Length());
    }
  }
  return pMsg;
}

TObject* AliHLTMessage::Extract(const void* pBuffer, unsigned bufferSize, unsigned verbosity)
{
   /// Helper function to extract an object from a buffer.
   /// The returned object must be cleaned by the caller
  AliHLTLogging log;
  if (!pBuffer || bufferSize<sizeof(AliHLTUInt32_t)) {
    if (verbosity>0) log.LoggingVarargs(kHLTLogWarning, "AliHLTMessage", "Extract" , __FILE__ , __LINE__ , "invalid input buffer %p %d", pBuffer, bufferSize);
    return NULL;
  }

  AliHLTUInt32_t firstWord=*((AliHLTUInt32_t*)pBuffer);
  if (firstWord==bufferSize-sizeof(AliHLTUInt32_t) &&
      firstWord>=34 /*thats the minimum size of a streamed TObject*/) {
    AliHLTMessage msg((AliHLTUInt8_t*)pBuffer, bufferSize);
    TClass* objclass=msg.GetClass();
    TObject* pObject=msg.ReadObject(objclass);
    if (pObject && objclass) {
      if (verbosity>0) log.LoggingVarargs(kHLTLogInfo, "AliHLTMessage", "Extract" , __FILE__ , __LINE__ , "object %p type %s created", pObject, objclass->GetName());
      return pObject;
    } else {
      if (verbosity>0) log.LoggingVarargs(kHLTLogWarning, "AliHLTMessage", "Extract" , __FILE__ , __LINE__ , "failed to create object from buffer of size %d", bufferSize);
    }
  } else {
    if (verbosity>0) log.LoggingVarargs(kHLTLogWarning, "AliHLTMessage", "Extract" , __FILE__ , __LINE__ , "not a streamed TObject: block size %d, indicated %d", bufferSize, firstWord+sizeof(AliHLTUInt32_t));
  }
  return NULL;
}

TObject* AliHLTMessage::Extract(const char* filename, unsigned verbosity)
{
   /// Helper function to extract an object from a file containing the streamed object.
   /// The returned object must be cleaned by the caller
  if (!filename) return NULL;
  
  AliHLTLogging log;
  TString input=filename;
  input+="?filetype=raw";
  TFile* pFile=new TFile(input);
  if (!pFile) return NULL;
  TObject* pObject=NULL;
  if (!pFile->IsZombie()) {
    pFile->Seek(0);
    TArrayC buffer;
    buffer.Set(pFile->GetSize());
    if (pFile->ReadBuffer(buffer.GetArray(), buffer.GetSize())==0) {
      pObject=Extract(buffer.GetArray(), buffer.GetSize(), verbosity);
    } else {
      log.LoggingVarargs(kHLTLogError, "AliHLTMessage", "Extract" , __FILE__ , __LINE__ , "failed reading %d byte(s) from file %s", pFile->GetSize(), filename);
    }
  }

  delete pFile;
  return pObject;
}
 AliHLTMessage.cxx:1
 AliHLTMessage.cxx:2
 AliHLTMessage.cxx:3
 AliHLTMessage.cxx:4
 AliHLTMessage.cxx:5
 AliHLTMessage.cxx:6
 AliHLTMessage.cxx:7
 AliHLTMessage.cxx:8
 AliHLTMessage.cxx:9
 AliHLTMessage.cxx:10
 AliHLTMessage.cxx:11
 AliHLTMessage.cxx:12
 AliHLTMessage.cxx:13
 AliHLTMessage.cxx:14
 AliHLTMessage.cxx:15
 AliHLTMessage.cxx:16
 AliHLTMessage.cxx:17
 AliHLTMessage.cxx:18
 AliHLTMessage.cxx:19
 AliHLTMessage.cxx:20
 AliHLTMessage.cxx:21
 AliHLTMessage.cxx:22
 AliHLTMessage.cxx:23
 AliHLTMessage.cxx:24
 AliHLTMessage.cxx:25
 AliHLTMessage.cxx:26
 AliHLTMessage.cxx:27
 AliHLTMessage.cxx:28
 AliHLTMessage.cxx:29
 AliHLTMessage.cxx:30
 AliHLTMessage.cxx:31
 AliHLTMessage.cxx:32
 AliHLTMessage.cxx:33
 AliHLTMessage.cxx:34
 AliHLTMessage.cxx:35
 AliHLTMessage.cxx:36
 AliHLTMessage.cxx:37
 AliHLTMessage.cxx:38
 AliHLTMessage.cxx:39
 AliHLTMessage.cxx:40
 AliHLTMessage.cxx:41
 AliHLTMessage.cxx:42
 AliHLTMessage.cxx:43
 AliHLTMessage.cxx:44
 AliHLTMessage.cxx:45
 AliHLTMessage.cxx:46
 AliHLTMessage.cxx:47
 AliHLTMessage.cxx:48
 AliHLTMessage.cxx:49
 AliHLTMessage.cxx:50
 AliHLTMessage.cxx:51
 AliHLTMessage.cxx:52
 AliHLTMessage.cxx:53
 AliHLTMessage.cxx:54
 AliHLTMessage.cxx:55
 AliHLTMessage.cxx:56
 AliHLTMessage.cxx:57
 AliHLTMessage.cxx:58
 AliHLTMessage.cxx:59
 AliHLTMessage.cxx:60
 AliHLTMessage.cxx:61
 AliHLTMessage.cxx:62
 AliHLTMessage.cxx:63
 AliHLTMessage.cxx:64
 AliHLTMessage.cxx:65
 AliHLTMessage.cxx:66
 AliHLTMessage.cxx:67
 AliHLTMessage.cxx:68
 AliHLTMessage.cxx:69
 AliHLTMessage.cxx:70
 AliHLTMessage.cxx:71
 AliHLTMessage.cxx:72
 AliHLTMessage.cxx:73
 AliHLTMessage.cxx:74
 AliHLTMessage.cxx:75
 AliHLTMessage.cxx:76
 AliHLTMessage.cxx:77
 AliHLTMessage.cxx:78
 AliHLTMessage.cxx:79
 AliHLTMessage.cxx:80
 AliHLTMessage.cxx:81
 AliHLTMessage.cxx:82
 AliHLTMessage.cxx:83
 AliHLTMessage.cxx:84
 AliHLTMessage.cxx:85
 AliHLTMessage.cxx:86
 AliHLTMessage.cxx:87
 AliHLTMessage.cxx:88
 AliHLTMessage.cxx:89
 AliHLTMessage.cxx:90
 AliHLTMessage.cxx:91
 AliHLTMessage.cxx:92
 AliHLTMessage.cxx:93
 AliHLTMessage.cxx:94
 AliHLTMessage.cxx:95
 AliHLTMessage.cxx:96
 AliHLTMessage.cxx:97
 AliHLTMessage.cxx:98
 AliHLTMessage.cxx:99
 AliHLTMessage.cxx:100
 AliHLTMessage.cxx:101
 AliHLTMessage.cxx:102
 AliHLTMessage.cxx:103
 AliHLTMessage.cxx:104
 AliHLTMessage.cxx:105
 AliHLTMessage.cxx:106
 AliHLTMessage.cxx:107
 AliHLTMessage.cxx:108
 AliHLTMessage.cxx:109
 AliHLTMessage.cxx:110
 AliHLTMessage.cxx:111
 AliHLTMessage.cxx:112
 AliHLTMessage.cxx:113
 AliHLTMessage.cxx:114
 AliHLTMessage.cxx:115
 AliHLTMessage.cxx:116
 AliHLTMessage.cxx:117
 AliHLTMessage.cxx:118
 AliHLTMessage.cxx:119
 AliHLTMessage.cxx:120
 AliHLTMessage.cxx:121
 AliHLTMessage.cxx:122
 AliHLTMessage.cxx:123
 AliHLTMessage.cxx:124
 AliHLTMessage.cxx:125
 AliHLTMessage.cxx:126
 AliHLTMessage.cxx:127
 AliHLTMessage.cxx:128
 AliHLTMessage.cxx:129
 AliHLTMessage.cxx:130
 AliHLTMessage.cxx:131
 AliHLTMessage.cxx:132
 AliHLTMessage.cxx:133
 AliHLTMessage.cxx:134
 AliHLTMessage.cxx:135
 AliHLTMessage.cxx:136
 AliHLTMessage.cxx:137
 AliHLTMessage.cxx:138
 AliHLTMessage.cxx:139
 AliHLTMessage.cxx:140
 AliHLTMessage.cxx:141
 AliHLTMessage.cxx:142
 AliHLTMessage.cxx:143
 AliHLTMessage.cxx:144
 AliHLTMessage.cxx:145
 AliHLTMessage.cxx:146
 AliHLTMessage.cxx:147
 AliHLTMessage.cxx:148
 AliHLTMessage.cxx:149
 AliHLTMessage.cxx:150
 AliHLTMessage.cxx:151
 AliHLTMessage.cxx:152
 AliHLTMessage.cxx:153
 AliHLTMessage.cxx:154
 AliHLTMessage.cxx:155
 AliHLTMessage.cxx:156
 AliHLTMessage.cxx:157
 AliHLTMessage.cxx:158
 AliHLTMessage.cxx:159
 AliHLTMessage.cxx:160
 AliHLTMessage.cxx:161
 AliHLTMessage.cxx:162
 AliHLTMessage.cxx:163
 AliHLTMessage.cxx:164
 AliHLTMessage.cxx:165
 AliHLTMessage.cxx:166
 AliHLTMessage.cxx:167
 AliHLTMessage.cxx:168
 AliHLTMessage.cxx:169
 AliHLTMessage.cxx:170
 AliHLTMessage.cxx:171
 AliHLTMessage.cxx:172
 AliHLTMessage.cxx:173
 AliHLTMessage.cxx:174
 AliHLTMessage.cxx:175
 AliHLTMessage.cxx:176
 AliHLTMessage.cxx:177
 AliHLTMessage.cxx:178
 AliHLTMessage.cxx:179
 AliHLTMessage.cxx:180
 AliHLTMessage.cxx:181
 AliHLTMessage.cxx:182
 AliHLTMessage.cxx:183
 AliHLTMessage.cxx:184
 AliHLTMessage.cxx:185
 AliHLTMessage.cxx:186
 AliHLTMessage.cxx:187
 AliHLTMessage.cxx:188
 AliHLTMessage.cxx:189
 AliHLTMessage.cxx:190
 AliHLTMessage.cxx:191
 AliHLTMessage.cxx:192
 AliHLTMessage.cxx:193
 AliHLTMessage.cxx:194
 AliHLTMessage.cxx:195
 AliHLTMessage.cxx:196
 AliHLTMessage.cxx:197
 AliHLTMessage.cxx:198
 AliHLTMessage.cxx:199
 AliHLTMessage.cxx:200
 AliHLTMessage.cxx:201
 AliHLTMessage.cxx:202
 AliHLTMessage.cxx:203
 AliHLTMessage.cxx:204
 AliHLTMessage.cxx:205
 AliHLTMessage.cxx:206
 AliHLTMessage.cxx:207
 AliHLTMessage.cxx:208
 AliHLTMessage.cxx:209
 AliHLTMessage.cxx:210
 AliHLTMessage.cxx:211
 AliHLTMessage.cxx:212
 AliHLTMessage.cxx:213
 AliHLTMessage.cxx:214
 AliHLTMessage.cxx:215
 AliHLTMessage.cxx:216
 AliHLTMessage.cxx:217
 AliHLTMessage.cxx:218
 AliHLTMessage.cxx:219
 AliHLTMessage.cxx:220
 AliHLTMessage.cxx:221
 AliHLTMessage.cxx:222
 AliHLTMessage.cxx:223
 AliHLTMessage.cxx:224
 AliHLTMessage.cxx:225
 AliHLTMessage.cxx:226
 AliHLTMessage.cxx:227
 AliHLTMessage.cxx:228
 AliHLTMessage.cxx:229
 AliHLTMessage.cxx:230
 AliHLTMessage.cxx:231
 AliHLTMessage.cxx:232
 AliHLTMessage.cxx:233
 AliHLTMessage.cxx:234
 AliHLTMessage.cxx:235
 AliHLTMessage.cxx:236
 AliHLTMessage.cxx:237
 AliHLTMessage.cxx:238
 AliHLTMessage.cxx:239
 AliHLTMessage.cxx:240
 AliHLTMessage.cxx:241
 AliHLTMessage.cxx:242
 AliHLTMessage.cxx:243
 AliHLTMessage.cxx:244
 AliHLTMessage.cxx:245
 AliHLTMessage.cxx:246
 AliHLTMessage.cxx:247
 AliHLTMessage.cxx:248
 AliHLTMessage.cxx:249
 AliHLTMessage.cxx:250
 AliHLTMessage.cxx:251
 AliHLTMessage.cxx:252
 AliHLTMessage.cxx:253
 AliHLTMessage.cxx:254
 AliHLTMessage.cxx:255
 AliHLTMessage.cxx:256
 AliHLTMessage.cxx:257
 AliHLTMessage.cxx:258
 AliHLTMessage.cxx:259
 AliHLTMessage.cxx:260
 AliHLTMessage.cxx:261
 AliHLTMessage.cxx:262
 AliHLTMessage.cxx:263
 AliHLTMessage.cxx:264
 AliHLTMessage.cxx:265
 AliHLTMessage.cxx:266
 AliHLTMessage.cxx:267
 AliHLTMessage.cxx:268
 AliHLTMessage.cxx:269
 AliHLTMessage.cxx:270
 AliHLTMessage.cxx:271
 AliHLTMessage.cxx:272
 AliHLTMessage.cxx:273
 AliHLTMessage.cxx:274
 AliHLTMessage.cxx:275
 AliHLTMessage.cxx:276
 AliHLTMessage.cxx:277
 AliHLTMessage.cxx:278
 AliHLTMessage.cxx:279
 AliHLTMessage.cxx:280
 AliHLTMessage.cxx:281
 AliHLTMessage.cxx:282
 AliHLTMessage.cxx:283
 AliHLTMessage.cxx:284
 AliHLTMessage.cxx:285
 AliHLTMessage.cxx:286
 AliHLTMessage.cxx:287
 AliHLTMessage.cxx:288
 AliHLTMessage.cxx:289
 AliHLTMessage.cxx:290
 AliHLTMessage.cxx:291
 AliHLTMessage.cxx:292
 AliHLTMessage.cxx:293
 AliHLTMessage.cxx:294
 AliHLTMessage.cxx:295
 AliHLTMessage.cxx:296
 AliHLTMessage.cxx:297
 AliHLTMessage.cxx:298
 AliHLTMessage.cxx:299
 AliHLTMessage.cxx:300
 AliHLTMessage.cxx:301
 AliHLTMessage.cxx:302
 AliHLTMessage.cxx:303
 AliHLTMessage.cxx:304
 AliHLTMessage.cxx:305
 AliHLTMessage.cxx:306
 AliHLTMessage.cxx:307
 AliHLTMessage.cxx:308
 AliHLTMessage.cxx:309
 AliHLTMessage.cxx:310
 AliHLTMessage.cxx:311
 AliHLTMessage.cxx:312
 AliHLTMessage.cxx:313
 AliHLTMessage.cxx:314
 AliHLTMessage.cxx:315
 AliHLTMessage.cxx:316
 AliHLTMessage.cxx:317
 AliHLTMessage.cxx:318
 AliHLTMessage.cxx:319
 AliHLTMessage.cxx:320
 AliHLTMessage.cxx:321
 AliHLTMessage.cxx:322
 AliHLTMessage.cxx:323
 AliHLTMessage.cxx:324
 AliHLTMessage.cxx:325
 AliHLTMessage.cxx:326
 AliHLTMessage.cxx:327
 AliHLTMessage.cxx:328
 AliHLTMessage.cxx:329
 AliHLTMessage.cxx:330
 AliHLTMessage.cxx:331
 AliHLTMessage.cxx:332
 AliHLTMessage.cxx:333
 AliHLTMessage.cxx:334
 AliHLTMessage.cxx:335
 AliHLTMessage.cxx:336
 AliHLTMessage.cxx:337
 AliHLTMessage.cxx:338
 AliHLTMessage.cxx:339
 AliHLTMessage.cxx:340
 AliHLTMessage.cxx:341
 AliHLTMessage.cxx:342
 AliHLTMessage.cxx:343
 AliHLTMessage.cxx:344
 AliHLTMessage.cxx:345
 AliHLTMessage.cxx:346
 AliHLTMessage.cxx:347
 AliHLTMessage.cxx:348
 AliHLTMessage.cxx:349
 AliHLTMessage.cxx:350
 AliHLTMessage.cxx:351
 AliHLTMessage.cxx:352
 AliHLTMessage.cxx:353
 AliHLTMessage.cxx:354
 AliHLTMessage.cxx:355
 AliHLTMessage.cxx:356
 AliHLTMessage.cxx:357
 AliHLTMessage.cxx:358
 AliHLTMessage.cxx:359
 AliHLTMessage.cxx:360
 AliHLTMessage.cxx:361
 AliHLTMessage.cxx:362
 AliHLTMessage.cxx:363
 AliHLTMessage.cxx:364
 AliHLTMessage.cxx:365
 AliHLTMessage.cxx:366
 AliHLTMessage.cxx:367
 AliHLTMessage.cxx:368
 AliHLTMessage.cxx:369
 AliHLTMessage.cxx:370
 AliHLTMessage.cxx:371
 AliHLTMessage.cxx:372
 AliHLTMessage.cxx:373
 AliHLTMessage.cxx:374
 AliHLTMessage.cxx:375
 AliHLTMessage.cxx:376
 AliHLTMessage.cxx:377
 AliHLTMessage.cxx:378
 AliHLTMessage.cxx:379
 AliHLTMessage.cxx:380
 AliHLTMessage.cxx:381
 AliHLTMessage.cxx:382
 AliHLTMessage.cxx:383
 AliHLTMessage.cxx:384
 AliHLTMessage.cxx:385
 AliHLTMessage.cxx:386
 AliHLTMessage.cxx:387
 AliHLTMessage.cxx:388
 AliHLTMessage.cxx:389
 AliHLTMessage.cxx:390
 AliHLTMessage.cxx:391
 AliHLTMessage.cxx:392
 AliHLTMessage.cxx:393
 AliHLTMessage.cxx:394
 AliHLTMessage.cxx:395
 AliHLTMessage.cxx:396
 AliHLTMessage.cxx:397
 AliHLTMessage.cxx:398
 AliHLTMessage.cxx:399
 AliHLTMessage.cxx:400
 AliHLTMessage.cxx:401
 AliHLTMessage.cxx:402
 AliHLTMessage.cxx:403
 AliHLTMessage.cxx:404
 AliHLTMessage.cxx:405
 AliHLTMessage.cxx:406
 AliHLTMessage.cxx:407
 AliHLTMessage.cxx:408
 AliHLTMessage.cxx:409
 AliHLTMessage.cxx:410
 AliHLTMessage.cxx:411
 AliHLTMessage.cxx:412
 AliHLTMessage.cxx:413
 AliHLTMessage.cxx:414
 AliHLTMessage.cxx:415
 AliHLTMessage.cxx:416
 AliHLTMessage.cxx:417
 AliHLTMessage.cxx:418
 AliHLTMessage.cxx:419
 AliHLTMessage.cxx:420
 AliHLTMessage.cxx:421
 AliHLTMessage.cxx:422
 AliHLTMessage.cxx:423
 AliHLTMessage.cxx:424
 AliHLTMessage.cxx:425
 AliHLTMessage.cxx:426
 AliHLTMessage.cxx:427
 AliHLTMessage.cxx:428
 AliHLTMessage.cxx:429
 AliHLTMessage.cxx:430
 AliHLTMessage.cxx:431
 AliHLTMessage.cxx:432
 AliHLTMessage.cxx:433
 AliHLTMessage.cxx:434
 AliHLTMessage.cxx:435
 AliHLTMessage.cxx:436
 AliHLTMessage.cxx:437
 AliHLTMessage.cxx:438
 AliHLTMessage.cxx:439
 AliHLTMessage.cxx:440
 AliHLTMessage.cxx:441
 AliHLTMessage.cxx:442
 AliHLTMessage.cxx:443
 AliHLTMessage.cxx:444
 AliHLTMessage.cxx:445
 AliHLTMessage.cxx:446
 AliHLTMessage.cxx:447
 AliHLTMessage.cxx:448
 AliHLTMessage.cxx:449
 AliHLTMessage.cxx:450
 AliHLTMessage.cxx:451
 AliHLTMessage.cxx:452
 AliHLTMessage.cxx:453
 AliHLTMessage.cxx:454
 AliHLTMessage.cxx:455
 AliHLTMessage.cxx:456
 AliHLTMessage.cxx:457
 AliHLTMessage.cxx:458
 AliHLTMessage.cxx:459
 AliHLTMessage.cxx:460
 AliHLTMessage.cxx:461
 AliHLTMessage.cxx:462
 AliHLTMessage.cxx:463
 AliHLTMessage.cxx:464
 AliHLTMessage.cxx:465
 AliHLTMessage.cxx:466
 AliHLTMessage.cxx:467
 AliHLTMessage.cxx:468
 AliHLTMessage.cxx:469
 AliHLTMessage.cxx:470
 AliHLTMessage.cxx:471
 AliHLTMessage.cxx:472
 AliHLTMessage.cxx:473
 AliHLTMessage.cxx:474
 AliHLTMessage.cxx:475
 AliHLTMessage.cxx:476
 AliHLTMessage.cxx:477
 AliHLTMessage.cxx:478
 AliHLTMessage.cxx:479
 AliHLTMessage.cxx:480
 AliHLTMessage.cxx:481
 AliHLTMessage.cxx:482
 AliHLTMessage.cxx:483
 AliHLTMessage.cxx:484
 AliHLTMessage.cxx:485
 AliHLTMessage.cxx:486
 AliHLTMessage.cxx:487
 AliHLTMessage.cxx:488
 AliHLTMessage.cxx:489
 AliHLTMessage.cxx:490
 AliHLTMessage.cxx:491
 AliHLTMessage.cxx:492
 AliHLTMessage.cxx:493
 AliHLTMessage.cxx:494
 AliHLTMessage.cxx:495
 AliHLTMessage.cxx:496
 AliHLTMessage.cxx:497
 AliHLTMessage.cxx:498
 AliHLTMessage.cxx:499
 AliHLTMessage.cxx:500
 AliHLTMessage.cxx:501
 AliHLTMessage.cxx:502
 AliHLTMessage.cxx:503
 AliHLTMessage.cxx:504
 AliHLTMessage.cxx:505
 AliHLTMessage.cxx:506
 AliHLTMessage.cxx:507
 AliHLTMessage.cxx:508
 AliHLTMessage.cxx:509
 AliHLTMessage.cxx:510
 AliHLTMessage.cxx:511
 AliHLTMessage.cxx:512
 AliHLTMessage.cxx:513
 AliHLTMessage.cxx:514
 AliHLTMessage.cxx:515
 AliHLTMessage.cxx:516
 AliHLTMessage.cxx:517
 AliHLTMessage.cxx:518
 AliHLTMessage.cxx:519
 AliHLTMessage.cxx:520
 AliHLTMessage.cxx:521
 AliHLTMessage.cxx:522
 AliHLTMessage.cxx:523
 AliHLTMessage.cxx:524
 AliHLTMessage.cxx:525
 AliHLTMessage.cxx:526
 AliHLTMessage.cxx:527
 AliHLTMessage.cxx:528
 AliHLTMessage.cxx:529
 AliHLTMessage.cxx:530
 AliHLTMessage.cxx:531
 AliHLTMessage.cxx:532
 AliHLTMessage.cxx:533
 AliHLTMessage.cxx:534
 AliHLTMessage.cxx:535
 AliHLTMessage.cxx:536
 AliHLTMessage.cxx:537
 AliHLTMessage.cxx:538
 AliHLTMessage.cxx:539
 AliHLTMessage.cxx:540
 AliHLTMessage.cxx:541
 AliHLTMessage.cxx:542
 AliHLTMessage.cxx:543
 AliHLTMessage.cxx:544
 AliHLTMessage.cxx:545
 AliHLTMessage.cxx:546
 AliHLTMessage.cxx:547
 AliHLTMessage.cxx:548
 AliHLTMessage.cxx:549
 AliHLTMessage.cxx:550
 AliHLTMessage.cxx:551
 AliHLTMessage.cxx:552
 AliHLTMessage.cxx:553
 AliHLTMessage.cxx:554