Program: 31620
Project: 31620
Buggy source:
public void generateHtml4PrAndRoc(EvalConfig evalConfig,ModelConfig modelConfig,String fileName,List<PerformanceResult> results,List<String> names) throws IOException {
  BufferedWriter writer=null;
  try {
    writer=ShifuFileUtils.getWriter(fileName,SourceType.LOCAL);
    writer.write(GainChartTemplate.HIGHCHART_BASE_BEGIN);
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_1,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_2,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_1,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_2,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + j + "String_Node_Str");
      for (int i=0; i < result.weightedPr.size(); i++) {
        PerformanceObject po=result.weightedPr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedPr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.weightedPr.size(); i++) {
        PerformanceObject po=result.weightedPr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedPr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (2 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.pr.size(); i++) {
        PerformanceObject po=result.pr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.pr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (3 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.pr.size(); i++) {
        PerformanceObject po=result.pr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.pr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (4 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.weightedRoc.size(); i++) {
        PerformanceObject po=result.weightedRoc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedRoc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (5 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.weightedRoc.size(); i++) {
        PerformanceObject po=result.weightedRoc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedRoc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (6 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.roc.size(); i++) {
        PerformanceObject po=result.roc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.roc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (7 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.roc.size(); i++) {
        PerformanceObject po=result.roc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.roc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    int currIndex=0;
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(GainChartTemplate.HIGHCHART_BASE_END);
  }
  finally {
    if (writer != null) {
      writer.close();
    }
  }
}

Fixed version (ground truth):
public void generateHtml4PrAndRoc(EvalConfig evalConfig,ModelConfig modelConfig,String fileName,List<PerformanceResult> results,List<String> names) throws IOException {
  BufferedWriter writer=null;
  try {
    writer=ShifuFileUtils.getWriter(fileName,SourceType.LOCAL);
    writer.write(GainChartTemplate.HIGHCHART_BASE_BEGIN);
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_1,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_2,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_1,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_BUTTON_PANEL_TEMPLATE_2,"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write(String.format(GainChartTemplate.HIGHCHART_DIV,"String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + j + "String_Node_Str");
      for (int i=0; i < result.weightedPr.size(); i++) {
        PerformanceObject po=result.weightedPr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedPr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.weightedPr.size(); i++) {
        PerformanceObject po=result.weightedPr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedPr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (2 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.pr.size(); i++) {
        PerformanceObject po=result.pr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.pr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (3 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.pr.size(); i++) {
        PerformanceObject po=result.pr.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.pr.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (4 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.weightedRoc.size(); i++) {
        PerformanceObject po=result.weightedRoc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedRoc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (5 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.weightedRoc.size(); i++) {
        PerformanceObject po=result.weightedRoc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedPrecision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.weightedFpr * 100),GainChartTemplate.DF.format(po.weightedActionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.weightedRoc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (6 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.roc.size(); i++) {
        PerformanceObject po=result.roc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.weightedRecall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.roc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    for (int j=0; j < results.size(); j++) {
      PerformanceResult result=results.get(j);
      writer.write("String_Node_Str" + (7 * results.size() + j) + "String_Node_Str");
      for (int i=0; i < result.roc.size(); i++) {
        PerformanceObject po=result.roc.get(i);
        writer.write(String.format(GainChartTemplate.PRROC_DATA_FORMAT,GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.precision * 100),GainChartTemplate.DF.format(po.recall * 100),GainChartTemplate.DF.format(po.fpr * 100),GainChartTemplate.DF.format(po.actionRate * 100),GainChartTemplate.DF.format(po.binLowestScore)));
        if (i != result.roc.size() - 1) {
          writer.write("String_Node_Str");
        }
      }
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
    }
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    int currIndex=0;
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_CHART_TEMPLATE_PREFIX3,"String_Node_Str","String_Node_Str",modelConfig.getBasic().getName(),"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    for (int i=0; i < results.size(); i++) {
      writer.write("String_Node_Str");
      writer.write("String_Node_Str" + (currIndex++) + "String_Node_Str");
      writer.write("String_Node_Str" + names.get(i) + "String_Node_Str");
      writer.write("String_Node_Str");
      writer.write("String_Node_Str");
      if (i != results.size() - 1) {
        writer.write("String_Node_Str");
      }
    }
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write(String.format(GainChartTemplate.HIGHCHART_LIST_TOGGLE_TEMPLATE,"String_Node_Str","String_Node_Str","String_Node_Str"));
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write("String_Node_Str");
    writer.write(GainChartTemplate.HIGHCHART_BASE_END);
  }
  finally {
    if (writer != null) {
      writer.close();
    }
  }
}