public HashMap<String, ClassNode> run(){
        System.out.println("{*Starting Deob*");
        if (!useOutput) {
            classes = new MethodRemoval(classes).refactor();
        } else {
            try {
                List<String> lines = Files.readAllLines(Paths.get("output.txt"), Charset.defaultCharset());
                int i = 0;
                while (i < lines.size()) {
                    System.out.println((String)lines.get(i));
                    i++;
                }
            }
            catch ( IOException e)
            {
                e.printStackTrace();
            }
        }
        if (!dumpClasses) {
            classes = new ControlFlowCorrection(classes).refactor();
        } else {
            classes = new ArithmeticDeob(classes).refactor();
            new DumpJar(classes).createJar();
        }
        if (!useOutput) {
            try {
                writer = new BufferedWriter( new FileWriter("output.txt"));
                int i = 0;
                while (i < deobOutput.size()) {
                    writer.write((String)deobOutput.get(i)); //store deob debug in output.txt when useOutput = false
                    i++;
                }
            }
            catch ( IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                try
                {
                    if ( writer != null)
                        writer.close();
                }
                catch ( IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("*Ending Deob*}");
        return classes;
    }