// @(#)root/roostats:$Id:  cranmer $
// Author: Kyle Cranmer, Akira Shibata
/*************************************************************************
 * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//_________________________________________________
/*
  BEGIN_HTML
  <p>
  </p>
  END_HTML
*/
//

#include "TDOMParser.h"

#include "RooStats/HistFactory/ConfigParser.h"
#include "RooStats/HistFactory/HistFactoryException.h"
#include "RooStats/HistFactory/Measurement.h"

#include "Helper.h"


using namespace RooStats;
using namespace HistFactory;

using namespace std;

std::vector< RooStats::HistFactory::Measurement > ConfigParser::GetMeasurementsFromXML( string input ) {
 
  // Open an input "Driver" XML file (input),
  // Parse that file and its channel files
  // and return a vector filled with 
  // the listed measurements


  // Create the list of measurements
  // (This is what will be returned)
  std::vector< HistFactory::Measurement > measurement_list;

  try {

    // Open the Driver XML File
    TDOMParser xmlparser;
    Int_t parseError = xmlparser.ParseFile( input.c_str() );
    if( parseError ) { 
      std::cerr << "Loading of xml document \"" << input
		<< "\" failed" << std::endl;
      throw hf_exc();
    } 


    // Read the Driver XML File
    cout << "reading input : " << input << endl;
    TXMLDocument* xmldoc = xmlparser.GetXMLDocument();
    TXMLNode* rootNode = xmldoc->GetRootNode();


    // Check that it is the proper DOCTYPE
    if( rootNode->GetNodeName() != TString( "Combination" ) ){
      std::cout << "Error: Driver DOCTYPE not equal to 'Combination'" << std::endl;
      throw hf_exc();
    }

    // Loop over the Combination's attributes
    std::string OutputFilePrefix;

    TListIter attribIt = rootNode->GetAttributes();
    TXMLAttr* curAttr = 0;
    while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

      // Get the Name, Val of this node
      TString attrName    = curAttr->GetName();
      std::string attrVal = curAttr->GetValue();

      if( attrName == TString( "" ) ) {
	std::cout << " Error: Attribute for 'Combination' with no name found" << std::endl;
	throw hf_exc();
      }

      else if( attrName == TString( "OutputFilePrefix" ) ) {
	OutputFilePrefix = string(curAttr->GetValue());
	std::cout << "output file prefix is : " << OutputFilePrefix << endl;
      }

      /*
	else if( attrName == TString( "InputFile" ) ) {
        channel.InputFile = attrVal ;
	}
      */

      else {
	std::cout << " Error: Unknown attribute for 'Combination' encountered: " 
		  << attrName << std::endl;
	throw hf_exc();
      }

      // node = node->GetNextNode();

    }

    TXMLNode* node = NULL;

    // Get the list of channel XML files to combine
    // Do this first so we can quickly exit
    // if no channels are found
    std::vector< std::string > xml_channel_files;
    node = rootNode->GetChildren();
    while( node != 0 ) {
      if( node->GetNodeName() == TString( "Input" ) ) {
	if( node->GetText() == NULL ) {
	  std::cout << "Error: node: " << node->GetName() 
		    << " has no text." << std::endl;
	  throw hf_exc();
	}
	xml_channel_files.push_back(node->GetText());
      }
      node = node->GetNextNode();
    }

    // If no channel xml files are found, exit
    if(xml_channel_files.empty()){
      cerr << "no input channels found" << endl;
      throw hf_exc();
      //return measurement_list;
    }
    else {
      std::cout << "Found Channels: ";
      for( unsigned int i=0; i < xml_channel_files.size(); ++i )   std::cout << " " << xml_channel_files.at(i);
      std::cout << std::endl;
    }

    // Get the list of functions
    // These apply to all measurements, so we
    // first create the list of preprocess functions 
    // (before we create the list of measurements)
    // and then we add them to all measurements

    // For now, we create this list twice
    // simply for compatability
    // std::vector< std::string > preprocessFunctions;
    std::vector< RooStats::HistFactory::PreprocessFunction > functionObjects;

    node = rootNode->GetChildren();
    while( node != 0 ) {
      if( node->GetNodeName() == TString( "Function" ) ) {
      
	// For now, add both the objects itself and
	// it's command string (for easy compatability)
	RooStats::HistFactory::PreprocessFunction Func = ParseFunctionConfig( node );
	// preprocessFunctions.push_back( Func.GetCommand() ); 
	functionObjects.push_back( Func );
      }
      node = node->GetNextNode();
    }

    std::cout << std::endl;


    // Fill the list of measurements
    node = rootNode->GetChildren();
    while( node != 0 ) {

      if( node->GetNodeName() == TString( "" ) ) {
	std::cout << "Error: Node found in Measurement Driver XML with no name" << std::endl;
	throw hf_exc();
      }

      else if( node->GetNodeName() == TString( "Measurement" ) ) {
	HistFactory::Measurement measurement = CreateMeasurementFromDriverNode( node );
	// Set the prefix (obtained above)
	measurement.SetOutputFilePrefix( OutputFilePrefix );
	measurement_list.push_back( measurement );
      }

      else if( node->GetNodeName() == TString( "Function" ) ) {
	// Already processed these (directly above)
	;
      }

      else if( node->GetNodeName() == TString( "Input" ) ) {
	// Already processed these (directly above)
	;
      }

      else if( IsAcceptableNode( node ) ) { ; }
    
      else {
	std::cout << "Error: Unknown node found in Measurement Driver XML: "
		  << node->GetNodeName() << std::endl;
	throw hf_exc();
      }

      node = node->GetNextNode();
    }

    std::cout << "Done Processing Measurements" << std::endl;

    if( measurement_list.size() == 0 ) {
      std::cout << "Error: No Measurements found in XML Driver File" << std::endl;
      throw hf_exc();
    }
    else {
      std::cout << "Found Measurements: ";
      for( unsigned int i=0; i < measurement_list.size(); ++i )   std::cout << " " << measurement_list.at(i).GetName();
      std::cout << std::endl;
    }

    // Add the preprocessed functions to each measurement
    // for( unsigned int i = 0; i < measurement_list.size(); ++i) {
    //   measurement_list.at(i).SetPreprocessFunctions( preprocessFunctions );
    // }
    // Add the preprocessed functions to each measurement
    for( unsigned int i = 0; i < measurement_list.size(); ++i) {
      measurement_list.at(i).SetFunctionObjects( functionObjects );
    }

    // Create an instance of the class
    // that collects histograms
    //HistCollector collector;

    // Create the list of channels
    // (Each of these will be added 
    //  to every measurement)
    std::vector< HistFactory::Channel > channel_list;

    // Fill the list of channels
    for( unsigned int i = 0; i < xml_channel_files.size(); ++i ) {
      std::string channel_xml = xml_channel_files.at(i);
      std::cout << "Parsing Channel: " << channel_xml << std::endl;
      HistFactory::Channel channel =  ParseChannelXMLFile( channel_xml );

      // Get the histograms for the channel
      //collector.CollectHistograms( channel );
      //channel.CollectHistograms();
      channel_list.push_back( channel );
    }

    // Finally, add the channels to the measurements:
    for( unsigned int i = 0; i < measurement_list.size(); ++i) {

      HistFactory::Measurement& measurement = measurement_list.at(i);

      for( unsigned int j = 0; j < channel_list.size(); ++j ) {
	measurement.GetChannels().push_back( channel_list.at(j) );
      }
    }
  }
  catch(std::exception& e)
    {
      std::cout << e.what() << std::endl;
      throw hf_exc();
    }

  return measurement_list;

}
									     

HistFactory::Measurement ConfigParser::CreateMeasurementFromDriverNode( TXMLNode* node ) {


  HistFactory::Measurement measurement;

  // Set the default values:
  measurement.SetLumi( 1.0 );
  measurement.SetLumiRelErr( .10 );
  measurement.SetBinLow( 0 );
  measurement.SetBinHigh( 1 );
  measurement.SetExportOnly( false );

  std::cout << "Creating new measurement: " << std::endl;

  // First, get the attributes of the node
  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    if( curAttr->GetName() == TString( "" ) ) {
      std::cout << "Found XML attribute in Measurement with no name"  << std::endl;
      // ADD Output Here
      throw hf_exc();
    }
    else if( curAttr->GetName() == TString( "Name" ) ) {
      //rowTitle=curAttr->GetValue();
      measurement.SetName(  curAttr->GetValue() );
      //measurement.OutputFileName = outputFileNamePrefix+"_"+rowTitle+".root";
    }
    else if( curAttr->GetName() == TString( "Lumi" ) ) {
      measurement.SetLumi( atof(curAttr->GetValue()) );
    }
    else if( curAttr->GetName() == TString( "LumiRelErr" ) ) {
      measurement.SetLumiRelErr( atof(curAttr->GetValue()) );
    }
    else if( curAttr->GetName() == TString( "BinLow" ) ) {
      measurement.SetBinLow( atoi(curAttr->GetValue()) );
    }
    else if( curAttr->GetName() == TString( "BinHigh" ) ) {
      measurement.SetBinHigh( atoi(curAttr->GetValue()) );
    }
    else if( curAttr->GetName() == TString( "Mode" ) ) {
      cout <<"\n INFO: Mode attribute is deprecated, will ignore\n"<<endl;
    }
    else if( curAttr->GetName() == TString( "ExportOnly" ) ) {
      measurement.SetExportOnly( CheckTrueFalse(curAttr->GetValue(),"Measurement") );
    }

    else {
      std::cout << "Found unknown XML attribute in Measurement: " << curAttr->GetName()
		<< std::endl;
      throw hf_exc();
    }

  } // End Loop over attributes


  // Then, get the properties of the children nodes
  TXMLNode* child = node->GetChildren();
  while( child != 0 ) {
  
    if( child->GetNodeName() == TString( "" ) ) {
      std::cout << "Found XML child node of Measurement with no name"  << std::endl;
      throw hf_exc();
    }

    else if( child->GetNodeName() == TString( "POI" ) ) {
      if( child->GetText() == NULL ) {
	std::cout << "Error: node: " << child->GetName() 
		  << " has no text." << std::endl;
	throw hf_exc();
      }
      //poi// measurement.SetPOI( child->GetText() );
     AddSubStrings( measurement.GetPOIList(), child->GetText() );
    }

    else if( child->GetNodeName() == TString( "ParamSetting" ) ) {
      TListIter paramIt = child->GetAttributes();
      TXMLAttr* curParam = 0;
      while( ( curParam = dynamic_cast< TXMLAttr* >( paramIt() ) ) != 0 ) {

	if( curParam->GetName() == TString( "" ) ) {
	  std::cout << "Error: Found tag attribute with no name in ParamSetting" << std::endl;
	  throw hf_exc();
	}
	else if( curParam->GetName() == TString( "Const" ) ) {
	  if(curParam->GetValue()==TString("True")){
	    // Fix here...?
	    if( child->GetText() == NULL ) {
	      std::cout << "Error: node: " << child->GetName() 
			<< " has no text." << std::endl;
	      throw hf_exc();
	    }
	    AddSubStrings( measurement.GetConstantParams(), child->GetText() );
	  }
	}
	else if( curParam->GetName() == TString( "Val" ) ) {
	  double val = atof(curParam->GetValue());
	  if( child->GetText() == NULL ) {
	    std::cout << "Error: node: " << child->GetName() 
		      << " has no text." << std::endl;
	    throw hf_exc();
	  }
	  std::vector<std::string> child_nodes = GetChildrenFromString(child->GetText());
	  for(unsigned int i = 0; i < child_nodes.size(); ++i) {
	    measurement.SetParamValue( child_nodes.at(i), val);
	  }
	  // AddStringValPairToMap( measurement.GetParamValues(), val, child->GetText() );
	}
	else {
	  std::cout << "Found tag attribute with unknown name in ParamSetting: "
		    << curAttr->GetName() << std::endl;
	  throw hf_exc();
	}
      }
    }

    else if( child->GetNodeName() == TString( "Asimov" ) ) {

      //std::string name;
      //std::map<string, double> fixedParams;

      // Now, create and configure an asimov object
      // and add it to the measurement
      RooStats::HistFactory::Asimov asimov;
      std::string ParamFixString;

      // Loop over attributes
      attribIt = child->GetAttributes();
      curAttr = 0;
      while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
	
	if( curAttr->GetName() == TString( "" ) ) {
	  std::cout << "Error: Found tag attribute with no name in ConstraintTerm" << std::endl;
	  throw hf_exc();
	}

	else if( curAttr->GetName() == TString( "Name" ) ) {
	  std::string name = curAttr->GetValue();
	  asimov.SetName( name );
	}

	else if( curAttr->GetName() == TString( "FixParams" ) ) {
	  ParamFixString = curAttr->GetValue();
	  //std::map<std::string, double> fixedParams = ExtractParamMapFromString(FixParamList);
	  //asimov.GetFixedParams() = fixedParams;
	}

	else {
	  std::cout << "Found tag attribute with unknown name in ConstraintTerm: "
		    << curAttr->GetName() << std::endl;
	  throw hf_exc();
	}

      }

      // Add any parameters to the asimov dataset
      // to be fixed during the fitting and dataset generation
      if( ParamFixString=="" ) {
	std::cout << "Warning: Asimov Dataset with name: " << asimov.GetName()
		  << " added, but no parameters are set to be fixed" << std::endl;
      }
      else {
	AddParamsToAsimov( asimov, ParamFixString );
      }
      
      measurement.AddAsimovDataset( asimov );

    }

    else if( child->GetNodeName() == TString( "ConstraintTerm" ) ) {
      vector<string> syst; 
      string type = ""; 
      double rel = 0;

      map<string,double> gammaSyst;
      map<string,double> uniformSyst;
      map<string,double> logNormSyst;

      // Get the list of parameters in this tag:
      if( child->GetText() == NULL ) {
	std::cout << "Error: node: " << child->GetName() 
		  << " has no text." << std::endl;
	throw hf_exc();
      }
      AddSubStrings(syst, child->GetText());

      // Now, loop over this tag's attributes
      attribIt = child->GetAttributes();
      curAttr = 0;
      while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

	if( curAttr->GetName() == TString( "" ) ) {
	  std::cout << "Error: Found tag attribute with no name in ConstraintTerm" << std::endl;
	  throw hf_exc();
	}

	else if( curAttr->GetName() == TString( "Type" ) ) {
	  type = curAttr->GetValue();
	}

	else if( curAttr->GetName() == TString( "RelativeUncertainty" ) ) {
	  rel = atof(curAttr->GetValue());
	}

	else {
	  std::cout << "Found tag attribute with unknown name in ConstraintTerm: "
		    << curAttr->GetName() << std::endl;
	  throw hf_exc();
	}

      } // End Loop over tag attributes


      // Now, fill the maps, depending on the type:

      // Check that the type is in the correct form:
      if( ! (type=="Gamma"     || type=="Uniform" || 
	     type=="LogNormal" || type=="NoConstraint") ) {
	std::cout << "Error: Encountered unknown type for ConstraintTerm: " << type << std::endl;
	throw hf_exc();
      }

      if (type=="Gamma" && rel!=0) {
	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); it++) {
	  // Fix Here...?
	  measurement.GetGammaSyst()[(*it).c_str()] = rel;
	}
      }
	
      if (type=="Uniform" && rel!=0) {
	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); it++) {
	  // Fix Here...?
	  measurement.GetUniformSyst()[(*it).c_str()] = rel;
	}
      }
	
      if (type=="LogNormal" && rel!=0) {
	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); it++) {
	  // Fix Here...?
	  measurement.GetLogNormSyst()[(*it).c_str()] = rel;
	}
      }
	
      if (type=="NoConstraint") {
	for (vector<string>::const_iterator it=syst.begin(); it!=syst.end(); it++) {
	  // Fix Here...?
	  measurement.GetNoSyst()[(*it).c_str()] = 1.0; // MB : dummy value
	}
      }
    } // End adding of Constraint terms


    else if( IsAcceptableNode( child ) ) { ; }

    else {
    std::cout << "Found XML child of Measurement with unknown name: " << child->GetNodeName()
		<< std::endl;
      throw hf_exc();
    }

    child = child->GetNextNode();
  }

  measurement.PrintTree();
  std::cout << std::endl;

  return measurement;

}



HistFactory::Channel ConfigParser::ParseChannelXMLFile( string filen ) {

  /*
  TString lumiStr;
  lumiStr+=lumi;
  lumiStr.ReplaceAll(' ', TString());
  */

  std::cout << "Parsing file: " << filen ;

  TDOMParser xmlparser;

  // reading in the file and parse by DOM
  Int_t parseError = xmlparser.ParseFile( filen.c_str() );
  if( parseError ) { 
    std::cout << "Loading of xml document \"" << filen
	      << "\" failed" << std::endl;
    throw hf_exc();
  } 

  TXMLDocument* xmldoc = xmlparser.GetXMLDocument();
  TXMLNode* rootNode = xmldoc->GetRootNode();

  // Check that is is a CHANNEL based on the DOCTYPE

  if( rootNode->GetNodeName() != TString( "Channel" ) ){
    std::cout << "Error: In parsing a Channel XML, " 
	      << "Encounterd XML with DOCTYPE: " << rootNode->GetNodeName() 
	      << std::endl;
    std::cout << " DOCTYPE for channels must be 'Channel' "
	      << " Check that your XML is properly written" << std::endl;
    throw hf_exc();
  }

  // Now, create the channel, 
  // configure it based on the XML
  // and return it

  HistFactory::Channel channel;

  // Set the default values:
  channel.SetInputFile( "" );
  channel.SetHistoPath( "" );

  // Walk through the root node and
  // get its attributes
  TListIter attribIt = rootNode->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ) {
      std::cout << " Error: Attribute for 'Channel' with no name found" << std::endl;
      throw hf_exc();
    }

    else if( attrName == TString( "Name" ) ) {
      channel.SetName( attrVal );
      std::cout << " : creating a channel named " << channel.GetName() << std::endl;
    }

    else if( attrName == TString( "InputFile" ) ) {
      std::cout << "Setting InputFile for this channel: " << attrVal << std::endl;
      channel.SetInputFile( attrVal );
      // Set the current (cached) value
      m_currentInputFile = attrVal;        
    }

    else if( curAttr->GetName() == TString( "HistoPath" ) ) {
      std::cout << "Setting HistoPath for this channel: " << attrVal << std::endl;
      // Set the current (cached) value
      channel.SetHistoPath( attrVal );
      m_currentHistoPath = attrVal;  
    }

    else if( curAttr->GetName() == TString( "HistoName" ) ) {
      // Changed This:
      std::cout << "Use of HistoName in Channel is deprecated" << std::endl;
      std::cout << "This will be ignored" << std::endl;
    }
      
    else {
      std::cout << " Error: Unknown attribute for 'Channel' encountered: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  } // End loop over the channel tag's attributes
    
  // Check that the channel was properly initiated:
  
  if( channel.GetName() == "" ) {
    std::cout << "Error: Channel created with no name" << std::endl;
    throw hf_exc();
  }

  m_currentChannel = channel.GetName();

  // Loop over the children nodes in the XML file
  // and configure the channel based on them

  TXMLNode* node = rootNode->GetChildren();

  bool firstData=true;

  while( node != 0 ) {

    // Restore the Channel-Wide Defaults
    m_currentInputFile = channel.GetInputFile();
    m_currentHistoPath = channel.GetHistoPath();
    
    if( node->GetNodeName() == TString( "" ) ) {
      std::cout << "Error: Encountered node in Channel with no name" << std::endl;
      throw hf_exc();
    }

    else if( node->GetNodeName() == TString( "Data" ) ) {
      if( firstData ) {
	RooStats::HistFactory::Data data = CreateDataElement(node);
	if( data.GetName() != "" ) {
	  std::cout << "Error: You can only rename the datasets of additional data sets.  " 
		    << "  Remove the 'Name=" << data.GetName() << "' tag"
		    << " from channel: " << channel.GetName() << std::endl;
	  throw hf_exc();
	}
	channel.SetData( data );
	firstData=false;
      }
      else {
	channel.AddAdditionalData( CreateDataElement(node) );
      }
    }

    else if( node->GetNodeName() == TString( "StatErrorConfig" ) ) {
      channel.SetStatErrorConfig( CreateStatErrorConfigElement(node) );
    }

    else if( node->GetNodeName() == TString( "Sample" ) ) {
      channel.GetSamples().push_back( CreateSampleElement(node) );
    }

    else if( IsAcceptableNode( node ) ) { ; }

    else {
      std::cout << "Error: Encountered node in Channel with unknown name: " << node->GetNodeName() << std::endl;
      throw hf_exc();
    }

    node = node->GetNextNode();

  } // End loop over tags in this channel

  std::cout << "Created Channel: " << std::endl;
  channel.Print();

  return channel;

}



HistFactory::Data ConfigParser::CreateDataElement( TXMLNode* node ) {

  std::cout << "Creating Data Element" << std::endl;

    HistFactory::Data data;

    // Set the default values
    data.SetInputFile( m_currentInputFile );
    data.SetHistoPath( m_currentHistoPath );
    //data.HistoName = m_currentHistoName;

    // Now, set the attributes
    TListIter attribIt = node->GetAttributes();
    TXMLAttr* curAttr = 0;
    while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

      // Get the Name, Val of this node
      TString attrName    = curAttr->GetName();
      std::string attrVal = curAttr->GetValue();

      if( attrName == TString( "" ) ) {
	std::cout << " Error: Attribute for 'Data' with no name found" << std::endl;
	throw hf_exc();
      }

      else if( attrName == TString( "Name" ) ) {
	data.SetName( attrVal );
      }

      else if( attrName == TString( "InputFile" ) ) {
	data.SetInputFile( attrVal );
      }

      else if( attrName == TString( "HistoName" ) ) {
	data.SetHistoName( attrVal );
      }

      else if( attrName == TString( "HistoPath" ) ) {
	data.SetHistoPath( attrVal );
      }

    else if( IsAcceptableNode( node ) ) { ; }

      else {
	std::cout << " Error: Unknown attribute for 'Data' encountered: " << attrName << std::endl;
	throw hf_exc();
      }

    }

    // Check the properties of the data node:
    if( data.GetInputFile() == "" ) {
      std::cout << "Error: Data Node has no InputFile" << std::endl;
      throw hf_exc();
    }
    if( data.GetHistoName() == "" ) {
      std::cout << "Error: Data Node has no HistoName" << std::endl;
      throw hf_exc();
    }

    std::cout << "Created Data Node with"
	      << " InputFile: " << data.GetInputFile()
	      << " HistoName: " << data.GetHistoName()
	      << " HistoPath: " << data.GetHistoPath();
    if( data.GetName() != "") std::cout << " Name: " << data.GetName();
    std::cout  << std::endl;

    // data.hist = GetHisto(data.FileName, data.HistoPath, data.HistoName);

    return data;
}



HistFactory::StatErrorConfig ConfigParser::CreateStatErrorConfigElement( TXMLNode* node ) {

  std::cout << "Creating StatErrorConfig Element" << std::endl;
  
  HistFactory::StatErrorConfig config;

  // Setup default values:
  config.SetConstraintType( Constraint::Gaussian );
  config.SetRelErrorThreshold( 0.05 ); // 5%

  // Loop over the node's attributes
  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();
    
    if( attrName == TString( "RelErrorThreshold" ) ) {
      config.SetRelErrorThreshold( atof(attrVal.c_str()) );
    }
    
    if( attrName == TString( "ConstraintType" ) ) {
      // Allowable Values:  Gaussian

      if( attrVal == "" ) {
	std::cout << "Error: Bad Value for StatErrorConfig Constraint Type Found" << std::endl;
	throw hf_exc();
      }

      else if( attrVal=="Gaussian" || attrVal=="Gauss"  ) {  
	config.SetConstraintType( Constraint::Gaussian );
      }

      else if( attrVal=="Poisson" || attrVal=="Pois"  ) {
	config.SetConstraintType( Constraint::Poisson );
      }

      else if( IsAcceptableNode( node ) ) { ; }

      else {
	cout << "Invalid Stat Constraint Type: " << curAttr->GetValue() << endl;
	throw hf_exc();
      }
    }
  } // End: Loop Over Attributes

  std::cout << "Created StatErrorConfig Element with" 
	    << " Constraint type: " << config.GetConstraintType()
	    << " RelError Threshold: " << config.GetRelErrorThreshold()
	    << std::endl;

  return config;

}


HistFactory::Sample ConfigParser::CreateSampleElement( TXMLNode* node ) {

  std::cout << "Creating Sample Element" << std::endl;

  HistFactory::Sample sample;

  // Set the default values
  sample.SetInputFile( m_currentInputFile );
  sample.SetHistoPath( m_currentHistoPath );
  sample.SetChannelName( m_currentChannel );
  sample.SetNormalizeByTheory( true );
  //sample.HistoName = m_currentHistoName;

  // Now, set the attributes

  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ) {
      std::cout << " Error: Attribute for 'Sample' with no name found" << std::endl;
      throw hf_exc();
    }

    else if( attrName == TString( "Name" ) ) {
      sample.SetName( attrVal );
    }

    else if( attrName == TString( "InputFile" ) ) {
      sample.SetInputFile( attrVal );
      m_currentInputFile = attrVal;
    }

    else if( attrName == TString( "HistoName" ) ) {
      sample.SetHistoName( attrVal );
    }

    else if( attrName == TString( "HistoPath" ) ) {
      sample.SetHistoPath( attrVal );
      m_currentHistoPath = attrVal;
    }

    else if( attrName == TString( "NormalizeByTheory" ) ) {
      sample.SetNormalizeByTheory( CheckTrueFalse(attrVal,"Sample") );
      /*
	if( attrVal == "" ) {
	std::cout << "Error: Attribute 'NormalizeByTheory' in Sample has no value" << std::endl;
	throw hf_exc();
	}
	else if ( attrVal == "True"  || attrVal == "true"  )   sample.NormalizeByTheory = true;
	else if ( attrVal == "False" || attrVal == "false" )   sample.NormalizeByTheory = false;
	else {
	std::cout << "Error: Attribute 'NormalizeByTheory' in Sample has unknown value: " << attrVal <<  std::endl;
	std::cout << "Value must be 'True' or 'False' " <<  std::endl;
	throw hf_exc();
	}
      */
    }

    else {
      std::cout << " Error: Unknown attribute for 'Sample' encountered: " << attrName << std::endl;
      throw hf_exc();
    }
  }

  // Quickly check the properties of the Sample Node
  if( sample.GetName() == "" ) {
    std::cout << "Error: Sample Node has no Name" << std::endl;
    throw hf_exc();
  }
  if( sample.GetInputFile() == "" ) {
    std::cout << "Error: Sample Node has no InputFile" << std::endl;
    throw hf_exc();
  }
  if( sample.GetHistoName() == "" ) {
    std::cout << "Error: Sample Node has no HistoName" << std::endl;
    throw hf_exc();
  }


  // Now, loop over the children and add the systematics

  TXMLNode* child = node->GetChildren();

  while( child != 0 ) {
      
    if( child->GetNodeName() == TString( "" ) ) {
      std::cout << "Error: Encountered node in Sample with no name" << std::endl;
      throw hf_exc();
    }

    else if( child->GetNodeName() == TString( "NormFactor" ) ) {
      sample.GetNormFactorList().push_back( MakeNormFactor( child ) );
    }

    else if( child->GetNodeName() == TString( "OverallSys" ) ) {
      sample.GetOverallSysList().push_back( MakeOverallSys( child ) );
    }

    else if( child->GetNodeName() == TString( "HistoSys" ) ) {
      sample.GetHistoSysList().push_back( MakeHistoSys( child ) );
    }

    else if( child->GetNodeName() == TString( "HistoFactor" ) ) {
      std::cout << "WARNING: HistoFactor not yet supported" << std::endl;
      //sample.GetHistoFactorList().push_back( MakeHistoFactor( child ) );
    }

    else if( child->GetNodeName() == TString( "ShapeSys" ) ) {
      sample.GetShapeSysList().push_back( MakeShapeSys( child ) );
    }

    else if( child->GetNodeName() == TString( "ShapeFactor" ) ) {
      sample.GetShapeFactorList().push_back( MakeShapeFactor( child ) );
    }

    else if( child->GetNodeName() == TString( "StatError" ) ) {
      sample.SetStatError( ActivateStatError(child) );
    }

    else if( IsAcceptableNode( child ) ) { ; }

    else {
      std::cout << "Error: Encountered node in Sample with unknown name: " << child->GetNodeName() << std::endl;
      throw hf_exc();
    }

    child=child->GetNextNode();
  }

  std::cout << "Created Sample Node with"
	    << " Name: " << sample.GetName()
	    << " InputFile: " << sample.GetInputFile()
	    << " HistoName: " << sample.GetHistoName()
	    << " HistoPath: " << sample.GetHistoPath()
	    << std::endl;

  // sample.hist = GetHisto(sample.FileName, sample.HistoPath, sample.HistoName);

  return sample;
}


HistFactory::NormFactor ConfigParser::MakeNormFactor( TXMLNode* node ) {

  std::cout << "Making NormFactor:" << std::endl;
  
  HistFactory::NormFactor norm;

  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ){
      std::cout << "Error: Encountered Element in NormFactor with no name" << std::endl;
      throw hf_exc();
    }

    else if( curAttr->GetName() == TString( "Name" ) ) {
      norm.SetName( attrVal );
    }
    else if( curAttr->GetName() == TString( "Val" ) ) {
      norm.SetVal( atof(attrVal.c_str()) );
    }
    else if( curAttr->GetName() == TString( "Low" ) ) {
      norm.SetLow( atof(attrVal.c_str()) );
    }
    else if( curAttr->GetName() == TString( "High" ) ) {
      norm.SetHigh( atof(attrVal.c_str()) );
    }
    else if( curAttr->GetName() == TString( "Const" ) ) {
      norm.SetConst( CheckTrueFalse(attrVal,"NormFactor") );
    }

    else {
      std::cout << "Error: Encountered Element in NormFactor with unknown name: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  } // End loop over properties

  if( norm.GetName() == "" ) {
    std::cout << "Error: NormFactor Node has no Name" << std::endl;
    throw hf_exc();
  }

  if( norm.GetLow() >= norm.GetHigh() ) {
    std::cout << "Error: NormFactor: " << norm.GetName()
	      << " has lower limit >= its upper limit: " 
	      << " Lower: " << norm.GetLow()
	      << " Upper: " << norm.GetHigh()
	      << ". Please Fix" << std::endl;
    throw hf_exc();
  }
  if( norm.GetVal() > norm.GetHigh() || norm.GetVal() < norm.GetLow() ) {
    std::cout << "Error: NormFactor: " << norm.GetName()
	      << " has initial value not within its range: "
	      << " Val: " << norm.GetVal()
	      << " Lower: " << norm.GetLow()
	      << " Upper: " << norm.GetHigh()
	      << ". Please Fix" << std::endl;
    throw hf_exc();
  }

  norm.Print();

  return norm;

}

HistFactory::HistoFactor ConfigParser::MakeHistoFactor( TXMLNode* /*node*/ ) {

  std::cout << "Making HistoFactor" << std::endl;

  HistFactory::HistoFactor dummy;

  dummy.SetInputFileLow( m_currentInputFile );
  dummy.SetHistoPathLow( m_currentHistoPath );

  dummy.SetInputFileHigh( m_currentInputFile );
  dummy.SetHistoPathHigh( m_currentHistoPath );

  std::cout << "Made HistoFactor" << std::endl;

  return dummy;

}


HistFactory::HistoSys ConfigParser::MakeHistoSys( TXMLNode* node ) {

  std::cout << "Making HistoSys:" << std::endl;

  HistFactory::HistoSys histoSys;

  // Set Default values
  histoSys.SetInputFileLow( m_currentInputFile );
  histoSys.SetHistoPathLow( m_currentHistoPath );

  histoSys.SetInputFileHigh( m_currentInputFile );
  histoSys.SetHistoPathHigh( m_currentHistoPath );

  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  /*
  string Name, histoPathHigh, histoPathLow, 
    histoNameLow, histoNameHigh, inputFileHigh, inputFileLow;
  inputFileLow=inputFileName; inputFileHigh=inputFileName;
  histoPathLow=histoPathName; histoPathHigh=histoPathName;
  histoNameLow=histoName; histoNameHigh=histoName;
  */

  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();
	
    if( attrName == TString( "" ) ){
      std::cout << "Error: Encountered Element in HistoSys with no name" << std::endl;
      throw hf_exc();
    }

    else if( curAttr->GetName() == TString( "Name" ) ) {
      histoSys.SetName( attrVal );
    }

    else if( curAttr->GetName() == TString( "HistoFileHigh" ) ) {
      histoSys.SetInputFileHigh( attrVal );
    }
    else if( curAttr->GetName() == TString( "HistoPathHigh" ) ) {
      histoSys.SetHistoPathHigh( attrVal );
    }
    else if( curAttr->GetName() == TString( "HistoNameHigh" ) ) {
      histoSys.SetHistoNameHigh( attrVal );
    }

    else if( curAttr->GetName() == TString( "HistoFileLow" ) ) {
      histoSys.SetInputFileLow( attrVal );
    }
    else if( curAttr->GetName() == TString( "HistoPathLow" ) ) {
      histoSys.SetHistoPathLow( attrVal );
    }
    else if( curAttr->GetName() == TString( "HistoNameLow" ) ) {
      histoSys.SetHistoNameLow( attrVal );
    }

    else {
      std::cout << "Error: Encountered Element in HistoSys with unknown name: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  } // End loop over properties


  if( histoSys.GetName() == "" ) {
    std::cout << "Error: HistoSys Node has no Name" << std::endl;
    throw hf_exc();
  }
  if( histoSys.GetInputFileHigh() == "" ) {
    std::cout << "Error: HistoSysSample Node has no InputFileHigh" << std::endl;
    throw hf_exc();
  }
  if( histoSys.GetInputFileLow() == "" ) {
    std::cout << "Error: HistoSysSample Node has no InputFileLow" << std::endl;
    throw hf_exc();
  }
  if( histoSys.GetHistoNameHigh() == "" ) {
    std::cout << "Error: HistoSysSample Node has no HistoNameHigh" << std::endl;
    throw hf_exc();
  }
  if( histoSys.GetHistoNameLow() == "" ) {
    std::cout << "Error: HistoSysSample Node has no HistoNameLow" << std::endl;
    throw hf_exc();
  }


  histoSys.Print();

  return histoSys;

}


HistFactory::OverallSys ConfigParser::MakeOverallSys( TXMLNode* node ) {

  std::cout << "Making OverallSys:" << std::endl;

  HistFactory::OverallSys overallSys;

  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ){
      std::cout << "Error: Encountered Element in OverallSys with no name" << std::endl;
      throw hf_exc();
    }

    else if( attrName == TString( "Name" ) ) {
      overallSys.SetName( attrVal );
    }
    else if( attrName == TString( "High" ) ) {
      overallSys.SetHigh( atof(attrVal.c_str()) );
    }
    else if( attrName == TString( "Low" ) ) {
      overallSys.SetLow( atof(attrVal.c_str()) );
    }

    else {
      std::cout << "Error: Encountered Element in OverallSys with unknown name: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  }

  if( overallSys.GetName() == "" ) {
    std::cout << "Error: Encountered OverallSys with no name" << std::endl;
    throw hf_exc();
  }
  

  overallSys.Print();

  return overallSys;

}


HistFactory::ShapeFactor ConfigParser::MakeShapeFactor( TXMLNode* node ) {

  std::cout << "Making ShapeFactor" << std::endl;

  HistFactory::ShapeFactor shapeFactor;

  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;

  // A Shape Factor may or may not include an initial shape
  // This will be set by strings pointing to a histogram
  // If we don't see a 'HistoName' attribute, we assume
  // that an initial shape is not being set
  std::string ShapeInputFile = m_currentInputFile;
  std::string ShapeInputPath = m_currentHistoPath;

  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ){
      std::cout << "Error: Encountered Element in ShapeFactor with no name" << std::endl;
      throw hf_exc();
    }

    else if( attrName == TString( "Name" ) ) {
      shapeFactor.SetName( attrVal );
    }
    else if( attrName == TString( "Const" ) ) {
      shapeFactor.SetConstant( CheckTrueFalse(attrVal, "ShapeFactor" ) );
    }
    
    else if( attrName == TString( "HistoName" ) ) {
      shapeFactor.SetHistoName( attrVal );
    }
    
    else if( attrName == TString( "InputFile" ) ) {
      ShapeInputFile = attrVal;
    }
    
    else if( attrName == TString( "HistoPath" ) ) {
      ShapeInputPath = attrVal;
    }

    else {
      std::cout << "Error: Encountered Element in ShapeFactor with unknown name: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  }

  if( shapeFactor.GetName() == "" ) {
    std::cout << "Error: Encountered ShapeFactor with no name" << std::endl;
    throw hf_exc();
  }

  // Set the Histogram name, path, and file
  // if an InitialHist is set
  if( shapeFactor.HasInitialShape() ) {
    if( shapeFactor.GetHistoName() == "" ) {
      std::cout << "Error: ShapeFactor: " << shapeFactor.GetName()
		<< " is configured to have an initial shape, but "
		<< "its histogram doesn't have a name"
		<< std::endl;
      throw hf_exc();
    }
    shapeFactor.SetHistoPath( ShapeInputPath );
    shapeFactor.SetInputFile( ShapeInputFile );
  }
  
  shapeFactor.Print();

  return shapeFactor;

}


HistFactory::ShapeSys ConfigParser::MakeShapeSys( TXMLNode* node ) {

  std::cout << "Making ShapeSys" << std::endl;

  HistFactory::ShapeSys shapeSys;

  // Set the default values
  shapeSys.SetConstraintType( Constraint::Gaussian );
  shapeSys.SetInputFile( m_currentInputFile );
  shapeSys.SetHistoPath( m_currentHistoPath );


  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  //EstimateSummary::ConstraintType ConstraintType = EstimateSummary::Gaussian; //"Gaussian";

  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {


    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ){
      std::cout << "Error: Encountered Element in ShapeSys with no name" << std::endl;
      throw hf_exc();
    }

    else if( attrName == TString( "Name" ) ) {
      shapeSys.SetName( attrVal );
    }

    else if( attrName == TString( "HistoName" ) ) {
      shapeSys.SetHistoName( attrVal );
    }

    else if( attrName == TString( "HistoPath" ) ) {
      shapeSys.SetHistoPath( attrVal );
    }

    else if( attrName == TString( "InputFile" ) ) {
      shapeSys.SetInputFile( attrVal );
    }

    else if( attrName == TString( "ConstraintType" ) ) {
      if( attrVal=="" ) {
	std::cout << "Error: ShapeSys Constraint type is empty" << std::endl;
	throw hf_exc();
      }
      else if( attrVal=="Gaussian" || attrVal=="Gauss" ) {
	shapeSys.SetConstraintType( Constraint::Gaussian );
      }
      else if( attrVal=="Poisson"  || attrVal=="Pois"  ) {
	shapeSys.SetConstraintType( Constraint::Poisson );
      }
      else {
	cout << "Error: Encountered unknown ShapeSys Constraint type: " << attrVal << endl;
	throw hf_exc();
      }
    }

    else {
      std::cout << "Error: Encountered Element in ShapeSys with unknown name: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  } // End loop over attributes


  if( shapeSys.GetName() == "" ) {
    std::cout << "Error: Encountered ShapeSys with no Name" << std::endl;
    throw hf_exc();
  }
  if( shapeSys.GetInputFile() == "" ) {
    std::cout << "Error: Encountered ShapeSys with no InputFile" << std::endl;
    throw hf_exc();
  }
  if( shapeSys.GetHistoName() == "" ) {
    std::cout << "Error: Encountered ShapeSys with no HistoName" << std::endl;
    throw hf_exc();
  }

  shapeSys.Print();

  return shapeSys;

}


HistFactory::StatError ConfigParser::ActivateStatError( TXMLNode* node ) {
	
  std::cout << "Activating StatError" << std::endl;

  // Set default values
  HistFactory::StatError statError;
  statError.Activate( false );
  statError.SetUseHisto( false );
  statError.SetHistoName( "" );

  // Loop over the node's attributes
  TListIter attribIt = node->GetAttributes();
  TXMLAttr* curAttr = 0;
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {

    // Get the Name, Val of this node
    TString attrName    = curAttr->GetName();
    std::string attrVal = curAttr->GetValue();

    if( attrName == TString( "" ) ){
      std::cout << "Error: Encountered Element in ActivateStatError with no name" << std::endl;
      throw hf_exc();
    }
    
    else if( attrName == TString( "Activate" ) ) {
      statError.Activate( CheckTrueFalse(attrVal,"ActivateStatError") );
    }

    else if( attrName == TString( "HistoName" ) ) {
      statError.SetHistoName( attrVal );
    }

    else if( attrName == TString( "HistoPath" ) ) {
      statError.SetHistoPath( attrVal );
    }

    else if( attrName == TString( "InputFile" ) ) {
      statError.SetInputFile( attrVal );
    }
    
    else {
      std::cout << "Error: Encountered Element in ActivateStatError with unknown name: " 
		<< attrName << std::endl;
      throw hf_exc();
    }

  } // End: Loop Over Attributes

  // Based on the input, determine
  // if we should use a histogram or not:
  // Logic: One turns on using a histogram
  // by setting the attribute "HistoName"
  // If this is set AND the InputFile or
  // HistoPath aren't set, we set those
  // to the current default values
  if( statError.GetHistoName() != "" ) {
    statError.SetUseHisto( true );

    // Check that a file has been set
    // (Possibly using the default)
    if( statError.GetInputFile() == "" ) {
      statError.SetInputFile( m_currentInputFile );
    }
    if( statError.GetHistoPath() == "" ) {
      statError.SetHistoPath( m_currentHistoPath );
    }

  }

  /*
  if( statError.Activate ) {
    if( statError.UseHisto ) {
    }
    else {
      statError.InputFile = "";
      statError.HistoName = "";
      statError.HistoPath = "";
    }
    }
  */

  statError.Print();

  return statError;

}


RooStats::HistFactory::PreprocessFunction ConfigParser::ParseFunctionConfig( TXMLNode* functionNode ){

  std::cout << "Parsing FunctionConfig" << std::endl;

  //std::string name, expression, dependents;
  TListIter attribIt = functionNode->GetAttributes();
  TXMLAttr* curAttr = 0;

  std::string Name = "";
  std::string Expression = "";
  std::string Dependents = "";

  // Add protection to ensure that all parts are there
  while( ( curAttr = dynamic_cast< TXMLAttr* >( attribIt() ) ) != 0 ) {
    if( curAttr->GetName() == TString( "Name" ) ) {
      Name = curAttr->GetValue();
      //func.SetName( curAttr->GetValue() );
      //name = curAttr->GetValue() ;
    }
    if( curAttr->GetName() == TString( "Expression" ) ) {
      Expression = curAttr->GetValue();
      //func.SetExpression( curAttr->GetValue() );
    }
    if( curAttr->GetName() == TString( "Dependents" ) ) {
      Dependents = curAttr->GetValue();
      //func.SetDependents( curAttr->GetValue() );
    }    
  }
  
  if( Name=="" ){
    std::cout << "Error processing PreprocessFunction: Name attribute is empty" << std::endl;
    throw hf_exc();
  }
  if( Expression=="" ){
    std::cout << "Error processing PreprocessFunction: Expression attribute is empty" << std::endl;
    throw hf_exc();
  }
  if( Dependents=="" ){
    std::cout << "Error processing PreprocessFunction: Dependents attribute is empty" << std::endl;
    throw hf_exc();
  }

  RooStats::HistFactory::PreprocessFunction func(Name, Expression, Dependents);
  
  std::cout << "Created Preprocess Function: " << func.GetCommand() << std::endl;

  //std::string command = "expr::"+func.GetName()+"('"+func.GetExpression()+"',{"+func.GetDependents()+"})";
  //func.SetCommand( command );
  // //  cout << "will pre-process this line " << ret <<endl;
  return func;

}


bool ConfigParser::IsAcceptableNode( TXMLNode* node ) {

  if( node->GetNodeName() == TString( "text" ) ) {    
    return true;
  }

  if( node->GetNodeName() == TString( "comment" ) ) {
    return true;
  }

  return false;

}


bool ConfigParser::CheckTrueFalse( std::string attrVal, std::string NodeTitle ) {

  if( attrVal == "" ) {
    std::cout << "Error: In " << NodeTitle
	      << " Expected either 'True' or 'False' but found empty" << std::endl;
    throw hf_exc();
  }
  else if ( attrVal == "True"  || attrVal == "true"  )   return true;
  else if ( attrVal == "False" || attrVal == "false" )   return false;
  else {
    std::cout << "Error: In " << NodeTitle
	      << " Expected either 'True' or 'False' but found: " << attrVal <<  std::endl;
    throw hf_exc();
  }

  return false;
  
}

//ConfigParser
 ConfigParser.cxx:1
 ConfigParser.cxx:2
 ConfigParser.cxx:3
 ConfigParser.cxx:4
 ConfigParser.cxx:5
 ConfigParser.cxx:6
 ConfigParser.cxx:7
 ConfigParser.cxx:8
 ConfigParser.cxx:9
 ConfigParser.cxx:10
 ConfigParser.cxx:11
 ConfigParser.cxx:12
 ConfigParser.cxx:13
 ConfigParser.cxx:14
 ConfigParser.cxx:15
 ConfigParser.cxx:16
 ConfigParser.cxx:17
 ConfigParser.cxx:18
 ConfigParser.cxx:19
 ConfigParser.cxx:20
 ConfigParser.cxx:21
 ConfigParser.cxx:22
 ConfigParser.cxx:23
 ConfigParser.cxx:24
 ConfigParser.cxx:25
 ConfigParser.cxx:26
 ConfigParser.cxx:27
 ConfigParser.cxx:28
 ConfigParser.cxx:29
 ConfigParser.cxx:30
 ConfigParser.cxx:31
 ConfigParser.cxx:32
 ConfigParser.cxx:33
 ConfigParser.cxx:34
 ConfigParser.cxx:35
 ConfigParser.cxx:36
 ConfigParser.cxx:37
 ConfigParser.cxx:38
 ConfigParser.cxx:39
 ConfigParser.cxx:40
 ConfigParser.cxx:41
 ConfigParser.cxx:42
 ConfigParser.cxx:43
 ConfigParser.cxx:44
 ConfigParser.cxx:45
 ConfigParser.cxx:46
 ConfigParser.cxx:47
 ConfigParser.cxx:48
 ConfigParser.cxx:49
 ConfigParser.cxx:50
 ConfigParser.cxx:51
 ConfigParser.cxx:52
 ConfigParser.cxx:53
 ConfigParser.cxx:54
 ConfigParser.cxx:55
 ConfigParser.cxx:56
 ConfigParser.cxx:57
 ConfigParser.cxx:58
 ConfigParser.cxx:59
 ConfigParser.cxx:60
 ConfigParser.cxx:61
 ConfigParser.cxx:62
 ConfigParser.cxx:63
 ConfigParser.cxx:64
 ConfigParser.cxx:65
 ConfigParser.cxx:66
 ConfigParser.cxx:67
 ConfigParser.cxx:68
 ConfigParser.cxx:69
 ConfigParser.cxx:70
 ConfigParser.cxx:71
 ConfigParser.cxx:72
 ConfigParser.cxx:73
 ConfigParser.cxx:74
 ConfigParser.cxx:75
 ConfigParser.cxx:76
 ConfigParser.cxx:77
 ConfigParser.cxx:78
 ConfigParser.cxx:79
 ConfigParser.cxx:80
 ConfigParser.cxx:81
 ConfigParser.cxx:82
 ConfigParser.cxx:83
 ConfigParser.cxx:84
 ConfigParser.cxx:85
 ConfigParser.cxx:86
 ConfigParser.cxx:87
 ConfigParser.cxx:88
 ConfigParser.cxx:89
 ConfigParser.cxx:90
 ConfigParser.cxx:91
 ConfigParser.cxx:92
 ConfigParser.cxx:93
 ConfigParser.cxx:94
 ConfigParser.cxx:95
 ConfigParser.cxx:96
 ConfigParser.cxx:97
 ConfigParser.cxx:98
 ConfigParser.cxx:99
 ConfigParser.cxx:100
 ConfigParser.cxx:101
 ConfigParser.cxx:102
 ConfigParser.cxx:103
 ConfigParser.cxx:104
 ConfigParser.cxx:105
 ConfigParser.cxx:106
 ConfigParser.cxx:107
 ConfigParser.cxx:108
 ConfigParser.cxx:109
 ConfigParser.cxx:110
 ConfigParser.cxx:111
 ConfigParser.cxx:112
 ConfigParser.cxx:113
 ConfigParser.cxx:114
 ConfigParser.cxx:115
 ConfigParser.cxx:116
 ConfigParser.cxx:117
 ConfigParser.cxx:118
 ConfigParser.cxx:119
 ConfigParser.cxx:120
 ConfigParser.cxx:121
 ConfigParser.cxx:122
 ConfigParser.cxx:123
 ConfigParser.cxx:124
 ConfigParser.cxx:125
 ConfigParser.cxx:126
 ConfigParser.cxx:127
 ConfigParser.cxx:128
 ConfigParser.cxx:129
 ConfigParser.cxx:130
 ConfigParser.cxx:131
 ConfigParser.cxx:132
 ConfigParser.cxx:133
 ConfigParser.cxx:134
 ConfigParser.cxx:135
 ConfigParser.cxx:136
 ConfigParser.cxx:137
 ConfigParser.cxx:138
 ConfigParser.cxx:139
 ConfigParser.cxx:140
 ConfigParser.cxx:141
 ConfigParser.cxx:142
 ConfigParser.cxx:143
 ConfigParser.cxx:144
 ConfigParser.cxx:145
 ConfigParser.cxx:146
 ConfigParser.cxx:147
 ConfigParser.cxx:148
 ConfigParser.cxx:149
 ConfigParser.cxx:150
 ConfigParser.cxx:151
 ConfigParser.cxx:152
 ConfigParser.cxx:153
 ConfigParser.cxx:154
 ConfigParser.cxx:155
 ConfigParser.cxx:156
 ConfigParser.cxx:157
 ConfigParser.cxx:158
 ConfigParser.cxx:159
 ConfigParser.cxx:160
 ConfigParser.cxx:161
 ConfigParser.cxx:162
 ConfigParser.cxx:163
 ConfigParser.cxx:164
 ConfigParser.cxx:165
 ConfigParser.cxx:166
 ConfigParser.cxx:167
 ConfigParser.cxx:168
 ConfigParser.cxx:169
 ConfigParser.cxx:170
 ConfigParser.cxx:171
 ConfigParser.cxx:172
 ConfigParser.cxx:173
 ConfigParser.cxx:174
 ConfigParser.cxx:175
 ConfigParser.cxx:176
 ConfigParser.cxx:177
 ConfigParser.cxx:178
 ConfigParser.cxx:179
 ConfigParser.cxx:180
 ConfigParser.cxx:181
 ConfigParser.cxx:182
 ConfigParser.cxx:183
 ConfigParser.cxx:184
 ConfigParser.cxx:185
 ConfigParser.cxx:186
 ConfigParser.cxx:187
 ConfigParser.cxx:188
 ConfigParser.cxx:189
 ConfigParser.cxx:190
 ConfigParser.cxx:191
 ConfigParser.cxx:192
 ConfigParser.cxx:193
 ConfigParser.cxx:194
 ConfigParser.cxx:195
 ConfigParser.cxx:196
 ConfigParser.cxx:197
 ConfigParser.cxx:198
 ConfigParser.cxx:199
 ConfigParser.cxx:200
 ConfigParser.cxx:201
 ConfigParser.cxx:202
 ConfigParser.cxx:203
 ConfigParser.cxx:204
 ConfigParser.cxx:205
 ConfigParser.cxx:206
 ConfigParser.cxx:207
 ConfigParser.cxx:208
 ConfigParser.cxx:209
 ConfigParser.cxx:210
 ConfigParser.cxx:211
 ConfigParser.cxx:212
 ConfigParser.cxx:213
 ConfigParser.cxx:214
 ConfigParser.cxx:215
 ConfigParser.cxx:216
 ConfigParser.cxx:217
 ConfigParser.cxx:218
 ConfigParser.cxx:219
 ConfigParser.cxx:220
 ConfigParser.cxx:221
 ConfigParser.cxx:222
 ConfigParser.cxx:223
 ConfigParser.cxx:224
 ConfigParser.cxx:225
 ConfigParser.cxx:226
 ConfigParser.cxx:227
 ConfigParser.cxx:228
 ConfigParser.cxx:229
 ConfigParser.cxx:230
 ConfigParser.cxx:231
 ConfigParser.cxx:232
 ConfigParser.cxx:233
 ConfigParser.cxx:234
 ConfigParser.cxx:235
 ConfigParser.cxx:236
 ConfigParser.cxx:237
 ConfigParser.cxx:238
 ConfigParser.cxx:239
 ConfigParser.cxx:240
 ConfigParser.cxx:241
 ConfigParser.cxx:242
 ConfigParser.cxx:243
 ConfigParser.cxx:244
 ConfigParser.cxx:245
 ConfigParser.cxx:246
 ConfigParser.cxx:247
 ConfigParser.cxx:248
 ConfigParser.cxx:249
 ConfigParser.cxx:250
 ConfigParser.cxx:251
 ConfigParser.cxx:252
 ConfigParser.cxx:253
 ConfigParser.cxx:254
 ConfigParser.cxx:255
 ConfigParser.cxx:256
 ConfigParser.cxx:257
 ConfigParser.cxx:258
 ConfigParser.cxx:259
 ConfigParser.cxx:260
 ConfigParser.cxx:261
 ConfigParser.cxx:262
 ConfigParser.cxx:263
 ConfigParser.cxx:264
 ConfigParser.cxx:265
 ConfigParser.cxx:266
 ConfigParser.cxx:267
 ConfigParser.cxx:268
 ConfigParser.cxx:269
 ConfigParser.cxx:270
 ConfigParser.cxx:271
 ConfigParser.cxx:272
 ConfigParser.cxx:273
 ConfigParser.cxx:274
 ConfigParser.cxx:275
 ConfigParser.cxx:276
 ConfigParser.cxx:277
 ConfigParser.cxx:278
 ConfigParser.cxx:279
 ConfigParser.cxx:280
 ConfigParser.cxx:281
 ConfigParser.cxx:282
 ConfigParser.cxx:283
 ConfigParser.cxx:284
 ConfigParser.cxx:285
 ConfigParser.cxx:286
 ConfigParser.cxx:287
 ConfigParser.cxx:288
 ConfigParser.cxx:289
 ConfigParser.cxx:290
 ConfigParser.cxx:291
 ConfigParser.cxx:292
 ConfigParser.cxx:293
 ConfigParser.cxx:294
 ConfigParser.cxx:295
 ConfigParser.cxx:296
 ConfigParser.cxx:297
 ConfigParser.cxx:298
 ConfigParser.cxx:299
 ConfigParser.cxx:300
 ConfigParser.cxx:301
 ConfigParser.cxx:302
 ConfigParser.cxx:303
 ConfigParser.cxx:304
 ConfigParser.cxx:305
 ConfigParser.cxx:306
 ConfigParser.cxx:307
 ConfigParser.cxx:308
 ConfigParser.cxx:309
 ConfigParser.cxx:310
 ConfigParser.cxx:311
 ConfigParser.cxx:312
 ConfigParser.cxx:313
 ConfigParser.cxx:314
 ConfigParser.cxx:315
 ConfigParser.cxx:316
 ConfigParser.cxx:317
 ConfigParser.cxx:318
 ConfigParser.cxx:319
 ConfigParser.cxx:320
 ConfigParser.cxx:321
 ConfigParser.cxx:322
 ConfigParser.cxx:323
 ConfigParser.cxx:324
 ConfigParser.cxx:325
 ConfigParser.cxx:326
 ConfigParser.cxx:327
 ConfigParser.cxx:328
 ConfigParser.cxx:329
 ConfigParser.cxx:330
 ConfigParser.cxx:331
 ConfigParser.cxx:332
 ConfigParser.cxx:333
 ConfigParser.cxx:334
 ConfigParser.cxx:335
 ConfigParser.cxx:336
 ConfigParser.cxx:337
 ConfigParser.cxx:338
 ConfigParser.cxx:339
 ConfigParser.cxx:340
 ConfigParser.cxx:341
 ConfigParser.cxx:342
 ConfigParser.cxx:343
 ConfigParser.cxx:344
 ConfigParser.cxx:345
 ConfigParser.cxx:346
 ConfigParser.cxx:347
 ConfigParser.cxx:348
 ConfigParser.cxx:349
 ConfigParser.cxx:350
 ConfigParser.cxx:351
 ConfigParser.cxx:352
 ConfigParser.cxx:353
 ConfigParser.cxx:354
 ConfigParser.cxx:355
 ConfigParser.cxx:356
 ConfigParser.cxx:357
 ConfigParser.cxx:358
 ConfigParser.cxx:359
 ConfigParser.cxx:360
 ConfigParser.cxx:361
 ConfigParser.cxx:362
 ConfigParser.cxx:363
 ConfigParser.cxx:364
 ConfigParser.cxx:365
 ConfigParser.cxx:366
 ConfigParser.cxx:367
 ConfigParser.cxx:368
 ConfigParser.cxx:369
 ConfigParser.cxx:370
 ConfigParser.cxx:371
 ConfigParser.cxx:372
 ConfigParser.cxx:373
 ConfigParser.cxx:374
 ConfigParser.cxx:375
 ConfigParser.cxx:376
 ConfigParser.cxx:377
 ConfigParser.cxx:378
 ConfigParser.cxx:379
 ConfigParser.cxx:380
 ConfigParser.cxx:381
 ConfigParser.cxx:382
 ConfigParser.cxx:383
 ConfigParser.cxx:384
 ConfigParser.cxx:385
 ConfigParser.cxx:386
 ConfigParser.cxx:387
 ConfigParser.cxx:388
 ConfigParser.cxx:389
 ConfigParser.cxx:390
 ConfigParser.cxx:391
 ConfigParser.cxx:392
 ConfigParser.cxx:393
 ConfigParser.cxx:394
 ConfigParser.cxx:395
 ConfigParser.cxx:396
 ConfigParser.cxx:397
 ConfigParser.cxx:398
 ConfigParser.cxx:399
 ConfigParser.cxx:400
 ConfigParser.cxx:401
 ConfigParser.cxx:402
 ConfigParser.cxx:403
 ConfigParser.cxx:404
 ConfigParser.cxx:405
 ConfigParser.cxx:406
 ConfigParser.cxx:407
 ConfigParser.cxx:408
 ConfigParser.cxx:409
 ConfigParser.cxx:410
 ConfigParser.cxx:411
 ConfigParser.cxx:412
 ConfigParser.cxx:413
 ConfigParser.cxx:414
 ConfigParser.cxx:415
 ConfigParser.cxx:416
 ConfigParser.cxx:417
 ConfigParser.cxx:418
 ConfigParser.cxx:419
 ConfigParser.cxx:420
 ConfigParser.cxx:421
 ConfigParser.cxx:422
 ConfigParser.cxx:423
 ConfigParser.cxx:424
 ConfigParser.cxx:425
 ConfigParser.cxx:426
 ConfigParser.cxx:427
 ConfigParser.cxx:428
 ConfigParser.cxx:429
 ConfigParser.cxx:430
 ConfigParser.cxx:431
 ConfigParser.cxx:432
 ConfigParser.cxx:433
 ConfigParser.cxx:434
 ConfigParser.cxx:435
 ConfigParser.cxx:436
 ConfigParser.cxx:437
 ConfigParser.cxx:438
 ConfigParser.cxx:439
 ConfigParser.cxx:440
 ConfigParser.cxx:441
 ConfigParser.cxx:442
 ConfigParser.cxx:443
 ConfigParser.cxx:444
 ConfigParser.cxx:445
 ConfigParser.cxx:446
 ConfigParser.cxx:447
 ConfigParser.cxx:448
 ConfigParser.cxx:449
 ConfigParser.cxx:450
 ConfigParser.cxx:451
 ConfigParser.cxx:452
 ConfigParser.cxx:453
 ConfigParser.cxx:454
 ConfigParser.cxx:455
 ConfigParser.cxx:456
 ConfigParser.cxx:457
 ConfigParser.cxx:458
 ConfigParser.cxx:459
 ConfigParser.cxx:460
 ConfigParser.cxx:461
 ConfigParser.cxx:462
 ConfigParser.cxx:463
 ConfigParser.cxx:464
 ConfigParser.cxx:465
 ConfigParser.cxx:466
 ConfigParser.cxx:467
 ConfigParser.cxx:468
 ConfigParser.cxx:469
 ConfigParser.cxx:470
 ConfigParser.cxx:471
 ConfigParser.cxx:472
 ConfigParser.cxx:473
 ConfigParser.cxx:474
 ConfigParser.cxx:475
 ConfigParser.cxx:476
 ConfigParser.cxx:477
 ConfigParser.cxx:478
 ConfigParser.cxx:479
 ConfigParser.cxx:480
 ConfigParser.cxx:481
 ConfigParser.cxx:482
 ConfigParser.cxx:483
 ConfigParser.cxx:484
 ConfigParser.cxx:485
 ConfigParser.cxx:486
 ConfigParser.cxx:487
 ConfigParser.cxx:488
 ConfigParser.cxx:489
 ConfigParser.cxx:490
 ConfigParser.cxx:491
 ConfigParser.cxx:492
 ConfigParser.cxx:493
 ConfigParser.cxx:494
 ConfigParser.cxx:495
 ConfigParser.cxx:496
 ConfigParser.cxx:497
 ConfigParser.cxx:498
 ConfigParser.cxx:499
 ConfigParser.cxx:500
 ConfigParser.cxx:501
 ConfigParser.cxx:502
 ConfigParser.cxx:503
 ConfigParser.cxx:504
 ConfigParser.cxx:505
 ConfigParser.cxx:506
 ConfigParser.cxx:507
 ConfigParser.cxx:508
 ConfigParser.cxx:509
 ConfigParser.cxx:510
 ConfigParser.cxx:511
 ConfigParser.cxx:512
 ConfigParser.cxx:513
 ConfigParser.cxx:514
 ConfigParser.cxx:515
 ConfigParser.cxx:516
 ConfigParser.cxx:517
 ConfigParser.cxx:518
 ConfigParser.cxx:519
 ConfigParser.cxx:520
 ConfigParser.cxx:521
 ConfigParser.cxx:522
 ConfigParser.cxx:523
 ConfigParser.cxx:524
 ConfigParser.cxx:525
 ConfigParser.cxx:526
 ConfigParser.cxx:527
 ConfigParser.cxx:528
 ConfigParser.cxx:529
 ConfigParser.cxx:530
 ConfigParser.cxx:531
 ConfigParser.cxx:532
 ConfigParser.cxx:533
 ConfigParser.cxx:534
 ConfigParser.cxx:535
 ConfigParser.cxx:536
 ConfigParser.cxx:537
 ConfigParser.cxx:538
 ConfigParser.cxx:539
 ConfigParser.cxx:540
 ConfigParser.cxx:541
 ConfigParser.cxx:542
 ConfigParser.cxx:543
 ConfigParser.cxx:544
 ConfigParser.cxx:545
 ConfigParser.cxx:546
 ConfigParser.cxx:547
 ConfigParser.cxx:548
 ConfigParser.cxx:549
 ConfigParser.cxx:550
 ConfigParser.cxx:551
 ConfigParser.cxx:552
 ConfigParser.cxx:553
 ConfigParser.cxx:554
 ConfigParser.cxx:555
 ConfigParser.cxx:556
 ConfigParser.cxx:557
 ConfigParser.cxx:558
 ConfigParser.cxx:559
 ConfigParser.cxx:560
 ConfigParser.cxx:561
 ConfigParser.cxx:562
 ConfigParser.cxx:563
 ConfigParser.cxx:564
 ConfigParser.cxx:565
 ConfigParser.cxx:566
 ConfigParser.cxx:567
 ConfigParser.cxx:568
 ConfigParser.cxx:569
 ConfigParser.cxx:570
 ConfigParser.cxx:571
 ConfigParser.cxx:572
 ConfigParser.cxx:573
 ConfigParser.cxx:574
 ConfigParser.cxx:575
 ConfigParser.cxx:576
 ConfigParser.cxx:577
 ConfigParser.cxx:578
 ConfigParser.cxx:579
 ConfigParser.cxx:580
 ConfigParser.cxx:581
 ConfigParser.cxx:582
 ConfigParser.cxx:583
 ConfigParser.cxx:584
 ConfigParser.cxx:585
 ConfigParser.cxx:586
 ConfigParser.cxx:587
 ConfigParser.cxx:588
 ConfigParser.cxx:589
 ConfigParser.cxx:590
 ConfigParser.cxx:591
 ConfigParser.cxx:592
 ConfigParser.cxx:593
 ConfigParser.cxx:594
 ConfigParser.cxx:595
 ConfigParser.cxx:596
 ConfigParser.cxx:597
 ConfigParser.cxx:598
 ConfigParser.cxx:599
 ConfigParser.cxx:600
 ConfigParser.cxx:601
 ConfigParser.cxx:602
 ConfigParser.cxx:603
 ConfigParser.cxx:604
 ConfigParser.cxx:605
 ConfigParser.cxx:606
 ConfigParser.cxx:607
 ConfigParser.cxx:608
 ConfigParser.cxx:609
 ConfigParser.cxx:610
 ConfigParser.cxx:611
 ConfigParser.cxx:612
 ConfigParser.cxx:613
 ConfigParser.cxx:614
 ConfigParser.cxx:615
 ConfigParser.cxx:616
 ConfigParser.cxx:617
 ConfigParser.cxx:618
 ConfigParser.cxx:619
 ConfigParser.cxx:620
 ConfigParser.cxx:621
 ConfigParser.cxx:622
 ConfigParser.cxx:623
 ConfigParser.cxx:624
 ConfigParser.cxx:625
 ConfigParser.cxx:626
 ConfigParser.cxx:627
 ConfigParser.cxx:628
 ConfigParser.cxx:629
 ConfigParser.cxx:630
 ConfigParser.cxx:631
 ConfigParser.cxx:632
 ConfigParser.cxx:633
 ConfigParser.cxx:634
 ConfigParser.cxx:635
 ConfigParser.cxx:636
 ConfigParser.cxx:637
 ConfigParser.cxx:638
 ConfigParser.cxx:639
 ConfigParser.cxx:640
 ConfigParser.cxx:641
 ConfigParser.cxx:642
 ConfigParser.cxx:643
 ConfigParser.cxx:644
 ConfigParser.cxx:645
 ConfigParser.cxx:646
 ConfigParser.cxx:647
 ConfigParser.cxx:648
 ConfigParser.cxx:649
 ConfigParser.cxx:650
 ConfigParser.cxx:651
 ConfigParser.cxx:652
 ConfigParser.cxx:653
 ConfigParser.cxx:654
 ConfigParser.cxx:655
 ConfigParser.cxx:656
 ConfigParser.cxx:657
 ConfigParser.cxx:658
 ConfigParser.cxx:659
 ConfigParser.cxx:660
 ConfigParser.cxx:661
 ConfigParser.cxx:662
 ConfigParser.cxx:663
 ConfigParser.cxx:664
 ConfigParser.cxx:665
 ConfigParser.cxx:666
 ConfigParser.cxx:667
 ConfigParser.cxx:668
 ConfigParser.cxx:669
 ConfigParser.cxx:670
 ConfigParser.cxx:671
 ConfigParser.cxx:672
 ConfigParser.cxx:673
 ConfigParser.cxx:674
 ConfigParser.cxx:675
 ConfigParser.cxx:676
 ConfigParser.cxx:677
 ConfigParser.cxx:678
 ConfigParser.cxx:679
 ConfigParser.cxx:680
 ConfigParser.cxx:681
 ConfigParser.cxx:682
 ConfigParser.cxx:683
 ConfigParser.cxx:684
 ConfigParser.cxx:685
 ConfigParser.cxx:686
 ConfigParser.cxx:687
 ConfigParser.cxx:688
 ConfigParser.cxx:689
 ConfigParser.cxx:690
 ConfigParser.cxx:691
 ConfigParser.cxx:692
 ConfigParser.cxx:693
 ConfigParser.cxx:694
 ConfigParser.cxx:695
 ConfigParser.cxx:696
 ConfigParser.cxx:697
 ConfigParser.cxx:698
 ConfigParser.cxx:699
 ConfigParser.cxx:700
 ConfigParser.cxx:701
 ConfigParser.cxx:702
 ConfigParser.cxx:703
 ConfigParser.cxx:704
 ConfigParser.cxx:705
 ConfigParser.cxx:706
 ConfigParser.cxx:707
 ConfigParser.cxx:708
 ConfigParser.cxx:709
 ConfigParser.cxx:710
 ConfigParser.cxx:711
 ConfigParser.cxx:712
 ConfigParser.cxx:713
 ConfigParser.cxx:714
 ConfigParser.cxx:715
 ConfigParser.cxx:716
 ConfigParser.cxx:717
 ConfigParser.cxx:718
 ConfigParser.cxx:719
 ConfigParser.cxx:720
 ConfigParser.cxx:721
 ConfigParser.cxx:722
 ConfigParser.cxx:723
 ConfigParser.cxx:724
 ConfigParser.cxx:725
 ConfigParser.cxx:726
 ConfigParser.cxx:727
 ConfigParser.cxx:728
 ConfigParser.cxx:729
 ConfigParser.cxx:730
 ConfigParser.cxx:731
 ConfigParser.cxx:732
 ConfigParser.cxx:733
 ConfigParser.cxx:734
 ConfigParser.cxx:735
 ConfigParser.cxx:736
 ConfigParser.cxx:737
 ConfigParser.cxx:738
 ConfigParser.cxx:739
 ConfigParser.cxx:740
 ConfigParser.cxx:741
 ConfigParser.cxx:742
 ConfigParser.cxx:743
 ConfigParser.cxx:744
 ConfigParser.cxx:745
 ConfigParser.cxx:746
 ConfigParser.cxx:747
 ConfigParser.cxx:748
 ConfigParser.cxx:749
 ConfigParser.cxx:750
 ConfigParser.cxx:751
 ConfigParser.cxx:752
 ConfigParser.cxx:753
 ConfigParser.cxx:754
 ConfigParser.cxx:755
 ConfigParser.cxx:756
 ConfigParser.cxx:757
 ConfigParser.cxx:758
 ConfigParser.cxx:759
 ConfigParser.cxx:760
 ConfigParser.cxx:761
 ConfigParser.cxx:762
 ConfigParser.cxx:763
 ConfigParser.cxx:764
 ConfigParser.cxx:765
 ConfigParser.cxx:766
 ConfigParser.cxx:767
 ConfigParser.cxx:768
 ConfigParser.cxx:769
 ConfigParser.cxx:770
 ConfigParser.cxx:771
 ConfigParser.cxx:772
 ConfigParser.cxx:773
 ConfigParser.cxx:774
 ConfigParser.cxx:775
 ConfigParser.cxx:776
 ConfigParser.cxx:777
 ConfigParser.cxx:778
 ConfigParser.cxx:779
 ConfigParser.cxx:780
 ConfigParser.cxx:781
 ConfigParser.cxx:782
 ConfigParser.cxx:783
 ConfigParser.cxx:784
 ConfigParser.cxx:785
 ConfigParser.cxx:786
 ConfigParser.cxx:787
 ConfigParser.cxx:788
 ConfigParser.cxx:789
 ConfigParser.cxx:790
 ConfigParser.cxx:791
 ConfigParser.cxx:792
 ConfigParser.cxx:793
 ConfigParser.cxx:794
 ConfigParser.cxx:795
 ConfigParser.cxx:796
 ConfigParser.cxx:797
 ConfigParser.cxx:798
 ConfigParser.cxx:799
 ConfigParser.cxx:800
 ConfigParser.cxx:801
 ConfigParser.cxx:802
 ConfigParser.cxx:803
 ConfigParser.cxx:804
 ConfigParser.cxx:805
 ConfigParser.cxx:806
 ConfigParser.cxx:807
 ConfigParser.cxx:808
 ConfigParser.cxx:809
 ConfigParser.cxx:810
 ConfigParser.cxx:811
 ConfigParser.cxx:812
 ConfigParser.cxx:813
 ConfigParser.cxx:814
 ConfigParser.cxx:815
 ConfigParser.cxx:816
 ConfigParser.cxx:817
 ConfigParser.cxx:818
 ConfigParser.cxx:819
 ConfigParser.cxx:820
 ConfigParser.cxx:821
 ConfigParser.cxx:822
 ConfigParser.cxx:823
 ConfigParser.cxx:824
 ConfigParser.cxx:825
 ConfigParser.cxx:826
 ConfigParser.cxx:827
 ConfigParser.cxx:828
 ConfigParser.cxx:829
 ConfigParser.cxx:830
 ConfigParser.cxx:831
 ConfigParser.cxx:832
 ConfigParser.cxx:833
 ConfigParser.cxx:834
 ConfigParser.cxx:835
 ConfigParser.cxx:836
 ConfigParser.cxx:837
 ConfigParser.cxx:838
 ConfigParser.cxx:839
 ConfigParser.cxx:840
 ConfigParser.cxx:841
 ConfigParser.cxx:842
 ConfigParser.cxx:843
 ConfigParser.cxx:844
 ConfigParser.cxx:845
 ConfigParser.cxx:846
 ConfigParser.cxx:847
 ConfigParser.cxx:848
 ConfigParser.cxx:849
 ConfigParser.cxx:850
 ConfigParser.cxx:851
 ConfigParser.cxx:852
 ConfigParser.cxx:853
 ConfigParser.cxx:854
 ConfigParser.cxx:855
 ConfigParser.cxx:856
 ConfigParser.cxx:857
 ConfigParser.cxx:858
 ConfigParser.cxx:859
 ConfigParser.cxx:860
 ConfigParser.cxx:861
 ConfigParser.cxx:862
 ConfigParser.cxx:863
 ConfigParser.cxx:864
 ConfigParser.cxx:865
 ConfigParser.cxx:866
 ConfigParser.cxx:867
 ConfigParser.cxx:868
 ConfigParser.cxx:869
 ConfigParser.cxx:870
 ConfigParser.cxx:871
 ConfigParser.cxx:872
 ConfigParser.cxx:873
 ConfigParser.cxx:874
 ConfigParser.cxx:875
 ConfigParser.cxx:876
 ConfigParser.cxx:877
 ConfigParser.cxx:878
 ConfigParser.cxx:879
 ConfigParser.cxx:880
 ConfigParser.cxx:881
 ConfigParser.cxx:882
 ConfigParser.cxx:883
 ConfigParser.cxx:884
 ConfigParser.cxx:885
 ConfigParser.cxx:886
 ConfigParser.cxx:887
 ConfigParser.cxx:888
 ConfigParser.cxx:889
 ConfigParser.cxx:890
 ConfigParser.cxx:891
 ConfigParser.cxx:892
 ConfigParser.cxx:893
 ConfigParser.cxx:894
 ConfigParser.cxx:895
 ConfigParser.cxx:896
 ConfigParser.cxx:897
 ConfigParser.cxx:898
 ConfigParser.cxx:899
 ConfigParser.cxx:900
 ConfigParser.cxx:901
 ConfigParser.cxx:902
 ConfigParser.cxx:903
 ConfigParser.cxx:904
 ConfigParser.cxx:905
 ConfigParser.cxx:906
 ConfigParser.cxx:907
 ConfigParser.cxx:908
 ConfigParser.cxx:909
 ConfigParser.cxx:910
 ConfigParser.cxx:911
 ConfigParser.cxx:912
 ConfigParser.cxx:913
 ConfigParser.cxx:914
 ConfigParser.cxx:915
 ConfigParser.cxx:916
 ConfigParser.cxx:917
 ConfigParser.cxx:918
 ConfigParser.cxx:919
 ConfigParser.cxx:920
 ConfigParser.cxx:921
 ConfigParser.cxx:922
 ConfigParser.cxx:923
 ConfigParser.cxx:924
 ConfigParser.cxx:925
 ConfigParser.cxx:926
 ConfigParser.cxx:927
 ConfigParser.cxx:928
 ConfigParser.cxx:929
 ConfigParser.cxx:930
 ConfigParser.cxx:931
 ConfigParser.cxx:932
 ConfigParser.cxx:933
 ConfigParser.cxx:934
 ConfigParser.cxx:935
 ConfigParser.cxx:936
 ConfigParser.cxx:937
 ConfigParser.cxx:938
 ConfigParser.cxx:939
 ConfigParser.cxx:940
 ConfigParser.cxx:941
 ConfigParser.cxx:942
 ConfigParser.cxx:943
 ConfigParser.cxx:944
 ConfigParser.cxx:945
 ConfigParser.cxx:946
 ConfigParser.cxx:947
 ConfigParser.cxx:948
 ConfigParser.cxx:949
 ConfigParser.cxx:950
 ConfigParser.cxx:951
 ConfigParser.cxx:952
 ConfigParser.cxx:953
 ConfigParser.cxx:954
 ConfigParser.cxx:955
 ConfigParser.cxx:956
 ConfigParser.cxx:957
 ConfigParser.cxx:958
 ConfigParser.cxx:959
 ConfigParser.cxx:960
 ConfigParser.cxx:961
 ConfigParser.cxx:962
 ConfigParser.cxx:963
 ConfigParser.cxx:964
 ConfigParser.cxx:965
 ConfigParser.cxx:966
 ConfigParser.cxx:967
 ConfigParser.cxx:968
 ConfigParser.cxx:969
 ConfigParser.cxx:970
 ConfigParser.cxx:971
 ConfigParser.cxx:972
 ConfigParser.cxx:973
 ConfigParser.cxx:974
 ConfigParser.cxx:975
 ConfigParser.cxx:976
 ConfigParser.cxx:977
 ConfigParser.cxx:978
 ConfigParser.cxx:979
 ConfigParser.cxx:980
 ConfigParser.cxx:981
 ConfigParser.cxx:982
 ConfigParser.cxx:983
 ConfigParser.cxx:984
 ConfigParser.cxx:985
 ConfigParser.cxx:986
 ConfigParser.cxx:987
 ConfigParser.cxx:988
 ConfigParser.cxx:989
 ConfigParser.cxx:990
 ConfigParser.cxx:991
 ConfigParser.cxx:992
 ConfigParser.cxx:993
 ConfigParser.cxx:994
 ConfigParser.cxx:995
 ConfigParser.cxx:996
 ConfigParser.cxx:997
 ConfigParser.cxx:998
 ConfigParser.cxx:999
 ConfigParser.cxx:1000
 ConfigParser.cxx:1001
 ConfigParser.cxx:1002
 ConfigParser.cxx:1003
 ConfigParser.cxx:1004
 ConfigParser.cxx:1005
 ConfigParser.cxx:1006
 ConfigParser.cxx:1007
 ConfigParser.cxx:1008
 ConfigParser.cxx:1009
 ConfigParser.cxx:1010
 ConfigParser.cxx:1011
 ConfigParser.cxx:1012
 ConfigParser.cxx:1013
 ConfigParser.cxx:1014
 ConfigParser.cxx:1015
 ConfigParser.cxx:1016
 ConfigParser.cxx:1017
 ConfigParser.cxx:1018
 ConfigParser.cxx:1019
 ConfigParser.cxx:1020
 ConfigParser.cxx:1021
 ConfigParser.cxx:1022
 ConfigParser.cxx:1023
 ConfigParser.cxx:1024
 ConfigParser.cxx:1025
 ConfigParser.cxx:1026
 ConfigParser.cxx:1027
 ConfigParser.cxx:1028
 ConfigParser.cxx:1029
 ConfigParser.cxx:1030
 ConfigParser.cxx:1031
 ConfigParser.cxx:1032
 ConfigParser.cxx:1033
 ConfigParser.cxx:1034
 ConfigParser.cxx:1035
 ConfigParser.cxx:1036
 ConfigParser.cxx:1037
 ConfigParser.cxx:1038
 ConfigParser.cxx:1039
 ConfigParser.cxx:1040
 ConfigParser.cxx:1041
 ConfigParser.cxx:1042
 ConfigParser.cxx:1043
 ConfigParser.cxx:1044
 ConfigParser.cxx:1045
 ConfigParser.cxx:1046
 ConfigParser.cxx:1047
 ConfigParser.cxx:1048
 ConfigParser.cxx:1049
 ConfigParser.cxx:1050
 ConfigParser.cxx:1051
 ConfigParser.cxx:1052
 ConfigParser.cxx:1053
 ConfigParser.cxx:1054
 ConfigParser.cxx:1055
 ConfigParser.cxx:1056
 ConfigParser.cxx:1057
 ConfigParser.cxx:1058
 ConfigParser.cxx:1059
 ConfigParser.cxx:1060
 ConfigParser.cxx:1061
 ConfigParser.cxx:1062
 ConfigParser.cxx:1063
 ConfigParser.cxx:1064
 ConfigParser.cxx:1065
 ConfigParser.cxx:1066
 ConfigParser.cxx:1067
 ConfigParser.cxx:1068
 ConfigParser.cxx:1069
 ConfigParser.cxx:1070
 ConfigParser.cxx:1071
 ConfigParser.cxx:1072
 ConfigParser.cxx:1073
 ConfigParser.cxx:1074
 ConfigParser.cxx:1075
 ConfigParser.cxx:1076
 ConfigParser.cxx:1077
 ConfigParser.cxx:1078
 ConfigParser.cxx:1079
 ConfigParser.cxx:1080
 ConfigParser.cxx:1081
 ConfigParser.cxx:1082
 ConfigParser.cxx:1083
 ConfigParser.cxx:1084
 ConfigParser.cxx:1085
 ConfigParser.cxx:1086
 ConfigParser.cxx:1087
 ConfigParser.cxx:1088
 ConfigParser.cxx:1089
 ConfigParser.cxx:1090
 ConfigParser.cxx:1091
 ConfigParser.cxx:1092
 ConfigParser.cxx:1093
 ConfigParser.cxx:1094
 ConfigParser.cxx:1095
 ConfigParser.cxx:1096
 ConfigParser.cxx:1097
 ConfigParser.cxx:1098
 ConfigParser.cxx:1099
 ConfigParser.cxx:1100
 ConfigParser.cxx:1101
 ConfigParser.cxx:1102
 ConfigParser.cxx:1103
 ConfigParser.cxx:1104
 ConfigParser.cxx:1105
 ConfigParser.cxx:1106
 ConfigParser.cxx:1107
 ConfigParser.cxx:1108
 ConfigParser.cxx:1109
 ConfigParser.cxx:1110
 ConfigParser.cxx:1111
 ConfigParser.cxx:1112
 ConfigParser.cxx:1113
 ConfigParser.cxx:1114
 ConfigParser.cxx:1115
 ConfigParser.cxx:1116
 ConfigParser.cxx:1117
 ConfigParser.cxx:1118
 ConfigParser.cxx:1119
 ConfigParser.cxx:1120
 ConfigParser.cxx:1121
 ConfigParser.cxx:1122
 ConfigParser.cxx:1123
 ConfigParser.cxx:1124
 ConfigParser.cxx:1125
 ConfigParser.cxx:1126
 ConfigParser.cxx:1127
 ConfigParser.cxx:1128
 ConfigParser.cxx:1129
 ConfigParser.cxx:1130
 ConfigParser.cxx:1131
 ConfigParser.cxx:1132
 ConfigParser.cxx:1133
 ConfigParser.cxx:1134
 ConfigParser.cxx:1135
 ConfigParser.cxx:1136
 ConfigParser.cxx:1137
 ConfigParser.cxx:1138
 ConfigParser.cxx:1139
 ConfigParser.cxx:1140
 ConfigParser.cxx:1141
 ConfigParser.cxx:1142
 ConfigParser.cxx:1143
 ConfigParser.cxx:1144
 ConfigParser.cxx:1145
 ConfigParser.cxx:1146
 ConfigParser.cxx:1147
 ConfigParser.cxx:1148
 ConfigParser.cxx:1149
 ConfigParser.cxx:1150
 ConfigParser.cxx:1151
 ConfigParser.cxx:1152
 ConfigParser.cxx:1153
 ConfigParser.cxx:1154
 ConfigParser.cxx:1155
 ConfigParser.cxx:1156
 ConfigParser.cxx:1157
 ConfigParser.cxx:1158
 ConfigParser.cxx:1159
 ConfigParser.cxx:1160
 ConfigParser.cxx:1161
 ConfigParser.cxx:1162
 ConfigParser.cxx:1163
 ConfigParser.cxx:1164
 ConfigParser.cxx:1165
 ConfigParser.cxx:1166
 ConfigParser.cxx:1167
 ConfigParser.cxx:1168
 ConfigParser.cxx:1169
 ConfigParser.cxx:1170
 ConfigParser.cxx:1171
 ConfigParser.cxx:1172
 ConfigParser.cxx:1173
 ConfigParser.cxx:1174
 ConfigParser.cxx:1175
 ConfigParser.cxx:1176
 ConfigParser.cxx:1177
 ConfigParser.cxx:1178
 ConfigParser.cxx:1179
 ConfigParser.cxx:1180
 ConfigParser.cxx:1181
 ConfigParser.cxx:1182
 ConfigParser.cxx:1183
 ConfigParser.cxx:1184
 ConfigParser.cxx:1185
 ConfigParser.cxx:1186
 ConfigParser.cxx:1187
 ConfigParser.cxx:1188
 ConfigParser.cxx:1189
 ConfigParser.cxx:1190
 ConfigParser.cxx:1191
 ConfigParser.cxx:1192
 ConfigParser.cxx:1193
 ConfigParser.cxx:1194
 ConfigParser.cxx:1195
 ConfigParser.cxx:1196
 ConfigParser.cxx:1197
 ConfigParser.cxx:1198
 ConfigParser.cxx:1199
 ConfigParser.cxx:1200
 ConfigParser.cxx:1201
 ConfigParser.cxx:1202
 ConfigParser.cxx:1203
 ConfigParser.cxx:1204
 ConfigParser.cxx:1205
 ConfigParser.cxx:1206
 ConfigParser.cxx:1207
 ConfigParser.cxx:1208
 ConfigParser.cxx:1209
 ConfigParser.cxx:1210
 ConfigParser.cxx:1211
 ConfigParser.cxx:1212
 ConfigParser.cxx:1213
 ConfigParser.cxx:1214
 ConfigParser.cxx:1215
 ConfigParser.cxx:1216
 ConfigParser.cxx:1217
 ConfigParser.cxx:1218
 ConfigParser.cxx:1219
 ConfigParser.cxx:1220
 ConfigParser.cxx:1221
 ConfigParser.cxx:1222
 ConfigParser.cxx:1223
 ConfigParser.cxx:1224
 ConfigParser.cxx:1225
 ConfigParser.cxx:1226
 ConfigParser.cxx:1227
 ConfigParser.cxx:1228
 ConfigParser.cxx:1229
 ConfigParser.cxx:1230
 ConfigParser.cxx:1231
 ConfigParser.cxx:1232
 ConfigParser.cxx:1233
 ConfigParser.cxx:1234
 ConfigParser.cxx:1235
 ConfigParser.cxx:1236
 ConfigParser.cxx:1237
 ConfigParser.cxx:1238
 ConfigParser.cxx:1239
 ConfigParser.cxx:1240
 ConfigParser.cxx:1241
 ConfigParser.cxx:1242
 ConfigParser.cxx:1243
 ConfigParser.cxx:1244
 ConfigParser.cxx:1245
 ConfigParser.cxx:1246
 ConfigParser.cxx:1247
 ConfigParser.cxx:1248
 ConfigParser.cxx:1249
 ConfigParser.cxx:1250
 ConfigParser.cxx:1251
 ConfigParser.cxx:1252
 ConfigParser.cxx:1253
 ConfigParser.cxx:1254
 ConfigParser.cxx:1255
 ConfigParser.cxx:1256
 ConfigParser.cxx:1257
 ConfigParser.cxx:1258
 ConfigParser.cxx:1259
 ConfigParser.cxx:1260
 ConfigParser.cxx:1261
 ConfigParser.cxx:1262
 ConfigParser.cxx:1263
 ConfigParser.cxx:1264
 ConfigParser.cxx:1265
 ConfigParser.cxx:1266
 ConfigParser.cxx:1267
 ConfigParser.cxx:1268
 ConfigParser.cxx:1269
 ConfigParser.cxx:1270
 ConfigParser.cxx:1271
 ConfigParser.cxx:1272
 ConfigParser.cxx:1273
 ConfigParser.cxx:1274
 ConfigParser.cxx:1275
 ConfigParser.cxx:1276
 ConfigParser.cxx:1277
 ConfigParser.cxx:1278
 ConfigParser.cxx:1279
 ConfigParser.cxx:1280
 ConfigParser.cxx:1281
 ConfigParser.cxx:1282
 ConfigParser.cxx:1283
 ConfigParser.cxx:1284
 ConfigParser.cxx:1285
 ConfigParser.cxx:1286
 ConfigParser.cxx:1287
 ConfigParser.cxx:1288
 ConfigParser.cxx:1289
 ConfigParser.cxx:1290
 ConfigParser.cxx:1291
 ConfigParser.cxx:1292
 ConfigParser.cxx:1293
 ConfigParser.cxx:1294
 ConfigParser.cxx:1295
 ConfigParser.cxx:1296
 ConfigParser.cxx:1297
 ConfigParser.cxx:1298
 ConfigParser.cxx:1299
 ConfigParser.cxx:1300
 ConfigParser.cxx:1301
 ConfigParser.cxx:1302
 ConfigParser.cxx:1303
 ConfigParser.cxx:1304
 ConfigParser.cxx:1305
 ConfigParser.cxx:1306
 ConfigParser.cxx:1307
 ConfigParser.cxx:1308
 ConfigParser.cxx:1309
 ConfigParser.cxx:1310
 ConfigParser.cxx:1311
 ConfigParser.cxx:1312
 ConfigParser.cxx:1313
 ConfigParser.cxx:1314
 ConfigParser.cxx:1315
 ConfigParser.cxx:1316
 ConfigParser.cxx:1317
 ConfigParser.cxx:1318
 ConfigParser.cxx:1319
 ConfigParser.cxx:1320
 ConfigParser.cxx:1321
 ConfigParser.cxx:1322
 ConfigParser.cxx:1323
 ConfigParser.cxx:1324
 ConfigParser.cxx:1325
 ConfigParser.cxx:1326
 ConfigParser.cxx:1327
 ConfigParser.cxx:1328
 ConfigParser.cxx:1329
 ConfigParser.cxx:1330
 ConfigParser.cxx:1331
 ConfigParser.cxx:1332
 ConfigParser.cxx:1333
 ConfigParser.cxx:1334
 ConfigParser.cxx:1335
 ConfigParser.cxx:1336
 ConfigParser.cxx:1337
 ConfigParser.cxx:1338
 ConfigParser.cxx:1339
 ConfigParser.cxx:1340
 ConfigParser.cxx:1341
 ConfigParser.cxx:1342
 ConfigParser.cxx:1343
 ConfigParser.cxx:1344
 ConfigParser.cxx:1345
 ConfigParser.cxx:1346
 ConfigParser.cxx:1347
 ConfigParser.cxx:1348
 ConfigParser.cxx:1349
 ConfigParser.cxx:1350
 ConfigParser.cxx:1351
 ConfigParser.cxx:1352
 ConfigParser.cxx:1353
 ConfigParser.cxx:1354
 ConfigParser.cxx:1355
 ConfigParser.cxx:1356
 ConfigParser.cxx:1357
 ConfigParser.cxx:1358
 ConfigParser.cxx:1359
 ConfigParser.cxx:1360
 ConfigParser.cxx:1361
 ConfigParser.cxx:1362
 ConfigParser.cxx:1363
 ConfigParser.cxx:1364
 ConfigParser.cxx:1365
 ConfigParser.cxx:1366
 ConfigParser.cxx:1367
 ConfigParser.cxx:1368
 ConfigParser.cxx:1369
 ConfigParser.cxx:1370
 ConfigParser.cxx:1371
 ConfigParser.cxx:1372
 ConfigParser.cxx:1373
 ConfigParser.cxx:1374
 ConfigParser.cxx:1375
 ConfigParser.cxx:1376
 ConfigParser.cxx:1377
 ConfigParser.cxx:1378
 ConfigParser.cxx:1379
 ConfigParser.cxx:1380
 ConfigParser.cxx:1381
 ConfigParser.cxx:1382
 ConfigParser.cxx:1383
 ConfigParser.cxx:1384
 ConfigParser.cxx:1385
 ConfigParser.cxx:1386
 ConfigParser.cxx:1387
 ConfigParser.cxx:1388
 ConfigParser.cxx:1389
 ConfigParser.cxx:1390
 ConfigParser.cxx:1391
 ConfigParser.cxx:1392
 ConfigParser.cxx:1393
 ConfigParser.cxx:1394
 ConfigParser.cxx:1395
 ConfigParser.cxx:1396
 ConfigParser.cxx:1397
 ConfigParser.cxx:1398
 ConfigParser.cxx:1399
 ConfigParser.cxx:1400
 ConfigParser.cxx:1401
 ConfigParser.cxx:1402
 ConfigParser.cxx:1403
 ConfigParser.cxx:1404
 ConfigParser.cxx:1405
 ConfigParser.cxx:1406
 ConfigParser.cxx:1407
 ConfigParser.cxx:1408
 ConfigParser.cxx:1409
 ConfigParser.cxx:1410
 ConfigParser.cxx:1411
 ConfigParser.cxx:1412
 ConfigParser.cxx:1413
 ConfigParser.cxx:1414
 ConfigParser.cxx:1415
 ConfigParser.cxx:1416
 ConfigParser.cxx:1417
 ConfigParser.cxx:1418
 ConfigParser.cxx:1419
 ConfigParser.cxx:1420
 ConfigParser.cxx:1421
 ConfigParser.cxx:1422
 ConfigParser.cxx:1423
 ConfigParser.cxx:1424
 ConfigParser.cxx:1425
 ConfigParser.cxx:1426
 ConfigParser.cxx:1427
 ConfigParser.cxx:1428
 ConfigParser.cxx:1429
 ConfigParser.cxx:1430
 ConfigParser.cxx:1431
 ConfigParser.cxx:1432
 ConfigParser.cxx:1433
 ConfigParser.cxx:1434
 ConfigParser.cxx:1435
 ConfigParser.cxx:1436
 ConfigParser.cxx:1437
 ConfigParser.cxx:1438
 ConfigParser.cxx:1439
 ConfigParser.cxx:1440
 ConfigParser.cxx:1441
 ConfigParser.cxx:1442
 ConfigParser.cxx:1443
 ConfigParser.cxx:1444
 ConfigParser.cxx:1445
 ConfigParser.cxx:1446
 ConfigParser.cxx:1447
 ConfigParser.cxx:1448
 ConfigParser.cxx:1449
 ConfigParser.cxx:1450
 ConfigParser.cxx:1451
 ConfigParser.cxx:1452
 ConfigParser.cxx:1453
 ConfigParser.cxx:1454
 ConfigParser.cxx:1455
 ConfigParser.cxx:1456
 ConfigParser.cxx:1457
 ConfigParser.cxx:1458
 ConfigParser.cxx:1459
 ConfigParser.cxx:1460
 ConfigParser.cxx:1461
 ConfigParser.cxx:1462
 ConfigParser.cxx:1463
 ConfigParser.cxx:1464
 ConfigParser.cxx:1465
 ConfigParser.cxx:1466
 ConfigParser.cxx:1467
 ConfigParser.cxx:1468
 ConfigParser.cxx:1469
 ConfigParser.cxx:1470
 ConfigParser.cxx:1471
 ConfigParser.cxx:1472
 ConfigParser.cxx:1473
 ConfigParser.cxx:1474
 ConfigParser.cxx:1475
 ConfigParser.cxx:1476
 ConfigParser.cxx:1477
 ConfigParser.cxx:1478
 ConfigParser.cxx:1479
 ConfigParser.cxx:1480
 ConfigParser.cxx:1481
 ConfigParser.cxx:1482
 ConfigParser.cxx:1483
 ConfigParser.cxx:1484
 ConfigParser.cxx:1485
 ConfigParser.cxx:1486
 ConfigParser.cxx:1487
 ConfigParser.cxx:1488
 ConfigParser.cxx:1489
 ConfigParser.cxx:1490
 ConfigParser.cxx:1491
 ConfigParser.cxx:1492
 ConfigParser.cxx:1493
 ConfigParser.cxx:1494
 ConfigParser.cxx:1495
 ConfigParser.cxx:1496
 ConfigParser.cxx:1497
 ConfigParser.cxx:1498
 ConfigParser.cxx:1499
 ConfigParser.cxx:1500
 ConfigParser.cxx:1501
 ConfigParser.cxx:1502
 ConfigParser.cxx:1503
 ConfigParser.cxx:1504
 ConfigParser.cxx:1505
 ConfigParser.cxx:1506
 ConfigParser.cxx:1507
 ConfigParser.cxx:1508
 ConfigParser.cxx:1509
 ConfigParser.cxx:1510
 ConfigParser.cxx:1511
 ConfigParser.cxx:1512
 ConfigParser.cxx:1513
 ConfigParser.cxx:1514
 ConfigParser.cxx:1515
 ConfigParser.cxx:1516
 ConfigParser.cxx:1517
 ConfigParser.cxx:1518
 ConfigParser.cxx:1519
 ConfigParser.cxx:1520
 ConfigParser.cxx:1521
 ConfigParser.cxx:1522
 ConfigParser.cxx:1523
 ConfigParser.cxx:1524
 ConfigParser.cxx:1525
 ConfigParser.cxx:1526
 ConfigParser.cxx:1527
 ConfigParser.cxx:1528
 ConfigParser.cxx:1529
 ConfigParser.cxx:1530
 ConfigParser.cxx:1531
 ConfigParser.cxx:1532
 ConfigParser.cxx:1533
 ConfigParser.cxx:1534
 ConfigParser.cxx:1535
 ConfigParser.cxx:1536
 ConfigParser.cxx:1537
 ConfigParser.cxx:1538
 ConfigParser.cxx:1539
 ConfigParser.cxx:1540
 ConfigParser.cxx:1541
 ConfigParser.cxx:1542
 ConfigParser.cxx:1543
 ConfigParser.cxx:1544
 ConfigParser.cxx:1545
 ConfigParser.cxx:1546
 ConfigParser.cxx:1547
 ConfigParser.cxx:1548
 ConfigParser.cxx:1549
 ConfigParser.cxx:1550
 ConfigParser.cxx:1551
 ConfigParser.cxx:1552
 ConfigParser.cxx:1553
 ConfigParser.cxx:1554
 ConfigParser.cxx:1555
 ConfigParser.cxx:1556
 ConfigParser.cxx:1557
 ConfigParser.cxx:1558
 ConfigParser.cxx:1559
 ConfigParser.cxx:1560
 ConfigParser.cxx:1561
 ConfigParser.cxx:1562
 ConfigParser.cxx:1563
 ConfigParser.cxx:1564