Program: 151798
Project: 151798
Buggy source:
public void run(){
  if (running)   return;
  running=true;
  String script=event.script;
  if (threadstack == null)   threadstack=new ArrayList<String>();
  ArrayList<String> actions=new ArrayList<String>(java.util.Arrays.asList(script.split("String_Node_Str")));
  currline=0;
  while (currline < actions.size()) {
    this.lastline=actions.get(currline);
    ArrayList<String> tokens=parseLine(lastline);
    evaluateVariables(tokens);
    if (tokens.size() == 0) {
      currline++;
      continue;
    }
    String cmd=tokens.remove(0);
    if (cmd.equals("String_Node_Str"))     return;
 else     if (cmd.equals("String_Node_Str") || cmd.equals("String_Node_Str")) {
      currline++;
      continue;
    }
 else     if (cmd.equals("String_Node_Str") && tokens.size() > 0)     System.out.println("String_Node_Str" + String.valueOf(currline) + "String_Node_Str"+ event.name+ "String_Node_Str"+ tokens.get(0));
 else     if (cmd.equals("String_Node_Str") && tokens.size() > 0)     try {
      Thread.sleep(Integer.valueOf(tokens.get(0)));
    }
 catch (    Exception e) {
    }
 else     if (cmd.equals("String_Node_Str"))     say(tokens);
 else     if (cmd.equals("String_Node_Str"))     give(tokens);
 else     if (cmd.equals("String_Node_Str"))     teleport(tokens);
 else     if (cmd.equals("String_Node_Str"))     set(tokens);
 else     if (cmd.equals("String_Node_Str"))     push(tokens);
 else     if (cmd.equals("String_Node_Str"))     cmdrun(tokens);
 else     if (cmd.equals("String_Node_Str"))     condition(tokens,actions);
 else     if (cmd.equals("String_Node_Str"))     currline=ifstack.remove(0);
 else     if (cmd.equals("String_Node_Str"))     loop(tokens,actions);
 else     if (cmd.equals("String_Node_Str"))     currline=whilestack.remove(0);
 else     notifyError("String_Node_Str");
    currline++;
  }
}

Fixed version (ground truth):
public void run(){
  if (running)   return;
  running=true;
  String script=event.script;
  if (script == null)   return;
  if (threadstack == null)   threadstack=new ArrayList<String>();
  ArrayList<String> actions=new ArrayList<String>(java.util.Arrays.asList(script.split("String_Node_Str")));
  currline=0;
  while (currline < actions.size()) {
    this.lastline=actions.get(currline);
    ArrayList<String> tokens=parseLine(lastline);
    evaluateVariables(tokens);
    if (tokens.size() == 0) {
      currline++;
      continue;
    }
    String cmd=tokens.remove(0);
    if (cmd.equals("String_Node_Str"))     return;
 else     if (cmd.equals("String_Node_Str") || cmd.equals("String_Node_Str")) {
      currline++;
      continue;
    }
 else     if (cmd.equals("String_Node_Str") && tokens.size() > 0)     System.out.println("String_Node_Str" + String.valueOf(currline) + "String_Node_Str"+ event.name+ "String_Node_Str"+ tokens.get(0));
 else     if (cmd.equals("String_Node_Str") && tokens.size() > 0)     try {
      Thread.sleep(Integer.valueOf(tokens.get(0)));
    }
 catch (    Exception e) {
    }
 else     if (cmd.equals("String_Node_Str"))     say(tokens);
 else     if (cmd.equals("String_Node_Str") && tokens.size() > 0)     server.runCommand("String_Node_Str",tokens.get(0));
 else     if (cmd.equals("String_Node_Str"))     give(tokens);
 else     if (cmd.equals("String_Node_Str"))     teleport(tokens);
 else     if (cmd.equals("String_Node_Str"))     set(tokens);
 else     if (cmd.equals("String_Node_Str"))     push(tokens);
 else     if (cmd.equals("String_Node_Str"))     cmdrun(tokens);
 else     if (cmd.equals("String_Node_Str"))     condition(tokens,actions);
 else     if (cmd.equals("String_Node_Str"))     currline=ifstack.remove(0);
 else     if (cmd.equals("String_Node_Str"))     loop(tokens,actions);
 else     if (cmd.equals("String_Node_Str"))     currline=whilestack.remove(0);
 else     notifyError("String_Node_Str");
    currline++;
  }
}