public Updater(ThreadGroup threadGroup, JarInputStream in) {
        super(threadGroup);
        this.manifest = in.getManifest();
        JarEntry entry;
        try {
            while ((entry = in.getNextJarEntry()) != null) {
                byte[] bytes = IOUtil.read(in);
                if (entry.getName().endsWith(".class")) {
                    ClassNode cn = ASMUtil.newClassNode(bytes);
                    classNodes.put(cn.name, cn);
                } else {
                    files.put(entry.getName(), bytes);
                }
            }
            Class[] classes = LocalClassLoader.getClassesIn("edu.revtek.updater.container", true);
            for (Class c : classes) {
                if (AbstractContainer.class.isAssignableFrom(c)) {
                    containers.add((AbstractContainer) c.newInstance());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }