Program: 30781
Project: 30781
Buggy source:
private void processTokens(IRecipeLoader loader,String file,int line) throws RecipeError {
  try {
    IRecipeHandlerRegistry cr=AEApi.instance().registries().recipes();
    if (tokens.isEmpty())     return;
    int split=tokens.indexOf("String_Node_Str");
    if (split != -1) {
      String operation=tokens.remove(0).toLowerCase();
      if (operation.equals("String_Node_Str")) {
        if (tokens.size() == 3 && tokens.indexOf("String_Node_Str") == 1)         data.aliases.put(tokens.get(0),tokens.get(2));
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        List<String> pre=tokens.subList(0,split - 1);
        List<String> post=tokens.subList(split,tokens.size());
        List<List<IIngredient>> inputs=parseLines(pre);
        if (inputs.size() == 1 && inputs.get(0).size() > 0 && post.size() == 1) {
          data.groups.put(post.get(0),new GroupIngredient(post.get(0),inputs.get(0)));
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        List<String> pre=tokens.subList(0,split - 1);
        List<String> post=tokens.subList(split,tokens.size());
        List<List<IIngredient>> inputs=parseLines(pre);
        if (inputs.size() == 1 && inputs.get(0).size() > 0 && post.size() == 1) {
          ICraftHandler ch=new OreRegistration(inputs.get(0),post.get(0));
          addCrafting(ch);
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else {
        List<String> pre=tokens.subList(0,split - 1);
        List<String> post=tokens.subList(split,tokens.size());
        List<List<IIngredient>> inputs=parseLines(pre);
        List<List<IIngredient>> outputs=parseLines(post);
        ICraftHandler ch=cr.getCraftHandlerFor(operation);
        if (ch != null) {
          ch.setup(inputs,outputs);
          addCrafting(ch);
        }
 else         throw new RecipeError("String_Node_Str" + operation);
      }
    }
 else {
      String operation=tokens.remove(0).toLowerCase();
      if (operation.equals("String_Node_Str") && (tokens.get(0).equals("String_Node_Str") || tokens.get(0).equals("String_Node_Str"))) {
        if (tokens.size() == 1) {
          data.exceptions=tokens.get(0).equals("String_Node_Str");
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str") && (tokens.get(0).equals("String_Node_Str") || tokens.get(0).equals("String_Node_Str"))) {
        if (tokens.size() == 1) {
          data.crash=tokens.get(0).equals("String_Node_Str");
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        if (tokens.size() == 1 && (tokens.get(0).equals("String_Node_Str") || tokens.get(0).equals("String_Node_Str"))) {
          data.erroronmissing=tokens.get(0).equals("String_Node_Str");
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        if (tokens.size() == 1)         (new RecipeHandler(this)).parseRecipes(loader,tokens.get(0));
 else         throw new RecipeError("String_Node_Str");
      }
 else       throw new RecipeError(operation + "String_Node_Str" + tokens.toString()+ "String_Node_Str");
    }
  }
 catch (  RecipeError e) {
    AELog.warning("String_Node_Str" + line + "String_Node_Str"+ file+ "String_Node_Str"+ tokens.toString());
    if (data.exceptions)     AELog.error(e);
    if (data.crash)     throw e;
  }
  tokens.clear();
}

Fixed version (ground truth):
private void processTokens(IRecipeLoader loader,String file,int line) throws RecipeError {
  try {
    IRecipeHandlerRegistry cr=AEApi.instance().registries().recipes();
    if (tokens.isEmpty())     return;
    int split=tokens.indexOf("String_Node_Str");
    if (split != -1) {
      String operation=tokens.remove(0).toLowerCase();
      if (operation.equals("String_Node_Str")) {
        if (tokens.size() == 3 && tokens.indexOf("String_Node_Str") == 1)         data.aliases.put(tokens.get(0),tokens.get(2));
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        List<String> pre=tokens.subList(0,split - 1);
        List<String> post=tokens.subList(split,tokens.size());
        List<List<IIngredient>> inputs=parseLines(pre);
        if (inputs.size() == 1 && inputs.get(0).size() > 0 && post.size() == 1) {
          data.groups.put(post.get(0),new GroupIngredient(post.get(0),inputs.get(0)));
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        List<String> pre=tokens.subList(0,split - 1);
        List<String> post=tokens.subList(split,tokens.size());
        List<List<IIngredient>> inputs=parseLines(pre);
        if (inputs.size() == 1 && inputs.get(0).size() > 0 && post.size() == 1) {
          ICraftHandler ch=new OreRegistration(inputs.get(0),post.get(0));
          addCrafting(ch);
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else {
        List<String> pre=tokens.subList(0,split - 1);
        List<String> post=tokens.subList(split,tokens.size());
        List<List<IIngredient>> inputs=parseLines(pre);
        List<List<IIngredient>> outputs=parseLines(post);
        ICraftHandler ch=cr.getCraftHandlerFor(operation);
        if (ch != null) {
          ch.setup(inputs,outputs);
          addCrafting(ch);
        }
 else         throw new RecipeError("String_Node_Str" + operation);
      }
    }
 else {
      String operation=tokens.remove(0).toLowerCase();
      if (operation.equals("String_Node_Str") && (tokens.get(0).equals("String_Node_Str") || tokens.get(0).equals("String_Node_Str"))) {
        if (tokens.size() == 1) {
          data.exceptions=tokens.get(0).equals("String_Node_Str");
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str") && (tokens.get(0).equals("String_Node_Str") || tokens.get(0).equals("String_Node_Str"))) {
        if (tokens.size() == 1) {
          data.crash=tokens.get(0).equals("String_Node_Str");
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        if (tokens.size() == 1 && (tokens.get(0).equals("String_Node_Str") || tokens.get(0).equals("String_Node_Str"))) {
          data.erroronmissing=tokens.get(0).equals("String_Node_Str");
        }
 else         throw new RecipeError("String_Node_Str");
      }
 else       if (operation.equals("String_Node_Str")) {
        if (tokens.size() == 1)         (new RecipeHandler(this)).parseRecipes(loader,tokens.get(0));
 else         throw new RecipeError("String_Node_Str");
      }
 else       throw new RecipeError(operation + "String_Node_Str" + tokens.toString()+ "String_Node_Str");
    }
  }
 catch (  RecipeError e) {
    AELog.warning("String_Node_Str" + e.getMessage() + "String_Node_Str"+ line+ "String_Node_Str"+ file+ "String_Node_Str"+ tokens.toString());
    if (data.exceptions)     AELog.error(e);
    if (data.crash)     throw e;
  }
  tokens.clear();
}