Merge "Revert "Revert "Deoptimization-based bce."""
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index c9831af..9b7e01c 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -51,7 +51,7 @@
   void EmitNativeCode(CodeGenerator* codegen) OVERRIDE {
     __ Bind(GetEntryLabel());
     __ fs()->call(Address::Absolute(QUICK_ENTRYPOINT_OFFSET(kX86WordSize, pThrowNullPointer)));
-    codegen->RecordPcInfo(instruction_, instruction_->GetDexPc());
+    RecordPcInfo(codegen, instruction_, instruction_->GetDexPc());
   }
 
  private:
@@ -66,7 +66,7 @@
   void EmitNativeCode(CodeGenerator* codegen) OVERRIDE {
     __ Bind(GetEntryLabel());
     __ fs()->call(Address::Absolute(QUICK_ENTRYPOINT_OFFSET(kX86WordSize, pThrowDivZero)));
-    codegen->RecordPcInfo(instruction_, instruction_->GetDexPc());
+    RecordPcInfo(codegen, instruction_, instruction_->GetDexPc());
   }
 
  private:
@@ -115,7 +115,7 @@
         length_location_,
         Location::RegisterLocation(calling_convention.GetRegisterAt(1)));
     __ fs()->call(Address::Absolute(QUICK_ENTRYPOINT_OFFSET(kX86WordSize, pThrowArrayBounds)));
-    codegen->RecordPcInfo(instruction_, instruction_->GetDexPc());
+    RecordPcInfo(codegen, instruction_, instruction_->GetDexPc());
   }
 
  private:
@@ -136,7 +136,7 @@
     __ Bind(GetEntryLabel());
     SaveLiveRegisters(codegen, instruction_->GetLocations());
     __ fs()->call(Address::Absolute(QUICK_ENTRYPOINT_OFFSET(kX86WordSize, pTestSuspend)));
-    codegen->RecordPcInfo(instruction_, instruction_->GetDexPc());
+    RecordPcInfo(codegen, instruction_, instruction_->GetDexPc());
     RestoreLiveRegisters(codegen, instruction_->GetLocations());
     if (successor_ == nullptr) {
       __ jmp(GetReturnLabel());
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc
index 0c4c0b3..b8940e3 100644
--- a/compiler/optimizing/code_generator_x86_64.cc
+++ b/compiler/optimizing/code_generator_x86_64.cc
@@ -627,7 +627,7 @@
                source.AsFpuRegister<XmmRegister>());
     } else if (source.IsConstant()) {
       HConstant* constant = source.GetConstant();
-      int64_t value = constant->AsLongConstant()->GetValue();
+      int64_t value;
       if (constant->IsDoubleConstant()) {
         value = bit_cast<int64_t, double>(constant->AsDoubleConstant()->GetValue());
       } else {
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index c73d8cc..6827cd0 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -2327,6 +2327,9 @@
   // Calls runtime so needs an environment.
   bool NeedsEnvironment() const OVERRIDE { return true; }
 
+  // May throw NegativeArraySizeException, OutOfMemoryError, etc.
+  bool CanThrow() const OVERRIDE { return true; }
+
   bool CanBeNull() const OVERRIDE { return false; }
 
   QuickEntrypointEnum GetEntrypoint() const { return entrypoint_; }
diff --git a/runtime/interpreter/unstarted_runtime.cc b/runtime/interpreter/unstarted_runtime.cc
index 1b08e80..281f332 100644
--- a/runtime/interpreter/unstarted_runtime.cc
+++ b/runtime/interpreter/unstarted_runtime.cc
@@ -19,6 +19,8 @@
 #include <cmath>
 #include <unordered_map>
 
+#include "ScopedLocalRef.h"
+
 #include "base/logging.h"
 #include "base/macros.h"
 #include "class_linker.h"
@@ -467,18 +469,21 @@
   JNIEnv* env = self->GetJniEnv();
   DCHECK(env != nullptr);
   void* address = const_cast<void*>(reinterpret_cast<const void*>(dex_file->Begin()));
-  jobject byte_buffer = env->NewDirectByteBuffer(address, dex_file->Size());
-  if (byte_buffer == nullptr) {
+  ScopedLocalRef<jobject> byte_buffer(env, env->NewDirectByteBuffer(address, dex_file->Size()));
+  if (byte_buffer.get() == nullptr) {
     DCHECK(self->IsExceptionPending());
     return nullptr;
   }
 
   jvalue args[1];
-  args[0].l = byte_buffer;
-  return self->DecodeJObject(
-      env->CallStaticObjectMethodA(WellKnownClasses::com_android_dex_Dex,
-                                   WellKnownClasses::com_android_dex_Dex_create,
-                                   args));
+  args[0].l = byte_buffer.get();
+
+  ScopedLocalRef<jobject> dex(env, env->CallStaticObjectMethodA(
+      WellKnownClasses::com_android_dex_Dex,
+      WellKnownClasses::com_android_dex_Dex_create,
+      args));
+
+  return self->DecodeJObject(dex.get());
 }
 
 static void UnstartedDexCacheGetDexNative(
diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc
index 337c5df..89779bc 100644
--- a/runtime/parsed_options.cc
+++ b/runtime/parsed_options.cc
@@ -250,7 +250,7 @@
       .Define("-XX:NativeBridge=_")
           .WithType<std::string>()
           .IntoKey(M::NativeBridge)
-      .Define("-Xzygote-max-failed-boots=_")
+      .Define("-Xzygote-max-boot-retry=_")
           .WithType<unsigned int>()
           .IntoKey(M::ZygoteMaxFailedBoots)
       .Define("-Xno-dex-file-fallback")
diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def
index 1f273cf..339f925 100644
--- a/runtime/runtime_options.def
+++ b/runtime/runtime_options.def
@@ -119,7 +119,7 @@
                                                                           // We don't call abort(3) by default; see
                                                                           // Runtime::Abort.
 RUNTIME_OPTIONS_KEY (void (*)(),          HookAbort,                      nullptr)
-RUNTIME_OPTIONS_KEY (unsigned int,        ZygoteMaxFailedBoots,           1)
+RUNTIME_OPTIONS_KEY (unsigned int,        ZygoteMaxFailedBoots,           10)
 RUNTIME_OPTIONS_KEY (Unit,                NoDexFileFallback)
 
 #undef RUNTIME_OPTIONS_KEY
diff --git a/runtime/transaction.cc b/runtime/transaction.cc
index 3b708f6..186cfea 100644
--- a/runtime/transaction.cc
+++ b/runtime/transaction.cc
@@ -75,7 +75,11 @@
     CHECK(IsAborted()) << "Rethrow InternalError while transaction is not aborted";
   }
   std::string abort_msg(GetAbortMessage());
-  self->ThrowNewWrappedException("Ljava/lang/InternalError;", abort_msg.c_str());
+  // Temporary workaround for b/20019689.
+  if (self->IsExceptionPending()) {
+    self->ClearException();
+  }
+  self->ThrowNewException("Ljava/lang/InternalError;", abort_msg.c_str());
 }
 
 bool Transaction::IsAborted() {
diff --git a/sigchainlib/sigchain.cc b/sigchainlib/sigchain.cc
index 2eb518c..b4bd68b 100644
--- a/sigchainlib/sigchain.cc
+++ b/sigchainlib/sigchain.cc
@@ -136,15 +136,15 @@
     if (action.sa_handler != NULL) {
       action.sa_handler(sig);
     } else {
-       signal(sig, SIG_DFL);
-       raise(sig);
+      signal(sig, SIG_DFL);
+      raise(sig);
     }
   } else {
     if (action.sa_sigaction != NULL) {
       action.sa_sigaction(sig, info, context);
     } else {
-       signal(sig, SIG_DFL);
-       raise(sig);
+      signal(sig, SIG_DFL);
+      raise(sig);
     }
   }
 }
@@ -249,7 +249,7 @@
       // we can't allow the user to block that signal.
       for (int i = 0 ; i < _NSIG; ++i) {
         if (user_sigactions[i].IsClaimed() && sigismember(&tmpset, i)) {
-            sigdelset(&tmpset, i);
+          sigdelset(&tmpset, i);
         }
       }
     }
@@ -286,8 +286,8 @@
   if (linked_sigaction_sym == nullptr) {
     linked_sigaction_sym = dlsym(RTLD_DEFAULT, "sigaction");
     if (linked_sigaction_sym == nullptr ||
-      linked_sigaction_sym == reinterpret_cast<void*>(sigaction)) {
-        linked_sigaction_sym = nullptr;
+        linked_sigaction_sym == reinterpret_cast<void*>(sigaction)) {
+      linked_sigaction_sym = nullptr;
     }
   }
 
@@ -296,7 +296,7 @@
     linked_sigprocmask_sym = dlsym(RTLD_DEFAULT, "sigprocmask");
     if (linked_sigprocmask_sym == nullptr ||
         linked_sigprocmask_sym == reinterpret_cast<void*>(sigprocmask)) {
-         linked_sigprocmask_sym = nullptr;
+      linked_sigprocmask_sym = nullptr;
     }
   }
   initialized = true;
diff --git a/test/412-new-array/src/Main.java b/test/412-new-array/src/Main.java
index 168420c..e4669b8 100644
--- a/test/412-new-array/src/Main.java
+++ b/test/412-new-array/src/Main.java
@@ -26,6 +26,7 @@
     $opt$TestWithInitializations();
     $opt$TestNegativeValueNewByteArray();
     $opt$TestNegativeValueNewCharArray();
+    testNegativeArraySize();
     testSmaliFilledNewArray();
     testSmaliFillArrayData();
     testSmaliVerifyError();
@@ -129,6 +130,21 @@
     }
   }
 
+  static void testNegativeArraySize() {
+    int i = 0;
+    try {
+      $opt$TestNegativeArraySize();
+    } catch (NegativeArraySizeException e) {
+      i = 1;
+    }
+    assertEquals(i, 1);
+  }
+
+  static int[] $opt$TestNegativeArraySize() {
+    int[] array = new int[-1];
+    return null;
+  }
+
   public static void testSmaliFilledNewArray() throws Exception {
     Class<?> c = Class.forName("FilledNewArray");
 
diff --git a/test/421-large-frame/src/Main.java b/test/421-large-frame/src/Main.java
index dae72fb..46545b8 100644
--- a/test/421-large-frame/src/Main.java
+++ b/test/421-large-frame/src/Main.java
@@ -25,1011 +25,2026 @@
   }
 
   public static void main(String[] args) {
+    long dummy = 0L;
+    // Sum[i = 0..499](i) = 499 * 500 / 2 = 124750L.
+    assertEquals(124750L, $opt$LargeFrame(dummy));
     // Sum[i = 0..999](i) = 999 * 1000 / 2 = 499500L.
-    assertEquals(499500L, $opt$LargeFrame());
+    assertEquals(499500L, HugeFrame(dummy));
   }
 
-  static long $opt$LargeFrame() {
-    long l0 = 0L;
-    long l1 = 1L;
-    long l2 = 2L;
-    long l3 = 3L;
-    long l4 = 4L;
-    long l5 = 5L;
-    long l6 = 6L;
-    long l7 = 7L;
-    long l8 = 8L;
-    long l9 = 9L;
-    long l10 = 10L;
-    long l11 = 11L;
-    long l12 = 12L;
-    long l13 = 13L;
-    long l14 = 14L;
-    long l15 = 15L;
-    long l16 = 16L;
-    long l17 = 17L;
-    long l18 = 18L;
-    long l19 = 19L;
-    long l20 = 20L;
-    long l21 = 21L;
-    long l22 = 22L;
-    long l23 = 23L;
-    long l24 = 24L;
-    long l25 = 25L;
-    long l26 = 26L;
-    long l27 = 27L;
-    long l28 = 28L;
-    long l29 = 29L;
-    long l30 = 30L;
-    long l31 = 31L;
-    long l32 = 32L;
-    long l33 = 33L;
-    long l34 = 34L;
-    long l35 = 35L;
-    long l36 = 36L;
-    long l37 = 37L;
-    long l38 = 38L;
-    long l39 = 39L;
-    long l40 = 40L;
-    long l41 = 41L;
-    long l42 = 42L;
-    long l43 = 43L;
-    long l44 = 44L;
-    long l45 = 45L;
-    long l46 = 46L;
-    long l47 = 47L;
-    long l48 = 48L;
-    long l49 = 49L;
-    long l50 = 50L;
-    long l51 = 51L;
-    long l52 = 52L;
-    long l53 = 53L;
-    long l54 = 54L;
-    long l55 = 55L;
-    long l56 = 56L;
-    long l57 = 57L;
-    long l58 = 58L;
-    long l59 = 59L;
-    long l60 = 60L;
-    long l61 = 61L;
-    long l62 = 62L;
-    long l63 = 63L;
-    long l64 = 64L;
-    long l65 = 65L;
-    long l66 = 66L;
-    long l67 = 67L;
-    long l68 = 68L;
-    long l69 = 69L;
-    long l70 = 70L;
-    long l71 = 71L;
-    long l72 = 72L;
-    long l73 = 73L;
-    long l74 = 74L;
-    long l75 = 75L;
-    long l76 = 76L;
-    long l77 = 77L;
-    long l78 = 78L;
-    long l79 = 79L;
-    long l80 = 80L;
-    long l81 = 81L;
-    long l82 = 82L;
-    long l83 = 83L;
-    long l84 = 84L;
-    long l85 = 85L;
-    long l86 = 86L;
-    long l87 = 87L;
-    long l88 = 88L;
-    long l89 = 89L;
-    long l90 = 90L;
-    long l91 = 91L;
-    long l92 = 92L;
-    long l93 = 93L;
-    long l94 = 94L;
-    long l95 = 95L;
-    long l96 = 96L;
-    long l97 = 97L;
-    long l98 = 98L;
-    long l99 = 99L;
-    long l100 = 100L;
-    long l101 = 101L;
-    long l102 = 102L;
-    long l103 = 103L;
-    long l104 = 104L;
-    long l105 = 105L;
-    long l106 = 106L;
-    long l107 = 107L;
-    long l108 = 108L;
-    long l109 = 109L;
-    long l110 = 110L;
-    long l111 = 111L;
-    long l112 = 112L;
-    long l113 = 113L;
-    long l114 = 114L;
-    long l115 = 115L;
-    long l116 = 116L;
-    long l117 = 117L;
-    long l118 = 118L;
-    long l119 = 119L;
-    long l120 = 120L;
-    long l121 = 121L;
-    long l122 = 122L;
-    long l123 = 123L;
-    long l124 = 124L;
-    long l125 = 125L;
-    long l126 = 126L;
-    long l127 = 127L;
-    long l128 = 128L;
-    long l129 = 129L;
-    long l130 = 130L;
-    long l131 = 131L;
-    long l132 = 132L;
-    long l133 = 133L;
-    long l134 = 134L;
-    long l135 = 135L;
-    long l136 = 136L;
-    long l137 = 137L;
-    long l138 = 138L;
-    long l139 = 139L;
-    long l140 = 140L;
-    long l141 = 141L;
-    long l142 = 142L;
-    long l143 = 143L;
-    long l144 = 144L;
-    long l145 = 145L;
-    long l146 = 146L;
-    long l147 = 147L;
-    long l148 = 148L;
-    long l149 = 149L;
-    long l150 = 150L;
-    long l151 = 151L;
-    long l152 = 152L;
-    long l153 = 153L;
-    long l154 = 154L;
-    long l155 = 155L;
-    long l156 = 156L;
-    long l157 = 157L;
-    long l158 = 158L;
-    long l159 = 159L;
-    long l160 = 160L;
-    long l161 = 161L;
-    long l162 = 162L;
-    long l163 = 163L;
-    long l164 = 164L;
-    long l165 = 165L;
-    long l166 = 166L;
-    long l167 = 167L;
-    long l168 = 168L;
-    long l169 = 169L;
-    long l170 = 170L;
-    long l171 = 171L;
-    long l172 = 172L;
-    long l173 = 173L;
-    long l174 = 174L;
-    long l175 = 175L;
-    long l176 = 176L;
-    long l177 = 177L;
-    long l178 = 178L;
-    long l179 = 179L;
-    long l180 = 180L;
-    long l181 = 181L;
-    long l182 = 182L;
-    long l183 = 183L;
-    long l184 = 184L;
-    long l185 = 185L;
-    long l186 = 186L;
-    long l187 = 187L;
-    long l188 = 188L;
-    long l189 = 189L;
-    long l190 = 190L;
-    long l191 = 191L;
-    long l192 = 192L;
-    long l193 = 193L;
-    long l194 = 194L;
-    long l195 = 195L;
-    long l196 = 196L;
-    long l197 = 197L;
-    long l198 = 198L;
-    long l199 = 199L;
-    long l200 = 200L;
-    long l201 = 201L;
-    long l202 = 202L;
-    long l203 = 203L;
-    long l204 = 204L;
-    long l205 = 205L;
-    long l206 = 206L;
-    long l207 = 207L;
-    long l208 = 208L;
-    long l209 = 209L;
-    long l210 = 210L;
-    long l211 = 211L;
-    long l212 = 212L;
-    long l213 = 213L;
-    long l214 = 214L;
-    long l215 = 215L;
-    long l216 = 216L;
-    long l217 = 217L;
-    long l218 = 218L;
-    long l219 = 219L;
-    long l220 = 220L;
-    long l221 = 221L;
-    long l222 = 222L;
-    long l223 = 223L;
-    long l224 = 224L;
-    long l225 = 225L;
-    long l226 = 226L;
-    long l227 = 227L;
-    long l228 = 228L;
-    long l229 = 229L;
-    long l230 = 230L;
-    long l231 = 231L;
-    long l232 = 232L;
-    long l233 = 233L;
-    long l234 = 234L;
-    long l235 = 235L;
-    long l236 = 236L;
-    long l237 = 237L;
-    long l238 = 238L;
-    long l239 = 239L;
-    long l240 = 240L;
-    long l241 = 241L;
-    long l242 = 242L;
-    long l243 = 243L;
-    long l244 = 244L;
-    long l245 = 245L;
-    long l246 = 246L;
-    long l247 = 247L;
-    long l248 = 248L;
-    long l249 = 249L;
-    long l250 = 250L;
-    long l251 = 251L;
-    long l252 = 252L;
-    long l253 = 253L;
-    long l254 = 254L;
-    long l255 = 255L;
-    long l256 = 256L;
-    long l257 = 257L;
-    long l258 = 258L;
-    long l259 = 259L;
-    long l260 = 260L;
-    long l261 = 261L;
-    long l262 = 262L;
-    long l263 = 263L;
-    long l264 = 264L;
-    long l265 = 265L;
-    long l266 = 266L;
-    long l267 = 267L;
-    long l268 = 268L;
-    long l269 = 269L;
-    long l270 = 270L;
-    long l271 = 271L;
-    long l272 = 272L;
-    long l273 = 273L;
-    long l274 = 274L;
-    long l275 = 275L;
-    long l276 = 276L;
-    long l277 = 277L;
-    long l278 = 278L;
-    long l279 = 279L;
-    long l280 = 280L;
-    long l281 = 281L;
-    long l282 = 282L;
-    long l283 = 283L;
-    long l284 = 284L;
-    long l285 = 285L;
-    long l286 = 286L;
-    long l287 = 287L;
-    long l288 = 288L;
-    long l289 = 289L;
-    long l290 = 290L;
-    long l291 = 291L;
-    long l292 = 292L;
-    long l293 = 293L;
-    long l294 = 294L;
-    long l295 = 295L;
-    long l296 = 296L;
-    long l297 = 297L;
-    long l298 = 298L;
-    long l299 = 299L;
-    long l300 = 300L;
-    long l301 = 301L;
-    long l302 = 302L;
-    long l303 = 303L;
-    long l304 = 304L;
-    long l305 = 305L;
-    long l306 = 306L;
-    long l307 = 307L;
-    long l308 = 308L;
-    long l309 = 309L;
-    long l310 = 310L;
-    long l311 = 311L;
-    long l312 = 312L;
-    long l313 = 313L;
-    long l314 = 314L;
-    long l315 = 315L;
-    long l316 = 316L;
-    long l317 = 317L;
-    long l318 = 318L;
-    long l319 = 319L;
-    long l320 = 320L;
-    long l321 = 321L;
-    long l322 = 322L;
-    long l323 = 323L;
-    long l324 = 324L;
-    long l325 = 325L;
-    long l326 = 326L;
-    long l327 = 327L;
-    long l328 = 328L;
-    long l329 = 329L;
-    long l330 = 330L;
-    long l331 = 331L;
-    long l332 = 332L;
-    long l333 = 333L;
-    long l334 = 334L;
-    long l335 = 335L;
-    long l336 = 336L;
-    long l337 = 337L;
-    long l338 = 338L;
-    long l339 = 339L;
-    long l340 = 340L;
-    long l341 = 341L;
-    long l342 = 342L;
-    long l343 = 343L;
-    long l344 = 344L;
-    long l345 = 345L;
-    long l346 = 346L;
-    long l347 = 347L;
-    long l348 = 348L;
-    long l349 = 349L;
-    long l350 = 350L;
-    long l351 = 351L;
-    long l352 = 352L;
-    long l353 = 353L;
-    long l354 = 354L;
-    long l355 = 355L;
-    long l356 = 356L;
-    long l357 = 357L;
-    long l358 = 358L;
-    long l359 = 359L;
-    long l360 = 360L;
-    long l361 = 361L;
-    long l362 = 362L;
-    long l363 = 363L;
-    long l364 = 364L;
-    long l365 = 365L;
-    long l366 = 366L;
-    long l367 = 367L;
-    long l368 = 368L;
-    long l369 = 369L;
-    long l370 = 370L;
-    long l371 = 371L;
-    long l372 = 372L;
-    long l373 = 373L;
-    long l374 = 374L;
-    long l375 = 375L;
-    long l376 = 376L;
-    long l377 = 377L;
-    long l378 = 378L;
-    long l379 = 379L;
-    long l380 = 380L;
-    long l381 = 381L;
-    long l382 = 382L;
-    long l383 = 383L;
-    long l384 = 384L;
-    long l385 = 385L;
-    long l386 = 386L;
-    long l387 = 387L;
-    long l388 = 388L;
-    long l389 = 389L;
-    long l390 = 390L;
-    long l391 = 391L;
-    long l392 = 392L;
-    long l393 = 393L;
-    long l394 = 394L;
-    long l395 = 395L;
-    long l396 = 396L;
-    long l397 = 397L;
-    long l398 = 398L;
-    long l399 = 399L;
-    long l400 = 400L;
-    long l401 = 401L;
-    long l402 = 402L;
-    long l403 = 403L;
-    long l404 = 404L;
-    long l405 = 405L;
-    long l406 = 406L;
-    long l407 = 407L;
-    long l408 = 408L;
-    long l409 = 409L;
-    long l410 = 410L;
-    long l411 = 411L;
-    long l412 = 412L;
-    long l413 = 413L;
-    long l414 = 414L;
-    long l415 = 415L;
-    long l416 = 416L;
-    long l417 = 417L;
-    long l418 = 418L;
-    long l419 = 419L;
-    long l420 = 420L;
-    long l421 = 421L;
-    long l422 = 422L;
-    long l423 = 423L;
-    long l424 = 424L;
-    long l425 = 425L;
-    long l426 = 426L;
-    long l427 = 427L;
-    long l428 = 428L;
-    long l429 = 429L;
-    long l430 = 430L;
-    long l431 = 431L;
-    long l432 = 432L;
-    long l433 = 433L;
-    long l434 = 434L;
-    long l435 = 435L;
-    long l436 = 436L;
-    long l437 = 437L;
-    long l438 = 438L;
-    long l439 = 439L;
-    long l440 = 440L;
-    long l441 = 441L;
-    long l442 = 442L;
-    long l443 = 443L;
-    long l444 = 444L;
-    long l445 = 445L;
-    long l446 = 446L;
-    long l447 = 447L;
-    long l448 = 448L;
-    long l449 = 449L;
-    long l450 = 450L;
-    long l451 = 451L;
-    long l452 = 452L;
-    long l453 = 453L;
-    long l454 = 454L;
-    long l455 = 455L;
-    long l456 = 456L;
-    long l457 = 457L;
-    long l458 = 458L;
-    long l459 = 459L;
-    long l460 = 460L;
-    long l461 = 461L;
-    long l462 = 462L;
-    long l463 = 463L;
-    long l464 = 464L;
-    long l465 = 465L;
-    long l466 = 466L;
-    long l467 = 467L;
-    long l468 = 468L;
-    long l469 = 469L;
-    long l470 = 470L;
-    long l471 = 471L;
-    long l472 = 472L;
-    long l473 = 473L;
-    long l474 = 474L;
-    long l475 = 475L;
-    long l476 = 476L;
-    long l477 = 477L;
-    long l478 = 478L;
-    long l479 = 479L;
-    long l480 = 480L;
-    long l481 = 481L;
-    long l482 = 482L;
-    long l483 = 483L;
-    long l484 = 484L;
-    long l485 = 485L;
-    long l486 = 486L;
-    long l487 = 487L;
-    long l488 = 488L;
-    long l489 = 489L;
-    long l490 = 490L;
-    long l491 = 491L;
-    long l492 = 492L;
-    long l493 = 493L;
-    long l494 = 494L;
-    long l495 = 495L;
-    long l496 = 496L;
-    long l497 = 497L;
-    long l498 = 498L;
-    long l499 = 499L;
-    long l500 = 500L;
-    long l501 = 501L;
-    long l502 = 502L;
-    long l503 = 503L;
-    long l504 = 504L;
-    long l505 = 505L;
-    long l506 = 506L;
-    long l507 = 507L;
-    long l508 = 508L;
-    long l509 = 509L;
-    long l510 = 510L;
-    long l511 = 511L;
-    long l512 = 512L;
-    long l513 = 513L;
-    long l514 = 514L;
-    long l515 = 515L;
-    long l516 = 516L;
-    long l517 = 517L;
-    long l518 = 518L;
-    long l519 = 519L;
-    long l520 = 520L;
-    long l521 = 521L;
-    long l522 = 522L;
-    long l523 = 523L;
-    long l524 = 524L;
-    long l525 = 525L;
-    long l526 = 526L;
-    long l527 = 527L;
-    long l528 = 528L;
-    long l529 = 529L;
-    long l530 = 530L;
-    long l531 = 531L;
-    long l532 = 532L;
-    long l533 = 533L;
-    long l534 = 534L;
-    long l535 = 535L;
-    long l536 = 536L;
-    long l537 = 537L;
-    long l538 = 538L;
-    long l539 = 539L;
-    long l540 = 540L;
-    long l541 = 541L;
-    long l542 = 542L;
-    long l543 = 543L;
-    long l544 = 544L;
-    long l545 = 545L;
-    long l546 = 546L;
-    long l547 = 547L;
-    long l548 = 548L;
-    long l549 = 549L;
-    long l550 = 550L;
-    long l551 = 551L;
-    long l552 = 552L;
-    long l553 = 553L;
-    long l554 = 554L;
-    long l555 = 555L;
-    long l556 = 556L;
-    long l557 = 557L;
-    long l558 = 558L;
-    long l559 = 559L;
-    long l560 = 560L;
-    long l561 = 561L;
-    long l562 = 562L;
-    long l563 = 563L;
-    long l564 = 564L;
-    long l565 = 565L;
-    long l566 = 566L;
-    long l567 = 567L;
-    long l568 = 568L;
-    long l569 = 569L;
-    long l570 = 570L;
-    long l571 = 571L;
-    long l572 = 572L;
-    long l573 = 573L;
-    long l574 = 574L;
-    long l575 = 575L;
-    long l576 = 576L;
-    long l577 = 577L;
-    long l578 = 578L;
-    long l579 = 579L;
-    long l580 = 580L;
-    long l581 = 581L;
-    long l582 = 582L;
-    long l583 = 583L;
-    long l584 = 584L;
-    long l585 = 585L;
-    long l586 = 586L;
-    long l587 = 587L;
-    long l588 = 588L;
-    long l589 = 589L;
-    long l590 = 590L;
-    long l591 = 591L;
-    long l592 = 592L;
-    long l593 = 593L;
-    long l594 = 594L;
-    long l595 = 595L;
-    long l596 = 596L;
-    long l597 = 597L;
-    long l598 = 598L;
-    long l599 = 599L;
-    long l600 = 600L;
-    long l601 = 601L;
-    long l602 = 602L;
-    long l603 = 603L;
-    long l604 = 604L;
-    long l605 = 605L;
-    long l606 = 606L;
-    long l607 = 607L;
-    long l608 = 608L;
-    long l609 = 609L;
-    long l610 = 610L;
-    long l611 = 611L;
-    long l612 = 612L;
-    long l613 = 613L;
-    long l614 = 614L;
-    long l615 = 615L;
-    long l616 = 616L;
-    long l617 = 617L;
-    long l618 = 618L;
-    long l619 = 619L;
-    long l620 = 620L;
-    long l621 = 621L;
-    long l622 = 622L;
-    long l623 = 623L;
-    long l624 = 624L;
-    long l625 = 625L;
-    long l626 = 626L;
-    long l627 = 627L;
-    long l628 = 628L;
-    long l629 = 629L;
-    long l630 = 630L;
-    long l631 = 631L;
-    long l632 = 632L;
-    long l633 = 633L;
-    long l634 = 634L;
-    long l635 = 635L;
-    long l636 = 636L;
-    long l637 = 637L;
-    long l638 = 638L;
-    long l639 = 639L;
-    long l640 = 640L;
-    long l641 = 641L;
-    long l642 = 642L;
-    long l643 = 643L;
-    long l644 = 644L;
-    long l645 = 645L;
-    long l646 = 646L;
-    long l647 = 647L;
-    long l648 = 648L;
-    long l649 = 649L;
-    long l650 = 650L;
-    long l651 = 651L;
-    long l652 = 652L;
-    long l653 = 653L;
-    long l654 = 654L;
-    long l655 = 655L;
-    long l656 = 656L;
-    long l657 = 657L;
-    long l658 = 658L;
-    long l659 = 659L;
-    long l660 = 660L;
-    long l661 = 661L;
-    long l662 = 662L;
-    long l663 = 663L;
-    long l664 = 664L;
-    long l665 = 665L;
-    long l666 = 666L;
-    long l667 = 667L;
-    long l668 = 668L;
-    long l669 = 669L;
-    long l670 = 670L;
-    long l671 = 671L;
-    long l672 = 672L;
-    long l673 = 673L;
-    long l674 = 674L;
-    long l675 = 675L;
-    long l676 = 676L;
-    long l677 = 677L;
-    long l678 = 678L;
-    long l679 = 679L;
-    long l680 = 680L;
-    long l681 = 681L;
-    long l682 = 682L;
-    long l683 = 683L;
-    long l684 = 684L;
-    long l685 = 685L;
-    long l686 = 686L;
-    long l687 = 687L;
-    long l688 = 688L;
-    long l689 = 689L;
-    long l690 = 690L;
-    long l691 = 691L;
-    long l692 = 692L;
-    long l693 = 693L;
-    long l694 = 694L;
-    long l695 = 695L;
-    long l696 = 696L;
-    long l697 = 697L;
-    long l698 = 698L;
-    long l699 = 699L;
-    long l700 = 700L;
-    long l701 = 701L;
-    long l702 = 702L;
-    long l703 = 703L;
-    long l704 = 704L;
-    long l705 = 705L;
-    long l706 = 706L;
-    long l707 = 707L;
-    long l708 = 708L;
-    long l709 = 709L;
-    long l710 = 710L;
-    long l711 = 711L;
-    long l712 = 712L;
-    long l713 = 713L;
-    long l714 = 714L;
-    long l715 = 715L;
-    long l716 = 716L;
-    long l717 = 717L;
-    long l718 = 718L;
-    long l719 = 719L;
-    long l720 = 720L;
-    long l721 = 721L;
-    long l722 = 722L;
-    long l723 = 723L;
-    long l724 = 724L;
-    long l725 = 725L;
-    long l726 = 726L;
-    long l727 = 727L;
-    long l728 = 728L;
-    long l729 = 729L;
-    long l730 = 730L;
-    long l731 = 731L;
-    long l732 = 732L;
-    long l733 = 733L;
-    long l734 = 734L;
-    long l735 = 735L;
-    long l736 = 736L;
-    long l737 = 737L;
-    long l738 = 738L;
-    long l739 = 739L;
-    long l740 = 740L;
-    long l741 = 741L;
-    long l742 = 742L;
-    long l743 = 743L;
-    long l744 = 744L;
-    long l745 = 745L;
-    long l746 = 746L;
-    long l747 = 747L;
-    long l748 = 748L;
-    long l749 = 749L;
-    long l750 = 750L;
-    long l751 = 751L;
-    long l752 = 752L;
-    long l753 = 753L;
-    long l754 = 754L;
-    long l755 = 755L;
-    long l756 = 756L;
-    long l757 = 757L;
-    long l758 = 758L;
-    long l759 = 759L;
-    long l760 = 760L;
-    long l761 = 761L;
-    long l762 = 762L;
-    long l763 = 763L;
-    long l764 = 764L;
-    long l765 = 765L;
-    long l766 = 766L;
-    long l767 = 767L;
-    long l768 = 768L;
-    long l769 = 769L;
-    long l770 = 770L;
-    long l771 = 771L;
-    long l772 = 772L;
-    long l773 = 773L;
-    long l774 = 774L;
-    long l775 = 775L;
-    long l776 = 776L;
-    long l777 = 777L;
-    long l778 = 778L;
-    long l779 = 779L;
-    long l780 = 780L;
-    long l781 = 781L;
-    long l782 = 782L;
-    long l783 = 783L;
-    long l784 = 784L;
-    long l785 = 785L;
-    long l786 = 786L;
-    long l787 = 787L;
-    long l788 = 788L;
-    long l789 = 789L;
-    long l790 = 790L;
-    long l791 = 791L;
-    long l792 = 792L;
-    long l793 = 793L;
-    long l794 = 794L;
-    long l795 = 795L;
-    long l796 = 796L;
-    long l797 = 797L;
-    long l798 = 798L;
-    long l799 = 799L;
-    long l800 = 800L;
-    long l801 = 801L;
-    long l802 = 802L;
-    long l803 = 803L;
-    long l804 = 804L;
-    long l805 = 805L;
-    long l806 = 806L;
-    long l807 = 807L;
-    long l808 = 808L;
-    long l809 = 809L;
-    long l810 = 810L;
-    long l811 = 811L;
-    long l812 = 812L;
-    long l813 = 813L;
-    long l814 = 814L;
-    long l815 = 815L;
-    long l816 = 816L;
-    long l817 = 817L;
-    long l818 = 818L;
-    long l819 = 819L;
-    long l820 = 820L;
-    long l821 = 821L;
-    long l822 = 822L;
-    long l823 = 823L;
-    long l824 = 824L;
-    long l825 = 825L;
-    long l826 = 826L;
-    long l827 = 827L;
-    long l828 = 828L;
-    long l829 = 829L;
-    long l830 = 830L;
-    long l831 = 831L;
-    long l832 = 832L;
-    long l833 = 833L;
-    long l834 = 834L;
-    long l835 = 835L;
-    long l836 = 836L;
-    long l837 = 837L;
-    long l838 = 838L;
-    long l839 = 839L;
-    long l840 = 840L;
-    long l841 = 841L;
-    long l842 = 842L;
-    long l843 = 843L;
-    long l844 = 844L;
-    long l845 = 845L;
-    long l846 = 846L;
-    long l847 = 847L;
-    long l848 = 848L;
-    long l849 = 849L;
-    long l850 = 850L;
-    long l851 = 851L;
-    long l852 = 852L;
-    long l853 = 853L;
-    long l854 = 854L;
-    long l855 = 855L;
-    long l856 = 856L;
-    long l857 = 857L;
-    long l858 = 858L;
-    long l859 = 859L;
-    long l860 = 860L;
-    long l861 = 861L;
-    long l862 = 862L;
-    long l863 = 863L;
-    long l864 = 864L;
-    long l865 = 865L;
-    long l866 = 866L;
-    long l867 = 867L;
-    long l868 = 868L;
-    long l869 = 869L;
-    long l870 = 870L;
-    long l871 = 871L;
-    long l872 = 872L;
-    long l873 = 873L;
-    long l874 = 874L;
-    long l875 = 875L;
-    long l876 = 876L;
-    long l877 = 877L;
-    long l878 = 878L;
-    long l879 = 879L;
-    long l880 = 880L;
-    long l881 = 881L;
-    long l882 = 882L;
-    long l883 = 883L;
-    long l884 = 884L;
-    long l885 = 885L;
-    long l886 = 886L;
-    long l887 = 887L;
-    long l888 = 888L;
-    long l889 = 889L;
-    long l890 = 890L;
-    long l891 = 891L;
-    long l892 = 892L;
-    long l893 = 893L;
-    long l894 = 894L;
-    long l895 = 895L;
-    long l896 = 896L;
-    long l897 = 897L;
-    long l898 = 898L;
-    long l899 = 899L;
-    long l900 = 900L;
-    long l901 = 901L;
-    long l902 = 902L;
-    long l903 = 903L;
-    long l904 = 904L;
-    long l905 = 905L;
-    long l906 = 906L;
-    long l907 = 907L;
-    long l908 = 908L;
-    long l909 = 909L;
-    long l910 = 910L;
-    long l911 = 911L;
-    long l912 = 912L;
-    long l913 = 913L;
-    long l914 = 914L;
-    long l915 = 915L;
-    long l916 = 916L;
-    long l917 = 917L;
-    long l918 = 918L;
-    long l919 = 919L;
-    long l920 = 920L;
-    long l921 = 921L;
-    long l922 = 922L;
-    long l923 = 923L;
-    long l924 = 924L;
-    long l925 = 925L;
-    long l926 = 926L;
-    long l927 = 927L;
-    long l928 = 928L;
-    long l929 = 929L;
-    long l930 = 930L;
-    long l931 = 931L;
-    long l932 = 932L;
-    long l933 = 933L;
-    long l934 = 934L;
-    long l935 = 935L;
-    long l936 = 936L;
-    long l937 = 937L;
-    long l938 = 938L;
-    long l939 = 939L;
-    long l940 = 940L;
-    long l941 = 941L;
-    long l942 = 942L;
-    long l943 = 943L;
-    long l944 = 944L;
-    long l945 = 945L;
-    long l946 = 946L;
-    long l947 = 947L;
-    long l948 = 948L;
-    long l949 = 949L;
-    long l950 = 950L;
-    long l951 = 951L;
-    long l952 = 952L;
-    long l953 = 953L;
-    long l954 = 954L;
-    long l955 = 955L;
-    long l956 = 956L;
-    long l957 = 957L;
-    long l958 = 958L;
-    long l959 = 959L;
-    long l960 = 960L;
-    long l961 = 961L;
-    long l962 = 962L;
-    long l963 = 963L;
-    long l964 = 964L;
-    long l965 = 965L;
-    long l966 = 966L;
-    long l967 = 967L;
-    long l968 = 968L;
-    long l969 = 969L;
-    long l970 = 970L;
-    long l971 = 971L;
-    long l972 = 972L;
-    long l973 = 973L;
-    long l974 = 974L;
-    long l975 = 975L;
-    long l976 = 976L;
-    long l977 = 977L;
-    long l978 = 978L;
-    long l979 = 979L;
-    long l980 = 980L;
-    long l981 = 981L;
-    long l982 = 982L;
-    long l983 = 983L;
-    long l984 = 984L;
-    long l985 = 985L;
-    long l986 = 986L;
-    long l987 = 987L;
-    long l988 = 988L;
-    long l989 = 989L;
-    long l990 = 990L;
-    long l991 = 991L;
-    long l992 = 992L;
-    long l993 = 993L;
-    long l994 = 994L;
-    long l995 = 995L;
-    long l996 = 996L;
-    long l997 = 997L;
-    long l998 = 998L;
-    long l999 = 999L;
+  static long $opt$LargeFrame(long dummy) {
+    // The argument `dummy` is used to defeat the constant folding
+    // optimization and force the compiler to allocate these variables
+    // on the stack.
+    long l0 = 0L + dummy;
+    long l1 = 1L + dummy;
+    long l2 = 2L + dummy;
+    long l3 = 3L + dummy;
+    long l4 = 4L + dummy;
+    long l5 = 5L + dummy;
+    long l6 = 6L + dummy;
+    long l7 = 7L + dummy;
+    long l8 = 8L + dummy;
+    long l9 = 9L + dummy;
+    long l10 = 10L + dummy;
+    long l11 = 11L + dummy;
+    long l12 = 12L + dummy;
+    long l13 = 13L + dummy;
+    long l14 = 14L + dummy;
+    long l15 = 15L + dummy;
+    long l16 = 16L + dummy;
+    long l17 = 17L + dummy;
+    long l18 = 18L + dummy;
+    long l19 = 19L + dummy;
+    long l20 = 20L + dummy;
+    long l21 = 21L + dummy;
+    long l22 = 22L + dummy;
+    long l23 = 23L + dummy;
+    long l24 = 24L + dummy;
+    long l25 = 25L + dummy;
+    long l26 = 26L + dummy;
+    long l27 = 27L + dummy;
+    long l28 = 28L + dummy;
+    long l29 = 29L + dummy;
+    long l30 = 30L + dummy;
+    long l31 = 31L + dummy;
+    long l32 = 32L + dummy;
+    long l33 = 33L + dummy;
+    long l34 = 34L + dummy;
+    long l35 = 35L + dummy;
+    long l36 = 36L + dummy;
+    long l37 = 37L + dummy;
+    long l38 = 38L + dummy;
+    long l39 = 39L + dummy;
+    long l40 = 40L + dummy;
+    long l41 = 41L + dummy;
+    long l42 = 42L + dummy;
+    long l43 = 43L + dummy;
+    long l44 = 44L + dummy;
+    long l45 = 45L + dummy;
+    long l46 = 46L + dummy;
+    long l47 = 47L + dummy;
+    long l48 = 48L + dummy;
+    long l49 = 49L + dummy;
+    long l50 = 50L + dummy;
+    long l51 = 51L + dummy;
+    long l52 = 52L + dummy;
+    long l53 = 53L + dummy;
+    long l54 = 54L + dummy;
+    long l55 = 55L + dummy;
+    long l56 = 56L + dummy;
+    long l57 = 57L + dummy;
+    long l58 = 58L + dummy;
+    long l59 = 59L + dummy;
+    long l60 = 60L + dummy;
+    long l61 = 61L + dummy;
+    long l62 = 62L + dummy;
+    long l63 = 63L + dummy;
+    long l64 = 64L + dummy;
+    long l65 = 65L + dummy;
+    long l66 = 66L + dummy;
+    long l67 = 67L + dummy;
+    long l68 = 68L + dummy;
+    long l69 = 69L + dummy;
+    long l70 = 70L + dummy;
+    long l71 = 71L + dummy;
+    long l72 = 72L + dummy;
+    long l73 = 73L + dummy;
+    long l74 = 74L + dummy;
+    long l75 = 75L + dummy;
+    long l76 = 76L + dummy;
+    long l77 = 77L + dummy;
+    long l78 = 78L + dummy;
+    long l79 = 79L + dummy;
+    long l80 = 80L + dummy;
+    long l81 = 81L + dummy;
+    long l82 = 82L + dummy;
+    long l83 = 83L + dummy;
+    long l84 = 84L + dummy;
+    long l85 = 85L + dummy;
+    long l86 = 86L + dummy;
+    long l87 = 87L + dummy;
+    long l88 = 88L + dummy;
+    long l89 = 89L + dummy;
+    long l90 = 90L + dummy;
+    long l91 = 91L + dummy;
+    long l92 = 92L + dummy;
+    long l93 = 93L + dummy;
+    long l94 = 94L + dummy;
+    long l95 = 95L + dummy;
+    long l96 = 96L + dummy;
+    long l97 = 97L + dummy;
+    long l98 = 98L + dummy;
+    long l99 = 99L + dummy;
+    long l100 = 100L + dummy;
+    long l101 = 101L + dummy;
+    long l102 = 102L + dummy;
+    long l103 = 103L + dummy;
+    long l104 = 104L + dummy;
+    long l105 = 105L + dummy;
+    long l106 = 106L + dummy;
+    long l107 = 107L + dummy;
+    long l108 = 108L + dummy;
+    long l109 = 109L + dummy;
+    long l110 = 110L + dummy;
+    long l111 = 111L + dummy;
+    long l112 = 112L + dummy;
+    long l113 = 113L + dummy;
+    long l114 = 114L + dummy;
+    long l115 = 115L + dummy;
+    long l116 = 116L + dummy;
+    long l117 = 117L + dummy;
+    long l118 = 118L + dummy;
+    long l119 = 119L + dummy;
+    long l120 = 120L + dummy;
+    long l121 = 121L + dummy;
+    long l122 = 122L + dummy;
+    long l123 = 123L + dummy;
+    long l124 = 124L + dummy;
+    long l125 = 125L + dummy;
+    long l126 = 126L + dummy;
+    long l127 = 127L + dummy;
+    long l128 = 128L + dummy;
+    long l129 = 129L + dummy;
+    long l130 = 130L + dummy;
+    long l131 = 131L + dummy;
+    long l132 = 132L + dummy;
+    long l133 = 133L + dummy;
+    long l134 = 134L + dummy;
+    long l135 = 135L + dummy;
+    long l136 = 136L + dummy;
+    long l137 = 137L + dummy;
+    long l138 = 138L + dummy;
+    long l139 = 139L + dummy;
+    long l140 = 140L + dummy;
+    long l141 = 141L + dummy;
+    long l142 = 142L + dummy;
+    long l143 = 143L + dummy;
+    long l144 = 144L + dummy;
+    long l145 = 145L + dummy;
+    long l146 = 146L + dummy;
+    long l147 = 147L + dummy;
+    long l148 = 148L + dummy;
+    long l149 = 149L + dummy;
+    long l150 = 150L + dummy;
+    long l151 = 151L + dummy;
+    long l152 = 152L + dummy;
+    long l153 = 153L + dummy;
+    long l154 = 154L + dummy;
+    long l155 = 155L + dummy;
+    long l156 = 156L + dummy;
+    long l157 = 157L + dummy;
+    long l158 = 158L + dummy;
+    long l159 = 159L + dummy;
+    long l160 = 160L + dummy;
+    long l161 = 161L + dummy;
+    long l162 = 162L + dummy;
+    long l163 = 163L + dummy;
+    long l164 = 164L + dummy;
+    long l165 = 165L + dummy;
+    long l166 = 166L + dummy;
+    long l167 = 167L + dummy;
+    long l168 = 168L + dummy;
+    long l169 = 169L + dummy;
+    long l170 = 170L + dummy;
+    long l171 = 171L + dummy;
+    long l172 = 172L + dummy;
+    long l173 = 173L + dummy;
+    long l174 = 174L + dummy;
+    long l175 = 175L + dummy;
+    long l176 = 176L + dummy;
+    long l177 = 177L + dummy;
+    long l178 = 178L + dummy;
+    long l179 = 179L + dummy;
+    long l180 = 180L + dummy;
+    long l181 = 181L + dummy;
+    long l182 = 182L + dummy;
+    long l183 = 183L + dummy;
+    long l184 = 184L + dummy;
+    long l185 = 185L + dummy;
+    long l186 = 186L + dummy;
+    long l187 = 187L + dummy;
+    long l188 = 188L + dummy;
+    long l189 = 189L + dummy;
+    long l190 = 190L + dummy;
+    long l191 = 191L + dummy;
+    long l192 = 192L + dummy;
+    long l193 = 193L + dummy;
+    long l194 = 194L + dummy;
+    long l195 = 195L + dummy;
+    long l196 = 196L + dummy;
+    long l197 = 197L + dummy;
+    long l198 = 198L + dummy;
+    long l199 = 199L + dummy;
+    long l200 = 200L + dummy;
+    long l201 = 201L + dummy;
+    long l202 = 202L + dummy;
+    long l203 = 203L + dummy;
+    long l204 = 204L + dummy;
+    long l205 = 205L + dummy;
+    long l206 = 206L + dummy;
+    long l207 = 207L + dummy;
+    long l208 = 208L + dummy;
+    long l209 = 209L + dummy;
+    long l210 = 210L + dummy;
+    long l211 = 211L + dummy;
+    long l212 = 212L + dummy;
+    long l213 = 213L + dummy;
+    long l214 = 214L + dummy;
+    long l215 = 215L + dummy;
+    long l216 = 216L + dummy;
+    long l217 = 217L + dummy;
+    long l218 = 218L + dummy;
+    long l219 = 219L + dummy;
+    long l220 = 220L + dummy;
+    long l221 = 221L + dummy;
+    long l222 = 222L + dummy;
+    long l223 = 223L + dummy;
+    long l224 = 224L + dummy;
+    long l225 = 225L + dummy;
+    long l226 = 226L + dummy;
+    long l227 = 227L + dummy;
+    long l228 = 228L + dummy;
+    long l229 = 229L + dummy;
+    long l230 = 230L + dummy;
+    long l231 = 231L + dummy;
+    long l232 = 232L + dummy;
+    long l233 = 233L + dummy;
+    long l234 = 234L + dummy;
+    long l235 = 235L + dummy;
+    long l236 = 236L + dummy;
+    long l237 = 237L + dummy;
+    long l238 = 238L + dummy;
+    long l239 = 239L + dummy;
+    long l240 = 240L + dummy;
+    long l241 = 241L + dummy;
+    long l242 = 242L + dummy;
+    long l243 = 243L + dummy;
+    long l244 = 244L + dummy;
+    long l245 = 245L + dummy;
+    long l246 = 246L + dummy;
+    long l247 = 247L + dummy;
+    long l248 = 248L + dummy;
+    long l249 = 249L + dummy;
+    long l250 = 250L + dummy;
+    long l251 = 251L + dummy;
+    long l252 = 252L + dummy;
+    long l253 = 253L + dummy;
+    long l254 = 254L + dummy;
+    long l255 = 255L + dummy;
+    long l256 = 256L + dummy;
+    long l257 = 257L + dummy;
+    long l258 = 258L + dummy;
+    long l259 = 259L + dummy;
+    long l260 = 260L + dummy;
+    long l261 = 261L + dummy;
+    long l262 = 262L + dummy;
+    long l263 = 263L + dummy;
+    long l264 = 264L + dummy;
+    long l265 = 265L + dummy;
+    long l266 = 266L + dummy;
+    long l267 = 267L + dummy;
+    long l268 = 268L + dummy;
+    long l269 = 269L + dummy;
+    long l270 = 270L + dummy;
+    long l271 = 271L + dummy;
+    long l272 = 272L + dummy;
+    long l273 = 273L + dummy;
+    long l274 = 274L + dummy;
+    long l275 = 275L + dummy;
+    long l276 = 276L + dummy;
+    long l277 = 277L + dummy;
+    long l278 = 278L + dummy;
+    long l279 = 279L + dummy;
+    long l280 = 280L + dummy;
+    long l281 = 281L + dummy;
+    long l282 = 282L + dummy;
+    long l283 = 283L + dummy;
+    long l284 = 284L + dummy;
+    long l285 = 285L + dummy;
+    long l286 = 286L + dummy;
+    long l287 = 287L + dummy;
+    long l288 = 288L + dummy;
+    long l289 = 289L + dummy;
+    long l290 = 290L + dummy;
+    long l291 = 291L + dummy;
+    long l292 = 292L + dummy;
+    long l293 = 293L + dummy;
+    long l294 = 294L + dummy;
+    long l295 = 295L + dummy;
+    long l296 = 296L + dummy;
+    long l297 = 297L + dummy;
+    long l298 = 298L + dummy;
+    long l299 = 299L + dummy;
+    long l300 = 300L + dummy;
+    long l301 = 301L + dummy;
+    long l302 = 302L + dummy;
+    long l303 = 303L + dummy;
+    long l304 = 304L + dummy;
+    long l305 = 305L + dummy;
+    long l306 = 306L + dummy;
+    long l307 = 307L + dummy;
+    long l308 = 308L + dummy;
+    long l309 = 309L + dummy;
+    long l310 = 310L + dummy;
+    long l311 = 311L + dummy;
+    long l312 = 312L + dummy;
+    long l313 = 313L + dummy;
+    long l314 = 314L + dummy;
+    long l315 = 315L + dummy;
+    long l316 = 316L + dummy;
+    long l317 = 317L + dummy;
+    long l318 = 318L + dummy;
+    long l319 = 319L + dummy;
+    long l320 = 320L + dummy;
+    long l321 = 321L + dummy;
+    long l322 = 322L + dummy;
+    long l323 = 323L + dummy;
+    long l324 = 324L + dummy;
+    long l325 = 325L + dummy;
+    long l326 = 326L + dummy;
+    long l327 = 327L + dummy;
+    long l328 = 328L + dummy;
+    long l329 = 329L + dummy;
+    long l330 = 330L + dummy;
+    long l331 = 331L + dummy;
+    long l332 = 332L + dummy;
+    long l333 = 333L + dummy;
+    long l334 = 334L + dummy;
+    long l335 = 335L + dummy;
+    long l336 = 336L + dummy;
+    long l337 = 337L + dummy;
+    long l338 = 338L + dummy;
+    long l339 = 339L + dummy;
+    long l340 = 340L + dummy;
+    long l341 = 341L + dummy;
+    long l342 = 342L + dummy;
+    long l343 = 343L + dummy;
+    long l344 = 344L + dummy;
+    long l345 = 345L + dummy;
+    long l346 = 346L + dummy;
+    long l347 = 347L + dummy;
+    long l348 = 348L + dummy;
+    long l349 = 349L + dummy;
+    long l350 = 350L + dummy;
+    long l351 = 351L + dummy;
+    long l352 = 352L + dummy;
+    long l353 = 353L + dummy;
+    long l354 = 354L + dummy;
+    long l355 = 355L + dummy;
+    long l356 = 356L + dummy;
+    long l357 = 357L + dummy;
+    long l358 = 358L + dummy;
+    long l359 = 359L + dummy;
+    long l360 = 360L + dummy;
+    long l361 = 361L + dummy;
+    long l362 = 362L + dummy;
+    long l363 = 363L + dummy;
+    long l364 = 364L + dummy;
+    long l365 = 365L + dummy;
+    long l366 = 366L + dummy;
+    long l367 = 367L + dummy;
+    long l368 = 368L + dummy;
+    long l369 = 369L + dummy;
+    long l370 = 370L + dummy;
+    long l371 = 371L + dummy;
+    long l372 = 372L + dummy;
+    long l373 = 373L + dummy;
+    long l374 = 374L + dummy;
+    long l375 = 375L + dummy;
+    long l376 = 376L + dummy;
+    long l377 = 377L + dummy;
+    long l378 = 378L + dummy;
+    long l379 = 379L + dummy;
+    long l380 = 380L + dummy;
+    long l381 = 381L + dummy;
+    long l382 = 382L + dummy;
+    long l383 = 383L + dummy;
+    long l384 = 384L + dummy;
+    long l385 = 385L + dummy;
+    long l386 = 386L + dummy;
+    long l387 = 387L + dummy;
+    long l388 = 388L + dummy;
+    long l389 = 389L + dummy;
+    long l390 = 390L + dummy;
+    long l391 = 391L + dummy;
+    long l392 = 392L + dummy;
+    long l393 = 393L + dummy;
+    long l394 = 394L + dummy;
+    long l395 = 395L + dummy;
+    long l396 = 396L + dummy;
+    long l397 = 397L + dummy;
+    long l398 = 398L + dummy;
+    long l399 = 399L + dummy;
+    long l400 = 400L + dummy;
+    long l401 = 401L + dummy;
+    long l402 = 402L + dummy;
+    long l403 = 403L + dummy;
+    long l404 = 404L + dummy;
+    long l405 = 405L + dummy;
+    long l406 = 406L + dummy;
+    long l407 = 407L + dummy;
+    long l408 = 408L + dummy;
+    long l409 = 409L + dummy;
+    long l410 = 410L + dummy;
+    long l411 = 411L + dummy;
+    long l412 = 412L + dummy;
+    long l413 = 413L + dummy;
+    long l414 = 414L + dummy;
+    long l415 = 415L + dummy;
+    long l416 = 416L + dummy;
+    long l417 = 417L + dummy;
+    long l418 = 418L + dummy;
+    long l419 = 419L + dummy;
+    long l420 = 420L + dummy;
+    long l421 = 421L + dummy;
+    long l422 = 422L + dummy;
+    long l423 = 423L + dummy;
+    long l424 = 424L + dummy;
+    long l425 = 425L + dummy;
+    long l426 = 426L + dummy;
+    long l427 = 427L + dummy;
+    long l428 = 428L + dummy;
+    long l429 = 429L + dummy;
+    long l430 = 430L + dummy;
+    long l431 = 431L + dummy;
+    long l432 = 432L + dummy;
+    long l433 = 433L + dummy;
+    long l434 = 434L + dummy;
+    long l435 = 435L + dummy;
+    long l436 = 436L + dummy;
+    long l437 = 437L + dummy;
+    long l438 = 438L + dummy;
+    long l439 = 439L + dummy;
+    long l440 = 440L + dummy;
+    long l441 = 441L + dummy;
+    long l442 = 442L + dummy;
+    long l443 = 443L + dummy;
+    long l444 = 444L + dummy;
+    long l445 = 445L + dummy;
+    long l446 = 446L + dummy;
+    long l447 = 447L + dummy;
+    long l448 = 448L + dummy;
+    long l449 = 449L + dummy;
+    long l450 = 450L + dummy;
+    long l451 = 451L + dummy;
+    long l452 = 452L + dummy;
+    long l453 = 453L + dummy;
+    long l454 = 454L + dummy;
+    long l455 = 455L + dummy;
+    long l456 = 456L + dummy;
+    long l457 = 457L + dummy;
+    long l458 = 458L + dummy;
+    long l459 = 459L + dummy;
+    long l460 = 460L + dummy;
+    long l461 = 461L + dummy;
+    long l462 = 462L + dummy;
+    long l463 = 463L + dummy;
+    long l464 = 464L + dummy;
+    long l465 = 465L + dummy;
+    long l466 = 466L + dummy;
+    long l467 = 467L + dummy;
+    long l468 = 468L + dummy;
+    long l469 = 469L + dummy;
+    long l470 = 470L + dummy;
+    long l471 = 471L + dummy;
+    long l472 = 472L + dummy;
+    long l473 = 473L + dummy;
+    long l474 = 474L + dummy;
+    long l475 = 475L + dummy;
+    long l476 = 476L + dummy;
+    long l477 = 477L + dummy;
+    long l478 = 478L + dummy;
+    long l479 = 479L + dummy;
+    long l480 = 480L + dummy;
+    long l481 = 481L + dummy;
+    long l482 = 482L + dummy;
+    long l483 = 483L + dummy;
+    long l484 = 484L + dummy;
+    long l485 = 485L + dummy;
+    long l486 = 486L + dummy;
+    long l487 = 487L + dummy;
+    long l488 = 488L + dummy;
+    long l489 = 489L + dummy;
+    long l490 = 490L + dummy;
+    long l491 = 491L + dummy;
+    long l492 = 492L + dummy;
+    long l493 = 493L + dummy;
+    long l494 = 494L + dummy;
+    long l495 = 495L + dummy;
+    long l496 = 496L + dummy;
+    long l497 = 497L + dummy;
+    long l498 = 498L + dummy;
+    long l499 = 499L + dummy;
+    l1 += l0;
+    l2 += l1;
+    l3 += l2;
+    l4 += l3;
+    l5 += l4;
+    l6 += l5;
+    l7 += l6;
+    l8 += l7;
+    l9 += l8;
+    l10 += l9;
+    l11 += l10;
+    l12 += l11;
+    l13 += l12;
+    l14 += l13;
+    l15 += l14;
+    l16 += l15;
+    l17 += l16;
+    l18 += l17;
+    l19 += l18;
+    l20 += l19;
+    l21 += l20;
+    l22 += l21;
+    l23 += l22;
+    l24 += l23;
+    l25 += l24;
+    l26 += l25;
+    l27 += l26;
+    l28 += l27;
+    l29 += l28;
+    l30 += l29;
+    l31 += l30;
+    l32 += l31;
+    l33 += l32;
+    l34 += l33;
+    l35 += l34;
+    l36 += l35;
+    l37 += l36;
+    l38 += l37;
+    l39 += l38;
+    l40 += l39;
+    l41 += l40;
+    l42 += l41;
+    l43 += l42;
+    l44 += l43;
+    l45 += l44;
+    l46 += l45;
+    l47 += l46;
+    l48 += l47;
+    l49 += l48;
+    l50 += l49;
+    l51 += l50;
+    l52 += l51;
+    l53 += l52;
+    l54 += l53;
+    l55 += l54;
+    l56 += l55;
+    l57 += l56;
+    l58 += l57;
+    l59 += l58;
+    l60 += l59;
+    l61 += l60;
+    l62 += l61;
+    l63 += l62;
+    l64 += l63;
+    l65 += l64;
+    l66 += l65;
+    l67 += l66;
+    l68 += l67;
+    l69 += l68;
+    l70 += l69;
+    l71 += l70;
+    l72 += l71;
+    l73 += l72;
+    l74 += l73;
+    l75 += l74;
+    l76 += l75;
+    l77 += l76;
+    l78 += l77;
+    l79 += l78;
+    l80 += l79;
+    l81 += l80;
+    l82 += l81;
+    l83 += l82;
+    l84 += l83;
+    l85 += l84;
+    l86 += l85;
+    l87 += l86;
+    l88 += l87;
+    l89 += l88;
+    l90 += l89;
+    l91 += l90;
+    l92 += l91;
+    l93 += l92;
+    l94 += l93;
+    l95 += l94;
+    l96 += l95;
+    l97 += l96;
+    l98 += l97;
+    l99 += l98;
+    l100 += l99;
+    l101 += l100;
+    l102 += l101;
+    l103 += l102;
+    l104 += l103;
+    l105 += l104;
+    l106 += l105;
+    l107 += l106;
+    l108 += l107;
+    l109 += l108;
+    l110 += l109;
+    l111 += l110;
+    l112 += l111;
+    l113 += l112;
+    l114 += l113;
+    l115 += l114;
+    l116 += l115;
+    l117 += l116;
+    l118 += l117;
+    l119 += l118;
+    l120 += l119;
+    l121 += l120;
+    l122 += l121;
+    l123 += l122;
+    l124 += l123;
+    l125 += l124;
+    l126 += l125;
+    l127 += l126;
+    l128 += l127;
+    l129 += l128;
+    l130 += l129;
+    l131 += l130;
+    l132 += l131;
+    l133 += l132;
+    l134 += l133;
+    l135 += l134;
+    l136 += l135;
+    l137 += l136;
+    l138 += l137;
+    l139 += l138;
+    l140 += l139;
+    l141 += l140;
+    l142 += l141;
+    l143 += l142;
+    l144 += l143;
+    l145 += l144;
+    l146 += l145;
+    l147 += l146;
+    l148 += l147;
+    l149 += l148;
+    l150 += l149;
+    l151 += l150;
+    l152 += l151;
+    l153 += l152;
+    l154 += l153;
+    l155 += l154;
+    l156 += l155;
+    l157 += l156;
+    l158 += l157;
+    l159 += l158;
+    l160 += l159;
+    l161 += l160;
+    l162 += l161;
+    l163 += l162;
+    l164 += l163;
+    l165 += l164;
+    l166 += l165;
+    l167 += l166;
+    l168 += l167;
+    l169 += l168;
+    l170 += l169;
+    l171 += l170;
+    l172 += l171;
+    l173 += l172;
+    l174 += l173;
+    l175 += l174;
+    l176 += l175;
+    l177 += l176;
+    l178 += l177;
+    l179 += l178;
+    l180 += l179;
+    l181 += l180;
+    l182 += l181;
+    l183 += l182;
+    l184 += l183;
+    l185 += l184;
+    l186 += l185;
+    l187 += l186;
+    l188 += l187;
+    l189 += l188;
+    l190 += l189;
+    l191 += l190;
+    l192 += l191;
+    l193 += l192;
+    l194 += l193;
+    l195 += l194;
+    l196 += l195;
+    l197 += l196;
+    l198 += l197;
+    l199 += l198;
+    l200 += l199;
+    l201 += l200;
+    l202 += l201;
+    l203 += l202;
+    l204 += l203;
+    l205 += l204;
+    l206 += l205;
+    l207 += l206;
+    l208 += l207;
+    l209 += l208;
+    l210 += l209;
+    l211 += l210;
+    l212 += l211;
+    l213 += l212;
+    l214 += l213;
+    l215 += l214;
+    l216 += l215;
+    l217 += l216;
+    l218 += l217;
+    l219 += l218;
+    l220 += l219;
+    l221 += l220;
+    l222 += l221;
+    l223 += l222;
+    l224 += l223;
+    l225 += l224;
+    l226 += l225;
+    l227 += l226;
+    l228 += l227;
+    l229 += l228;
+    l230 += l229;
+    l231 += l230;
+    l232 += l231;
+    l233 += l232;
+    l234 += l233;
+    l235 += l234;
+    l236 += l235;
+    l237 += l236;
+    l238 += l237;
+    l239 += l238;
+    l240 += l239;
+    l241 += l240;
+    l242 += l241;
+    l243 += l242;
+    l244 += l243;
+    l245 += l244;
+    l246 += l245;
+    l247 += l246;
+    l248 += l247;
+    l249 += l248;
+    l250 += l249;
+    l251 += l250;
+    l252 += l251;
+    l253 += l252;
+    l254 += l253;
+    l255 += l254;
+    l256 += l255;
+    l257 += l256;
+    l258 += l257;
+    l259 += l258;
+    l260 += l259;
+    l261 += l260;
+    l262 += l261;
+    l263 += l262;
+    l264 += l263;
+    l265 += l264;
+    l266 += l265;
+    l267 += l266;
+    l268 += l267;
+    l269 += l268;
+    l270 += l269;
+    l271 += l270;
+    l272 += l271;
+    l273 += l272;
+    l274 += l273;
+    l275 += l274;
+    l276 += l275;
+    l277 += l276;
+    l278 += l277;
+    l279 += l278;
+    l280 += l279;
+    l281 += l280;
+    l282 += l281;
+    l283 += l282;
+    l284 += l283;
+    l285 += l284;
+    l286 += l285;
+    l287 += l286;
+    l288 += l287;
+    l289 += l288;
+    l290 += l289;
+    l291 += l290;
+    l292 += l291;
+    l293 += l292;
+    l294 += l293;
+    l295 += l294;
+    l296 += l295;
+    l297 += l296;
+    l298 += l297;
+    l299 += l298;
+    l300 += l299;
+    l301 += l300;
+    l302 += l301;
+    l303 += l302;
+    l304 += l303;
+    l305 += l304;
+    l306 += l305;
+    l307 += l306;
+    l308 += l307;
+    l309 += l308;
+    l310 += l309;
+    l311 += l310;
+    l312 += l311;
+    l313 += l312;
+    l314 += l313;
+    l315 += l314;
+    l316 += l315;
+    l317 += l316;
+    l318 += l317;
+    l319 += l318;
+    l320 += l319;
+    l321 += l320;
+    l322 += l321;
+    l323 += l322;
+    l324 += l323;
+    l325 += l324;
+    l326 += l325;
+    l327 += l326;
+    l328 += l327;
+    l329 += l328;
+    l330 += l329;
+    l331 += l330;
+    l332 += l331;
+    l333 += l332;
+    l334 += l333;
+    l335 += l334;
+    l336 += l335;
+    l337 += l336;
+    l338 += l337;
+    l339 += l338;
+    l340 += l339;
+    l341 += l340;
+    l342 += l341;
+    l343 += l342;
+    l344 += l343;
+    l345 += l344;
+    l346 += l345;
+    l347 += l346;
+    l348 += l347;
+    l349 += l348;
+    l350 += l349;
+    l351 += l350;
+    l352 += l351;
+    l353 += l352;
+    l354 += l353;
+    l355 += l354;
+    l356 += l355;
+    l357 += l356;
+    l358 += l357;
+    l359 += l358;
+    l360 += l359;
+    l361 += l360;
+    l362 += l361;
+    l363 += l362;
+    l364 += l363;
+    l365 += l364;
+    l366 += l365;
+    l367 += l366;
+    l368 += l367;
+    l369 += l368;
+    l370 += l369;
+    l371 += l370;
+    l372 += l371;
+    l373 += l372;
+    l374 += l373;
+    l375 += l374;
+    l376 += l375;
+    l377 += l376;
+    l378 += l377;
+    l379 += l378;
+    l380 += l379;
+    l381 += l380;
+    l382 += l381;
+    l383 += l382;
+    l384 += l383;
+    l385 += l384;
+    l386 += l385;
+    l387 += l386;
+    l388 += l387;
+    l389 += l388;
+    l390 += l389;
+    l391 += l390;
+    l392 += l391;
+    l393 += l392;
+    l394 += l393;
+    l395 += l394;
+    l396 += l395;
+    l397 += l396;
+    l398 += l397;
+    l399 += l398;
+    l400 += l399;
+    l401 += l400;
+    l402 += l401;
+    l403 += l402;
+    l404 += l403;
+    l405 += l404;
+    l406 += l405;
+    l407 += l406;
+    l408 += l407;
+    l409 += l408;
+    l410 += l409;
+    l411 += l410;
+    l412 += l411;
+    l413 += l412;
+    l414 += l413;
+    l415 += l414;
+    l416 += l415;
+    l417 += l416;
+    l418 += l417;
+    l419 += l418;
+    l420 += l419;
+    l421 += l420;
+    l422 += l421;
+    l423 += l422;
+    l424 += l423;
+    l425 += l424;
+    l426 += l425;
+    l427 += l426;
+    l428 += l427;
+    l429 += l428;
+    l430 += l429;
+    l431 += l430;
+    l432 += l431;
+    l433 += l432;
+    l434 += l433;
+    l435 += l434;
+    l436 += l435;
+    l437 += l436;
+    l438 += l437;
+    l439 += l438;
+    l440 += l439;
+    l441 += l440;
+    l442 += l441;
+    l443 += l442;
+    l444 += l443;
+    l445 += l444;
+    l446 += l445;
+    l447 += l446;
+    l448 += l447;
+    l449 += l448;
+    l450 += l449;
+    l451 += l450;
+    l452 += l451;
+    l453 += l452;
+    l454 += l453;
+    l455 += l454;
+    l456 += l455;
+    l457 += l456;
+    l458 += l457;
+    l459 += l458;
+    l460 += l459;
+    l461 += l460;
+    l462 += l461;
+    l463 += l462;
+    l464 += l463;
+    l465 += l464;
+    l466 += l465;
+    l467 += l466;
+    l468 += l467;
+    l469 += l468;
+    l470 += l469;
+    l471 += l470;
+    l472 += l471;
+    l473 += l472;
+    l474 += l473;
+    l475 += l474;
+    l476 += l475;
+    l477 += l476;
+    l478 += l477;
+    l479 += l478;
+    l480 += l479;
+    l481 += l480;
+    l482 += l481;
+    l483 += l482;
+    l484 += l483;
+    l485 += l484;
+    l486 += l485;
+    l487 += l486;
+    l488 += l487;
+    l489 += l488;
+    l490 += l489;
+    l491 += l490;
+    l492 += l491;
+    l493 += l492;
+    l494 += l493;
+    l495 += l494;
+    l496 += l495;
+    l497 += l496;
+    l498 += l497;
+    l499 += l498;
+    // Create a branch to beat the large method check.
+    if (l498 == l499) {
+      return l498;
+    } else {
+      return l499;
+    }
+  }
+
+  // This method cannot be optimized because of its huge size.
+  static long HugeFrame(long dummy) {
+    long l0 = 0L + dummy;
+    long l1 = 1L + dummy;
+    long l2 = 2L + dummy;
+    long l3 = 3L + dummy;
+    long l4 = 4L + dummy;
+    long l5 = 5L + dummy;
+    long l6 = 6L + dummy;
+    long l7 = 7L + dummy;
+    long l8 = 8L + dummy;
+    long l9 = 9L + dummy;
+    long l10 = 10L + dummy;
+    long l11 = 11L + dummy;
+    long l12 = 12L + dummy;
+    long l13 = 13L + dummy;
+    long l14 = 14L + dummy;
+    long l15 = 15L + dummy;
+    long l16 = 16L + dummy;
+    long l17 = 17L + dummy;
+    long l18 = 18L + dummy;
+    long l19 = 19L + dummy;
+    long l20 = 20L + dummy;
+    long l21 = 21L + dummy;
+    long l22 = 22L + dummy;
+    long l23 = 23L + dummy;
+    long l24 = 24L + dummy;
+    long l25 = 25L + dummy;
+    long l26 = 26L + dummy;
+    long l27 = 27L + dummy;
+    long l28 = 28L + dummy;
+    long l29 = 29L + dummy;
+    long l30 = 30L + dummy;
+    long l31 = 31L + dummy;
+    long l32 = 32L + dummy;
+    long l33 = 33L + dummy;
+    long l34 = 34L + dummy;
+    long l35 = 35L + dummy;
+    long l36 = 36L + dummy;
+    long l37 = 37L + dummy;
+    long l38 = 38L + dummy;
+    long l39 = 39L + dummy;
+    long l40 = 40L + dummy;
+    long l41 = 41L + dummy;
+    long l42 = 42L + dummy;
+    long l43 = 43L + dummy;
+    long l44 = 44L + dummy;
+    long l45 = 45L + dummy;
+    long l46 = 46L + dummy;
+    long l47 = 47L + dummy;
+    long l48 = 48L + dummy;
+    long l49 = 49L + dummy;
+    long l50 = 50L + dummy;
+    long l51 = 51L + dummy;
+    long l52 = 52L + dummy;
+    long l53 = 53L + dummy;
+    long l54 = 54L + dummy;
+    long l55 = 55L + dummy;
+    long l56 = 56L + dummy;
+    long l57 = 57L + dummy;
+    long l58 = 58L + dummy;
+    long l59 = 59L + dummy;
+    long l60 = 60L + dummy;
+    long l61 = 61L + dummy;
+    long l62 = 62L + dummy;
+    long l63 = 63L + dummy;
+    long l64 = 64L + dummy;
+    long l65 = 65L + dummy;
+    long l66 = 66L + dummy;
+    long l67 = 67L + dummy;
+    long l68 = 68L + dummy;
+    long l69 = 69L + dummy;
+    long l70 = 70L + dummy;
+    long l71 = 71L + dummy;
+    long l72 = 72L + dummy;
+    long l73 = 73L + dummy;
+    long l74 = 74L + dummy;
+    long l75 = 75L + dummy;
+    long l76 = 76L + dummy;
+    long l77 = 77L + dummy;
+    long l78 = 78L + dummy;
+    long l79 = 79L + dummy;
+    long l80 = 80L + dummy;
+    long l81 = 81L + dummy;
+    long l82 = 82L + dummy;
+    long l83 = 83L + dummy;
+    long l84 = 84L + dummy;
+    long l85 = 85L + dummy;
+    long l86 = 86L + dummy;
+    long l87 = 87L + dummy;
+    long l88 = 88L + dummy;
+    long l89 = 89L + dummy;
+    long l90 = 90L + dummy;
+    long l91 = 91L + dummy;
+    long l92 = 92L + dummy;
+    long l93 = 93L + dummy;
+    long l94 = 94L + dummy;
+    long l95 = 95L + dummy;
+    long l96 = 96L + dummy;
+    long l97 = 97L + dummy;
+    long l98 = 98L + dummy;
+    long l99 = 99L + dummy;
+    long l100 = 100L + dummy;
+    long l101 = 101L + dummy;
+    long l102 = 102L + dummy;
+    long l103 = 103L + dummy;
+    long l104 = 104L + dummy;
+    long l105 = 105L + dummy;
+    long l106 = 106L + dummy;
+    long l107 = 107L + dummy;
+    long l108 = 108L + dummy;
+    long l109 = 109L + dummy;
+    long l110 = 110L + dummy;
+    long l111 = 111L + dummy;
+    long l112 = 112L + dummy;
+    long l113 = 113L + dummy;
+    long l114 = 114L + dummy;
+    long l115 = 115L + dummy;
+    long l116 = 116L + dummy;
+    long l117 = 117L + dummy;
+    long l118 = 118L + dummy;
+    long l119 = 119L + dummy;
+    long l120 = 120L + dummy;
+    long l121 = 121L + dummy;
+    long l122 = 122L + dummy;
+    long l123 = 123L + dummy;
+    long l124 = 124L + dummy;
+    long l125 = 125L + dummy;
+    long l126 = 126L + dummy;
+    long l127 = 127L + dummy;
+    long l128 = 128L + dummy;
+    long l129 = 129L + dummy;
+    long l130 = 130L + dummy;
+    long l131 = 131L + dummy;
+    long l132 = 132L + dummy;
+    long l133 = 133L + dummy;
+    long l134 = 134L + dummy;
+    long l135 = 135L + dummy;
+    long l136 = 136L + dummy;
+    long l137 = 137L + dummy;
+    long l138 = 138L + dummy;
+    long l139 = 139L + dummy;
+    long l140 = 140L + dummy;
+    long l141 = 141L + dummy;
+    long l142 = 142L + dummy;
+    long l143 = 143L + dummy;
+    long l144 = 144L + dummy;
+    long l145 = 145L + dummy;
+    long l146 = 146L + dummy;
+    long l147 = 147L + dummy;
+    long l148 = 148L + dummy;
+    long l149 = 149L + dummy;
+    long l150 = 150L + dummy;
+    long l151 = 151L + dummy;
+    long l152 = 152L + dummy;
+    long l153 = 153L + dummy;
+    long l154 = 154L + dummy;
+    long l155 = 155L + dummy;
+    long l156 = 156L + dummy;
+    long l157 = 157L + dummy;
+    long l158 = 158L + dummy;
+    long l159 = 159L + dummy;
+    long l160 = 160L + dummy;
+    long l161 = 161L + dummy;
+    long l162 = 162L + dummy;
+    long l163 = 163L + dummy;
+    long l164 = 164L + dummy;
+    long l165 = 165L + dummy;
+    long l166 = 166L + dummy;
+    long l167 = 167L + dummy;
+    long l168 = 168L + dummy;
+    long l169 = 169L + dummy;
+    long l170 = 170L + dummy;
+    long l171 = 171L + dummy;
+    long l172 = 172L + dummy;
+    long l173 = 173L + dummy;
+    long l174 = 174L + dummy;
+    long l175 = 175L + dummy;
+    long l176 = 176L + dummy;
+    long l177 = 177L + dummy;
+    long l178 = 178L + dummy;
+    long l179 = 179L + dummy;
+    long l180 = 180L + dummy;
+    long l181 = 181L + dummy;
+    long l182 = 182L + dummy;
+    long l183 = 183L + dummy;
+    long l184 = 184L + dummy;
+    long l185 = 185L + dummy;
+    long l186 = 186L + dummy;
+    long l187 = 187L + dummy;
+    long l188 = 188L + dummy;
+    long l189 = 189L + dummy;
+    long l190 = 190L + dummy;
+    long l191 = 191L + dummy;
+    long l192 = 192L + dummy;
+    long l193 = 193L + dummy;
+    long l194 = 194L + dummy;
+    long l195 = 195L + dummy;
+    long l196 = 196L + dummy;
+    long l197 = 197L + dummy;
+    long l198 = 198L + dummy;
+    long l199 = 199L + dummy;
+    long l200 = 200L + dummy;
+    long l201 = 201L + dummy;
+    long l202 = 202L + dummy;
+    long l203 = 203L + dummy;
+    long l204 = 204L + dummy;
+    long l205 = 205L + dummy;
+    long l206 = 206L + dummy;
+    long l207 = 207L + dummy;
+    long l208 = 208L + dummy;
+    long l209 = 209L + dummy;
+    long l210 = 210L + dummy;
+    long l211 = 211L + dummy;
+    long l212 = 212L + dummy;
+    long l213 = 213L + dummy;
+    long l214 = 214L + dummy;
+    long l215 = 215L + dummy;
+    long l216 = 216L + dummy;
+    long l217 = 217L + dummy;
+    long l218 = 218L + dummy;
+    long l219 = 219L + dummy;
+    long l220 = 220L + dummy;
+    long l221 = 221L + dummy;
+    long l222 = 222L + dummy;
+    long l223 = 223L + dummy;
+    long l224 = 224L + dummy;
+    long l225 = 225L + dummy;
+    long l226 = 226L + dummy;
+    long l227 = 227L + dummy;
+    long l228 = 228L + dummy;
+    long l229 = 229L + dummy;
+    long l230 = 230L + dummy;
+    long l231 = 231L + dummy;
+    long l232 = 232L + dummy;
+    long l233 = 233L + dummy;
+    long l234 = 234L + dummy;
+    long l235 = 235L + dummy;
+    long l236 = 236L + dummy;
+    long l237 = 237L + dummy;
+    long l238 = 238L + dummy;
+    long l239 = 239L + dummy;
+    long l240 = 240L + dummy;
+    long l241 = 241L + dummy;
+    long l242 = 242L + dummy;
+    long l243 = 243L + dummy;
+    long l244 = 244L + dummy;
+    long l245 = 245L + dummy;
+    long l246 = 246L + dummy;
+    long l247 = 247L + dummy;
+    long l248 = 248L + dummy;
+    long l249 = 249L + dummy;
+    long l250 = 250L + dummy;
+    long l251 = 251L + dummy;
+    long l252 = 252L + dummy;
+    long l253 = 253L + dummy;
+    long l254 = 254L + dummy;
+    long l255 = 255L + dummy;
+    long l256 = 256L + dummy;
+    long l257 = 257L + dummy;
+    long l258 = 258L + dummy;
+    long l259 = 259L + dummy;
+    long l260 = 260L + dummy;
+    long l261 = 261L + dummy;
+    long l262 = 262L + dummy;
+    long l263 = 263L + dummy;
+    long l264 = 264L + dummy;
+    long l265 = 265L + dummy;
+    long l266 = 266L + dummy;
+    long l267 = 267L + dummy;
+    long l268 = 268L + dummy;
+    long l269 = 269L + dummy;
+    long l270 = 270L + dummy;
+    long l271 = 271L + dummy;
+    long l272 = 272L + dummy;
+    long l273 = 273L + dummy;
+    long l274 = 274L + dummy;
+    long l275 = 275L + dummy;
+    long l276 = 276L + dummy;
+    long l277 = 277L + dummy;
+    long l278 = 278L + dummy;
+    long l279 = 279L + dummy;
+    long l280 = 280L + dummy;
+    long l281 = 281L + dummy;
+    long l282 = 282L + dummy;
+    long l283 = 283L + dummy;
+    long l284 = 284L + dummy;
+    long l285 = 285L + dummy;
+    long l286 = 286L + dummy;
+    long l287 = 287L + dummy;
+    long l288 = 288L + dummy;
+    long l289 = 289L + dummy;
+    long l290 = 290L + dummy;
+    long l291 = 291L + dummy;
+    long l292 = 292L + dummy;
+    long l293 = 293L + dummy;
+    long l294 = 294L + dummy;
+    long l295 = 295L + dummy;
+    long l296 = 296L + dummy;
+    long l297 = 297L + dummy;
+    long l298 = 298L + dummy;
+    long l299 = 299L + dummy;
+    long l300 = 300L + dummy;
+    long l301 = 301L + dummy;
+    long l302 = 302L + dummy;
+    long l303 = 303L + dummy;
+    long l304 = 304L + dummy;
+    long l305 = 305L + dummy;
+    long l306 = 306L + dummy;
+    long l307 = 307L + dummy;
+    long l308 = 308L + dummy;
+    long l309 = 309L + dummy;
+    long l310 = 310L + dummy;
+    long l311 = 311L + dummy;
+    long l312 = 312L + dummy;
+    long l313 = 313L + dummy;
+    long l314 = 314L + dummy;
+    long l315 = 315L + dummy;
+    long l316 = 316L + dummy;
+    long l317 = 317L + dummy;
+    long l318 = 318L + dummy;
+    long l319 = 319L + dummy;
+    long l320 = 320L + dummy;
+    long l321 = 321L + dummy;
+    long l322 = 322L + dummy;
+    long l323 = 323L + dummy;
+    long l324 = 324L + dummy;
+    long l325 = 325L + dummy;
+    long l326 = 326L + dummy;
+    long l327 = 327L + dummy;
+    long l328 = 328L + dummy;
+    long l329 = 329L + dummy;
+    long l330 = 330L + dummy;
+    long l331 = 331L + dummy;
+    long l332 = 332L + dummy;
+    long l333 = 333L + dummy;
+    long l334 = 334L + dummy;
+    long l335 = 335L + dummy;
+    long l336 = 336L + dummy;
+    long l337 = 337L + dummy;
+    long l338 = 338L + dummy;
+    long l339 = 339L + dummy;
+    long l340 = 340L + dummy;
+    long l341 = 341L + dummy;
+    long l342 = 342L + dummy;
+    long l343 = 343L + dummy;
+    long l344 = 344L + dummy;
+    long l345 = 345L + dummy;
+    long l346 = 346L + dummy;
+    long l347 = 347L + dummy;
+    long l348 = 348L + dummy;
+    long l349 = 349L + dummy;
+    long l350 = 350L + dummy;
+    long l351 = 351L + dummy;
+    long l352 = 352L + dummy;
+    long l353 = 353L + dummy;
+    long l354 = 354L + dummy;
+    long l355 = 355L + dummy;
+    long l356 = 356L + dummy;
+    long l357 = 357L + dummy;
+    long l358 = 358L + dummy;
+    long l359 = 359L + dummy;
+    long l360 = 360L + dummy;
+    long l361 = 361L + dummy;
+    long l362 = 362L + dummy;
+    long l363 = 363L + dummy;
+    long l364 = 364L + dummy;
+    long l365 = 365L + dummy;
+    long l366 = 366L + dummy;
+    long l367 = 367L + dummy;
+    long l368 = 368L + dummy;
+    long l369 = 369L + dummy;
+    long l370 = 370L + dummy;
+    long l371 = 371L + dummy;
+    long l372 = 372L + dummy;
+    long l373 = 373L + dummy;
+    long l374 = 374L + dummy;
+    long l375 = 375L + dummy;
+    long l376 = 376L + dummy;
+    long l377 = 377L + dummy;
+    long l378 = 378L + dummy;
+    long l379 = 379L + dummy;
+    long l380 = 380L + dummy;
+    long l381 = 381L + dummy;
+    long l382 = 382L + dummy;
+    long l383 = 383L + dummy;
+    long l384 = 384L + dummy;
+    long l385 = 385L + dummy;
+    long l386 = 386L + dummy;
+    long l387 = 387L + dummy;
+    long l388 = 388L + dummy;
+    long l389 = 389L + dummy;
+    long l390 = 390L + dummy;
+    long l391 = 391L + dummy;
+    long l392 = 392L + dummy;
+    long l393 = 393L + dummy;
+    long l394 = 394L + dummy;
+    long l395 = 395L + dummy;
+    long l396 = 396L + dummy;
+    long l397 = 397L + dummy;
+    long l398 = 398L + dummy;
+    long l399 = 399L + dummy;
+    long l400 = 400L + dummy;
+    long l401 = 401L + dummy;
+    long l402 = 402L + dummy;
+    long l403 = 403L + dummy;
+    long l404 = 404L + dummy;
+    long l405 = 405L + dummy;
+    long l406 = 406L + dummy;
+    long l407 = 407L + dummy;
+    long l408 = 408L + dummy;
+    long l409 = 409L + dummy;
+    long l410 = 410L + dummy;
+    long l411 = 411L + dummy;
+    long l412 = 412L + dummy;
+    long l413 = 413L + dummy;
+    long l414 = 414L + dummy;
+    long l415 = 415L + dummy;
+    long l416 = 416L + dummy;
+    long l417 = 417L + dummy;
+    long l418 = 418L + dummy;
+    long l419 = 419L + dummy;
+    long l420 = 420L + dummy;
+    long l421 = 421L + dummy;
+    long l422 = 422L + dummy;
+    long l423 = 423L + dummy;
+    long l424 = 424L + dummy;
+    long l425 = 425L + dummy;
+    long l426 = 426L + dummy;
+    long l427 = 427L + dummy;
+    long l428 = 428L + dummy;
+    long l429 = 429L + dummy;
+    long l430 = 430L + dummy;
+    long l431 = 431L + dummy;
+    long l432 = 432L + dummy;
+    long l433 = 433L + dummy;
+    long l434 = 434L + dummy;
+    long l435 = 435L + dummy;
+    long l436 = 436L + dummy;
+    long l437 = 437L + dummy;
+    long l438 = 438L + dummy;
+    long l439 = 439L + dummy;
+    long l440 = 440L + dummy;
+    long l441 = 441L + dummy;
+    long l442 = 442L + dummy;
+    long l443 = 443L + dummy;
+    long l444 = 444L + dummy;
+    long l445 = 445L + dummy;
+    long l446 = 446L + dummy;
+    long l447 = 447L + dummy;
+    long l448 = 448L + dummy;
+    long l449 = 449L + dummy;
+    long l450 = 450L + dummy;
+    long l451 = 451L + dummy;
+    long l452 = 452L + dummy;
+    long l453 = 453L + dummy;
+    long l454 = 454L + dummy;
+    long l455 = 455L + dummy;
+    long l456 = 456L + dummy;
+    long l457 = 457L + dummy;
+    long l458 = 458L + dummy;
+    long l459 = 459L + dummy;
+    long l460 = 460L + dummy;
+    long l461 = 461L + dummy;
+    long l462 = 462L + dummy;
+    long l463 = 463L + dummy;
+    long l464 = 464L + dummy;
+    long l465 = 465L + dummy;
+    long l466 = 466L + dummy;
+    long l467 = 467L + dummy;
+    long l468 = 468L + dummy;
+    long l469 = 469L + dummy;
+    long l470 = 470L + dummy;
+    long l471 = 471L + dummy;
+    long l472 = 472L + dummy;
+    long l473 = 473L + dummy;
+    long l474 = 474L + dummy;
+    long l475 = 475L + dummy;
+    long l476 = 476L + dummy;
+    long l477 = 477L + dummy;
+    long l478 = 478L + dummy;
+    long l479 = 479L + dummy;
+    long l480 = 480L + dummy;
+    long l481 = 481L + dummy;
+    long l482 = 482L + dummy;
+    long l483 = 483L + dummy;
+    long l484 = 484L + dummy;
+    long l485 = 485L + dummy;
+    long l486 = 486L + dummy;
+    long l487 = 487L + dummy;
+    long l488 = 488L + dummy;
+    long l489 = 489L + dummy;
+    long l490 = 490L + dummy;
+    long l491 = 491L + dummy;
+    long l492 = 492L + dummy;
+    long l493 = 493L + dummy;
+    long l494 = 494L + dummy;
+    long l495 = 495L + dummy;
+    long l496 = 496L + dummy;
+    long l497 = 497L + dummy;
+    long l498 = 498L + dummy;
+    long l499 = 499L + dummy;
+    long l500 = 500L + dummy;
+    long l501 = 501L + dummy;
+    long l502 = 502L + dummy;
+    long l503 = 503L + dummy;
+    long l504 = 504L + dummy;
+    long l505 = 505L + dummy;
+    long l506 = 506L + dummy;
+    long l507 = 507L + dummy;
+    long l508 = 508L + dummy;
+    long l509 = 509L + dummy;
+    long l510 = 510L + dummy;
+    long l511 = 511L + dummy;
+    long l512 = 512L + dummy;
+    long l513 = 513L + dummy;
+    long l514 = 514L + dummy;
+    long l515 = 515L + dummy;
+    long l516 = 516L + dummy;
+    long l517 = 517L + dummy;
+    long l518 = 518L + dummy;
+    long l519 = 519L + dummy;
+    long l520 = 520L + dummy;
+    long l521 = 521L + dummy;
+    long l522 = 522L + dummy;
+    long l523 = 523L + dummy;
+    long l524 = 524L + dummy;
+    long l525 = 525L + dummy;
+    long l526 = 526L + dummy;
+    long l527 = 527L + dummy;
+    long l528 = 528L + dummy;
+    long l529 = 529L + dummy;
+    long l530 = 530L + dummy;
+    long l531 = 531L + dummy;
+    long l532 = 532L + dummy;
+    long l533 = 533L + dummy;
+    long l534 = 534L + dummy;
+    long l535 = 535L + dummy;
+    long l536 = 536L + dummy;
+    long l537 = 537L + dummy;
+    long l538 = 538L + dummy;
+    long l539 = 539L + dummy;
+    long l540 = 540L + dummy;
+    long l541 = 541L + dummy;
+    long l542 = 542L + dummy;
+    long l543 = 543L + dummy;
+    long l544 = 544L + dummy;
+    long l545 = 545L + dummy;
+    long l546 = 546L + dummy;
+    long l547 = 547L + dummy;
+    long l548 = 548L + dummy;
+    long l549 = 549L + dummy;
+    long l550 = 550L + dummy;
+    long l551 = 551L + dummy;
+    long l552 = 552L + dummy;
+    long l553 = 553L + dummy;
+    long l554 = 554L + dummy;
+    long l555 = 555L + dummy;
+    long l556 = 556L + dummy;
+    long l557 = 557L + dummy;
+    long l558 = 558L + dummy;
+    long l559 = 559L + dummy;
+    long l560 = 560L + dummy;
+    long l561 = 561L + dummy;
+    long l562 = 562L + dummy;
+    long l563 = 563L + dummy;
+    long l564 = 564L + dummy;
+    long l565 = 565L + dummy;
+    long l566 = 566L + dummy;
+    long l567 = 567L + dummy;
+    long l568 = 568L + dummy;
+    long l569 = 569L + dummy;
+    long l570 = 570L + dummy;
+    long l571 = 571L + dummy;
+    long l572 = 572L + dummy;
+    long l573 = 573L + dummy;
+    long l574 = 574L + dummy;
+    long l575 = 575L + dummy;
+    long l576 = 576L + dummy;
+    long l577 = 577L + dummy;
+    long l578 = 578L + dummy;
+    long l579 = 579L + dummy;
+    long l580 = 580L + dummy;
+    long l581 = 581L + dummy;
+    long l582 = 582L + dummy;
+    long l583 = 583L + dummy;
+    long l584 = 584L + dummy;
+    long l585 = 585L + dummy;
+    long l586 = 586L + dummy;
+    long l587 = 587L + dummy;
+    long l588 = 588L + dummy;
+    long l589 = 589L + dummy;
+    long l590 = 590L + dummy;
+    long l591 = 591L + dummy;
+    long l592 = 592L + dummy;
+    long l593 = 593L + dummy;
+    long l594 = 594L + dummy;
+    long l595 = 595L + dummy;
+    long l596 = 596L + dummy;
+    long l597 = 597L + dummy;
+    long l598 = 598L + dummy;
+    long l599 = 599L + dummy;
+    long l600 = 600L + dummy;
+    long l601 = 601L + dummy;
+    long l602 = 602L + dummy;
+    long l603 = 603L + dummy;
+    long l604 = 604L + dummy;
+    long l605 = 605L + dummy;
+    long l606 = 606L + dummy;
+    long l607 = 607L + dummy;
+    long l608 = 608L + dummy;
+    long l609 = 609L + dummy;
+    long l610 = 610L + dummy;
+    long l611 = 611L + dummy;
+    long l612 = 612L + dummy;
+    long l613 = 613L + dummy;
+    long l614 = 614L + dummy;
+    long l615 = 615L + dummy;
+    long l616 = 616L + dummy;
+    long l617 = 617L + dummy;
+    long l618 = 618L + dummy;
+    long l619 = 619L + dummy;
+    long l620 = 620L + dummy;
+    long l621 = 621L + dummy;
+    long l622 = 622L + dummy;
+    long l623 = 623L + dummy;
+    long l624 = 624L + dummy;
+    long l625 = 625L + dummy;
+    long l626 = 626L + dummy;
+    long l627 = 627L + dummy;
+    long l628 = 628L + dummy;
+    long l629 = 629L + dummy;
+    long l630 = 630L + dummy;
+    long l631 = 631L + dummy;
+    long l632 = 632L + dummy;
+    long l633 = 633L + dummy;
+    long l634 = 634L + dummy;
+    long l635 = 635L + dummy;
+    long l636 = 636L + dummy;
+    long l637 = 637L + dummy;
+    long l638 = 638L + dummy;
+    long l639 = 639L + dummy;
+    long l640 = 640L + dummy;
+    long l641 = 641L + dummy;
+    long l642 = 642L + dummy;
+    long l643 = 643L + dummy;
+    long l644 = 644L + dummy;
+    long l645 = 645L + dummy;
+    long l646 = 646L + dummy;
+    long l647 = 647L + dummy;
+    long l648 = 648L + dummy;
+    long l649 = 649L + dummy;
+    long l650 = 650L + dummy;
+    long l651 = 651L + dummy;
+    long l652 = 652L + dummy;
+    long l653 = 653L + dummy;
+    long l654 = 654L + dummy;
+    long l655 = 655L + dummy;
+    long l656 = 656L + dummy;
+    long l657 = 657L + dummy;
+    long l658 = 658L + dummy;
+    long l659 = 659L + dummy;
+    long l660 = 660L + dummy;
+    long l661 = 661L + dummy;
+    long l662 = 662L + dummy;
+    long l663 = 663L + dummy;
+    long l664 = 664L + dummy;
+    long l665 = 665L + dummy;
+    long l666 = 666L + dummy;
+    long l667 = 667L + dummy;
+    long l668 = 668L + dummy;
+    long l669 = 669L + dummy;
+    long l670 = 670L + dummy;
+    long l671 = 671L + dummy;
+    long l672 = 672L + dummy;
+    long l673 = 673L + dummy;
+    long l674 = 674L + dummy;
+    long l675 = 675L + dummy;
+    long l676 = 676L + dummy;
+    long l677 = 677L + dummy;
+    long l678 = 678L + dummy;
+    long l679 = 679L + dummy;
+    long l680 = 680L + dummy;
+    long l681 = 681L + dummy;
+    long l682 = 682L + dummy;
+    long l683 = 683L + dummy;
+    long l684 = 684L + dummy;
+    long l685 = 685L + dummy;
+    long l686 = 686L + dummy;
+    long l687 = 687L + dummy;
+    long l688 = 688L + dummy;
+    long l689 = 689L + dummy;
+    long l690 = 690L + dummy;
+    long l691 = 691L + dummy;
+    long l692 = 692L + dummy;
+    long l693 = 693L + dummy;
+    long l694 = 694L + dummy;
+    long l695 = 695L + dummy;
+    long l696 = 696L + dummy;
+    long l697 = 697L + dummy;
+    long l698 = 698L + dummy;
+    long l699 = 699L + dummy;
+    long l700 = 700L + dummy;
+    long l701 = 701L + dummy;
+    long l702 = 702L + dummy;
+    long l703 = 703L + dummy;
+    long l704 = 704L + dummy;
+    long l705 = 705L + dummy;
+    long l706 = 706L + dummy;
+    long l707 = 707L + dummy;
+    long l708 = 708L + dummy;
+    long l709 = 709L + dummy;
+    long l710 = 710L + dummy;
+    long l711 = 711L + dummy;
+    long l712 = 712L + dummy;
+    long l713 = 713L + dummy;
+    long l714 = 714L + dummy;
+    long l715 = 715L + dummy;
+    long l716 = 716L + dummy;
+    long l717 = 717L + dummy;
+    long l718 = 718L + dummy;
+    long l719 = 719L + dummy;
+    long l720 = 720L + dummy;
+    long l721 = 721L + dummy;
+    long l722 = 722L + dummy;
+    long l723 = 723L + dummy;
+    long l724 = 724L + dummy;
+    long l725 = 725L + dummy;
+    long l726 = 726L + dummy;
+    long l727 = 727L + dummy;
+    long l728 = 728L + dummy;
+    long l729 = 729L + dummy;
+    long l730 = 730L + dummy;
+    long l731 = 731L + dummy;
+    long l732 = 732L + dummy;
+    long l733 = 733L + dummy;
+    long l734 = 734L + dummy;
+    long l735 = 735L + dummy;
+    long l736 = 736L + dummy;
+    long l737 = 737L + dummy;
+    long l738 = 738L + dummy;
+    long l739 = 739L + dummy;
+    long l740 = 740L + dummy;
+    long l741 = 741L + dummy;
+    long l742 = 742L + dummy;
+    long l743 = 743L + dummy;
+    long l744 = 744L + dummy;
+    long l745 = 745L + dummy;
+    long l746 = 746L + dummy;
+    long l747 = 747L + dummy;
+    long l748 = 748L + dummy;
+    long l749 = 749L + dummy;
+    long l750 = 750L + dummy;
+    long l751 = 751L + dummy;
+    long l752 = 752L + dummy;
+    long l753 = 753L + dummy;
+    long l754 = 754L + dummy;
+    long l755 = 755L + dummy;
+    long l756 = 756L + dummy;
+    long l757 = 757L + dummy;
+    long l758 = 758L + dummy;
+    long l759 = 759L + dummy;
+    long l760 = 760L + dummy;
+    long l761 = 761L + dummy;
+    long l762 = 762L + dummy;
+    long l763 = 763L + dummy;
+    long l764 = 764L + dummy;
+    long l765 = 765L + dummy;
+    long l766 = 766L + dummy;
+    long l767 = 767L + dummy;
+    long l768 = 768L + dummy;
+    long l769 = 769L + dummy;
+    long l770 = 770L + dummy;
+    long l771 = 771L + dummy;
+    long l772 = 772L + dummy;
+    long l773 = 773L + dummy;
+    long l774 = 774L + dummy;
+    long l775 = 775L + dummy;
+    long l776 = 776L + dummy;
+    long l777 = 777L + dummy;
+    long l778 = 778L + dummy;
+    long l779 = 779L + dummy;
+    long l780 = 780L + dummy;
+    long l781 = 781L + dummy;
+    long l782 = 782L + dummy;
+    long l783 = 783L + dummy;
+    long l784 = 784L + dummy;
+    long l785 = 785L + dummy;
+    long l786 = 786L + dummy;
+    long l787 = 787L + dummy;
+    long l788 = 788L + dummy;
+    long l789 = 789L + dummy;
+    long l790 = 790L + dummy;
+    long l791 = 791L + dummy;
+    long l792 = 792L + dummy;
+    long l793 = 793L + dummy;
+    long l794 = 794L + dummy;
+    long l795 = 795L + dummy;
+    long l796 = 796L + dummy;
+    long l797 = 797L + dummy;
+    long l798 = 798L + dummy;
+    long l799 = 799L + dummy;
+    long l800 = 800L + dummy;
+    long l801 = 801L + dummy;
+    long l802 = 802L + dummy;
+    long l803 = 803L + dummy;
+    long l804 = 804L + dummy;
+    long l805 = 805L + dummy;
+    long l806 = 806L + dummy;
+    long l807 = 807L + dummy;
+    long l808 = 808L + dummy;
+    long l809 = 809L + dummy;
+    long l810 = 810L + dummy;
+    long l811 = 811L + dummy;
+    long l812 = 812L + dummy;
+    long l813 = 813L + dummy;
+    long l814 = 814L + dummy;
+    long l815 = 815L + dummy;
+    long l816 = 816L + dummy;
+    long l817 = 817L + dummy;
+    long l818 = 818L + dummy;
+    long l819 = 819L + dummy;
+    long l820 = 820L + dummy;
+    long l821 = 821L + dummy;
+    long l822 = 822L + dummy;
+    long l823 = 823L + dummy;
+    long l824 = 824L + dummy;
+    long l825 = 825L + dummy;
+    long l826 = 826L + dummy;
+    long l827 = 827L + dummy;
+    long l828 = 828L + dummy;
+    long l829 = 829L + dummy;
+    long l830 = 830L + dummy;
+    long l831 = 831L + dummy;
+    long l832 = 832L + dummy;
+    long l833 = 833L + dummy;
+    long l834 = 834L + dummy;
+    long l835 = 835L + dummy;
+    long l836 = 836L + dummy;
+    long l837 = 837L + dummy;
+    long l838 = 838L + dummy;
+    long l839 = 839L + dummy;
+    long l840 = 840L + dummy;
+    long l841 = 841L + dummy;
+    long l842 = 842L + dummy;
+    long l843 = 843L + dummy;
+    long l844 = 844L + dummy;
+    long l845 = 845L + dummy;
+    long l846 = 846L + dummy;
+    long l847 = 847L + dummy;
+    long l848 = 848L + dummy;
+    long l849 = 849L + dummy;
+    long l850 = 850L + dummy;
+    long l851 = 851L + dummy;
+    long l852 = 852L + dummy;
+    long l853 = 853L + dummy;
+    long l854 = 854L + dummy;
+    long l855 = 855L + dummy;
+    long l856 = 856L + dummy;
+    long l857 = 857L + dummy;
+    long l858 = 858L + dummy;
+    long l859 = 859L + dummy;
+    long l860 = 860L + dummy;
+    long l861 = 861L + dummy;
+    long l862 = 862L + dummy;
+    long l863 = 863L + dummy;
+    long l864 = 864L + dummy;
+    long l865 = 865L + dummy;
+    long l866 = 866L + dummy;
+    long l867 = 867L + dummy;
+    long l868 = 868L + dummy;
+    long l869 = 869L + dummy;
+    long l870 = 870L + dummy;
+    long l871 = 871L + dummy;
+    long l872 = 872L + dummy;
+    long l873 = 873L + dummy;
+    long l874 = 874L + dummy;
+    long l875 = 875L + dummy;
+    long l876 = 876L + dummy;
+    long l877 = 877L + dummy;
+    long l878 = 878L + dummy;
+    long l879 = 879L + dummy;
+    long l880 = 880L + dummy;
+    long l881 = 881L + dummy;
+    long l882 = 882L + dummy;
+    long l883 = 883L + dummy;
+    long l884 = 884L + dummy;
+    long l885 = 885L + dummy;
+    long l886 = 886L + dummy;
+    long l887 = 887L + dummy;
+    long l888 = 888L + dummy;
+    long l889 = 889L + dummy;
+    long l890 = 890L + dummy;
+    long l891 = 891L + dummy;
+    long l892 = 892L + dummy;
+    long l893 = 893L + dummy;
+    long l894 = 894L + dummy;
+    long l895 = 895L + dummy;
+    long l896 = 896L + dummy;
+    long l897 = 897L + dummy;
+    long l898 = 898L + dummy;
+    long l899 = 899L + dummy;
+    long l900 = 900L + dummy;
+    long l901 = 901L + dummy;
+    long l902 = 902L + dummy;
+    long l903 = 903L + dummy;
+    long l904 = 904L + dummy;
+    long l905 = 905L + dummy;
+    long l906 = 906L + dummy;
+    long l907 = 907L + dummy;
+    long l908 = 908L + dummy;
+    long l909 = 909L + dummy;
+    long l910 = 910L + dummy;
+    long l911 = 911L + dummy;
+    long l912 = 912L + dummy;
+    long l913 = 913L + dummy;
+    long l914 = 914L + dummy;
+    long l915 = 915L + dummy;
+    long l916 = 916L + dummy;
+    long l917 = 917L + dummy;
+    long l918 = 918L + dummy;
+    long l919 = 919L + dummy;
+    long l920 = 920L + dummy;
+    long l921 = 921L + dummy;
+    long l922 = 922L + dummy;
+    long l923 = 923L + dummy;
+    long l924 = 924L + dummy;
+    long l925 = 925L + dummy;
+    long l926 = 926L + dummy;
+    long l927 = 927L + dummy;
+    long l928 = 928L + dummy;
+    long l929 = 929L + dummy;
+    long l930 = 930L + dummy;
+    long l931 = 931L + dummy;
+    long l932 = 932L + dummy;
+    long l933 = 933L + dummy;
+    long l934 = 934L + dummy;
+    long l935 = 935L + dummy;
+    long l936 = 936L + dummy;
+    long l937 = 937L + dummy;
+    long l938 = 938L + dummy;
+    long l939 = 939L + dummy;
+    long l940 = 940L + dummy;
+    long l941 = 941L + dummy;
+    long l942 = 942L + dummy;
+    long l943 = 943L + dummy;
+    long l944 = 944L + dummy;
+    long l945 = 945L + dummy;
+    long l946 = 946L + dummy;
+    long l947 = 947L + dummy;
+    long l948 = 948L + dummy;
+    long l949 = 949L + dummy;
+    long l950 = 950L + dummy;
+    long l951 = 951L + dummy;
+    long l952 = 952L + dummy;
+    long l953 = 953L + dummy;
+    long l954 = 954L + dummy;
+    long l955 = 955L + dummy;
+    long l956 = 956L + dummy;
+    long l957 = 957L + dummy;
+    long l958 = 958L + dummy;
+    long l959 = 959L + dummy;
+    long l960 = 960L + dummy;
+    long l961 = 961L + dummy;
+    long l962 = 962L + dummy;
+    long l963 = 963L + dummy;
+    long l964 = 964L + dummy;
+    long l965 = 965L + dummy;
+    long l966 = 966L + dummy;
+    long l967 = 967L + dummy;
+    long l968 = 968L + dummy;
+    long l969 = 969L + dummy;
+    long l970 = 970L + dummy;
+    long l971 = 971L + dummy;
+    long l972 = 972L + dummy;
+    long l973 = 973L + dummy;
+    long l974 = 974L + dummy;
+    long l975 = 975L + dummy;
+    long l976 = 976L + dummy;
+    long l977 = 977L + dummy;
+    long l978 = 978L + dummy;
+    long l979 = 979L + dummy;
+    long l980 = 980L + dummy;
+    long l981 = 981L + dummy;
+    long l982 = 982L + dummy;
+    long l983 = 983L + dummy;
+    long l984 = 984L + dummy;
+    long l985 = 985L + dummy;
+    long l986 = 986L + dummy;
+    long l987 = 987L + dummy;
+    long l988 = 988L + dummy;
+    long l989 = 989L + dummy;
+    long l990 = 990L + dummy;
+    long l991 = 991L + dummy;
+    long l992 = 992L + dummy;
+    long l993 = 993L + dummy;
+    long l994 = 994L + dummy;
+    long l995 = 995L + dummy;
+    long l996 = 996L + dummy;
+    long l997 = 997L + dummy;
+    long l998 = 998L + dummy;
+    long l999 = 999L + dummy;
     l1 += l0;
     l2 += l1;
     l3 += l2;
diff --git a/tools/dexfuzz/Android.mk b/tools/dexfuzz/Android.mk
index d8f5582..1e4b4f5 100644
--- a/tools/dexfuzz/Android.mk
+++ b/tools/dexfuzz/Android.mk
@@ -31,7 +31,7 @@
 LOCAL_MODULE_CLASS := EXECUTABLES
 LOCAL_MODULE := dexfuzz
 include $(BUILD_SYSTEM)/base_rules.mk
-$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/dexfuzz $(ACP)
+$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/dexfuzz $(ACP) $(HOST_CORE_IMG_OUTS)
 	@echo "Copy: $(PRIVATE_MODULE) ($@)"
 	$(copy-file-to-new-target)
 	$(hide) chmod 755 $@
diff --git a/tools/dexfuzz/README b/tools/dexfuzz/README
index c4795f2..a0658ec 100644
--- a/tools/dexfuzz/README
+++ b/tools/dexfuzz/README
@@ -21,7 +21,13 @@
 How to run DexFuzz
 ==================
 
-1. Build dexfuzz with mmm tools/dexfuzz from within art/.
+DexFuzz can run its test programs on either an ADB-connected device, or a host-build of
+ART locally.
+
+Execution on an ADB-connected device
+------------------------------------
+
+1. Build dexfuzz with mmma tools/dexfuzz from within art/.
 2. Make sure you have an Android device connected via ADB, that is capable of
    having DEX files pushed to it and executed with the dalvikvm command.
 3. Make sure you're in the Android build environment!
@@ -63,6 +69,19 @@
 Add in --execute-dir=<dir on device> if you want to specify an execution directory.
   (The default is /data/art-test/)
 
+Host Execution
+--------------
+
+DexFuzz now supports execution on your host machine.
+Follow steps 1, 3, 4, and 7 as above, but also observe the following:
+ - instead of specifying an ISA, use --host
+ - ANDROID_DATA must be set, pointing to a location where dex2oat will place
+   OAT files after compilation.
+ - Files will always be executed in the same directory where you are executing DexFuzz.
+
+Fuzzer Operation
+----------------
+
 As the fuzzer works, you'll see output like:
 
 |-----------------------------------------------------------------|
diff --git a/tools/dexfuzz/src/dexfuzz/DexFuzz.java b/tools/dexfuzz/src/dexfuzz/DexFuzz.java
index 2fb9663..04bbbf8 100644
--- a/tools/dexfuzz/src/dexfuzz/DexFuzz.java
+++ b/tools/dexfuzz/src/dexfuzz/DexFuzz.java
@@ -33,7 +33,7 @@
  */
 public class DexFuzz {
   private static int majorVersion = 1;
-  private static int minorVersion = 0;
+  private static int minorVersion = 1;
   private static int seedChangeVersion = 0;
 
   /**
diff --git a/tools/dexfuzz/src/dexfuzz/Options.java b/tools/dexfuzz/src/dexfuzz/Options.java
index 1ae7b5e..2e929c8 100644
--- a/tools/dexfuzz/src/dexfuzz/Options.java
+++ b/tools/dexfuzz/src/dexfuzz/Options.java
@@ -58,7 +58,7 @@
 
   // FLAG OPTIONS
   public static boolean execute;
-  public static boolean local;
+  public static boolean executeOnHost;
   public static boolean noBootImage;
   public static boolean useInterpreter;
   public static boolean useQuick;
@@ -90,7 +90,7 @@
     Log.always("  --output=<file>        : Output DEX file to be produced");
     Log.always("");
     Log.always("  --execute              : Execute the resulting fuzzed program");
-    Log.always("    --local              : Execute on host (Not available yet.)");
+    Log.always("    --host               : Execute on host");
     Log.always("    --device=<device>    : Execute on an ADB-connected-device, where <device> is");
     Log.always("                           the argument given to adb -s. Default execution mode.");
     Log.always("    --execute-dir=<dir>  : Push tests to this directory to execute them.");
@@ -150,8 +150,8 @@
   private static void handleFlagOption(String flag) {
     if (flag.equals("execute")) {
       execute = true;
-    } else if (flag.equals("local")) {
-      local = true;
+    } else if (flag.equals("host")) {
+      executeOnHost = true;
     } else if (flag.equals("no-boot-image")) {
       noBootImage = true;
     } else if (flag.equals("skip-host-verify")) {
@@ -383,19 +383,25 @@
       Log.error("Cannot use --max-methods that's smaller than --min-methods");
       return false;
     }
-    if (local && usingSpecificDevice) {
-      Log.error("Cannot use --local and --device!");
+    if (executeOnHost && usingSpecificDevice) {
+      Log.error("Cannot use --host and --device!");
       return false;
     }
     if (execute) {
-      if (!(useArchArm
-          || useArchArm64
-          || useArchX86
-          || useArchX86_64
-          || useArchMips
-          || useArchMips64)) {
-        Log.error("No architecture to execute on was specified!");
-        return false;
+      // When host-execution mode is specified, we don't need to select an architecture.
+      if (!executeOnHost) {
+        if (!(useArchArm
+            || useArchArm64
+            || useArchX86
+            || useArchX86_64
+            || useArchMips
+            || useArchMips64)) {
+          Log.error("No architecture to execute on was specified!");
+          return false;
+        }
+      } else {
+        // TODO: Select the correct architecture. For now, just assume x86.
+        useArchX86 = true;
       }
       if ((useArchArm || useArchArm64) && (useArchX86 || useArchX86_64)) {
         Log.error("Did you mean to specify ARM and x86?");
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Architecture.java b/tools/dexfuzz/src/dexfuzz/executors/Architecture.java
index 5cdabc3..051d80e 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Architecture.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Architecture.java
@@ -17,15 +17,23 @@
 package dexfuzz.executors;
 
 /**
- * Every Executor must specify an Architecture. It is important that when reduced
- * to lower case, these match the ISA string that ART would produce. For example,
- * the architecture directory used for /data/dalvik-cache/${ISA}
+ * Every Executor must specify an Architecture.
  */
 public enum Architecture {
-  ARM,
-  ARM64,
-  X86,
-  X86_64,
-  MIPS,
-  MIPS64
+  ARM("arm"),
+  ARM64("arm64"),
+  X86("x86"),
+  X86_64("x86_64"),
+  MIPS("mips"),
+  MIPS64("mips64");
+
+  private String archString = "";
+
+  private Architecture(String archString) {
+    this.archString = archString;
+  }
+
+  public String asString() {
+    return archString;
+  }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Arm64InterpreterExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/Arm64InterpreterExecutor.java
index a945283..227c698 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Arm64InterpreterExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Arm64InterpreterExecutor.java
@@ -21,7 +21,7 @@
 public class Arm64InterpreterExecutor extends Executor {
 
   public Arm64InterpreterExecutor(BaseListener listener, Device device) {
-    super("ARM64 Interpreter", 30, listener, Architecture.ARM64, device);
+    super("ARM64 Interpreter", 30, listener, Architecture.ARM64, device, false);
   }
 
   @Override
@@ -33,17 +33,6 @@
     }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/arm64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return false;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Arm64OptimizingBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/Arm64OptimizingBackendExecutor.java
index 2204ba8..bfa87b7 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Arm64OptimizingBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Arm64OptimizingBackendExecutor.java
@@ -21,7 +21,7 @@
 public class Arm64OptimizingBackendExecutor extends Executor {
 
   public Arm64OptimizingBackendExecutor(BaseListener listener, Device device) {
-    super("ARM64 Optimizing Backend", 5, listener, Architecture.ARM64, device);
+    super("ARM64 Optimizing Backend", 5, listener, Architecture.ARM64, device, true);
   }
 
   @Override
@@ -33,17 +33,6 @@
     }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/arm64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Arm64QuickBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/Arm64QuickBackendExecutor.java
index 55c9c7a..726a7a8f 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Arm64QuickBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Arm64QuickBackendExecutor.java
@@ -21,7 +21,7 @@
 public class Arm64QuickBackendExecutor extends Executor {
 
   public Arm64QuickBackendExecutor(BaseListener listener, Device device) {
-    super("ARM64 Quick Backend", 5, listener, Architecture.ARM64, device);
+    super("ARM64 Quick Backend", 5, listener, Architecture.ARM64, device, true);
   }
 
   @Override
@@ -33,17 +33,6 @@
     }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/arm64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/ArmInterpreterExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/ArmInterpreterExecutor.java
index 68ce2e0..d17ea87 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/ArmInterpreterExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/ArmInterpreterExecutor.java
@@ -21,7 +21,7 @@
 public class ArmInterpreterExecutor extends Executor {
 
   public ArmInterpreterExecutor(BaseListener listener, Device device) {
-    super("ARM Interpreter", 30, listener, Architecture.ARM, device);
+    super("ARM Interpreter", 30, listener, Architecture.ARM, device, false);
   }
 
   @Override
@@ -33,17 +33,6 @@
     }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/arm/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return false;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/ArmOptimizingBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/ArmOptimizingBackendExecutor.java
index 78cf652..947bb2f 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/ArmOptimizingBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/ArmOptimizingBackendExecutor.java
@@ -21,7 +21,7 @@
 public class ArmOptimizingBackendExecutor extends Executor {
 
   public ArmOptimizingBackendExecutor(BaseListener listener, Device device) {
-    super("ARM Optimizing Backend", 5, listener, Architecture.ARM, device);
+    super("ARM Optimizing Backend", 5, listener, Architecture.ARM, device, true);
   }
 
   @Override
@@ -33,17 +33,6 @@
     }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/arm/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/ArmQuickBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/ArmQuickBackendExecutor.java
index 8f026b2..611270b 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/ArmQuickBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/ArmQuickBackendExecutor.java
@@ -21,7 +21,7 @@
 public class ArmQuickBackendExecutor extends Executor {
 
   public ArmQuickBackendExecutor(BaseListener listener, Device device) {
-    super("ARM Quick Backend", 5, listener, Architecture.ARM, device);
+    super("ARM Quick Backend", 5, listener, Architecture.ARM, device, true);
   }
 
   @Override
@@ -33,17 +33,6 @@
     }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/arm/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Device.java b/tools/dexfuzz/src/dexfuzz/executors/Device.java
index 8c03103..736aaad 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Device.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Device.java
@@ -16,22 +16,36 @@
 
 package dexfuzz.executors;
 
+import java.io.IOException;
+import java.util.Map;
+
+import dexfuzz.ExecutionResult;
+import dexfuzz.Log;
+import dexfuzz.Options;
+import dexfuzz.StreamConsumer;
+
 /**
- * Handles execution either on a remote device, or locally.
- * Currently only remote execution, on an ADB-connected device, is supported.
+ * Handles execution either on a remote target device, or on a local host computer.
  */
 public class Device {
-  private boolean isLocal;
+  private boolean isHost;
   private String deviceName;
   private boolean usingSpecificDevice;
   private boolean noBootImage;
 
+  private String androidHostOut;
+  private String androidProductOut;
+  private String androidData;
+
+  private boolean programPushed;
+
   /**
-   * The constructor for a local "device". Not yet supported.
+   * The constructor for a host "device".
    */
   public Device() {
-    this.isLocal = true;
-    throw new UnsupportedOperationException("Currently local execution is not supported.");
+    this.isHost = true;
+    this.deviceName = "[HostDevice]";
+    setup();
   }
 
   /**
@@ -43,20 +57,68 @@
       this.usingSpecificDevice = true;
     }
     this.noBootImage = noBootImage;
+    setup();
+  }
+
+  private String checkForEnvVar(Map<String, String> envVars, String key) {
+    if (!envVars.containsKey(key)) {
+      Log.errorAndQuit("Cannot run a fuzzed program if $" + key + " is not set!");
+    }
+    return envVars.get(key);
+  }
+
+  private void setup() {
+    programPushed = false;
+
+    Map<String, String> envVars = System.getenv();
+    androidProductOut = checkForEnvVar(envVars, "ANDROID_PRODUCT_OUT");
+    androidHostOut = checkForEnvVar(envVars, "ANDROID_HOST_OUT");
+
+    if (!isHost) {
+      // Create temporary consumers for the initial test.
+      StreamConsumer outputConsumer = new StreamConsumer();
+      outputConsumer.start();
+      StreamConsumer errorConsumer = new StreamConsumer();
+      errorConsumer.start();
+
+      // Check for ADB.
+      try {
+        ProcessBuilder pb = new ProcessBuilder();
+        pb.command("adb", "devices");
+        Process process = pb.start();
+        int exitValue = process.waitFor();
+        if (exitValue != 0) {
+          Log.errorAndQuit("Problem executing ADB - is it in your $PATH?");
+        }
+      } catch (IOException e) {
+        Log.errorAndQuit("IOException when executing ADB, is it working?");
+      } catch (InterruptedException e) {
+        Log.errorAndQuit("InterruptedException when executing ADB, is it working?");
+      }
+
+      // Check we can run something on ADB.
+      ExecutionResult result = executeCommand("true", true, outputConsumer, errorConsumer);
+      if (result.getFlattenedAll().contains("device not found")) {
+        Log.errorAndQuit("Couldn't connect to specified ADB device: " + deviceName);
+      }
+
+      outputConsumer.shutdown();
+      errorConsumer.shutdown();
+    } else {
+      androidData = checkForEnvVar(envVars, "ANDROID_DATA");
+    }
   }
 
   /**
    * Get the name that would be provided to adb -s to communicate specifically with this device.
    */
   public String getName() {
-    if (isLocal) {
-      return "LOCAL DEVICE";
-    }
+    assert(!isHost);
     return deviceName;
   }
 
-  public boolean isLocal() {
-    return isLocal;
+  public boolean isHost() {
+    return isHost;
   }
 
   /**
@@ -72,20 +134,81 @@
    * Get the command prefix for this device if we want to use adb shell.
    */
   public String getExecutionShellPrefix() {
-    if (isLocal) {
+    if (isHost) {
       return "";
     }
     return getExecutionPrefixWithAdb("shell");
   }
 
   /**
-   * Get the command prefix for this device if we want to use adb push.
+   * Get any extra flags required to execute ART on the host.
    */
-  public String getExecutionPushPrefix() {
-    if (isLocal) {
-      return "";
+  public String getHostExecutionFlags() {
+    return String.format("-Xnorelocate -Ximage:%s/framework/core.art", androidHostOut);
+  }
+
+  public String getAndroidHostOut() {
+    return androidHostOut;
+  }
+
+  public String getAndroidProductOut() {
+    return androidProductOut;
+  }
+
+  public ExecutionResult executeCommand(String command, boolean captureOutput) {
+    assert(!captureOutput);
+    return executeCommand(command, captureOutput, null, null);
+  }
+
+  public ExecutionResult executeCommand(String command, boolean captureOutput,
+      StreamConsumer outputConsumer, StreamConsumer errorConsumer) {
+
+    ExecutionResult result = new ExecutionResult();
+
+    Log.info("Executing: " + command);
+
+    try {
+      ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));
+      processBuilder.environment().put("ANDROID_ROOT", androidHostOut);
+      if (Options.executeOnHost) {
+        processBuilder.environment().put("ANDROID_DATA", androidData);
+      }
+      Process process = processBuilder.start();
+
+      if (captureOutput) {
+        // Give the streams to the StreamConsumers.
+        outputConsumer.giveStreamAndStartConsuming(process.getInputStream());
+        errorConsumer.giveStreamAndStartConsuming(process.getErrorStream());
+      }
+
+      // Wait until the process is done - the StreamConsumers will keep the
+      // buffers drained, so this shouldn't block indefinitely.
+      // Get the return value as well.
+      result.returnValue = process.waitFor();
+
+      Log.info("Return value: " + result.returnValue);
+
+      if (captureOutput) {
+        // Tell the StreamConsumers to stop consuming, and wait for them to finish
+        // so we know we have all of the output.
+        outputConsumer.processFinished();
+        errorConsumer.processFinished();
+        result.output = outputConsumer.getOutput();
+        result.error = errorConsumer.getOutput();
+
+        // Always explicitly indicate the return code in the text output now.
+        // NB: adb shell doesn't actually return exit codes currently, but this will
+        // be useful if/when it does.
+        result.output.add("RETURN CODE: " + result.returnValue);
+      }
+
+    } catch (IOException e) {
+      Log.errorAndQuit("ExecutionResult.execute() caught an IOException");
+    } catch (InterruptedException e) {
+      Log.errorAndQuit("ExecutionResult.execute() caught an InterruptedException");
     }
-    return getExecutionPrefixWithAdb("push");
+
+    return result;
   }
 
   private String getExecutionPrefixWithAdb(String command) {
@@ -95,4 +218,37 @@
       return String.format("adb %s ", command);
     }
   }
+
+  private String getCacheLocation(Architecture architecture) {
+    String cacheLocation = "";
+    if (isHost) {
+      cacheLocation = androidData + "/dalvik-cache/" + architecture.asString() + "/";
+    } else {
+      cacheLocation = "/data/dalvik-cache/" + architecture.asString() + "/";
+    }
+    return cacheLocation;
+  }
+
+  private String getOatFileName(String testLocation, String programName) {
+    // Converts e.g. /data/art-test/file.dex to data@art-test@file.dex
+    return (testLocation.replace("/", "@").substring(1) + "@" + programName);
+  }
+
+  public void cleanCodeCache(Architecture architecture, String testLocation, String programName) {
+    String command = "rm -f " + getCacheLocation(architecture)
+        + getOatFileName(testLocation, programName);
+    executeCommand(command, false);
+  }
+
+  public void pushProgramToDevice(String programName, String testLocation) {
+    assert(!isHost);
+    if (!programPushed) {
+      executeCommand(getExecutionPrefixWithAdb("push") + programName + " " + testLocation, false);
+      programPushed = true;
+    }
+  }
+
+  public void resetProgramPushed() {
+    programPushed = false;
+  }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Executor.java b/tools/dexfuzz/src/dexfuzz/executors/Executor.java
index 7cc584d..1e5d4be 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Executor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Executor.java
@@ -17,21 +17,14 @@
 package dexfuzz.executors;
 
 import dexfuzz.ExecutionResult;
-import dexfuzz.Log;
 import dexfuzz.Options;
 import dexfuzz.StreamConsumer;
 import dexfuzz.listeners.BaseListener;
 
-import java.io.IOException;
-import java.util.Map;
-
 /**
  * Base class containing the common methods for executing a particular backend of ART.
  */
 public abstract class Executor {
-  private String androidHostOut;
-  private String androidProductOut;
-
   private StreamConsumer outputConsumer;
   private StreamConsumer errorConsumer;
 
@@ -45,9 +38,10 @@
   protected String testLocation;
   protected Architecture architecture;
   protected Device device;
+  private boolean needsCleanCodeCache;
 
   protected Executor(String name, int timeout, BaseListener listener, Architecture architecture,
-      Device device) {
+      Device device, boolean needsCleanCodeCache) {
     executeClass = Options.executeClass;
 
     if (Options.shortTimeouts) {
@@ -60,106 +54,27 @@
     this.listener = listener;
     this.architecture = architecture;
     this.device = device;
+    this.needsCleanCodeCache = needsCleanCodeCache;
 
-    this.testLocation = Options.executeDirectory;
-
-    Map<String, String> envVars = System.getenv();
-    androidProductOut = checkForEnvVar(envVars, "ANDROID_PRODUCT_OUT");
-    androidHostOut = checkForEnvVar(envVars, "ANDROID_HOST_OUT");
+    if (Options.executeOnHost) {
+      this.testLocation = System.getProperty("user.dir");
+    } else {
+      this.testLocation = Options.executeDirectory;
+    }
 
     outputConsumer = new StreamConsumer();
     outputConsumer.start();
     errorConsumer = new StreamConsumer();
     errorConsumer.start();
-
-    if (!device.isLocal()) {
-      // Check for ADB.
-      try {
-        ProcessBuilder pb = new ProcessBuilder();
-        pb.command("adb", "devices");
-        Process process = pb.start();
-        int exitValue = process.waitFor();
-        if (exitValue != 0) {
-          Log.errorAndQuit("Problem executing ADB - is it in your $PATH?");
-        }
-      } catch (IOException e) {
-        Log.errorAndQuit("IOException when executing ADB, is it working?");
-      } catch (InterruptedException e) {
-        Log.errorAndQuit("InterruptedException when executing ADB, is it working?");
-      }
-
-      // Check we can run something on ADB.
-      ExecutionResult result = executeOnDevice("true", true);
-      if (result.getFlattenedAll().contains("device not found")) {
-        Log.errorAndQuit("Couldn't connect to specified ADB device: " + device.getName());
-      }
-    }
-  }
-
-  private String checkForEnvVar(Map<String, String> envVars, String key) {
-    if (!envVars.containsKey(key)) {
-      Log.errorAndQuit("Cannot run a fuzzed program if $" + key + " is not set!");
-    }
-    return envVars.get(key);
-  }
-
-  private ExecutionResult executeCommand(String command, boolean captureOutput) {
-    ExecutionResult result = new ExecutionResult();
-
-    Log.info("Executing: " + command);
-
-    try {
-      ProcessBuilder processBuilder = new ProcessBuilder(command.split(" "));
-      processBuilder.environment().put("ANDROID_ROOT", androidHostOut);
-      Process process = processBuilder.start();
-
-      if (captureOutput) {
-        // Give the streams to the StreamConsumers.
-        outputConsumer.giveStreamAndStartConsuming(process.getInputStream());
-        errorConsumer.giveStreamAndStartConsuming(process.getErrorStream());
-      }
-
-      // Wait until the process is done - the StreamConsumers will keep the
-      // buffers drained, so this shouldn't block indefinitely.
-      // Get the return value as well.
-      result.returnValue = process.waitFor();
-
-      Log.info("Return value: " + result.returnValue);
-
-      if (captureOutput) {
-        // Tell the StreamConsumers to stop consuming, and wait for them to finish
-        // so we know we have all of the output.
-        outputConsumer.processFinished();
-        errorConsumer.processFinished();
-        result.output = outputConsumer.getOutput();
-        result.error = errorConsumer.getOutput();
-
-        // Always explicitly indicate the return code in the text output now.
-        // NB: adb shell doesn't actually return exit codes currently, but this will
-        // be useful if/when it does.
-        result.output.add("RETURN CODE: " + result.returnValue);
-      }
-
-    } catch (IOException e) {
-      Log.errorAndQuit("ExecutionResult.execute() caught an IOException");
-    } catch (InterruptedException e) {
-      Log.errorAndQuit("ExecutionResult.execute() caught an InterruptedException");
-    }
-
-    return result;
   }
 
   /**
    * Called by subclass Executors in their execute() implementations.
    */
-  protected ExecutionResult executeOnDevice(String command, boolean captureOutput) {
+  protected ExecutionResult executeCommandWithTimeout(String command, boolean captureOutput) {
     String timeoutString = "timeout " + timeout + " ";
-    return executeCommand(timeoutString + device.getExecutionShellPrefix() + command,
-        captureOutput);
-  }
-
-  private ExecutionResult pushToDevice(String command) {
-    return executeCommand(device.getExecutionPushPrefix() + command, false);
+    return device.executeCommand(timeoutString + device.getExecutionShellPrefix() + command,
+        captureOutput, outputConsumer, errorConsumer);
   }
 
   /**
@@ -184,13 +99,11 @@
     StringBuilder commandBuilder = new StringBuilder();
     commandBuilder.append("dex2oat ");
 
-    // This assumes that the Architecture enum's name, when reduced to lower-case,
-    // matches what dex2oat would expect.
-    commandBuilder.append("--instruction-set=").append(architecture.toString().toLowerCase());
+    commandBuilder.append("--instruction-set=").append(architecture.asString());
     commandBuilder.append(" --instruction-set-features=default ");
 
     // Select the correct boot image.
-    commandBuilder.append("--boot-image=").append(androidProductOut);
+    commandBuilder.append("--boot-image=").append(device.getAndroidProductOut());
     if (device.noBootImageAvailable()) {
       commandBuilder.append("/data/art-test/core.art ");
     } else {
@@ -198,13 +111,14 @@
     }
 
     commandBuilder.append("--oat-file=output.oat ");
-    commandBuilder.append("--android-root=").append(androidHostOut).append(" ");
+    commandBuilder.append("--android-root=").append(device.getAndroidHostOut()).append(" ");
     commandBuilder.append("--runtime-arg -classpath ");
     commandBuilder.append("--runtime-arg ").append(programName).append(" ");
     commandBuilder.append("--dex-file=").append(programName).append(" ");
     commandBuilder.append("--compiler-filter=interpret-only --runtime-arg -Xnorelocate ");
 
-    ExecutionResult verificationResult = executeCommand(commandBuilder.toString(), true);
+    ExecutionResult verificationResult = device.executeCommand(commandBuilder.toString(), true,
+        outputConsumer, errorConsumer);
 
     boolean success = true;
 
@@ -232,17 +146,23 @@
       listener.handleFailedHostVerification(verificationResult);
     }
 
-    executeCommand("rm output.oat", false);
+    device.executeCommand("rm output.oat", false);
 
     return success;
   }
 
   /**
    * Called by the Fuzzer to upload the program to the target device.
-   * TODO: Check if we're executing on a local device, and don't do this?
    */
-  public void uploadToTarget(String programName) {
-    pushToDevice(programName + " " + testLocation);
+  public void prepareProgramForExecution(String programName) {
+    if (!Options.executeOnHost) {
+      device.pushProgramToDevice(programName, testLocation);
+    }
+
+    if (needsCleanCodeCache) {
+      // Get the device to clean the code cache
+      device.cleanCodeCache(architecture, testLocation, programName);
+    }
   }
 
   /**
@@ -252,16 +172,6 @@
   public abstract void execute(String programName);
 
   /**
-   * Executor subclasses need to override this, to delete their generated OAT file correctly.
-   */
-  public abstract void deleteGeneratedOatFile(String programName);
-
-  /**
-   * Executor subclasses need to override this, to report if they need a cleaned code cache.
-   */
-  public abstract boolean needsCleanCodeCache();
-
-  /**
    * Fuzzer.checkForArchitectureSplit() will use this determine the architecture of the Executor.
    */
   public Architecture getArchitecture() {
@@ -269,14 +179,6 @@
   }
 
   /**
-   * Used in each subclass of Executor's deleteGeneratedOatFile() method, to know what to delete.
-   */
-  protected String getOatFileName(String programName) {
-    // Converts e.g. /data/art-test/file.dex to data@art-test@file.dex
-    return (testLocation.replace("/", "@").substring(1) + "@" + programName);
-  }
-
-  /**
    * Used by the Fuzzer to get result of execution.
    */
   public ExecutionResult getResult() {
@@ -289,9 +191,10 @@
    * a target verification failure, before doing anything else with the resulting output.
    * Used by the Fuzzer.
    */
-  public boolean verifyOnTarget() {
+  public boolean didTargetVerify() {
     // TODO: Remove this once host-verification can be forced to always fail?
-    if (executionResult.getFlattenedOutput().contains("VerifyError")) {
+    String output = executionResult.getFlattenedAll();
+    if (output.contains("VerifyError") || output.contains("Verification failed on class")) {
       return false;
     }
     return true;
@@ -300,4 +203,8 @@
   public String getName() {
     return name;
   }
+
+  public void finishedWithProgramOnDevice() {
+    device.resetProgramPushed();
+  }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Mips64InterpreterExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/Mips64InterpreterExecutor.java
index 9f27b5e..f319201 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Mips64InterpreterExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Mips64InterpreterExecutor.java
@@ -21,7 +21,7 @@
 public class Mips64InterpreterExecutor extends Executor {
 
   public Mips64InterpreterExecutor(BaseListener listener, Device device) {
-    super("MIPS64 Interpreter", 30, listener, Architecture.MIPS64, device);
+    super("MIPS64 Interpreter", 30, listener, Architecture.MIPS64, device, false);
   }
 
   @Override
@@ -30,18 +30,7 @@
     commandBuilder.append("dalvikvm64 -Xint ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
 
   }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/mips64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return false;
-  }
 }
\ No newline at end of file
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Mips64OptimizingBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/Mips64OptimizingBackendExecutor.java
index b30240d..a6784e6 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Mips64OptimizingBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Mips64OptimizingBackendExecutor.java
@@ -21,7 +21,7 @@
 public class Mips64OptimizingBackendExecutor extends Executor {
 
   public Mips64OptimizingBackendExecutor(BaseListener listener, Device device) {
-    super("MIPS64 Optimizing Backend", 5, listener, Architecture.MIPS64, device);
+    super("MIPS64 Optimizing Backend", 5, listener, Architecture.MIPS64, device, true);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm64 -Xcompiler-option --compiler-backend=Optimizing ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/mips64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/Mips64QuickBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/Mips64QuickBackendExecutor.java
index 42ccd1e..bebf27c 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/Mips64QuickBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/Mips64QuickBackendExecutor.java
@@ -21,7 +21,7 @@
 public class Mips64QuickBackendExecutor extends Executor {
 
   public Mips64QuickBackendExecutor(BaseListener listener, Device device) {
-    super("MIPS64 Quick Backend", 5, listener, Architecture.MIPS64, device);
+    super("MIPS64 Quick Backend", 5, listener, Architecture.MIPS64, device, true);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm64 ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/mips64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/MipsInterpreterExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/MipsInterpreterExecutor.java
index 524eaa9..4268c76 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/MipsInterpreterExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/MipsInterpreterExecutor.java
@@ -21,7 +21,7 @@
 public class MipsInterpreterExecutor extends Executor {
 
   public MipsInterpreterExecutor(BaseListener listener, Device device) {
-    super("MIPS Interpreter", 30, listener, Architecture.MIPS, device);
+    super("MIPS Interpreter", 30, listener, Architecture.MIPS, device, false);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm32 -Xint ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/mips/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return false;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/MipsOptimizingBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/MipsOptimizingBackendExecutor.java
index fcc92c8..d64b1ce 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/MipsOptimizingBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/MipsOptimizingBackendExecutor.java
@@ -21,7 +21,7 @@
 public class MipsOptimizingBackendExecutor extends Executor {
 
   public MipsOptimizingBackendExecutor(BaseListener listener, Device device) {
-    super("MIPS Optimizing Backend", 5, listener, Architecture.MIPS, device);
+    super("MIPS Optimizing Backend", 5, listener, Architecture.MIPS, device, true);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm32 -Xcompiler-option --compiler-backend=Optimizing ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/mips/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/MipsQuickBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/MipsQuickBackendExecutor.java
index cb442f9..a534866 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/MipsQuickBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/MipsQuickBackendExecutor.java
@@ -21,7 +21,7 @@
 public class MipsQuickBackendExecutor extends Executor {
 
   public MipsQuickBackendExecutor(BaseListener listener, Device device) {
-    super("MIPS Quick Backend", 5, listener, Architecture.MIPS, device);
+    super("MIPS Quick Backend", 5, listener, Architecture.MIPS, device, true);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm32 ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/mips/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/X86InterpreterExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/X86InterpreterExecutor.java
index 93c14e9..510f0d0 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/X86InterpreterExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/X86InterpreterExecutor.java
@@ -16,31 +16,24 @@
 
 package dexfuzz.executors;
 
+import dexfuzz.Options;
 import dexfuzz.listeners.BaseListener;
 
 public class X86InterpreterExecutor extends Executor {
 
   public X86InterpreterExecutor(BaseListener listener, Device device) {
-    super("x86 Interpreter", 30, listener, Architecture.X86, device);
+    super("x86 Interpreter", 30, listener, Architecture.X86, device, false);
   }
 
   @Override
   public void execute(String programName) {
     StringBuilder commandBuilder = new StringBuilder();
     commandBuilder.append("dalvikvm32 -Xint ");
+    if (Options.executeOnHost) {
+      commandBuilder.append(device.getHostExecutionFlags()).append(" ");
+    }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/x86/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return false;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/X86OptimizingBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/X86OptimizingBackendExecutor.java
index b27d5ca..81d7285 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/X86OptimizingBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/X86OptimizingBackendExecutor.java
@@ -16,31 +16,24 @@
 
 package dexfuzz.executors;
 
+import dexfuzz.Options;
 import dexfuzz.listeners.BaseListener;
 
 public class X86OptimizingBackendExecutor extends Executor {
 
   public X86OptimizingBackendExecutor(BaseListener listener, Device device) {
-    super("x86 Optimizing Backend", 5, listener, Architecture.X86, device);
+    super("x86 Optimizing Backend", 5, listener, Architecture.X86, device, true);
   }
 
   @Override
   public void execute(String programName) {
     StringBuilder commandBuilder = new StringBuilder();
     commandBuilder.append("dalvikvm32 -Xcompiler-option --compiler-backend=Optimizing ");
+    if (Options.executeOnHost) {
+      commandBuilder.append(device.getHostExecutionFlags()).append(" ");
+    }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/x86/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/X86QuickBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/X86QuickBackendExecutor.java
index d8ec217..4a68bde 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/X86QuickBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/X86QuickBackendExecutor.java
@@ -16,31 +16,24 @@
 
 package dexfuzz.executors;
 
+import dexfuzz.Options;
 import dexfuzz.listeners.BaseListener;
 
 public class X86QuickBackendExecutor extends Executor {
 
   public X86QuickBackendExecutor(BaseListener listener, Device device) {
-    super("x86 Quick Backend", 5, listener, Architecture.X86, device);
+    super("x86 Quick Backend", 5, listener, Architecture.X86, device, true);
   }
 
   @Override
   public void execute(String programName) {
     StringBuilder commandBuilder = new StringBuilder();
     commandBuilder.append("dalvikvm32 ");
+    if (Options.executeOnHost) {
+      commandBuilder.append(device.getHostExecutionFlags()).append(" ");
+    }
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/x86/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/X86_64InterpreterExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/X86_64InterpreterExecutor.java
index 7497322..dc55a41 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/X86_64InterpreterExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/X86_64InterpreterExecutor.java
@@ -21,7 +21,7 @@
 public class X86_64InterpreterExecutor extends Executor {
 
   public X86_64InterpreterExecutor(BaseListener listener, Device device) {
-    super("x86_64 Interpreter", 30, listener, Architecture.X86_64, device);
+    super("x86_64 Interpreter", 30, listener, Architecture.X86_64, device, false);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm64 -Xint ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/x86_64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return false;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/X86_64OptimizingBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/X86_64OptimizingBackendExecutor.java
index a978f73..2a01c6c 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/X86_64OptimizingBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/X86_64OptimizingBackendExecutor.java
@@ -21,7 +21,7 @@
 public class X86_64OptimizingBackendExecutor extends Executor {
 
   public X86_64OptimizingBackendExecutor(BaseListener listener, Device device) {
-    super("x86_64 Optimizing Backend", 5, listener, Architecture.X86_64, device);
+    super("x86_64 Optimizing Backend", 5, listener, Architecture.X86_64, device, true);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm64 -Xcompiler-option --compiler-backend=Optimizing ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/x86_64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/executors/X86_64QuickBackendExecutor.java b/tools/dexfuzz/src/dexfuzz/executors/X86_64QuickBackendExecutor.java
index 85532d8..9579b76 100644
--- a/tools/dexfuzz/src/dexfuzz/executors/X86_64QuickBackendExecutor.java
+++ b/tools/dexfuzz/src/dexfuzz/executors/X86_64QuickBackendExecutor.java
@@ -21,7 +21,7 @@
 public class X86_64QuickBackendExecutor extends Executor {
 
   public X86_64QuickBackendExecutor(BaseListener listener, Device device) {
-    super("x86_64 Quick Backend", 5, listener, Architecture.X86_64, device);
+    super("x86_64 Quick Backend", 5, listener, Architecture.X86_64, device, true);
   }
 
   @Override
@@ -30,17 +30,6 @@
     commandBuilder.append("dalvikvm64 ");
     commandBuilder.append("-cp ").append(testLocation).append("/").append(programName).append(" ");
     commandBuilder.append(executeClass);
-    executionResult = executeOnDevice(commandBuilder.toString(), true);
-  }
-
-  @Override
-  public void deleteGeneratedOatFile(String programName) {
-    String command = "rm -f /data/dalvik-cache/x86_64/" + getOatFileName(programName);
-    executeOnDevice(command, false);
-  }
-
-  @Override
-  public boolean needsCleanCodeCache() {
-    return true;
+    executionResult = executeCommandWithTimeout(commandBuilder.toString(), true);
   }
 }
diff --git a/tools/dexfuzz/src/dexfuzz/fuzzers/Fuzzer.java b/tools/dexfuzz/src/dexfuzz/fuzzers/Fuzzer.java
index 4c1acdb..bc39d79 100644
--- a/tools/dexfuzz/src/dexfuzz/fuzzers/Fuzzer.java
+++ b/tools/dexfuzz/src/dexfuzz/fuzzers/Fuzzer.java
@@ -158,7 +158,7 @@
 
   protected void addExecutors() {
     Device device = null;
-    if (Options.local) {
+    if (Options.executeOnHost) {
       device = new Device();
     } else {
       device = new Device(Options.deviceName, Options.noBootImage);
@@ -241,27 +241,22 @@
 
     String programName = getNextOutputFilename();
     boolean verified = true;
-    if (!Options.skipHostVerify) {
+
+    if (!Options.skipHostVerify && !Options.executeOnHost) {
       verified = goldenExecutor.verifyOnHost(programName);
-    }
-    if (verified) {
-      boolean skipAnalysis = false;
-      boolean uploadedToTarget = false;
-      if (!Options.skipHostVerify) {
+      if (verified) {
         listener.handleSuccessfulHostVerification();
       }
+    }
+
+    if (verified) {
+      boolean skipAnalysis = false;
+
       for (Executor executor : executors) {
         executor.reset();
-        if (!uploadedToTarget) {
-          executor.uploadToTarget(programName);
-        } else {
-          uploadedToTarget = true;
-        }
-        if (executor.needsCleanCodeCache()) {
-          executor.deleteGeneratedOatFile(programName);
-        }
+        executor.prepareProgramForExecution(programName);
         executor.execute(programName);
-        if (!executor.verifyOnTarget()) {
+        if (!executor.didTargetVerify()) {
           listener.handleFailedTargetVerification();
           skipAnalysis = true;
           break;
@@ -275,6 +270,8 @@
         analyseResults(program, programName);
       }
     }
+
+    goldenExecutor.finishedWithProgramOnDevice();
     mutatedSuccessfully = false;
     savedSuccessfully = false;
   }