diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index e978b86..c7fcdcc 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -436,11 +436,32 @@
     BOOT_LIBS = builder.build();
   }
 
-  private static final String LIB_PATH = TOOLS + "/linux/art/lib";
   private static final Path DX = getDxExecutablePath();
-  private static final String DEX2OAT = TOOLS + "/linux/art/bin/dex2oat";
-  private static final String ANGLER_DIR = TOOLS + "/linux/art/product/angler";
-  private static final String ANGLER_BOOT_IMAGE = ANGLER_DIR + "/system/framework/boot.art";
+
+  private static Path getDexVmPath(DexVm vm) {
+    return Paths.get(
+        TOOLS,
+        "linux",
+        vm.getVersion() == DexVm.Version.DEFAULT
+            ? "art"
+            : "art-" + vm.getVersion());
+  }
+
+  private static Path getDexVmLibPath(DexVm vm) {
+    return getDexVmPath(vm).resolve("lib");
+  }
+
+  private static Path getDex2OatPath(DexVm vm) {
+    return getDexVmPath(vm).resolve("bin").resolve("dex2oat");
+  }
+
+  private static Path getAnglerPath(DexVm vm) {
+    return getDexVmPath(vm).resolve("product").resolve("angler");
+  }
+
+  private static Path getAnglerBootImagePath(DexVm vm) {
+    return getAnglerPath(vm).resolve("system").resolve("framework").resolve("boot.art");
+  }
 
   public static byte[] getClassAsBytes(Class clazz) throws IOException {
     String s = clazz.getSimpleName() + ".class";
@@ -1120,22 +1141,27 @@
   }
 
   public static void runDex2Oat(Path file, Path outFile) throws IOException {
+    // TODO(b/79191363): Support running dex2oat for past android versions.
+    runDex2Oat(file, outFile, DexVm.ART_DEFAULT);
+  }
+
+  public static void runDex2Oat(Path file, Path outFile, DexVm vm) throws IOException {
     Assume.assumeTrue(ToolHelper.artSupported());
     // TODO(jmhenaff): find a way to run this on windows (push dex and run on device/emulator?)
     Assume.assumeTrue(!ToolHelper.isWindows());
     assert Files.exists(file);
     assert ByteStreams.toByteArray(Files.newInputStream(file)).length > 0;
     List<String> command = new ArrayList<>();
-    command.add(DEX2OAT);
-    command.add("--android-root=" + ANGLER_DIR);
+    command.add(getDex2OatPath(vm).toString());
+    command.add("--android-root=" + getAnglerPath(vm));
     command.add("--runtime-arg");
     command.add("-Xnorelocate");
-    command.add("--boot-image=" + ANGLER_BOOT_IMAGE);
+    command.add("--boot-image=" + getAnglerBootImagePath(vm));
     command.add("--dex-file=" + file.toAbsolutePath());
     command.add("--oat-file=" + outFile.toAbsolutePath());
     command.add("--instruction-set=arm64");
     ProcessBuilder builder = new ProcessBuilder(command);
-    builder.environment().put("LD_LIBRARY_PATH", LIB_PATH);
+    builder.environment().put("LD_LIBRARY_PATH", getDexVmLibPath(vm).toString());
     ProcessResult result = runProcess(builder);
     if (result.exitCode != 0) {
       fail("dex2oat failed, exit code " + result.exitCode + ", stderr:\n" + result.stderr);
diff --git a/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java b/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java
new file mode 100644
index 0000000..ec16097
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465.java
@@ -0,0 +1,36 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.regress.b77842465;
+
+import com.android.tools.r8.AsmTestBase;
+import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.D8;
+import com.android.tools.r8.D8Command;
+import com.android.tools.r8.OutputMode;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.DexVm;
+import com.android.tools.r8.origin.Origin;
+import java.io.IOException;
+import java.nio.file.Path;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class Regress77842465 extends AsmTestBase {
+
+  @Test
+  @Ignore("b/77842465")
+  public void test() throws CompilationFailedException, IOException {
+
+    Path dexOut = temp.getRoot().toPath().resolve("out.jar");
+    Path oatOut = temp.getRoot().toPath().resolve("out.odex");
+
+    D8.run(D8Command.builder()
+        .addClassProgramData(Regress77842465Dump.dump(), Origin.unknown())
+        .setOutput(dexOut, OutputMode.DexIndexed)
+        .setDisableDesugaring(true)
+        .build());
+
+    ToolHelper.runDex2Oat(dexOut, oatOut, DexVm.ART_6_0_1_HOST);
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465Dump.java b/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465Dump.java
new file mode 100644
index 0000000..7a5aaea
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/regress/b77842465/Regress77842465Dump.java
@@ -0,0 +1,394 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.regress.b77842465;
+
+import com.android.tools.r8.utils.DescriptorUtils;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+public class Regress77842465Dump implements Opcodes {
+
+  public static final String CLASS_NAME = "a.a";
+  public static final String CLASS_DESC = DescriptorUtils.javaTypeToDescriptor(CLASS_NAME);
+  public static final String CLASS_INTERNAL = DescriptorUtils.descriptorToInternalName(CLASS_DESC);
+
+  public static byte[] dump() {
+
+    ClassWriter cw = new ClassWriter(0);
+    FieldVisitor fv;
+    MethodVisitor mv;
+
+    cw.visit(
+        V1_7, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, CLASS_INTERNAL, null, "java/lang/Object", null);
+
+    {
+      fv = cw.visitField(0, "b", "I", null, null);
+      fv.visitEnd();
+    }
+    {
+      fv = cw.visitField(0, "c", "Ljava/lang/String;", null, null);
+      fv.visitEnd();
+    }
+    {
+      fv = cw.visitField(0, "d", "Ljava/lang/String;", null, null);
+      fv.visitEnd();
+    }
+    {
+      fv = cw.visitField(0, "g", "J", null, null);
+      fv.visitEnd();
+    }
+    {
+      fv = cw.visitField(0, "h", "J", null, null);
+      fv.visitEnd();
+    }
+
+    {
+      mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "a",
+          "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;IJ)" + CLASS_DESC,
+          null, null);
+      mv.visitCode();
+      Label l0 = new Label();
+      Label l1 = new Label();
+      Label l2 = new Label();
+      mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception");
+      Label l3 = new Label();
+      Label l4 = new Label();
+      Label l5 = new Label();
+      mv.visitTryCatchBlock(l3, l4, l5, "java/lang/Exception");
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitFieldInsn(GETFIELD, "java/lang/Object", "c", "Ljava/util/Map;");
+      mv.visitVarInsn(ASTORE, 3);
+      mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "currentTimeMillis", "()J", false);
+      mv.visitVarInsn(LSTORE, 8);
+      mv.visitInsn(LCONST_0);
+      mv.visitVarInsn(LSTORE, 10);
+      mv.visitInsn(LCONST_0);
+      mv.visitVarInsn(LSTORE, 12);
+      mv.visitInsn(LCONST_0);
+      mv.visitVarInsn(LSTORE, 14);
+      mv.visitInsn(LCONST_0);
+      mv.visitVarInsn(LSTORE, 16);
+      mv.visitInsn(LCONST_0);
+      mv.visitVarInsn(LSTORE, 18);
+      mv.visitInsn(LCONST_0);
+      mv.visitVarInsn(LSTORE, 20);
+      mv.visitInsn(ICONST_0);
+      mv.visitVarInsn(ISTORE, 7);
+      mv.visitInsn(ICONST_0);
+      mv.visitVarInsn(ISTORE, 22);
+      mv.visitTypeInsn(NEW, "java/util/ArrayList");
+      mv.visitMethodInsn(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", false);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Date");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      Label l6 = new Label();
+      mv.visitJumpInsn(IFNULL, l6);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I", true);
+      mv.visitJumpInsn(IFLE, l6);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Date");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(ICONST_0);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/lang/String");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      mv.visitJumpInsn(IFNULL, l6);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKESTATIC, CLASS_INTERNAL, "a", "(Ljava/lang/String;)J",
+          false);
+      mv.visitVarInsn(LSTORE, 10);
+      mv.visitLabel(l6);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Cache-Control");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      Label l7 = new Label();
+      mv.visitJumpInsn(IFNULL, l7);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I", true);
+      mv.visitJumpInsn(IFLE, l7);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Cache-Control");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(ICONST_0);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/lang/String");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      mv.visitJumpInsn(IFNULL, l7);
+      mv.visitInsn(ICONST_1);
+      mv.visitVarInsn(ISTORE, 7);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitLdcInsn(",");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "split",
+          "(Ljava/lang/String;)[Ljava/lang/String;", false);
+      mv.visitVarInsn(ASTORE, 23);
+      mv.visitInsn(ICONST_0);
+      mv.visitVarInsn(ISTORE, 24);
+      Label l8 = new Label();
+      mv.visitLabel(l8);
+      mv.visitVarInsn(ILOAD, 24);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitInsn(ARRAYLENGTH);
+      mv.visitJumpInsn(IF_ICMPGE, l7);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitVarInsn(ILOAD, 24);
+      mv.visitInsn(AALOAD);
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "trim", "()Ljava/lang/String;", false);
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 25);
+      mv.visitLdcInsn("no-cache");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z",
+          false);
+      Label l9 = new Label();
+      mv.visitJumpInsn(IFNE, l9);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitLdcInsn("no-store");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z",
+          false);
+      mv.visitJumpInsn(IFNE, l9);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitLdcInsn("max-age=");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "startsWith", "(Ljava/lang/String;)Z",
+          false);
+      Label l10 = new Label();
+      mv.visitJumpInsn(IFEQ, l10);
+      mv.visitLabel(l0);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitIntInsn(BIPUSH, 8);
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "substring", "(I)Ljava/lang/String;",
+          false);
+      mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "parseLong", "(Ljava/lang/String;)J",
+          false);
+      mv.visitVarInsn(LSTORE, 18);
+      mv.visitLabel(l1);
+      mv.visitJumpInsn(GOTO, l9);
+      mv.visitLabel(l2);
+      mv.visitVarInsn(ASTORE, 25);
+      mv.visitMethodInsn(INVOKESTATIC, CLASS_INTERNAL, "b", "()Ljava/lang/String;", false);
+      mv.visitInsn(POP);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "getMessage", "()Ljava/lang/String;",
+          false);
+      mv.visitInsn(POP);
+      mv.visitJumpInsn(GOTO, l9);
+      mv.visitLabel(l10);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitLdcInsn("stale-while-revalidate=");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "startsWith", "(Ljava/lang/String;)Z",
+          false);
+      Label l11 = new Label();
+      mv.visitJumpInsn(IFEQ, l11);
+      mv.visitLabel(l3);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitIntInsn(BIPUSH, 23);
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "substring", "(I)Ljava/lang/String;",
+          false);
+      mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "parseLong", "(Ljava/lang/String;)J",
+          false);
+      mv.visitVarInsn(LSTORE, 20);
+      mv.visitLabel(l4);
+      mv.visitJumpInsn(GOTO, l9);
+      mv.visitLabel(l5);
+      mv.visitVarInsn(ASTORE, 25);
+      mv.visitMethodInsn(INVOKESTATIC, CLASS_INTERNAL, "b", "()Ljava/lang/String;",
+          false);
+      mv.visitInsn(POP);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "getMessage", "()Ljava/lang/String;",
+          false);
+      mv.visitInsn(POP);
+      mv.visitJumpInsn(GOTO, l9);
+      mv.visitLabel(l11);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitLdcInsn("must-revalidate");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z",
+          false);
+      Label l12 = new Label();
+      mv.visitJumpInsn(IFNE, l12);
+      mv.visitVarInsn(ALOAD, 25);
+      mv.visitLdcInsn("proxy-revalidate");
+      mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z",
+          false);
+      mv.visitJumpInsn(IFEQ, l9);
+      mv.visitLabel(l12);
+      mv.visitInsn(ICONST_1);
+      mv.visitVarInsn(ISTORE, 22);
+      mv.visitLabel(l9);
+      mv.visitIincInsn(24, 1);
+      mv.visitJumpInsn(GOTO, l8);
+      mv.visitLabel(l7);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Expires");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      Label l13 = new Label();
+      mv.visitJumpInsn(IFNULL, l13);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I", true);
+      mv.visitJumpInsn(IFLE, l13);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Expires");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(ICONST_0);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/lang/String");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      mv.visitJumpInsn(IFNULL, l13);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKESTATIC, CLASS_INTERNAL, "a", "(Ljava/lang/String;)J",
+          false);
+      mv.visitVarInsn(LSTORE, 12);
+      mv.visitLabel(l13);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Last-Modified");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      Label l14 = new Label();
+      mv.visitJumpInsn(IFNULL, l14);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I", true);
+      mv.visitJumpInsn(IFLE, l14);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("Last-Modified");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(ICONST_0);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/lang/String");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      mv.visitJumpInsn(IFNULL, l14);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKESTATIC, CLASS_INTERNAL, "a", "(Ljava/lang/String;)J",
+          false);
+      mv.visitInsn(POP2);
+      mv.visitLabel(l14);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("ETag");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(DUP);
+      mv.visitVarInsn(ASTORE, 23);
+      Label l15 = new Label();
+      mv.visitJumpInsn(IFNULL, l15);
+      mv.visitVarInsn(ALOAD, 23);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I", true);
+      mv.visitJumpInsn(IFLE, l15);
+      mv.visitVarInsn(ALOAD, 3);
+      mv.visitLdcInsn("ETag");
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "get",
+          "(Ljava/lang/Object;)Ljava/lang/Object;", true);
+      mv.visitTypeInsn(CHECKCAST, "java/util/List");
+      mv.visitInsn(ICONST_0);
+      mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", true);
+      mv.visitInsn(POP);
+      mv.visitLabel(l15);
+      mv.visitVarInsn(ILOAD, 7);
+      Label l16 = new Label();
+      mv.visitJumpInsn(IFEQ, l16);
+      mv.visitVarInsn(LLOAD, 8);
+      mv.visitVarInsn(LLOAD, 18);
+      mv.visitLdcInsn(new Long(1000L));
+      mv.visitInsn(LMUL);
+      mv.visitInsn(LADD);
+      mv.visitVarInsn(LSTORE, 14);
+      mv.visitVarInsn(ILOAD, 22);
+      Label l17 = new Label();
+      mv.visitJumpInsn(IFEQ, l17);
+      mv.visitVarInsn(LLOAD, 14);
+      Label l18 = new Label();
+      mv.visitJumpInsn(GOTO, l18);
+      mv.visitLabel(l17);
+      mv.visitVarInsn(LLOAD, 14);
+      mv.visitVarInsn(LLOAD, 20);
+      mv.visitLdcInsn(new Long(1000L));
+      mv.visitInsn(LMUL);
+      mv.visitInsn(LADD);
+      mv.visitLabel(l18);
+      mv.visitVarInsn(LSTORE, 16);
+      Label l19 = new Label();
+      mv.visitJumpInsn(GOTO, l19);
+      mv.visitLabel(l16);
+      mv.visitVarInsn(LLOAD, 10);
+      mv.visitInsn(LCONST_0);
+      mv.visitInsn(LCMP);
+      mv.visitJumpInsn(IFLE, l19);
+      mv.visitVarInsn(LLOAD, 12);
+      mv.visitVarInsn(LLOAD, 10);
+      mv.visitInsn(LCMP);
+      mv.visitJumpInsn(IFLT, l19);
+      mv.visitVarInsn(LLOAD, 8);
+      mv.visitVarInsn(LLOAD, 12);
+      mv.visitVarInsn(LLOAD, 10);
+      mv.visitInsn(LSUB);
+      mv.visitInsn(LADD);
+      mv.visitInsn(DUP2);
+      mv.visitVarInsn(LSTORE, 14);
+      mv.visitVarInsn(LSTORE, 16);
+      mv.visitLabel(l19);
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitVarInsn(ALOAD, 1);
+      mv.visitFieldInsn(PUTFIELD, CLASS_INTERNAL, "c", "Ljava/lang/String;");
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitVarInsn(ALOAD, 2);
+      mv.visitFieldInsn(PUTFIELD, CLASS_INTERNAL, "d", "Ljava/lang/String;");
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitVarInsn(ILOAD, 4);
+      mv.visitFieldInsn(PUTFIELD, CLASS_INTERNAL, "b", "I");
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitVarInsn(LLOAD, 8);
+      mv.visitVarInsn(LLOAD, 5);
+      mv.visitLdcInsn(new Long(1000L));
+      mv.visitInsn(LMUL);
+      mv.visitInsn(LADD);
+      mv.visitFieldInsn(PUTFIELD, CLASS_INTERNAL, "g", "J");
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitVarInsn(LLOAD, 14);
+      mv.visitFieldInsn(PUTFIELD, CLASS_INTERNAL, "h", "J");
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitFieldInsn(GETFIELD, CLASS_INTERNAL, "g", "J");
+      mv.visitVarInsn(LLOAD, 16);
+      mv.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "min", "(JJ)J", false);
+      mv.visitFieldInsn(PUTFIELD, CLASS_INTERNAL, "g", "J");
+      mv.visitVarInsn(ALOAD, 0);
+      mv.visitInsn(ARETURN);
+      mv.visitMaxs(7, 26);
+      mv.visitEnd();
+    }
+
+    cw.visitEnd();
+
+    return cw.toByteArray();
+  }
+}
+
