CString CSymbolEngineRaisers::SymbolsProvided() {
  CString list = "nopponentschecking "
    "nopponentstruelyraising nopponentsbetting nopponentsfolded "
    "nplayerscallshort raischair firstraiser_chair  ";
  list += RangeOfSymbols("raisbits%i", kBetroundPreflop, kBetroundRiver);
  list += RangeOfSymbols("foldbits%i", kBetroundPreflop, kBetroundRiver);
  list += RangeOfSymbols("lastraised%i", kBetroundPreflop, kBetroundRiver);
  return list;
}
CString CSymbolEngineChipAmounts::SymbolsProvided() {
  CString list = "pot potcommon potplayer "
    "balance balanceatstartofsession maxbalance "
    "currentbet call nbetstocall nbetstorais "
    "ncurrentbets ncallbets nraisbets ";
  list += RangeOfSymbols("balance%i", k_first_chair, k_last_chair);
  list += RangeOfSymbols("balance_rank%i", k_betround_preflop, k_betround_river);
  list += RangeOfSymbols("currentbet%i", k_first_chair, k_last_chair);
  list += RangeOfSymbols("stack%i", k_first_chair, k_last_chair);
  return list;
}
CString CSymbolEngineVariousDataLookup::SymbolsProvided() {
  // This list includes some prefixes of symbols that can't be verified,
  // e.g. "dll$, pl_chair$, ....
  CString list = "dll$ pl_ vs$ msgbox$ log$ "
    "betround fmax f flagbits "
    "session version islobby "
    "handsplayed handsplayed_headsup ";
  list += RangeOfSymbols("f%i", 0, 19);
  return list;
}
CString CSymbolEngineHistory::SymbolsProvided() {
  CString list = "didchec didcall didrais didbetsize didfold didalli "
    "nplayersround nbetsround prevaction ";
  list += RangeOfSymbols("didchecround%i",  kBetroundPreflop, kBetroundRiver);  
  list += RangeOfSymbols("didcallround%i",  kBetroundPreflop, kBetroundRiver);
  list += RangeOfSymbols("didraisround%i",  kBetroundPreflop, kBetroundRiver);
  list += RangeOfSymbols("didbetsizeround%i",  kBetroundPreflop, kBetroundRiver);
  list += RangeOfSymbols("nplayersround%i", kBetroundPreflop, kBetroundRiver);
  list += RangeOfSymbols("nbetsround%i",    kBetroundPreflop, kBetroundRiver);
  for (int i=0; i<k_hist_sym_count; ++i) {
    CString new_history_symbol;
    new_history_symbol.Format("hi_%s%%i", k_hist_sym_strings[i]);
    list += RangeOfSymbols(new_history_symbol, kBetroundPreflop, kBetroundRiver);
  }
  return list;
}
CString CSymbolEngineTableLimits::SymbolsProvided() {
  CString list = "bet bblind sblind ante buyin ";
  list += RangeOfSymbols("bet%i", k_betround_preflop, k_betround_river);
  return list;
}
CString CSymbolEngineCallers::SymbolsProvided() {
  CString list = "nopponentscalling firstcaller_chair lastcaller_chair ";
  list += RangeOfSymbols("callbits%i", kBetroundPreflop, kBetroundRiver);
  return list;
}
CString CSymbolEngineChecksBetsFolds::SymbolsProvided() {
  CString list = "nopponentschecking "
    "nopponentsbetting nopponentsfolded nplayerscallshort ";
  list += RangeOfSymbols("foldbits%i", kBetroundPreflop, kBetroundRiver);
  return list;
}
CString CSymbolEngineColourCodes::SymbolsProvided() {
  return RangeOfSymbols("colourcode%i", k_first_chair, k_last_chair);
}